Gross rent multiplier (GRM)
Divide a property's price by its annual gross rent to get its gross rent multiplier: 300,000 for a property that rents for 24,000 a year gives a GRM of 12.5. A quick way to compare rental listings. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Price
- 300,000
- Annual rent
- 24,000
- Decimal places
- 4
- Grm
- 12.5
Compute Gross Rent Multiplier = price / annual gross rent. Search intent: gross rent multiplier. No network calls, no random seeds, and no server state are required for a correct answer. Failed jobs are not billed. Landings target
What the gross rent multiplier tells you
The gross rent multiplier, or GRM, compares what a rental property costs with the rent it brings in. It is a single division: the price divided by the annual gross rent, meaning the yearly rent before any expenses are taken off. A property priced at 300,000 that rents for 24,000 a year has a GRM of 12.5, so its price equals twelve and a half years of current gross rent. Because it needs only two figures, it is easy to work out for several listings and set them side by side. The result is rounded once, to the decimals you choose.
Avoiding the usual slips
Use annual rent, not monthly: a monthly figure makes the multiplier twelve times too large. Use gross rent, not rent after costs, or the number will not be comparable with others worked out the usual way. Remember what the GRM leaves out: expenses, vacancies and financing are not part of it, so two properties with the same multiplier can still leave you with different amounts. Treat it as a first filter and compare properties on the same basis, with the same kind of rent figure for each.
When to use it
Use when the search intent matches this tool. Compute Gross Rent Multiplier = price / annual gross rent. No network calls, no random seeds, and no server state are required for a correct answer.
Failed jobs are not billed. Landings target the stated search intent with precise keywords. Prefer explicit units and ranges over silent coercion of bad types.
When a field is optional, defaults are documented in params and echoed in the output.
FAQ
Locales?
EN-only delivery; Nitro hydrates the other seven languages.
What does a GRM of 12.5 mean?
It means the price equals 12.5 years of gross rent at the current level. For the same rent, a lower multiplier means paying less for each unit of yearly rent, and a higher one means paying more.
Should I enter monthly or annual rent?
Annual gross rent. If you only know the monthly rent, multiply it by twelve first; entering a monthly figure would make the multiplier twelve times too large.
Does the GRM account for operating expenses?
No. It uses gross rent, the rent before any expenses, so two properties with the same GRM can leave you with different amounts once costs are paid.
How do I get from a GRM back to a price?
Multiply the annual gross rent by the multiplier. With 24,000 of yearly rent and a GRM of 12.5, the price comes back to 300,000. The calculator itself works the other way, from price and rent to the multiplier.
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/finance/gross-rent-multiplier \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"price":300000,"annual_rent":24000}'const res = await fetch("https://api.kit.forhosting.com/finance/gross-rent-multiplier", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"price": 300000,
"annual_rent": 24000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/gross-rent-multiplier",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"price": 300000,
"annual_rent": 24000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/gross-rent-multiplier", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"price":300000,"annual_rent":24000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"price":300000,"annual_rent":24000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/gross-rent-multiplier", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"price": 300000,
"annual_rent": 24000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.gross_rent_multiplier",
"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
The calculator is free in the browser, deterministic, and identical in the API path. Inputs are validated before any arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE results when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos.
How it works
Compute Gross Rent Multiplier = price / annual gross rent. No network calls, no random seeds, and no server state are required for a correct answer. Failed jobs are not billed. Landings target the stated search intent with precise keywords. Prefer explicit units and ranges over silent coercion of bad types. When a field is optional, defaults are documented in params and echoed in the output. GRM = price / annual_rent. The calculator is free in the browser, deterministic, and identical in the API path. Inputs are validated before any arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE results when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos.
Inputs, limits and rounding
Outputs echo inputs for logging. No network calls, no random seeds, and no server state are required for a correct answer. Failed jobs are not billed. Landings target the stated search intent with precise keywords. Prefer explicit units and ranges over silent coercion of bad types. When a field is optional, defaults are documented in params and echoed in the output. Provide required JSON fields. Optional decimals use half-up once from raw IEEE values. Invalid types or ranges raise invalid_input. The calculator is free in the browser, deterministic, and identical in the API path. Inputs are validated before any arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE results when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos.
When to use it
The calculator is free in the browser, deterministic, and identical in the API path. Inputs are validated before any arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE results when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos.
Integration use cases
Quick check
Use the free widget to verify a formula before production.
Automation
Call the API with the same JSON contract from scripts or CMS.
Teaching
Show pinned golden examples without proprietary software.
Technical questions
Is the browser widget free?
Yes. Tier A is free client-side with the same core as the API.
Does it use the network?
No. Computation is local and deterministic.
What on bad input?
invalid_input is thrown; failed jobs are not billed.
API compatible?
Yes — same JSON fields as params.json.