FCF Growth in India: 15.09% CAGR Over 25 Years (NSE Backtest)

₹10,000 grew to ₹335,761 over 25 years using a free cash flow growth screen on NSE stocks. 15.09% CAGR, +3.03% above the Sensex, and a 36.9% down capture ratio.

Growth of ₹10,000 invested in FCF Growth India strategy vs the Sensex from 2000 to 2025.

The FCF growth screen in India produced 15.09% annualized returns from 2000 to 2025, beating the Sensex by 3 percentage points per year. ₹10,000 grew to ₹335,761. The portfolio absorbed only 36.9% of the Sensex's downside in down years, and it sat in cash for the first five.

Contents

  1. Method
  2. The Screen
  3. Simple Screen
  4. Advanced Screen
  5. Results
  6. When It Works
  7. When It Fails
  8. The 2008 Anomaly
  9. Annual Returns
  10. Limitations
  11. Global Context
  12. Run It Yourself

Data: FMP financial data warehouse (NSE), 2000–2025. Returns in INR. Updated August 2026.


Method

The strategy screens for NSE-listed stocks with accelerating free cash flow. FCF must grow by more than 15% year-over-year, and operating cash flow must also grow. That second condition matters because it prevents false positives where a company cuts capex to boost FCF without actually growing the business.

Quality filters keep the portfolio in profitable, moderately leveraged companies: ROE above 10% and debt-to-equity below 1.5. The top 30 stocks by FCF growth rate get equal-weighted and held for a year.

Parameter Setting
Universe NSE (National Stock Exchange of India)
Market cap >₹2,000 crore (~$240M USD)
Signal FCF growth YoY >15%, OCF growth YoY >0%
Quality ROE >10%, D/E <1.5
Selection Top 30 by FCF growth, equal weight
Cash rule Hold cash if <10 qualify
Rebalancing Annual (July), 45-day data lag
Execution MOC (next-day close after rebalance signal)
Costs Size-tiered transaction costs
Benchmark BSE Sensex (^BSESN, price index)
Period 2000–2025 (25 periods)
Currency INR (both portfolio and benchmark)
Code github.com/ceta-research/backtests

The 45-day lag ensures that annual filings are publicly available before they enter the screen. A fiscal year-end in March doesn't enter the July rebalance until statements are filed. Entry and exit prices use the next trading day's close (MOC execution).

One convention to note before reading any annual figure below. Each period runs July to July and is labelled by the year it begins, so "2008" means July 2008 through July 2009, not the calendar year. Period returns therefore won't match calendar-year figures you may have seen elsewhere. Portfolio and benchmark are measured over identical windows, so excess returns are consistent.

The market cap threshold scales to the Indian market. ₹2,000 crore is roughly $240M USD and filters out the micro-cap segment where liquidity becomes a real implementation constraint. The live screens below use a lower ₹1,250 crore floor so they surface a broader slice of today's market.

The academic basis is Sloan (1996), who documented that cash-backed earnings outperform accrual-heavy earnings. Companies that report cash generation tend to continue generating cash. This screen isolates companies where cash generation is accelerating, not just existing.


The Screen

Simple Screen

Ranks NSE-listed stocks by year-over-year FCF growth with a 15% minimum threshold and ₹1,250 crore market cap floor. Run it: cetaresearch.com/data-explorer?q=LKQfAVjRwf

WITH cf AS (
    SELECT symbol, freeCashFlow AS fcf, reportedCurrency,
        ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
    FROM cash_flow_statement WHERE period = 'FY'
)
SELECT cc.symbol, p.companyName,
    ROUND((cc.fcf - cp.fcf) / ABS(cp.fcf) * 100, 1) AS fcf_growth_pct,
    ROUND(cc.fcf / 10000000, 1) AS fcf_cr,
    ROUND(p.marketCap / 10000000, 2) AS mktcap_cr
FROM cf cc
JOIN cf cp ON cc.symbol = cp.symbol AND cp.rn = 2
JOIN profile p ON cc.symbol = p.symbol
WHERE cc.rn = 1
  AND cc.fcf > 0 AND cp.fcf > 0
  AND (cc.fcf - cp.fcf) / ABS(cp.fcf) > 0.15
  AND p.marketCap > 12500000000
  AND p.exchange = 'NSE'
  -- data-quality guards
  AND p.isFund = false AND p.isEtf = false AND p.isActivelyTrading = true
  AND cc.reportedCurrency = p.currency
  AND p.industry <> 'Asset Management'
  AND cc.fcf < p.marketCap
  AND cp.fcf >= 0.002 * p.marketCap
