Sustainable growth rate calculator
A 15% return on equity with 60% of earnings retained gives a sustainable growth rate of 9%, the pace a company can keep without issuing new shares. Enter both figures as decimals and get the rate and the percent. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Roe
- 0.15
- Retention ratio
- 0.6
- Sustainable growth rate
- 0.09
- Sustainable growth percent
- 9
The sustainable growth rate is the maximum rate at which a company can grow sales and assets without issuing new equity, keeping its capital structure and payout policy unchanged. Analysts, lenders, and corporate-finance students compute that ceiling from two figures already on the close pack: return on equity and the retention (plowback) ratio. This sustainable growth rate calculator multiplies those two finite numbers, returns the rate as a decimal and as a percent, and rejects a retention ratio that exceeds 1 because a firm cannot retain more than one hundred percent of earnings as a plowback fraction.
How the sustainable growth rate turns ROE and retention into a growth ceiling
The sustainable growth rate answers a narrow question: if a firm keeps its current return on equity, its current mix of debt and equity, and its current dividend policy, how fast can sales and assets grow without a new share issue. Return on equity is net income divided by book equity, sent here as a decimal: fifteen percent is 0.15, not 15.
The retention ratio, also called the plowback ratio, is the fraction of that net income the firm keeps after cash dividends, so 0.6 means sixty percent of earnings stay inside the company. Multiplying the two figures yields the growth rate that retained earnings can fund while leverage stays constant, which is the Higgins reading of sustainable growth when ROE is measured on ending equity. A fifteen-percent ROE and a sixty-percent retention print a sustainable growth rate of 0.09, which is nine percent.
Zero retention makes the sustainable rate zero: the firm pays out all earnings and has no internally generated equity to fund growth. Negative ROE is accepted because a loss-making year still has a defined product, and the resulting rate is then negative rather than hidden. Negative retention is accepted because a firm can pay dividends larger than current earnings from accumulated retained earnings, and the product then follows that sign.
You supply two finite numbers that already share one period; the calculator multiplies, rounds the rate half-up to six decimal places, and reports the same figure as a percent rounded half-up to four decimal places so goldens compare byte-for-byte across runtimes.
Where a sustainable growth rate calculator earns its keep
Operators screening a monthly close use a sustainable growth rate calculator to turn last period's return on equity and retention into one comparable growth-ceiling line before they open a full planning model. Equity analysts re-run the same two fields when a year closes or a board pack asks how fast the firm can grow without a secondary, then pin the rate next to actual sales growth so every memo starts from one internally funded ceiling rather than from an unscaled ROE.
Credit officers and lenders drop ROE from the ratio pack and retention from the dividend-policy note, and they compare that sustainable rate with covenant headroom and with a historical series rather than treating any one of those as a substitute. This is a different search and a different job from a compound annual growth rate calculator, from a GDP growth calculator, from a standalone retention ratio, and from an internal growth rate that starts from return on assets: those tools start from different lines and answer different questions.
Failed validation does not consume balance. Keep both fields finite, keep retention at or below 1, pin the rounded rate in tests, and you get a reproducible sustainable-growth figure for teasers, LMS plugins, and edge workers without standing up a general ledger of your own.
What you can do with it
Monthly close before the planning model
Turn last period's return on equity and retention ratio into one sustainable-growth-rate line before you open a full sales and capital-structure forecast.
Board packs and secondary-offering questions
Pin the internally funded growth ceiling next to actual sales growth so a board pack can say whether a new share issue is needed.
Credit files and covenant headroom
Drop ROE and plowback from the statements into one Higgins rate and compare it with covenant growth assumptions without rebuilding the equity roll-forward.
FAQ
Should I send ROE as 15 or as 0.15?
Send a decimal: 0.15 for a 15 percent return on equity. Sending 15 would treat ROE as 1,500 percent and inflate the sustainable growth rate by a factor of one hundred.
Is this the same as CAGR or internal growth rate?
No. CAGR is a historical compound rate between two values. Internal growth rate starts from return on assets and assumes no new debt. This calculator is the Higgins product of ROE and retention, the ceiling without a new equity issue.
What happens if the retention ratio is above 1?
The calculation is refused. A company cannot keep more than 100% of its earnings as plowback, so a ratio above 1 would pretend that new outside capital came from retained profit.
What does a negative sustainable growth rate mean?
It means the company lost money or paid out more in dividends than it earned. A negative return on equity or a negative retention ratio is accepted, and the rate keeps that sign instead of hiding it.
What does the sustainable growth rate assume about the company?
That return on equity, the mix of debt and equity, and the dividend policy all stay as they are. Under those conditions it is the fastest growth that retained earnings alone can fund.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/fin/sustainable-growth-rate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"roe":0.15,"retention_ratio":0.6}'const res = await fetch("https://api.kit.forhosting.com/fin/sustainable-growth-rate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"roe": 0.15,
"retention_ratio": 0.6
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/sustainable-growth-rate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"roe": 0.15,
"retention_ratio": 0.6
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/sustainable-growth-rate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"roe":0.15,"retention_ratio":0.6}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"roe":0.15,"retention_ratio":0.6}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/sustainable-growth-rate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"roe": 0.15,
"retention_ratio": 0.6
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.sustainable_growth_rate",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Missing or non-finite inputs fail with invalid_input and are not billed.
How the sustainable growth rate turns ROE and retention into a growth ceiling
The identity this calculator uses is sustainable_growth_rate equals roe times retention_ratio. Full retention (retention_ratio equal to 1) makes the sustainable rate equal to ROE: every unit of earnings is plowed back. A retention ratio that exceeds 1 is not a legitimate plowback fraction: the task fails with invalid_input rather than returning a rate that pretends new capital is retained earnings. This calculator does not rebuild DuPont ROE from profit margin, asset turnover, and leverage, does not convert a start value and an end value into CAGR, does not compute GDP growth, and does not look up a live quote.
Input contract, response shape, and error behaviour
Zero and negative ROE are allowed: a firm that earns nothing or posts a loss still has a defined product, and the rate follows that sign. Zero retention is allowed and produces a sustainable growth rate of zero. Negative retention is allowed and produces a negative rate rather than an error. Example: 0.15 of ROE and 0.6 of retention yield a sustainable growth rate of 0.09 and a sustainable growth percent of 9. POST a JSON body with two required finite numbers. roe is return on equity as a decimal fraction of book equity; aliases return_on_equity and return_on_common_equity map to the same field so a worksheet can keep its column names. retention_ratio is the plowback fraction of earnings kept after dividends; aliases retention, plowback, plowback_ratio, and b are accepted. Each numeric field may arrive as a JSON number or a numeric string. Missing fields, empty strings, and non-finite values — NaN, Infinity, or text that does not parse as a number — fail with invalid_input naming the field. Those failures are not billed. retention_ratio must not exceed 1; a value above one fails because a retention ratio above one hundred percent of earnings is not a valid plowback fraction. On success the body echoes roe and retention_ratio, then reports sustainable_growth_rate as their product (rounded half-up to six decimal places), sustainable_growth_percent as the same fraction times one hundred (rounded half-up to four decimal places), and a formula string restating the identity. Pair the JSON with your own rule for which ROE you send — beginning-of-period equity versus ending-of-period equity changes the textbook identity, and this endpoint multiplies the two numbers you send; it does not rebuild the equity roll-forward, choose a reporting convention, or look up a filing.
Technical questions
How do I calculate the sustainable growth rate from ROE and retention?
Send finite numbers roe (decimal, so 0.15 means 15 percent) and retention_ratio (at most 1). The API returns sustainable_growth_rate = roe × retention_ratio, plus the same figure as a percent.
What happens if the retention ratio exceeds 1?
The task fails with invalid_input. A retention ratio above 100 percent of earnings is not a valid plowback fraction, so the request is rejected and is not billed.
What does the sustainable growth rate calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.