Dividend Coverage on Indian Stocks: 17.29% CAGR Over 25 Years of NSE Data
We screened NSE-listed Indian stocks for companies whose free cash flow covers dividend payments. 17.29% CAGR over 25 years vs 12.06% for the Sensex. The 2008 crisis year returned +39.4% vs Sensex +7.3%.
We screened NSE-listed Indian stocks for companies whose free cash flow comfortably covers their dividend payments. Coverage between 1.5x and 20x, yield above 2%, market cap above 20B INR, annual rebalance. The result: 17.29% CAGR over 25 years vs 12.06% for the Sensex. A 5,286% total return. The strategy turned $10,000 into roughly $539,000 in INR terms. Four of the 25 periods were in cash, all concentrated in the early 2000s when too few Indian large-caps passed the screen. Once the portfolio was invested, the returns were substantial.
Contents
- Method
- The Screen (SQL)
- What We Found
- 25 years of data. +5.23% annual alpha over the Sensex.
- Year-by-Year Returns
- Key Observations
- 2000-2003: Four years of cash
- 2004-2006: Strong returns, mixed performance vs local index
- 2008: +39.4% during a global crisis
- 2013: +64.0% on quality re-rating
- 2020: +74.7%, the biggest single year
- 2023: +67.5%, the India premium continues
- Where the strategy struggles
- Benchmark Context
- Limitations
- Takeaway
- Part of a Series
- References
- Run This Screen Yourself
Data: FMP financial data warehouse, 2000–2025. Updated March 2026.
Method
Signal: FCF / ABS(Common Dividends Paid) between 1.5x and 20x Filters: Dividend Yield > 2%, Market Cap > 20B INR (~$240M USD) Portfolio: Top 30 by coverage descending, equal weight Rebalancing: Annual (July) Period: 2000-2025 (25 years, 25 annual periods) Benchmark: Sensex (^BSESN, price return, INR) Cash rule: Hold cash if fewer than 10 stocks qualify Transaction costs: Size-tiered model (0.1-0.5% one-way based on market cap)
For the full methodology, dividend coverage rationale, and GE case study, see the main US Dividend Coverage post.
The Screen (SQL)
WITH latest_cf AS (
SELECT c.symbol, c.freeCashFlow, c.commonDividendsPaid, c.date,
ROW_NUMBER() OVER (PARTITION BY c.symbol ORDER BY c.date DESC) AS rn
FROM cash_flow_statement c
JOIN profile p ON c.symbol = p.symbol
WHERE c.period = 'FY'
AND c.commonDividendsPaid < 0
AND c.freeCashFlow > 0
AND p.exchange IN ('NSE')
),
latest_ratios AS (
SELECT symbol, dividendYield, date,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) AS rn
FROM financial_ratios
WHERE period = 'FY' AND dividendYield IS NOT NULL
),
latest_metrics AS (
SELECT symbol, marketCap, date,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) AS rn
FROM key_metrics
WHERE period = 'FY' AND marketCap IS NOT NULL
)
SELECT
cf.symbol,
ROUND(cf.freeCashFlow / NULLIF(ABS(cf.commonDividendsPaid), 0), 2) AS coverage,
ROUND(r.dividendYield * 100, 2) AS yield_pct,
ROUND(cf.freeCashFlow / 1e9, 2) AS fcf_bn,
ROUND(km.marketCap / 1e9, 1) AS mktcap_bn
FROM latest_cf cf
JOIN latest_ratios r ON cf.symbol = r.symbol AND r.rn = 1
JOIN latest_metrics km ON cf.symbol = km.symbol AND km.rn = 1
WHERE cf.rn = 1
AND cf.freeCashFlow / NULLIF(ABS(cf.commonDividendsPaid), 0) BETWEEN 1.5 AND 20
AND r.dividendYield > 0.02
AND km.marketCap > 20e9
ORDER BY coverage DESC
LIMIT 30
[Run this query on Ceta Research][COVERAGE_INDIA_QUERY_URL]
What We Found