QUALIFY ROW_NUMBER() OVER (PARTITION BY COALESCE(p.cik, p.symbol)
                           ORDER BY p.averageVolume DESC) = 1
ORDER BY fcf_growth_pct DESC
LIMIT 30

Advanced Screen

Adds the capex-cut guard (OCF must also grow), ROE quality filter, and leverage check. cetaresearch.com/data-explorer?q=oOQBhR7n_4

WITH cf AS (
    SELECT symbol, freeCashFlow AS fcf, operatingCashFlow AS ocf, reportedCurrency,
        ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY dateEpoch DESC) AS rn
    FROM cash_flow_statement WHERE period = 'FY'
)
SELECT cc.symbol, p.companyName,
    ROUND((cc.fcf - cp.fcf) / ABS(cp.fcf) * 100, 1) AS fcf_growth_pct,
    ROUND((cc.ocf - cp.ocf) / ABS(cp.ocf) * 100, 1) AS ocf_growth_pct,
    ROUND(k.returnOnEquityTTM * 100, 1) AS roe_pct,
    ROUND(f.debtToEquityRatioTTM, 2) AS debt_equity,
    ROUND(p.marketCap / 10000000, 2) AS mktcap_cr
FROM cf cc
JOIN cf cp ON cc.symbol = cp.symbol AND cp.rn = 2
JOIN key_metrics_ttm k ON cc.symbol = k.symbol
JOIN financial_ratios_ttm f ON cc.symbol = f.symbol
JOIN profile p ON cc.symbol = p.symbol
WHERE cc.rn = 1
  AND cc.fcf > 0 AND cp.fcf > 0
  AND (cc.fcf - cp.fcf) / ABS(cp.fcf) > 0.15
  AND (cc.ocf - cp.ocf) / ABS(cp.ocf) > 0.0
  AND k.returnOnEquityTTM > 0.10
  AND f.debtToEquityRatioTTM < 1.5
  AND p.marketCap > 12500000000
  AND p.exchange = 'NSE'
  -- data-quality guards
  AND p.isFund = false AND p.isEtf = false AND p.isActivelyTrading = true
  AND cc.reportedCurrency = p.currency
  AND p.industry <> 'Asset Management'
  AND cc.fcf < p.marketCap
  AND cp.fcf >= 0.002 * p.marketCap
QUALIFY ROW_NUMBER() OVER (PARTITION BY COALESCE(p.cik, p.symbol)
                           ORDER BY p.averageVolume DESC) = 1
ORDER BY fcf_growth_pct DESC
LIMIT 30

Reading the output. Growth rate is a ratio, so the top of both lists is companies rebounding off a small prior-year base rather than the largest cash generators. The 0.2%-of-market-cap floor on last year's free cash flow keeps the millions-of-percent cases out, but a company going from $2M to $85M of free cash flow still outranks one going from $2B to $3B. That's the strategy as specified rather than a data problem: the backtest ranks by the same rate and buys the same names. Sort by the FCF column when you want scale rather than rate.


Results

Metric FCF Growth Sensex
CAGR 15.09% 12.06%
Total Return 3,257.61% 1,621.57%
Max Drawdown -21.16% -32.20%
Volatility 24.48%
Sharpe 0.351
Sortino 1.106
Calmar 0.713
Beta 0.662 1.00
Up Capture 113.7%
Down Capture 36.9%
Win Rate vs Sensex 64% (16/25 years)
₹10,000 grew to ₹335,761 ₹172,157

Cumulative Growth
Cumulative Growth

The portfolio returned 15.09% annually over 25 years. The Sensex returned 12.06%. ₹10,000 grew to ₹335,761 in the portfolio versus ₹172,157 in the Sensex. That's a +3.03% annualized excess return.

The down capture ratio is 36.9%. In years when the Sensex fell, the portfolio absorbed a bit over a third of that downside on average. When the index dropped 10%, the portfolio dropped roughly 3.7%. The max drawdown numbers support this: -21.16% for the portfolio versus -32.20% for the Sensex.

