FFO calculator
Net income of 1,000,000 plus 250,000 of depreciation and 50,000 of amortization, minus 80,000 of gains on property sales, gives funds from operations of 1,220,000: REIT earnings without the non-cash depreciation of buildings. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Net income
- 1,000,000
- Depreciation
- 250,000
- Amortization
- 50,000
- Gains on property sales
- 80,000
- Da
- 300,000
- Ffo
- 1,220,000
Funds from operations, or FFO, is the real-estate earnings metric that investors, REIT management teams, and credit analysts use when GAAP net income is distorted by non-cash depreciation of buildings and by one-off gains on property sales. This FFO calculator takes four finite numbers in one currency — net income, depreciation, amortization, and gains on property sales — adds the two non-cash charges back to net income, subtracts gains on sales of real estate, and returns FFO together with the D&A add-back as an intermediate.
How FFO turns net income, D&A, and property-sale gains into funds from operations
Funds from operations is the NAREIT-style earnings figure that starts from GAAP net income and then undoes two effects that systematically misstate a property company's recurring, cash-like earnings. Real estate is depreciated for accounting even when a building's market value is stable or rising, so depreciation of real property and amortization of related intangibles are added back. Net income is the bottom line for the period in one currency.
Depreciation is the period charge that allocates capitalized real-estate and other tangible costs; amortization is the period charge that allocates intangibles such as in-place leases or leasing commissions when those amounts were taken through net income. Gains on property sales are the period net gain recognized on dispositions of real estate. A one-million net income, two-hundred-fifty-thousand depreciation, fifty-thousand amortization, and eighty-thousand gain on sales print FFO of one million two hundred twenty thousand, with a D&A add-back of three hundred thousand.
Zero net income, zero D&A, or zero gains is a legitimate outcome and is not an error: a break-even period or a year with no dispositions still has an FFO. Negative net income is accepted because a REIT can print a GAAP loss and still report positive FFO once depreciation is added back. Negative depreciation or amortization is accepted as a finite number because a credit, an impairment reversal, or a restatement can print those signs; the identity follows them instead of taking an absolute value.
This calculator does not compute adjusted funds from operations, cash available for distribution, or FFO per share, does not pick out only real-estate D&A from a mixed depreciation line, does not allocate unconsolidated joint-venture FFO, and does not convert currencies. You supply four finite numbers that already share one period and one currency; the calculator applies the identity and rounds FFO and the D&A add-back half-up to two decimal places so goldens compare byte-for-byte across runtimes.
Where an FFO calculator earns its keep
REIT finance teams screening a quarterly close use an FFO calculator to turn last period's net income, real-estate depreciation, amortization, and property-sale gains into one comparable funds-from-operations line before they open a full NAREIT reconciliation workbook. Equity analysts covering listed REITs re-run the same four fields when a year closes or a peer-comp table asks for FFO, then pin ffo next to the dividend so coverage comments start from one figure rather than from GAAP net income that already embeds depreciation of appreciating buildings.
Credit desks and lenders drop net income from the filing, D&A from the notes, and gains on sales from discontinued or other-income lines, and they compare that FFO with interest coverage and with AFFO after recurring capex rather than treating any one of those as a substitute. This is a different search and a different job from an AFFO or CAD identity, from FFO per share, from EBITDA, and from cash from operations: those tools start from different adjustments and answer different questions. Failed validation does not consume balance.
Keep all four fields finite, pin the rounded FFO in tests, and you get a reproducible funds-from-operations figure for teasers, LMS plugins, and edge workers without standing up a general ledger of your own.
What you can do with it
REIT quarterly close before the NAREIT workbook
Turn last period's net income, real-estate depreciation, amortization, and property-sale gains into one FFO line before you open a full reconciliation.
Equity coverage and dividend comments
Pin funds from operations next to the dividend so peer comps share one figure rather than GAAP net income distorted by building depreciation.
Credit memos versus AFFO and coverage
Drop filing net income, notes D&A, and disposition gains into one going-in FFO beside interest coverage and an AFFO case after recurring capex.
FAQ
How is FFO calculated?
The calculator also returns da as depreciation plus amortization. Money amounts round half-up to two decimal places.
Why add depreciation and amortization back to net income?
GAAP depreciates real estate even when property values are stable or rising, so NAREIT-style FFO adds those non-cash charges back. Depreciation and amortization are separate required fields so you can send each line as it appears in the filing.
Why subtract gains on property sales? What about a loss?
Gains on sales of real estate are not recurring operating earnings, so they are subtracted.
What happens if a field is missing or not a finite number?
NaN, Infinity, empty strings, and missing fields are rejected and are not billed.
Can FFO be positive when net income is a loss?
Yes. A REIT can report a loss under GAAP and still show positive FFO once depreciation and amortization are added back. Enter the negative net income as it is; the calculator keeps the sign.
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/ffo \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"net_income":1000000,"depreciation":250000,"amortization":50000,"gains_on_property_sales":80000}'const res = await fetch("https://api.kit.forhosting.com/fin/ffo", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"net_income": 1000000,
"depreciation": 250000,
"amortization": 50000,
"gains_on_property_sales": 80000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/ffo",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"net_income": 1000000,
"depreciation": 250000,
"amortization": 50000,
"gains_on_property_sales": 80000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/ffo", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"net_income":1000000,"depreciation":250000,"amortization":50000,"gains_on_property_sales":80000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"net_income":1000000,"depreciation":250000,"amortization":50000,"gains_on_property_sales":80000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/ffo", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"net_income": 1000000,
"depreciation": 250000,
"amortization": 50000,
"gains_on_property_sales": 80000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.ffo",
"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
Any input that is missing, empty, or not a finite number fails with invalid_input and is not billed.
How FFO turns net income, D&A, and property-sale gains into funds from operations
Gains on sales of property are subtracted because they are not recurring operating earnings of the portfolio that remains; a loss on sale is the same line with the opposite sign, so a negative gains_on_property_sales adds that loss back instead of hiding it. The identity this calculator uses is ffo equals net_income plus depreciation plus amortization minus gains_on_property_sales.
Input contract, response shape, and error behaviour
Zero and negative amounts are allowed: a GAAP loss, a year with no D&A, or a net loss on sale still produce a finite FFO rather than an error. Example: one million of net income, two hundred fifty thousand of depreciation, fifty thousand of amortization, and eighty thousand of gains on property sales yield a D&A add-back of three hundred thousand and FFO of one million two hundred twenty thousand. POST a JSON body with four required finite numbers in one currency. net_income is the period bottom line after tax; aliases net_profit, earnings, and profit map to the same field so a worksheet can keep its column names. depreciation is the period tangible-asset charge added back; aliases dep and da_depreciation are accepted. amortization is the period intangible charge added back; aliases amort and da_amortization are accepted. gains_on_property_sales is the period net gain on dispositions of real estate, in the same currency; send a negative amount when the period recognized a net loss on sale so that loss is added back. Aliases gains, property_gains, gains_on_sale, and property_sale_gains 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. On success the body echoes net_income, depreciation, amortization, and gains_on_property_sales, then reports da as depreciation plus amortization and ffo as net income plus that add-back minus gains on property sales, both rounded half-up to two decimal places, plus a formula string restating the identity. Pair the JSON with your own rule for which depreciation line is real-estate D&A and which gains line is property sales — GAAP filings often mix corporate depreciation with real-estate depreciation, and other-income lines often mix asset sales with other items — because this endpoint applies the four numbers you send; it does not rebuild the income statement, choose a NAREIT reporting convention, or convert currencies.
Technical questions
What does the FFO calculator cost? Is this AFFO or FFO per share?
This endpoint computes FFO, not AFFO, CAD, or FFO per share. The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.