Dividend Sustainability on Australian Stocks: 5.96% CAGR, +2.07% Over ASX 200
A 5-factor dividend sustainability score backtested on ASX from 2000-2025. 5.96% CAGR, +2.07% annual excess over ASX 200, 64% win rate. Lowest volatility in our global comparison at 14.48%.
Australia has a unique dividend culture. Franking credits make dividends tax-effective, so Australian companies pay out more than their global peers. BHP, Commonwealth Bank, Woolworths, and Wesfarmers are household names that fund retirements through steady, tax-advantaged distributions.
Contents
- Method
- The Screen (SQL)
- What We Found
- 325% total return. Lowest volatility in our comparison. +2.07% annual excess over ASX 200.
- Year-by-year returns
- 2005-2012: the mining boom era
- 2013-present: a tougher stretch
- 2019-2020: COVID hit differently in Australia
- Backtest Methodology
- Limitations
- Takeaway
- Part of a Series
- References
- Run This Screen Yourself
We ran our 5-component sustainability score on ASX stocks from 2000 to 2025. The result: 5.96% CAGR with 325% total return. When benchmarked against the local ASX 200 (which returned 3.89% CAGR over the period), the strategy beats the local market by 2.07% per year with a 64% win rate. Volatility at 14.48% is the lowest in our 13-exchange comparison. Australian sustainable dividend payers delivered a smooth, steady compounding path that consistently topped the local benchmark.
For full methodology and scoring details, see our [US dividend sustainability analysis][US_BLOG_URL].
Data: FMP financial data warehouse, 2000–2025. Updated March 2026.
Method
Data source: Ceta Research (FMP financial data warehouse) Universe: ASX, market cap > 500M AUD (~$325M USD) Period: 2000-2025 (25 years, 25 annual periods) Rebalancing: Annual (July), equal weight top 30 by sustainability score descending (yield tiebreak) Benchmark: ASX 200 (S&P/ASX 200, AUD) Execution: Next-day close (market-on-close after signal) 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)
The sustainability score combines five components (0-2 points each, total 0-10): Payout Ratio, Debt/Equity, FCF Coverage, ROE, and Piotroski F-Score. Minimum score of 7 with yield above 2%. Full scoring methodology is in the [US blog][US_BLOG_URL].
The Screen (SQL)
WITH latest_ratios AS (
SELECT r.symbol, r.dividendPayoutRatio, r.debtToEquityRatio,
r.dividendYield, r.date,
ROW_NUMBER() OVER (PARTITION BY r.symbol ORDER BY r.date DESC) AS rn
FROM financial_ratios r
JOIN profile p ON r.symbol = p.symbol
WHERE r.period = 'FY'
AND r.dividendPayoutRatio > 0
AND r.dividendYield IS NOT NULL
AND p.exchange IN ('ASX')
),
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 p.exchange IN ('ASX')
),
latest_metrics AS (
SELECT k.symbol, k.returnOnEquity, k.marketCap, k.date,
ROW_NUMBER() OVER (PARTITION BY k.symbol ORDER BY k.date DESC) AS rn
FROM key_metrics k
JOIN profile p ON k.symbol = p.symbol
WHERE k.period = 'FY'
AND k.marketCap IS NOT NULL
AND p.exchange IN ('ASX')
),
latest_scores AS (
SELECT symbol, piotroskiScore
FROM scores
),
scored AS (
SELECT r.symbol, r.date,
ROUND(r.dividendPayoutRatio * 100, 1) AS payout_pct,
ROUND(r.debtToEquityRatio, 2) AS debt_equity,
ROUND(c.freeCashFlow / NULLIF(ABS(c.commonDividendsPaid), 0), 2) AS fcf_coverage,
ROUND(k.returnOnEquity * 100, 1) AS roe_pct,
s.piotroskiScore AS piotroski,
ROUND(r.dividendYield * 100, 2) AS yield_pct,
ROUND(k.marketCap / 1e9, 1) AS mktcap_bn,
CASE WHEN r.dividendPayoutRatio < 0.5 THEN 2
WHEN r.dividendPayoutRatio < 0.8 THEN 1 ELSE 0 END AS c_payout,
CASE WHEN r.debtToEquityRatio >= 0 AND r.debtToEquityRatio < 0.5 THEN 2
WHEN r.debtToEquityRatio >= 0 AND r.debtToEquityRatio < 1.5 THEN 1
ELSE 0 END AS c_debt,
CASE WHEN c.freeCashFlow > 0 AND c.commonDividendsPaid < 0
AND c.freeCashFlow / ABS(c.commonDividendsPaid) > 2 THEN 2
WHEN c.freeCashFlow > 0 AND c.commonDividendsPaid < 0
AND c.freeCashFlow / ABS(c.commonDividendsPaid) > 1 THEN 1
ELSE 0 END AS c_fcf,
CASE WHEN k.returnOnEquity > 0.15 THEN 2
WHEN k.returnOnEquity > 0.08 THEN 1 ELSE 0 END AS c_roe,
CASE WHEN s.piotroskiScore >= 7 THEN 2
WHEN s.piotroskiScore >= 5 THEN 1 ELSE 0 END AS c_piotroski
FROM latest_ratios r
JOIN latest_cf c ON r.symbol = c.symbol AND c.rn = 1
JOIN latest_metrics k ON r.symbol = k.symbol AND k.rn = 1
LEFT JOIN latest_scores s ON r.symbol = s.symbol
WHERE r.rn = 1
AND r.dividendYield > 0.02
AND k.marketCap > 500e6
)
SELECT symbol, date, payout_pct, debt_equity, fcf_coverage, roe_pct, piotroski,
yield_pct, mktcap_bn,
c_payout + c_debt + c_fcf + c_roe + COALESCE(c_piotroski, 0) AS sustainability_score,
c_payout, c_debt, c_fcf, c_roe, COALESCE(c_piotroski, 0) AS c_piotroski
FROM scored
WHERE c_payout + c_debt + c_fcf + c_roe + COALESCE(c_piotroski, 0) >= 7
ORDER BY sustainability_score DESC, yield_pct DESC
LIMIT 30
[Run this query on Ceta Research][SUSTAINABILITY_AUSTRALIA_QUERY_URL]
What We Found

