Weighted average lease term (WALT) calculator

WALT calculator: weighted average lease term remaining in years, weighted by leased area or annual rent, from any as-of date, with expired leases flagged.

What it computes

Weighted average lease term (WALT) is the average time left on a group of leases, weighted by each lease's size or income. It measures rollover exposure for a building or portfolio and is used in valuation, credit underwriting and asset management reporting. The calculator returns WALT in years from an as_of date, weighted by leased area or by annual rent. It also returns the total weight and the number of leases already expired.

Method and conventions

For each lease, remaining term in years is max(0, days from as_of to expiration_date ÷ 365.25). The days are whole calendar days, the actual count between the two dates. WALT is Σ(weight × years remaining) ÷ Σ weight, reported to four decimals. The weight is area_sf when weight_by is area (the default) and annual_rent when it is rent. Every lease needs the field that matches the chosen weighting.

A lease that expires on or before as_of counts as zero years remaining but keeps its weight, so it lowers WALT. It is counted in expired_count, and the result carries a warning. To leave an expired lease out of the average, omit it from leases.

Practitioners differ in several ways:

  • Weighting. Area weighting treats every square foot equally. Rent weighting gives more influence to leases that pay more, so the two can differ a lot in a building with mixed rents. FactLot computes one at a time and the choice is made with weight_by.
  • Expiry or break date. Some reports measure to the first tenant termination option instead of contractual expiration; this is sometimes called the weighted average lease term to break. FactLot measures to the date given in expiration_date, so a break-date figure uses break dates as that input.
  • Year length. Remaining terms can be counted in months ÷ 12, days ÷ 365, or days ÷ 365.25. FactLot uses actual days ÷ 365.25.
  • Expired and vacant space. Some methods drop expired leases or include vacant space at zero. FactLot keeps expired leases at zero years with their weight. Vacant space enters only if it is listed as a lease.
  • Which rent. Rent weighting can use passing rent, contractual rent over the remaining term, or gross rent with recoveries. FactLot uses whatever annual_rent is supplied for each lease.

Inputs that matter

  • as_of: the date remaining term is measured from, YYYY-MM-DD.
  • weight_by: area (default) or rent.
  • leases: the leases in the building or portfolio, up to 10,000.
  • leases[].expiration_date: the date each lease ends, or the break date for a to-break figure.
  • leases[].area_sf: leased square feet; required for every lease when weighting by area.
  • leases[].annual_rent: current annual rent in dollars; required for every lease when weighting by rent.
  • leases[].id: an optional identifier to keep the result tied to a rent roll.

Limits

  • It does not read options, so renewals, early terminations and month-to-month holdovers are reflected only through the dates supplied.
  • A lease that starts after as_of is measured from as_of. The time before it commences is counted as remaining term.
  • Rent is not escalated or projected. Each lease's weight is the single figure given.
  • Weights must be positive. A lease in a free-rent period cannot be weighted at zero rent.
  • It returns one WALT for one date. It does not produce an expiration schedule by year or a WALT history over time.

Worked example

Inputs from FactLot's shared test case "area-weighted", which the TypeScript and Python libraries must both reproduce:

{
  "as_of": "2026-01-01",
  "leases": [
    {
      "expiration_date": "2031-01-01",
      "area_sf": 10000,
      "annual_rent": 500000
    },
    {
      "expiration_date": "2028-01-01",
      "area_sf": 30000,
      "annual_rent": 600000
    }
  ]
}

Result

Result values
ResultValue
walt_years2.7488
total_weight40,000
expired_count0

Audit trail

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

Audit trail
StepValueFormula
Total weight40,000Σ area_sf
WALT2.7488 yearsΣ(area_sf × years remaining) ÷ Σ area_sf; years remaining = actual days ÷ 365.25

Check it in Excel

The industrial-lease-and-walt.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_walt on https://api.factlot.com/mcp (connect a client).
  • Python: factlot.run_tool("calc_walt", 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/walt \
  -H 'content-type: application/json' \
  -d '{"as_of":"2026-01-01","leases":[{"expiration_date":"2031-01-01","area_sf":10000,"annual_rent":500000},{"expiration_date":"2028-01-01","area_sf":30000,"annual_rent":600000}]}'