Check rental application income-to-rent ratio
This rental application income-to-rent ratio calculator compares an applicant's gross monthly income with the monthly rent for a property.
Run — free
It reports the income multiple, tests that multiple against a chosen landlord guideline, and shows the monthly income required to reach the threshold. The result is useful for an initial, consistent affordability check, but it is not an approval decision. Landlords and property managers should apply lawful screening policies uniformly and consider the full application rather than relying on one number alone.
Enter comparable monthly amounts
Start with the applicant's gross monthly income, meaning income before taxes, insurance, retirement contributions, and other deductions. If income is quoted annually, convert it to a monthly amount before using the calculator. Enter the property's monthly rent as the second value. Both figures should cover the same time period and use the same currency; the calculation does not perform currency conversion. The rent must be greater than zero because dividing by zero cannot produce a meaningful affordability ratio. Income may be zero, which produces a valid ratio of zero and a failed guideline check. When an applicant has several documented income sources, combine only the sources your written screening policy permits. Avoid mixing gross income from one source with net income from another, because the resulting multiple would look precise while comparing inconsistent figures. This tool performs arithmetic on the values supplied; it does not verify employment, documents, income stability, or whether a particular source may legally be considered in your jurisdiction.
Understand the ratio and guideline result
The income-to-rent ratio is gross monthly income divided by monthly rent. For example, income equal to three times rent produces a ratio of three. The guideline ratio is the minimum multiple used for comparison and defaults to the commonly referenced three-times-rent benchmark. You can provide a different positive guideline when your documented policy uses another threshold. The result includes the calculated multiple, the guideline applied, a true-or-false indication of whether the applicant reaches it, and the gross monthly income required at that rent. It also reports the monthly income difference: a positive number indicates income above the threshold, while a negative number indicates a shortfall. Meeting the guideline means only that the supplied figures satisfy this particular arithmetic test. It does not predict whether rent will be paid, measure remaining disposable income, or account for debt, household size, utilities, concessions, deposits, irregular earnings, or other expenses. Treat the result as one transparent screening input, not as a complete assessment of a person.
Use the result consistently and responsibly
A useful screening process defines the income rule before applications arrive, records which income evidence is accepted, and applies the same calculation consistently to similarly situated applicants. Save the input values, selected guideline, and returned result with the application's review notes so another reviewer can reproduce the arithmetic. If the result falls below the threshold, follow your established process for permitted alternatives, clarifications, guarantors, or adverse-action notices rather than improvising a different standard for one applicant. Housing, consumer-reporting, privacy, and anti-discrimination requirements vary by location, so obtain qualified guidance for the rules that govern your properties. Do not use protected characteristics as inputs or infer them from the ratio. The API calculation costs $0.002 per request, while the browser version can support an individual manual check. For automated workflows, validate that upstream systems send monthly gross income and monthly rent as finite numeric values, and preserve the guideline used. Recalculate whenever rent, verified income, or the written screening policy changes, since any of those changes can alter the outcome.
What you can do with it
Pre-screen a rental application
Compare documented gross monthly income with the advertised monthly rent using a stated threshold.
Standardize property-management reviews
Apply the same arithmetic and guideline across reviewers while retaining a reproducible result.
Explain an income shortfall
Show how much additional gross monthly income would be needed to reach the selected rent multiple.
FAQ
What is the income-to-rent ratio?
It is gross monthly income divided by monthly rent. A result of three means the supplied income is three times the rent.
What guideline does the calculator use?
It defaults to three times monthly rent, but you can supply another positive ratio that matches your documented policy.
Does meeting the guideline approve an applicant?
No. It confirms only that the supplied income and rent meet the selected arithmetic threshold. It is not a complete approval decision.
Should I enter gross or net income?
Enter gross monthly income before taxes and deductions, and use only income sources permitted by your consistent screening policy.
What happens if monthly rent is zero or negative?
The request returns an invalid-input error because a meaningful income-to-rent ratio requires positive monthly rent.
What does the API calculation cost?
The API calculation costs $0.002 per request. The browser version is available for manual checks.
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/realestate/rental-application-income-ratio \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"gross_monthly_income":7500,"monthly_rent":2400}'const res = await fetch("https://api.kit.forhosting.com/realestate/rental-application-income-ratio", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"gross_monthly_income": 7500,
"monthly_rent": 2400
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/realestate/rental-application-income-ratio",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"gross_monthly_income": 7500,
"monthly_rent": 2400
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/realestate/rental-application-income-ratio", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"gross_monthly_income":7500,"monthly_rent":2400}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"gross_monthly_income":7500,"monthly_rent":2400}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/realestate/rental-application-income-ratio", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"gross_monthly_income": 7500,
"monthly_rent": 2400
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "realestate.rental_application_income_ratio",
"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. |