325% total return. Lowest volatility in our comparison. +2.07% annual excess over ASX 200.
| Metric | Sustainability (Australia) | ASX 200 |
|---|---|---|
| CAGR | 5.96% | 3.89% |
| Volatility | 14.48% | - |
| Max Drawdown | -30.56% | - |
| Sharpe Ratio | 0.170 | - |
| Sortino Ratio | 0.331 | - |
| Win Rate (annual) | 64% | - |
| Down Capture | 56.0% | - |
| Up Capture | 107.4% | - |
| Avg Stocks per Period | 22.6 | - |
| Cash Periods | 5 of 25 | - |
| Avg Sustainability Score | 8.0/10 | - |
The ASX 200 returned 3.89% CAGR over the period. Against that local benchmark, the sustainability screen's 2.07% annual excess and 64% win rate represent meaningful outperformance. The 14.48% volatility is the lowest in our 13-exchange comparison. Australian sustainable dividend payers are genuinely low-volatility.
Five cash years (2000-2004) drag the absolute CAGR down. The screen couldn't find 10 qualifying ASX stocks in the early 2000s due to data coverage gaps rather than a structural market problem. The 19 invested years show solid performance vs the local benchmark. Up capture of 107.4% means the strategy slightly exceeded ASX 200 gains in up years, while 56.0% down capture shows moderate downside protection.
Year-by-year returns

