FCF Compounders: 25 Years of Buying Companies That Grow Cash Every Year on US Stocks

We screened for companies that grew FCF in 4+ of the last 5 years with ROIC above 15% and backtested on US stocks from 2000-2025. 11.39% CAGR vs 7.85% for SPY. Zero cash periods, 64% win rate, 68.1% down capture.

Growth of $10,000 invested in FCF Compounders vs S&P 500 on US stocks from 2000 to 2025. Strategy grew to $148K, SPY to $66K.

We built a systematic screen for companies that grow free cash flow consistently, combined it with quality filters (ROIC > 15%, operating margin > 15%), and backtested it on all US exchanges from 2000 to 2025. The strategy returned 11.39% annually vs 7.85% for the S&P 500. $10,000 became $148,400. Zero cash periods in 25 years, a 64% win rate, and a down capture of 68.1%. Companies that compound cash generation don't just outperform. They fall less when everything else does.

Contents

  1. Method
  2. The Signal
  3. The Screen (SQL)
  4. What We Found
  5. $10,000 grew to $148,400. The S&P 500 reached $66,200.
  6. Annual Returns
  7. The Academic Case
  8. When It Works
  9. When It Struggles
  10. Limitations
  11. Run It Yourself
  12. Part of a Series

Data: FMP financial data warehouse, 2000–2025. Updated March 2026.


Method

Data source: Ceta Research (FMP financial data warehouse) Universe: All US exchanges (NYSE, NASDAQ, AMEX), market cap > $1B USD Period: 2000-2025 (25 years, 25 annual periods) Rebalancing: Annual (July), top 30 by highest ROIC, equal weight Benchmark: S&P 500 Total Return (SPY) Cash rule: Hold cash if fewer than 10 stocks qualify Costs: Size-tiered transaction costs (0.1% for large-cap, 0.3% mid-cap, 0.5% small-cap)

Financial data uses a 45-day lag to prevent look-ahead bias. July rebalancing ensures annual filings (typically filed by April-May) are available. Full methodology: Ceta Research Backtest Methodology.


The Signal

Filter Threshold Why
FCF growth years >= 4 of last 5 FY years Consistent cash generation, not one good year
All FCF positive Every year > 0 No negative cash flow years allowed
ROIC > 15% Capital-efficient business
Operating Margin > 15% Real pricing power and sustainable operations
Market Cap > $1B USD Liquid stocks only

Selection: Top 30 by highest ROIC, equal weight.

The signal looks for something specific: companies that grew free cash flow in at least 4 of the last 5 fiscal years, never dipped into negative FCF, and currently earn high returns on invested capital with strong margins. This is a quality-growth filter. It finds businesses that compound cash generation efficiently, not just companies with one lucky year.

The ROIC ranking is key. Among all companies passing the filters, we pick the 30 with the highest return on invested capital. These are the businesses with the strongest competitive positions. They grow cash while deploying relatively little capital to do it.


The Screen (SQL)

WITH yearly_fcf AS (
  SELECT
    symbol,
    freeCashFlow,
    date,
    LAG(freeCashFlow) OVER (PARTITION BY symbol ORDER BY date) AS prev_fcf
  FROM cash_flow_statement
  WHERE period = 'FY'
    AND freeCashFlow IS NOT NULL
),
fcf_stats AS (
  SELECT
    symbol,
    COUNT(*) AS total_pairs,
    SUM(CASE WHEN freeCashFlow > prev_fcf AND prev_fcf > 0 THEN 1 ELSE 0 END) AS growth_years,
    MIN(freeCashFlow) AS min_fcf,
    MIN(prev_fcf) AS min_prev_fcf
  FROM yearly_fcf
  WHERE prev_fcf IS NOT NULL
    AND date >= '2019-01-01'
  GROUP BY symbol
  HAVING COUNT(*) >= 4
)
SELECT
  fs.symbol,
  p.companyName,
  p.exchange,
  p.sector,
  fs.growth_years,
  fs.total_pairs AS total_years,
  ROUND(k.returnOnInvestedCapitalTTM * 100, 1) AS roic_pct,
  ROUND(r.operatingProfitMarginTTM * 100, 1) AS op_margin_pct,
  ROUND(k.marketCap / 1e9, 1) AS market_cap_billions
FROM fcf_stats fs
JOIN key_metrics_ttm k ON fs.symbol = k.symbol
JOIN financial_ratios_ttm r ON fs.symbol = r.symbol
JOIN profile p ON fs.symbol = p.symbol
WHERE fs.growth_years >= 4
  AND fs.min_fcf > 0
  AND fs.min_prev_fcf > 0
  AND k.returnOnInvestedCapitalTTM > 0.15
  AND r.operatingProfitMarginTTM > 0.15
  AND k.marketCap > 1000000000
  AND p.exchange IN ('NYSE', 'NASDAQ', 'AMEX')
ORDER BY k.returnOnInvestedCapitalTTM DESC
LIMIT 30

Run this query on Ceta Research


What We Found

Growth of $10,000 invested in FCF Compounders vs S&P 500 on US stocks from 2000 to 2025.
Growth of $10,000 invested in FCF Compounders vs S&P 500 on US stocks from 2000 to 2025.

$10,000 grew to $148,400. The S&P 500 reached $66,200.

Metric FCF Compounders S&P 500
CAGR 11.39% 7.85%
Total Return 1,384% 562%
Volatility 16.39% 16.63%
Max Drawdown -29.63% -38.01%
Sharpe Ratio 0.573 0.352
Sortino Ratio 1.277 0.628
Win Rate (annual) 64% -
Up Capture 118.0% -
Down Capture 68.1% -
Beta 0.919 -
Alpha 4.0% -
Avg Stocks per Period 26.2 -
Cash Periods 0 of 25 -