The up capture of 113.7% means the portfolio captured slightly more than the market's upside in rising years. Combined with the low down capture, the asymmetry shows up clearly in the Sortino ratio (1.106), which measures return per unit of downside risk.

The win rate is 64%, meaning the portfolio beat the Sensex in 16 out of 25 years. The 9 underperforming years were spread across different market regimes, not clustered.

Five of those 25 periods were spent in cash. See the annual table below.


When It Works

The FCF growth screen in India works best in two scenarios: early-stage recoveries after stress, and periods when quality factors matter more than momentum.

2009 was the standout year: +53.9% portfolio return versus +19.1% Sensex, a +34.7% excess return. After the 2008 global financial crisis, the Indian market rebounded sharply, but companies with strong cash generation re-rated faster. The portfolio caught that rotation.

2014 (+38.4% excess) came during the Modi election year. The market rose broadly, but investors paid a premium for companies with strong fundamentals and cash generation. The FCF screen captured that shift.

2013 (+23.6% excess), 2016 (+20.3% excess), and 2023 (+41.8% excess) were similar: strong absolute returns with meaningful outperformance. In each case, the market was rewarding companies that could back up their growth with actual cash flow.

2000-2004 are marked as cash years in the backtest because the screen failed to find 10 qualifying stocks, turning up between zero and four names a year. The NSE was smaller then, and few companies met the combined FCF growth, OCF growth, ROE, and leverage thresholds. The strategy didn't participate in those early years.


When It Fails

The strategy has a clear failure mode: when the market rotates away from quality into speculative or thematic plays.

2017 and 2018 were painful: -5.2% and -4.4% portfolio returns when the Sensex rose +12.9% both years. Those were momentum-driven years where investors chased growth stories regardless of cash flow quality. The FCF growth filter systematically excluded the companies driving returns.

2021 was similar: -1.7% portfolio return versus +1.4% Sensex. Post-pandemic, the Indian market favored high-growth, often cash-burning companies. The portfolio held quality names that underperformed.

2007 (-14.3% excess) came during a pre-financial crisis period when leverage and expansion themes dominated. Companies with conservative balance sheets and strong cash generation lagged.

2019 (+7.2% excess) is a relative win rather than an absolute one. The Sensex fell -10.0% and the portfolio fell -2.8%, so the defensive quality worked, but the year still lost money.

The pattern is consistent: the screen struggles when investors pay premium multiples for growth regardless of current cash generation. It works when cash quality matters.


The 2008 Anomaly

2008 deserves its own section because it behaves differently in India than in global markets.

The portfolio returned +15.4% while the Sensex returned +7.3%. That's a +8.2% excess return during a year when most global markets collapsed. The US market (SPY) fell -26.9% in 2008. Why did India hold up?

First, timing. This period runs July 2008 to July 2009, so it contains both the October-November 2008 collapse and the sharp rebound that followed it. The Sensex fell 37% from the start of the window to its March 2009 trough, then recovered all of that ground and finished slightly ahead, which is why the period closes up 7.3% despite spanning the worst of the crisis. The preceding period, labelled 2007 and covering July 2007 to July 2008, is where the decline actually shows up: the Sensex returned -6.8% and the portfolio -21.2%.

Second, the Indian market's crisis played out differently. Indian banks had less direct exposure to US sub-prime assets. The crisis hit India through capital outflows and credit tightening, which took time to propagate.

Third, the FCF-generating companies in the 2007 portfolio may have been positioned in sectors with less direct exposure to the crisis. That last point is speculation, since the backtest doesn't break down sector composition, but it's consistent with the data.

The key point: because the July-to-July window swallows both the crash and the rebound, the 2008 figure measures round-trip recovery rather than peak-to-trough resilience. The portfolio's genuinely bad crisis period was 2007, when it lagged the Sensex by 14.3 points.


Annual Returns

Annual Returns
Annual Returns