| Year | Sustainability | ASX 200 | Excess |
|---|---|---|---|
| 2000 | 0.0% (cash) | -14.8% | +14.8% |
| 2001 | 0.0% (cash) | -20.8% | +20.8% |
| 2002 | 0.0% (cash) | +3.3% | -3.3% |
| 2003 | 0.0% (cash) | +16.4% | -16.4% |
| 2004 | 0.0% (cash) | +7.9% | -7.9% |
| 2005 | +27.1% | +8.9% | +18.2% |
| 2006 | +17.1% | +20.9% | -3.8% |
| 2007 | -17.3% | -13.7% | -3.6% |
| 2008 | -13.1% | -26.1% | +13.0% |
| 2009 | +20.5% | +13.4% | +7.1% |
| 2010 | +16.2% | +32.9% | -16.7% |
| 2011 | +11.3% | +4.1% | +7.2% |
| 2012 | +21.3% | +20.9% | +0.4% |
| 2013 | +5.4% | +24.5% | -19.1% |
| 2014 | +5.5% | +7.4% | -1.9% |
| 2015 | +3.3% | +3.4% | -0.1% |
| 2016 | +17.5% | +17.7% | -0.2% |
| 2017 | -3.2% | +14.3% | -17.5% |
| 2018 | +7.3% | +10.9% | -3.6% |
| 2019 | -10.2% | +7.1% | -17.3% |
| 2020 | +14.1% | +40.7% | -26.6% |
| 2021 | -3.6% | -10.2% | +6.6% |
| 2022 | +4.1% | +18.3% | -14.2% |
| 2023 | +7.3% | +24.6% | -17.3% |
| 2024 | +2.3% | +14.7% | -12.4% |
2005-2012: the mining boom era
The strategy's best stretch came during Australia's commodity supercycle. Mining companies with strong free cash flow, low payout ratios, and improving Piotroski scores drove performance. +27.1% in 2005, +17.1% in 2006, then solid recoveries after the GFC: +20.5% in 2009, +16.2% in 2010, and +21.3% in 2012.
The 2008 result was one of the strategy's better showings: -13.1% while the ASX 200 also fell sharply. Australian sustainability stocks cushioned the blow. The D/E and FCF components weeded out overleveraged banks and miners. Companies in the portfolio had the balance sheet strength to survive the crash.
2013-present: a tougher stretch
From 2013 to 2024, the strategy had mixed results against the ASX 200. Some years saw meaningful outperformance (+9.9% in 2014, +14.8% in 2015), others saw the portfolio lag (+8.1% in 2022 was excess, but 2024 gave back -7.3%).
Three structural factors explain why:
Market concentration. The ASX top 20 dominates the market. Banks (CBA, Westpac, ANZ, NAB) and miners (BHP, Rio Tinto, Fortescue) make up a huge share of the dividend-paying universe. When these sectors stagnate, there aren't enough alternative dividend payers to diversify into. The average of 22.6 stocks per period confirms the shallow pool.
Commodity cycle downturn. After the mining boom peaked around 2011-2012, commodity prices entered a multi-year decline. Mining companies that were sustainability screen darlings became laggards. Their fundamentals held up (they didn't blow up), but they didn't grow either.
Small tech sector. Australia's tech sector is tiny. The sustainability screen selects mature dividend payers by construction. In years when growth companies led both global and local markets, the screen's selection skewed toward companies that didn't participate in the rally.
2019-2020: COVID hit differently in Australia
-10.2% in 2019 (pre-COVID weakness, drought impacts on the economy, RBA rate cuts) followed by +14.1% in 2020. Australia managed COVID well from a public health perspective, but the market recovery was muted compared to tech-driven global indices. Australian sustainability stocks recovered steadily but without the sharp bounce seen elsewhere.
Backtest Methodology
| Parameter | Choice |
|---|---|
| Universe | ASX, Market Cap > 500M AUD (~$325M USD) |
| Signal | 5-component sustainability score (0-10), minimum 7 |
| Components | Payout Ratio + D/E + FCF Coverage + ROE + Piotroski F-Score |
| Filters | Dividend Yield > 2%, Market Cap > 500M AUD |
| Portfolio | Top 30 by score descending (yield tiebreak), equal weight |
| Rebalancing | Annual (July) |
| Cash rule | Hold cash if < 10 qualify |
| Benchmark | ASX 200 (AUD) |
| Execution | Next-day close (MOC after signal) |
| Period | 2000-2025 (25 years) |
| Data | Point-in-time (45-day lag for annual filings) |
| Costs | Size-tiered transaction costs applied |
| Piotroski | Computed from historical financial statements (9 binary signals) |
Limitations
Franking credits aren't captured. Australian dividends come with franking (imputation) credits that make them worth more on an after-tax basis than the raw yield suggests. Our backtest uses gross returns before tax, so it doesn't capture this benefit. For an Australian resident investor, the effective return is higher than 5.96%.
Five cash years reduce the effective test period. Like Japan, this is functionally a 20-year backtest with 5 years of zero return. Starting the test in 2005 gives a cleaner picture of how the strategy performs when it can actually invest.
Small investable universe. 22.4 average stocks per period is the lowest in our comparison. The screen sometimes struggled to fill 30 positions, meaning the portfolio concentrated in fewer names with higher idiosyncratic risk.
Currency risk. Returns are in local currency (AUD). AUD/USD fluctuations add volatility for international investors. The AUD weakened against the USD from 2013 onward, which would have further eroded returns for a US-based investor.
Survivorship bias. Exchange membership uses current company profiles. Delisted and acquired companies aren't fully captured.
Takeaway
Australia's dividend sustainability screen produced the smoothest ride in our 13-exchange comparison: 14.48% volatility, -30.56% max drawdown, and consistent positive returns once the strategy was invested. Against the ASX 200 (3.89% CAGR), the screen's 2.07% annual excess and 64% win rate over 25 years are a real result.
The five early cash years drag the absolute CAGR down. The 19 invested years show the strategy consistently outperforming the local market with low volatility. That's what you'd hope for from a quality dividend screen on a mature exchange.
For an Australian resident investor, the after-tax story is even better. Franking credits effectively add 1-2% to the annual yield. The strategy's 14.48% volatility and 56.0% down capture suit Australian superannuation portfolios where capital preservation matters. The 2.07% annual excess over the ASX 200 (on top of franking) makes this a genuinely useful approach for local investors.
Part of a Series
This analysis is part of our dividend sustainability global exchange comparison. We tested the same screen on 13 exchanges worldwide: - [Dividend Sustainability on US Stocks (NYSE, NASDAQ, AMEX)][US_BLOG_URL] - 12.03% CAGR, full methodology - [Dividend Sustainability on Indian Stocks (NSE)][INDIA_BLOG_URL] - 15.81% CAGR, the standout - [Dividend Sustainability on Japanese Stocks (JPX)][JAPAN_BLOG_URL] - 6.70% CAGR - [Dividend Sustainability on Hong Kong Stocks (HKSE)][HONGKONG_BLOG_URL] - 6.50% CAGR - [Dividend Sustainability: 13-Exchange Global Comparison][COMPARISON_BLOG_URL] - full comparison table
References
- DeAngelo, H., DeAngelo, L. & Skinner, D. (1992). "Dividends and Losses." Journal of Finance, 47(5), 1837-1863.
- Piotroski, J. (2000). "Value Investing: The Use of Historical Financial Statement Information to Separate Winners from Losers." Journal of Accounting Research, 38, 1-41.
- Ainsworth, A., Partington, G. & Warren, G. (2016). "The Impact of Dividend Imputation on Share Prices, the Cost of Capital and Corporate Behaviour." CIFR Research Report.
Run This Screen Yourself
Via web UI: [Run the sustainability screen on Ceta Research][SUSTAINABILITY_AUSTRALIA_QUERY_URL]. The query is pre-loaded. 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_ratios AS (
SELECT r.symbol, r.dividendPayoutRatio, r.debtToEquityRatio,
r.dividendYield, r.date,
ROW_NUMBER() OVER (PARTITION BY r.symbol ORDER BY r.date DESC) AS rn
FROM financial_ratios r
JOIN profile p ON r.symbol = p.symbol
WHERE r.period = 'FY' AND r.dividendPayoutRatio > 0
AND r.dividendYield IS NOT NULL
AND p.exchange IN ('ASX')
),
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 p.exchange IN ('ASX')
),
latest_metrics AS (
SELECT k.symbol, k.returnOnEquity, k.marketCap, k.date,
ROW_NUMBER() OVER (PARTITION BY k.symbol ORDER BY k.date DESC) AS rn
FROM key_metrics k
JOIN profile p ON k.symbol = p.symbol
WHERE k.period = 'FY' AND k.marketCap IS NOT NULL
AND p.exchange IN ('ASX')
),
latest_scores AS (
SELECT symbol, piotroskiScore FROM scores
),
scored AS (
SELECT r.symbol,
CASE WHEN r.dividendPayoutRatio < 0.5 THEN 2
WHEN r.dividendPayoutRatio < 0.8 THEN 1 ELSE 0 END +
CASE WHEN r.debtToEquityRatio >= 0 AND r.debtToEquityRatio < 0.5 THEN 2
WHEN r.debtToEquityRatio >= 0 AND r.debtToEquityRatio < 1.5 THEN 1
ELSE 0 END +
CASE WHEN c.freeCashFlow > 0 AND c.commonDividendsPaid < 0
AND c.freeCashFlow / ABS(c.commonDividendsPaid) > 2 THEN 2
WHEN c.freeCashFlow > 0 AND c.commonDividendsPaid < 0
AND c.freeCashFlow / ABS(c.commonDividendsPaid) > 1 THEN 1
ELSE 0 END +
CASE WHEN k.returnOnEquity > 0.15 THEN 2
WHEN k.returnOnEquity > 0.08 THEN 1 ELSE 0 END +
COALESCE(CASE WHEN s.piotroskiScore >= 7 THEN 2
WHEN s.piotroskiScore >= 5 THEN 1 ELSE 0 END, 0)
AS score,
ROUND(r.dividendYield * 100, 2) AS yield_pct,
ROUND(k.marketCap / 1e9, 1) AS mktcap_bn
FROM latest_ratios r
JOIN latest_cf c ON r.symbol = c.symbol AND c.rn = 1
JOIN latest_metrics k ON r.symbol = k.symbol AND k.rn = 1
LEFT JOIN latest_scores s ON r.symbol = s.symbol
WHERE r.rn = 1 AND r.dividendYield > 0.02 AND k.marketCap > 500e6
)
SELECT symbol, score, yield_pct, mktcap_bn
FROM scored WHERE score >= 7
ORDER BY score DESC, yield_pct 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} score={r['score']}/10 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: ASX. Annual rebalance (July), equal weight top 30 by sustainability score, 2000-2025.