Net effective rent (NER) calculator
Net effective rent calculator: straight-line and discounted NER per SF after free rent, TI allowance and leasing commissions, with every step shown.
What it computes
Net effective rent (NER) is the average annual base rent per square foot a landlord keeps over a lease term after free rent and the landlord's leasing costs. The calculator returns three figures in dollars per square foot per year: effective rent (the average rent actually paid after abatement), straight-line NER (effective rent less the tenant improvement allowance, leasing commissions and other concessions, spread evenly over the term), and discounted NER (the level rent with the same present value as the landlord's net cash flows at a stated discount rate).
Method and conventions
The base-rent schedule is built exactly as
calc_rent_schedule builds it. Lease month 1 starts on
commencement_date, and each later month starts on the same day of
the month, clamped to month end. The annual rate for month m uses
k = floor((m − 1) ÷ every_months) completed bumps: a percent
escalation gives starting_rate × (1 + rate)^k and a fixed
escalation gives starting_rate + amount × k. Monthly rent is
rate × area_sf ÷ 12, rounded to the cent. Each month listed in
abated_months has zero rent due.
The term in years is term_months ÷ 12. Landlord costs are
ti_allowance_psf × area_sf + leasing_commissions + other_concessions, all paid at commencement. Effective rent is
total rent due ÷ area ÷ years. Straight-line NER is
(total rent due − landlord costs) ÷ area ÷ years.
For discounted NER, rent is paid monthly in advance, so month 1 has a discount
factor of 1. The monthly rate is r = discount_rate_annual ÷ 12
(a nominal rate, not an effective one). The present value of rent is
Σ rent_due_t ÷ (1 + r)^t for t = 0 … n − 1. The
level monthly rent is
(PV of rent − landlord costs) ÷ Σ (1 + r)^−t, and discounted NER
is that amount × 12 ÷ area. Landlord costs are not discounted
because they fall at time zero.
Practitioners differ on several points. Some quote only straight-line NER and
others only a discounted figure; FactLot returns both, and
discount_rate_annual of 0 makes them equal (the result then
carries a warning). Some models pay rent in arrears or convert an effective
annual rate to a monthly rate; FactLot always discounts in advance at annual ÷
12, so an effective annual rate needs converting to its nominal equivalent
before it is passed. Some analyses treat free rent as a cost line; FactLot
reduces rent due in the abated months instead, so free rent is counted once.
Some NER figures include expense recoveries; this one uses base rent only.
Escalations run on lease-month anniversaries counted from commencement, not on
calendar dates. Optional round_rate_to_cents
rounds each step's annual rate to cents, as many lease rent tables do.
Setting schedule.unit to kw, mw,
acre, unit, key, room or
space relabels the results (for example dollars per kW per year)
without changing any number.
Inputs that matter
-
schedule.starting_rent_psf_annual: year-one base rent in dollars per square foot per year, not per month. -
schedule.term_months: lease term in months; it sets both the schedule length and the years divisor. -
schedule.area_sf: rentable square feet (or the quantity inunit); totals are divided by it. -
schedule.escalation:none,percent(compounding) orfixed_psf, withevery_monthsbetween bumps. -
schedule.abated_months: fully free months, counted from 1 at commencement. -
ti_allowance_psf: landlord-funded improvement allowance per square foot, paid once at commencement. -
leasing_commissions: total commissions paid by the landlord, in dollars. -
other_concessions: other landlord payments at commencement, such as a moving allowance or lease buyout. -
discount_rate_annual: annual rate for discounted NER; 0 gives the straight-line figure.
Limits
- Base rent only. Operating expense recoveries, expense stops and percentage rent are not part of the result.
- Abatement is whole months at 100%. Half-rent periods or partial-month abatement are not supported.
- All landlord costs are paid at commencement. Allowances or commissions paid in installments, and downtime before commencement, are not modeled.
- One escalation pattern applies to the whole term. Irregular step tables with hand-set rates cannot be entered.
- Rent is not prorated to calendar months. A mid-month commencement produces a warning, and any proration happens outside the result.
- The tenant's own costs, renewal options and termination options are not considered. The term is at most 1,200 months.
Worked example
Inputs from FactLot's shared test case "10-year deal, 6 months free, TI and LC, 8% discount", which the TypeScript and Python libraries must both reproduce:
{
"schedule": {
"commencement_date": "2026-01-01",
"term_months": 120,
"area_sf": 10000,
"starting_rent_psf_annual": 40,
"abated_months": [
1,
2,
3,
4,
5,
6
]
},
"ti_allowance_psf": 50,
"leasing_commissions": 100000,
"discount_rate_annual": 0.08
}
Result
| Result | Value |
|---|---|
effective_rent_psf | 38 |
net_effective_rent_psf | 32 |
discounted_net_effective_rent_psf | 28.4772 |
total_rent_due | 3,799,999.62 |
total_landlord_costs | 600,000 |
pv_rent | 2,568,980.49 |
Audit trail
Every intermediate value, in order, with the formula that produced it. Formula calc.net_effective_rent@1.
| Step | Value | Formula |
|---|---|---|
| Term | 10 years | 120 months ÷ 12 |
| Total rent due | $3,799,999.62 | Σ rent due |
| TI allowance | $500,000.00 | $50/SF × 10000 SF |
| Total landlord costs | $600,000.00 | $500,000.00 TI + $100,000.00 LC + $0.00 other |
| Effective rent | 38 USD/sf/yr | total rent due ÷ area ÷ years |
| Net effective rent (straight-line) | 32 USD/sf/yr | (total rent due − landlord costs) ÷ area ÷ years |
| PV of rent | $2,568,980.49 | Σ rent_due_t ÷ (1 + 0.006667)^t, t = 0..119 |
| Discounted net effective rent | 28.4772 USD/sf/yr | ((PV rent − costs) ÷ Σ(1+r)^−t) × 12 ÷ area |
Check it in Excel
The office-lease-proposals.xlsx workbook recomputes this calculator with live Excel formulas beside FactLot's numbers and a difference column. Its inputs are synthetic; the reconciliation guide explains each sheet.
Use it from an agent or your code
- MCP: tool
calc_net_effective_rentonhttps://api.factlot.com/mcp(connect a client). - Python:
factlot.run_tool("calc_net_effective_rent", input)runs the same calculation offline (Python SDK). - Input schema: every field is described in tools.json.
curl -s https://api.factlot.com/v1/calc/net_effective_rent \
-H 'content-type: application/json' \
-d '{"schedule":{"commencement_date":"2026-01-01","term_months":120,"area_sf":10000,"starting_rent_psf_annual":40,"abated_months":[1,2,3,4,5,6]},"ti_allowance_psf":50,"leasing_commissions":100000,"discount_rate_annual":0.08}'