25 years of data. +5.23% annual alpha over the Sensex.
| Metric | Coverage (NSE) | Sensex (INR) |
|---|---|---|
| CAGR | 17.29% | 12.06% |
| Total Return | 5,286% | 1,622% |
| Volatility | 26.96% | 19.59% |
| Max Drawdown | -17.24% | -32.20% |
| Sharpe Ratio | 0.400 | 0.284 |
| Excess CAGR vs Sensex | +5.23% | - |
| Win Rate (annual) | 52% | - |
| Avg Stocks per Period | 20.5 | - |
| Cash Periods | 4 of 25 | - |
$10,000 invested in 2000 grew to roughly $539,000 in INR terms. The same amount in the Sensex grew to $172,000. The max drawdown of -17.24% was significantly shallower than the benchmark's -32.20%. That's notable for an emerging market strategy with 27% annualized volatility.
The Sharpe ratio (0.400 vs 0.284) confirms better risk-adjusted returns. The strategy averaged 20.5 stocks per period with only four cash years, all at the start of the backtest window when India's dividend-paying universe was thin.
Year-by-Year Returns

| Year | Coverage (INR) | Sensex (INR) | Excess |
|---|---|---|---|
| 2000 | 0.0% (cash) | -29.3% | - |
| 2001 | 0.0% (cash) | -4.1% | - |
| 2002 | 0.0% (cash) | +9.6% | - |
| 2003 | 0.0% (cash) | +35.2% | - |
| 2004 | +35.0% | +49.4% | -14.4% |
| 2005 | +32.9% | +47.0% | -14.1% |
| 2006 | +64.3% | +37.1% | +27.2% |
| 2007 | -5.0% | -6.8% | +1.9% |
| 2008 | +39.4% | +7.3% | +32.1% |
| 2009 | +47.3% | +19.1% | +28.2% |
| 2010 | +4.6% | +7.8% | -3.2% |
| 2011 | +3.9% | -7.5% | +11.4% |
| 2012 | +0.5% | +11.9% | -11.4% |
| 2013 | +64.0% | +32.8% | +31.3% |
| 2014 | +2.0% | +8.1% | -6.2% |
| 2015 | +18.9% | -2.4% | +21.3% |
| 2016 | +29.5% | +14.4% | +15.0% |
| 2017 | +3.5% | +12.9% | -9.4% |
| 2018 | -2.1% | +12.9% | -15.0% |
| 2019 | -15.5% | -10.0% | -5.5% |
| 2020 | +74.7% | +46.4% | +28.3% |
| 2021 | -1.4% | +1.4% | -2.8% |
| 2022 | +37.5% | +22.5% | +15.0% |
| 2023 | +67.5% | +21.8% | +45.7% |
| 2024 | -2.0% | +5.0% | -7.0% |
Key Observations
2000-2003: Four years of cash
The strategy sat idle for four years. In the early 2000s, India's large-cap dividend-paying universe was small. Few companies passed all three filters at the 20B INR threshold. This is honest accounting. The 17.29% CAGR is computed over the full 25 years, including the dead weight of four cash years. Active returns started in 2004.
2004-2006: Strong returns, mixed performance vs local index
The first three active years produced +35.0%, +32.9%, and +64.3%. India's corporate sector was maturing rapidly. Companies that had been reinvesting heavily through the late 1990s were now generating strong free cash flows and initiating dividend programs. The coverage screen caught them as they crossed the threshold.
However, the Sensex was in a historic bull run during 2004-2005, returning +49.4% and +47.0%. Coverage stocks lagged the broader index in those years by 14 percentage points. This is the dividend coverage trade-off: during explosive growth years, boring cash-generative dividend payers don't keep pace with the full market. 2006 reversed this (+64.3% vs Sensex +37.1%).
2008: +39.4% during a global crisis
This is the standout result. While global markets collapsed, the Indian coverage portfolio gained 39.4% vs the Sensex's 7.3%. That's +32.1% excess return in a single year during a financial crisis. Companies with strong FCF coverage held up because their dividends were funded by real cash, not leverage. Indian dividend payers with conservative balance sheets were re-rated as safe havens during the panic. This single year demonstrates what coverage is designed to find: companies that don't need to cut when things get ugly.
2013: +64.0% on quality re-rating
The portfolio surged ahead of a broader sentiment shift in Indian equities. High-coverage companies benefited from a falling interest rate environment where stable dividend payers attracted institutional flows. The screen's emphasis on cash-backed dividends aligned with what foreign institutional investors wanted: visible, sustainable cash returns. The +64.0% return delivered +31.3% excess over the Sensex's +32.8%.
2020: +74.7%, the biggest single year
The largest annual return in the dataset. COVID crushed equity prices in March 2020, but the July rebalance loaded the portfolio with beaten-down dividend payers whose cash flows had recovered faster than their stock prices. By year-end, the portfolio had rallied 74.7% vs 46.4% for the Sensex. The +28.3% excess return shows how coverage stocks recovered harder than the broader Indian market.
2023: +67.5%, the India premium continues
Domestic consumption growth, manufacturing policy incentives (PLI schemes), and expanding market depth drove another strong year. The coverage portfolio delivered +67.5% vs +21.8% for the Sensex. The +45.7% excess was the highest single-year outperformance vs the local benchmark. Companies with high FCF coverage were disproportionately in sectors benefiting from India's capex cycle: industrials, materials, and consumer goods.
Where the strategy struggles
2004 (-14.4% excess), 2005 (-14.1%), 2018 (-15.0%), 2012 (-11.4%), and 2019 (-5.5%) were the worst relative years vs the Sensex. The pattern is consistent: when growth stocks or index heavyweights drive markets, boring dividend payers lag. The 2004-2005 underperformance occurred during India's mid-2000s bull run when the Sensex posted +49.4% and +47.0%. Coverage stocks did well in absolute terms (+35.0% and +32.9%), but lagged the explosive broader market.
Benchmark Context
Primary benchmark: We compare vs the Sensex (^BSESN), India's benchmark equity index. Both returns are in INR, so the +5.23% excess is a clean local-currency comparison.
Cross-market benchmark: For context, coverage stocks returned 17.29% CAGR vs 7.85% for the S&P 500 (USD), an approximate +9.44% excess in raw returns. However, this comparison mixes currencies. The INR/USD exchange rate moved from roughly 43 in 2000 to roughly 84 in 2024, about 2.7% annual drag.
Currency-adjusted estimates:
| Metric | Coverage (INR) | Coverage (est. USD) | S&P 500 (USD) |
|---|---|---|---|
| CAGR | 17.29% | ~14.6% | 7.85% |
| Excess vs SPY | +9.44% | ~6.7% | - |
For Indian investors earning and spending in Rupees, the currency adjustment doesn't apply. The 17.29% CAGR and +5.23% alpha vs Sensex are the relevant numbers. For US-based investors, the USD-adjusted ~14.6% CAGR represents the approximate experience without hedging.
Limitations
Cash drag. 4 of 25 periods were in cash (all 2000-2003). The strategy produced zero returns for four years. Investors with shorter time horizons would have abandoned it.
NSE-only universe. BSE was excluded due to 38% dual-listing duplication with NSE. The backtest uses NSE listings only. Some dividend payers available on BSE but not NSE aren't captured.
Survivorship bias. Exchange membership uses current company profiles, not historical. Indian exchanges had different compositions in the early 2000s. Delisted companies aren't fully captured.
Market cap filter in INR. The 20B INR threshold (~$240M USD at 2025 rates) targets liquid mid-to-large-cap companies appropriate for India's market structure. In USD terms, this is lower than the $1B threshold used for US exchanges, reflecting different market size distributions.
Liquidity concerns. Some NSE-listed stocks that pass the screen may have thin trading volumes. The backtest assumes frictionless execution at closing prices. Real-world slippage on mid-cap Indian stocks can be material.
Transaction costs modeled, taxes not. India's Securities Transaction Tax (STT), stamp duty, and short-term capital gains tax aren't modeled. These reduce realized returns.
Annual rebalancing is slow. A company's coverage can deteriorate between July rebalances. Monthly or quarterly rebalancing would catch problems faster but increase turnover and costs.
Takeaway
The dividend coverage screen on NSE-listed Indian stocks produced a 17.29% CAGR with a -17.24% max drawdown. That drawdown is shallower than the Sensex's -32.20%, which is notable given the 5.23% annual alpha. The screen's emphasis on cash-backed dividends creates a natural quality filter that proved effective in India.
The 2008 result (+39.4% while the Sensex gained only 7.3%) captures the thesis perfectly. Companies generating real free cash flow with conservative dividend policies held value when leveraged peers collapsed. The screen doesn't predict crises, but it selects companies that survive them. 2023 showed the same pattern (+67.5% vs Sensex +21.8%, a +45.7% gap).
Compared to the US version of this strategy (11.40% CAGR, 0.414 Sharpe), the Indian version delivered higher raw returns (17.29% CAGR) but similar risk-adjusted performance (0.400 Sharpe). India's growing corporate sector produced a pool of high-coverage dividend payers. The screen captured them during a period of rapid economic expansion. The 52% win rate vs Sensex shows the strategy beat the local market roughly half the time, with outperformance concentrated in crisis and recovery years.
Part of a Series
This analysis is part of our dividend coverage global exchange comparison. We tested the same screen on 13 exchanges worldwide: - Dividend Coverage on US Stocks (NYSE + NASDAQ + AMEX) - 11.40% CAGR, the baseline - [Dividend Coverage on German Stocks (XETRA)][GERMANY_BLOG_URL] - 12.52% CAGR, best European result - [Dividend Coverage on UK Stocks (LSE)][UK_BLOG_URL] - 11.22% CAGR, highest win rate - [Dividend Coverage on Swedish Stocks (STO)][SWEDEN_BLOG_URL] - 10.91% CAGR, strong Sharpe - [Dividend Coverage: 13-Exchange Global Comparison][COMPARISON_BLOG_URL] - full comparison table
References
- Benartzi, S., Michaely, R. & Thaler, R. (1997). "Do Changes in Dividends Signal the Future or the Past?" Journal of Finance, 52(3), 1007-1034.
- DeAngelo, H., DeAngelo, L. & Skinner, D. (1996). "Reversal of Fortune: Dividend Signaling and the Disappearance of Sustained Earnings Growth." Journal of Financial Economics, 40(3), 341-371.
Run This Screen Yourself
Via web UI: [Run the coverage screen on Ceta Research][COVERAGE_INDIA_QUERY_URL]. The query is pre-loaded with NSE filters. Hit "Run" and see what passes today.
Via Python:
import requests, time
API_KEY = "your_api_key" # get one at cetaresearch.com
BASE = "https://tradingstudio.finance/api/v1"
resp = requests.post(f"{BASE}/data-explorer/execute", headers={
"X-API-Key": API_KEY, "Content-Type": "application/json"
}, json={
"query": """
WITH latest_cf AS (
SELECT c.symbol, c.freeCashFlow, c.commonDividendsPaid, c.date,
ROW_NUMBER() OVER (PARTITION BY c.symbol ORDER BY c.date DESC) AS rn
FROM cash_flow_statement c
JOIN profile p ON c.symbol = p.symbol
WHERE c.period = 'FY'
AND c.commonDividendsPaid < 0
AND c.freeCashFlow > 0
AND p.exchange IN ('NSE')
),
latest_ratios AS (
SELECT symbol, dividendYield,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) AS rn
FROM financial_ratios WHERE period = 'FY' AND dividendYield IS NOT NULL
),
latest_metrics AS (
SELECT symbol, marketCap,
ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY date DESC) AS rn
FROM key_metrics WHERE period = 'FY' AND marketCap IS NOT NULL
)
SELECT cf.symbol,
ROUND(cf.freeCashFlow / NULLIF(ABS(cf.commonDividendsPaid), 0), 2) AS coverage,
ROUND(r.dividendYield * 100, 2) AS yield_pct,
ROUND(km.marketCap / 1e9, 1) AS mktcap_bn
FROM latest_cf cf
JOIN latest_ratios r ON cf.symbol = r.symbol AND r.rn = 1
JOIN latest_metrics km ON cf.symbol = km.symbol AND km.rn = 1
WHERE cf.rn = 1
AND cf.freeCashFlow / NULLIF(ABS(cf.commonDividendsPaid), 0) BETWEEN 1.5 AND 20
AND r.dividendYield > 0.02 AND km.marketCap > 20e9
ORDER BY coverage DESC LIMIT 30
""",
"options": {"format": "json", "limit": 100}
})
task_id = resp.json()["taskId"]
while True:
result = requests.get(f"{BASE}/tasks/data-query/{task_id}",
headers={"X-API-Key": API_KEY}).json()
if result["status"] in ("completed", "failed"):
break
time.sleep(2)
for r in result["result"]["rows"][:10]:
print(f"{r['symbol']:8s} coverage={r['coverage']:.1f}x yield={r['yield_pct']:.1f}%")
Get your API key at cetaresearch.com. The full backtest code (Python + DuckDB) is on GitHub.
Data: Ceta Research, FMP financial data warehouse. Universe: NSE. Annual rebalance (July), equal weight top 30, 2000-2025. Primary benchmark: Sensex (INR). Returns in INR.