The +3.54% excess CAGR compounded into a substantial terminal value gap. $10K became $148,400 vs $66,200 for the S&P 500. That's 2.2x the benchmark. The Sharpe ratio of 0.573 vs 0.352 shows the excess return came with essentially the same volatility (16.39% vs 16.63%).

Down capture of 68.1% means in years when SPY fell, this portfolio absorbed about two-thirds of the damage. Combined with up capture of 118.0%, you captured more upside than the benchmark while shedding roughly a third of the downside. That asymmetry drives the compounding advantage.

The Sortino ratio tells the story cleanly: 1.277 vs 0.628. More than double. The downside volatility is structurally lower than total volatility suggests. These companies don't collapse during drawdowns because their cash generation is real.

Zero cash periods across 25 years. The screen found enough qualifying stocks (26.2 average) in every single year. Deep markets with consistent financial reporting produce reliable results for quality-growth screens.

Annual Returns

Annual returns for FCF Compounders vs S&P 500 on US stocks.
Annual returns for FCF Compounders vs S&P 500 on US stocks.

Year Strategy S&P 500 Excess
2000 +2.1% -14.8% +16.9%
2001 -20.1% -22.4% +2.4%
2004 +19.7% +8.9% +10.8%
2005 +22.4% +8.0% +14.4%
2008 -20.5% -26.9% +6.5%
2009 +23.9% +16.0% +7.9%
2010 +44.8% +33.5% +11.3%
2017 +23.8% +14.3% +9.5%
2020 +38.5% +41.0% -2.5%
2022 +27.8% +18.1% +9.7%

The pattern: outperformance clusters around market stress and early recoveries. In 2000, when the dot-com crash began, FCF compounders gained 2.1% while SPY lost 14.8%. These companies were growing real cash, not burning it on eyeball counts. In 2008, the strategy fell 20.5% vs SPY's 26.9%. Still painful, but 6.5 points of protection during the worst financial crisis in modern history.

2010 was the standout: +44.8% vs +33.5%. Quality companies that survived the GFC captured the recovery aggressively. They had cash to deploy while competitors were deleveraging.

The strategy lagged in 2020 (-2.5% excess) and 2023 (-6.0% excess), both years where speculative growth led the market. Quality-growth screens tend to trail when momentum dominates.


The Academic Case

The strategy is rooted in combining growth signals with quality metrics, an approach with strong academic backing.

Mohanram (2005) built a financial strength score for growth stocks and showed that combining cash flow stability with quality metrics separated winners from losers among high-growth companies. Traditional value metrics fail for growth stocks. Consistency and quality don't.

Frankel and Lee (1998) demonstrated that fundamental valuation models using accounting data predict cross-sectional stock returns. Systematic fundamental analysis, which is exactly what this screen does, identifies mispriced securities more reliably than price-based metrics alone.

Novy-Marx (2013) showed that profitable firms outperform unprofitable firms independently of value. High-ROIC compounders capture this quality premium directly.

Asness, Frazzini, and Pedersen (2019) formalized quality as a factor in "Quality Minus Junk" and demonstrated it works across countries, time periods, and asset classes. FCF compounders sit squarely in the quality bucket.


When It Works

During and after market stress. Companies with 4+ years of consistent FCF growth don't depend on favorable conditions. When credit tightens and weaker companies struggle, compounders keep generating cash. The 2000-2001, 2007-2008, and 2021 drawdown periods all showed this pattern.

In rising rate environments. High ROIC means these companies finance growth internally. When the cost of external capital goes up, self-funding businesses become relatively more valuable.

Over long holding periods. The compounding math needs time. 3.54% excess CAGR doesn't look dramatic in year one. Over 25 years it turns $10K into $148,400 vs $66,200. The consistency premium compounds.

When It Struggles

Speculative growth rallies. When the market rewards unprofitable high-growth companies, quality screens underperform. 2020 (meme stocks, SPAC mania) and 2023 (AI hype) both saw the strategy lag.

Late-cycle momentum. 2012 and 2018 both showed small negative excess. Extended bull markets where everything rises make quality's protective edge less valuable.


Limitations

Survivorship bias. FMP data includes delisted stocks where available, but early-year coverage isn't perfect. Results before 2005 should be interpreted with more caution.

Transaction costs are estimated. The size-tiered model (0.1% large-cap, 0.3% mid, 0.5% small) is reasonable but approximate. Real-world slippage varies.

Point-in-time data quality. We use a 45-day filing lag and FY data ordered by filing date. FMP coverage of filing dates improves over time. Early periods may have slight timing imperfections.

Single strategy. This combines growth consistency with quality, but doesn't account for valuation, momentum, or sentiment. Pairing with other signals could improve results.

The filter is strict. Requiring 4+ years of FCF growth, all positive, ROIC > 15%, and OPM > 15% narrows the universe significantly. Only about 26 stocks qualify per year on US exchanges. Smaller markets struggle to produce enough candidates.


Run It Yourself

Live screen:

python3 fcf-compounders/screen.py --preset us

Full backtest:

python3 fcf-compounders/backtest.py --preset us --output results.json --verbose

All exchanges:

python3 fcf-compounders/backtest.py --global --output results/exchange_comparison.json

Code: github.com/ceta-research/backtests/tree/main/fcf-compounders


Part of a Series

This is the US edition of our FCF Compounders analysis. We ran the same screen on 18 exchanges globally:


Data: Ceta Research (FMP financial data warehouse), 2000-2025. Full methodology: github.com/ceta-research/backtests/blob/main/METHODOLOGY.md