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_rentis supplied for each lease.
Inputs that matter
-
as_of: the date remaining term is measured from, YYYY-MM-DD. -
weight_by:area(default) orrent. -
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_ofis measured fromas_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 | Value |
|---|---|
walt_years | 2.7488 |
total_weight | 40,000 |
expired_count | 0 |
Audit trail
Every intermediate value, in order, with the formula that produced it. Formula calc.walt@1.
| Step | Value | Formula |
|---|---|---|
| Total weight | 40,000 | Σ area_sf |
| WALT | 2.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_waltonhttps://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}]}'