One percent rule calculator
A 200,000 house renting for 1,600 a month reaches only 0.8%, so it fails the one percent rule; it would need 2,000, a gap of 400. Enter the price and the rent to screen any property on your list. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Property price
- 200,000
- Monthly rent
- 1,600
- Target percentage (%)
- 1
- Rent-to-price ratio (%)
- 0.8
- Target monthly rent
- 2,000
- Rent gap
- 400
free
A quick screen for rental properties
The one percent rule says a rental's monthly rent should be at least one percent of its purchase price. It is a fast way to triage a list of properties before deeper analysis, keeping only those where rent meets or beats the bar. The calculator divides the monthly rent by the price and multiplies by 100, works out the rent the property would need to reach your threshold, and shows the gap between the two. A house priced at 200,000 that rents for 1,600 reaches 0.8%, short of the 2,000 a month needed at 1%, so it does not pass.
Adjusting the bar and reading the gap
The threshold is 1% unless you change it. Set 0.7 for pricier coastal markets or 2 for the aggressive two percent rule, and the target rent, the gap and the pass or fail result all follow. The gap is the target rent minus the actual rent: a positive gap is how much rent is missing, and a negative one shows the headroom above the bar. The ratio keeps three decimals by default, so 0.8% is never rounded up into a pass, while the target rent and the gap are always shown with two decimals as money amounts.
What you can do with it
Deal triage
Screen a list of properties and keep only those where rent meets or beats one percent of price.
FAQ
How is the one percent rule calculated?
Divide the monthly rent by the purchase price and multiply by 100. If the result reaches or beats 1%, the property passes the screen; if it falls below, it does not.
Can I use a threshold other than 1%?
Yes. Lower it to 0.7 for pricier coastal markets or raise it to 2 for the stricter two percent rule. The target rent, the gap and the pass or fail result are all recalculated with the new threshold.
What does a negative gap mean?
It means the property beats the threshold. The gap is the target rent minus the actual rent, so a negative value tells you how much rent headroom exists above the bar.
Why is the percentage shown with three decimals?
So that a 0.8% ratio is not rounded to 1% and made to look like a pass. The target rent and the gap, on the other hand, are always shown with two decimals because they are money amounts.
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/one-percent-rule \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"price":200000,"monthly_rent":1600}'const res = await fetch("https://api.kit.forhosting.com/finance/one-percent-rule", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"price": 200000,
"monthly_rent": 1600
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/finance/one-percent-rule",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"price": 200000,
"monthly_rent": 1600
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/finance/one-percent-rule", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"price":200000,"monthly_rent":1600}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"price":200000,"monthly_rent":1600}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/finance/one-percent-rule", 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": 200000,
"monthly_rent": 1600
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "finance.one_percent_rule",
"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
Screens a rental by dividing monthly_rent by price: it returns rent_to_price_percent, the target_rent needed to hit your k_percent threshold (default 1%), the dollar gap, and a pass/fail flag.
The rule and the formula
The one percent rule is a fast screen for rental property: monthly rent should be at least one percent of the purchase price. The tool computes rent_to_price_percent as monthly_rent divided by price times 100, and target_rent as price times k_percent divided by 100. On a $200,000 house renting for $1,600 the ratio is 0.8%, the target at the default 1% is $2,000, and the gap—target minus actual rent—is $400, so the passes flag is false. The k_percent parameter lets you retune the bar: set it to 0.7 for pricier coastal markets or 2 for the aggressive two percent rule, and every derived figure follows. A property clears the screen when its ratio meets or exceeds k_percent, which is exactly what the passes boolean reports.
Outputs, rounding and the passes flag
Four numbers and a boolean come back. rent_to_price_percent is rounded half-up to the decimals parameter, which defaults to 3 so a 0.8% ratio is not flattened to 1%, while target_rent and gap are always rounded to 2 decimals because they are dollar amounts. gap is target_rent minus monthly_rent and can be negative when a property beats the threshold, telling you how much rent headroom exists above the bar. The passes flag compares the raw, unrounded ratio to k_percent with a tiny 1e-12 epsilon, so a property renting for exactly one percent is not tripped up by floating-point dust; it correctly reads as passing rather than failing by a rounding artifact at the last decimal place.
Validation and where it fits
price must be a finite number strictly above zero and monthly_rent a finite number of zero or more; anything else returns a typed invalid_input error naming the field, so a blank or negative rent will not silently produce NaN. k_percent and decimals are optional, defaulting to 1 and 3 respectively. Failed tasks are never charged, and prepaid balance covers only successful API calls at the base price.
Integration use cases
Custom thresholds
Set k_percent to run the two percent rule or a softer bar for expensive markets.
Buyer guides
Embed the free widget so readers test their own price and rent instantly.
Technical questions
What is the one percent rule?
A screen that passes when monthly rent is at least 1% of the purchase price; rent_to_price_percent versus k_percent decides it.
Can I change the threshold?
Yes. k_percent defaults to 1 but you can set 2 for the two percent rule, or any bar you like.
What is target_rent?
The rent needed to hit your threshold: price times k_percent divided by 100, rounded to 2 decimals.
Why is gap sometimes negative?
gap is target_rent minus monthly_rent; a negative value means the property already clears the bar.
Is it free?
Yes in the tier A browser widget; the deterministic API starts at $0.002 and bills only successful calls.