Year Portfolio Sensex Excess
2000 0.0% -29.3% +29.3% (cash)
2001 0.0% -4.1% +4.1% (cash)
2002 0.0% +9.6% -9.6% (cash)
2003 0.0% +35.2% -35.2% (cash)
2004 0.0% +49.4% -49.4% (cash)
2005 +31.6% +47.0% -15.3%
2006 +49.6% +37.1% +12.4%
2007 -21.2% -6.8% -14.3%
2008 +15.4% +7.3% +8.2%
2009 +53.9% +19.1% +34.7%
2010 +1.6% +7.8% -6.2%
2011 -3.2% -7.5% +4.3%
2012 +21.2% +11.9% +9.3%
2013 +56.3% +32.8% +23.6%
2014 +46.6% +8.1% +38.4%
2015 +5.0% -2.4% +7.3%
2016 +34.7% +14.4% +20.3%
2017 -5.2% +12.9% -18.1%
2018 -4.4% +12.9% -17.3%
2019 -2.8% -10.0% +7.2%
2020 +52.1% +46.4% +5.7%
2021 -1.7% +1.4% -3.2%
2022 +30.3% +22.5% +7.9%
2023 +63.6% +21.8% +41.8%
2024 +12.3% +5.0% +7.3%

The first five years (2000-2004) are marked as cash because fewer than 10 NSE stocks passed the screen at those rebalance dates: zero in 2000, then one, two, three and four. This is a screen result, not a price-data gap. The NSE was smaller then and few listed companies combined 15% FCF growth with the ROE and leverage tests. From 2005 onward, the strategy was fully invested every year.

Counting only the 20 invested years, the portfolio beat the Sensex in 14 of them, a 70% win rate. The underperforming years were typically modest, except 2017 and 2018. The headline 64% win rate over all 25 periods includes the cash years, two of which beat a falling Sensex simply by holding nothing.


Limitations

Backward-looking signal. FCF growth from the prior fiscal year doesn't predict next year's FCF growth. A company that grew cash last year may face margin compression, rising capex, or competitive pressure this year. The screen captures historical cash quality, not future cash quality.

The benchmark excludes dividends. Portfolio returns use dividend-adjusted prices, but ^BSESN is the Sensex price index and does not reinvest dividends. The Sensex has yielded roughly 1% to 1.5% a year over this period, so a like-for-like total-return comparison would reduce the +3.03% excess by approximately that much. The direction of the result holds; the margin is narrower than the headline.

Currency risk. All returns are in INR. For USD-based investors, currency fluctuations between INR and USD would affect realized returns. Over 25 years, INR has depreciated against USD, which would reduce USD-denominated returns.

Early cash years. The first five years show zero returns because the screen couldn't find 10 qualifying stocks, not because prices were missing. The NSE had fewer companies in 2000-2004 and the quality filters are strict. The 25-year CAGR effectively comes from 20 years of active investing.

No sector breakdown. The backtest doesn't report sector composition. It's possible the outperformance comes from systematic overweights in certain sectors (IT, pharma, etc.) rather than the FCF growth signal itself. Without sector-neutral analysis, this can't be ruled out.

Transaction costs. The backtest uses size-tiered cost estimates. Real-world costs in India include STT (securities transaction tax), brokerage, and impact cost, especially for smaller-cap names. The cost model is an approximation.

Point-in-time data. All rebalances use data available 45 days after fiscal year-end to prevent lookahead bias. Live implementation requires access to a verified point-in-time financial data feed, not just the latest reported numbers.

Market cap threshold. The backtest's ₹2,000 crore (~$240M USD) floor filters out micro-caps, but it's still in the small-cap range by Indian standards. Liquidity can be an issue for larger portfolio sizes.


Global Context

This analysis covers NSE-listed stocks only. The FCF growth signal behaves differently across markets. India's results (15.09% CAGR, +3.03% excess vs Sensex) outperform the US version (6.57% CAGR, -1.28% excess vs SPY). A full global comparison is covered in the companion blog on international FCF growth results.


Run It Yourself

Both screens query the Ceta Research FMP warehouse directly.

Today's FCF growth leaders (simple): cetaresearch.com/data-explorer?q=LKQfAVjRwf

With quality filters (advanced): cetaresearch.com/data-explorer?q=oOQBhR7n_4

The full backtest code, including methodology, annual rebalance logic, and cost model, is on GitHub: github.com/ceta-research/backtests


Data: Ceta Research (FMP warehouse), TTM metrics. Backtest period: 2000–2025. Returns in INR. Execution: MOC (next-day close). Benchmark: BSE Sensex price index. Past performance does not guarantee future results. Not investment advice.