Lease rent escalation calculator
The lease rent escalation calculator turns a starting rent, an annual escalation percentage, and a lease term into a clear year-by-year schedule.
Run — free
Year 1 uses the starting rent, and each later year compounds the stated increase on the previous level. The result shows every annual rent, the final-year amount, and the total across the full term. It works with any currency and rent period, provided the same basis is used consistently for every input and result.
Set the rent basis before calculating
Start with the rent that applies during the first lease year. The calculator does not assume a currency or whether the figure is monthly, quarterly, or annual, so choose one basis and keep it consistent when reading the schedule. For example, entering an annual starting rent produces annual figures for every year and an annual-rent total across the lease term. Entering a monthly figure produces the monthly rate applicable in each lease year; in that case, the displayed total is the sum of those monthly rates, not the total of all monthly payments. The annual escalation percentage is the contractual increase applied once per lease year. Enter the lease term as a whole number of years. Year 1 is never increased because it is the baseline supplied by you. This clear convention prevents an accidental extra escalation at commencement and makes the schedule easy to compare with lease clauses, proposals, abstracts, and financial models.
Understand compound lease escalation
Each increase compounds on the rent calculated for the preceding year rather than adding the same fixed amount every time. If the annual escalation is three percent, Year 2 equals Year 1 multiplied by 1.03, Year 3 equals the original rent multiplied by 1.03 twice, and the pattern continues through the term. A zero-percent escalation is valid and produces a level schedule. A negative percentage is rejected because this capability models escalation, not rent reductions, abatements, or indexed decreases. Each displayed rent is rounded to two decimal places, which is suitable for ordinary currency schedules, and the total is formed from those displayed yearly amounts. Compounding means the monetary increase generally becomes larger from year to year even though the percentage stays constant. Reviewing the full schedule is therefore more informative than multiplying the first-year increase by the number of renewals, especially for long leases where small percentage differences accumulate substantially.
Use the schedule in lease review and budgeting
The output is designed to be copied into underwriting notes, occupancy budgets, lease abstracts, or negotiation comparisons. Check that the escalation timing in the agreement is genuinely annual and that the stated percentage is fixed; a lease tied to an index, market review, stepped dollar amounts, caps, floors, or irregular anniversary dates needs a different model. Confirm whether the starting figure includes operating expenses, taxes, service charges, or other pass-through costs before treating the total as the complete occupancy cost. When comparing alternatives, run each proposal on the same rent basis and over the same number of years. The final-year rent highlights the long-run run rate, while the total helps compare aggregate scheduled rent. This calculator provides deterministic arithmetic and does not interpret legal language or determine which amount a contract requires. For API automation, each request costs $0.002; the same calculation can also run free in the browser for quick scenario checks.
What you can do with it
Prepare a lease abstract
Turn a fixed annual escalation clause into a concise schedule that can be recorded with the lease's key commercial terms.
Compare landlord proposals
Calculate competing rent schedules on the same basis to see how different escalation percentages affect later years and total rent.
Build an occupancy budget
Generate the scheduled rent for each budget year without recreating compound-growth formulas in a spreadsheet.
FAQ
Is the starting rent monthly or annual?
It can be either. Results use the same rent period and currency as the starting rent, so keep that basis consistent.
Does Year 1 include an escalation?
No. Year 1 is the starting rent, and the first escalation produces the rent for Year 2.
Are increases compounded?
Yes. Each year's percentage increase is applied to the prior year's calculated rent.
Can I enter a negative escalation percentage?
No. Negative escalation is rejected because this calculator is specifically for level or increasing rent schedules.
How are monetary values rounded?
Each scheduled rent is rounded to two decimal places, and total rent is the sum of those displayed amounts.
What does the API calculation cost?
Each API request costs $0.002. You can also run the calculation free in your browser.
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/lease-escalation-calc \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"starting_rent":24000,"annual_escalation_percent":3,"lease_years":5}'const res = await fetch("https://api.kit.forhosting.com/realestate/lease-escalation-calc", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"starting_rent": 24000,
"annual_escalation_percent": 3,
"lease_years": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/realestate/lease-escalation-calc",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"starting_rent": 24000,
"annual_escalation_percent": 3,
"lease_years": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/realestate/lease-escalation-calc", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"starting_rent":24000,"annual_escalation_percent":3,"lease_years":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"starting_rent":24000,"annual_escalation_percent":3,"lease_years":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/realestate/lease-escalation-calc", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"starting_rent": 24000,
"annual_escalation_percent": 3,
"lease_years": 5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "realestate.lease_escalation_calc",
"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.
Limits
max_years | 200 |
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. |