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 in unit); totals are divided by it.
  • schedule.escalation: none, percent (compounding) or fixed_psf, with every_months between 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 values
ResultValue
effective_rent_psf38
net_effective_rent_psf32
discounted_net_effective_rent_psf28.4772
total_rent_due3,799,999.62
total_landlord_costs600,000
pv_rent2,568,980.49

Audit trail

Every intermediate value, in order, with the formula that produced it. Formula calc.net_effective_rent@1.

Audit trail
StepValueFormula
Term10 years120 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 rent38 USD/sf/yrtotal 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 rent28.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_rent on https://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}'