Repository navigation
UK: model landlord property income on the taxable (net of expenses) concept, not rent received #1106
Description
The question
HMRC has confirmed to an external user of its statistics that the Property Rental Income Statistics report property income as declared, before allowable expenses (repairs, insurance, legal and letting fees and so on). Net of those expenses, the totals line up with HMRC's other property-income figures and with the SPI public-use tape. The published PRIS amounts are therefore a gross concept, while income tax is charged on landlords' profit after allowable expenses.
This raises two questions:
- What property-income concept does Microcosm UK hold, and what does it calibrate against?
- How should property income be modelled, so that property-tax and income-tax analyses use the taxable concept at the right level?
Where Microcosm UK stands today (main)
- The spine's
property_incomeis FRS rent received, not landlord profit.frs_spine.py:585-599builds it from the household head's sub-let rent (subrent, tenure types 5–6), pluscvpay(lodgers) androyyr1(royalties), annualised. Landlords' income from letting other properties isn't in it as a profit concept. - No property-income target is bound. All 26 HMRC SPI property-income rows (13 amounts, 13 counts, by total-income band) are excluded.
docs/uk-income-anchors-280.md("Not done here") explains why: the SPI concept is landlords' net income after expenses, and the spine doesn't hold that.hmrc_income_replay_report.jsonfences the rows (full_frs_tei_band_unavailable, blocked onhmrc_spi_assessable_income). - There is no PRIS target anywhere.
- WAS round 8's
DVNetRentAmtAnnualR8(net rent) is read only as a predictor inwas_wealth, never as a target.
So the release neither overstates property income through a gross target nor corrects the FRS's known under-reporting of it. It is close to raw FRS, which is likely too low for landlords.
Related, outside this repo: the Enhanced FRS pipeline (policyengine-uk-data) calibrates property income to the PRIS amount (about £55.5bn for 2023-24). Given HMRC's clarification, that is a gross target, and it overstates taxable property income in analyses built on the Enhanced FRS. That should get its own issue in policyengine-uk-data; this one covers Microcosm UK.
What we should do
The target concept is taxable property profit after allowable expenses, the SPI concept. PRIS should be used for counts of landlords, not for amounts.
1. Put a landlord-profit variable on the spine
- Keep sub-lets, lodgers and royalties as they are, under a name that says what they are, and add landlord net property profit as its own person-level input. Then the engine's
property_incomecan be the taxable concept without mixing in other things. - Check what the engine treats as taxable property income before choosing names:
- the £1,000 property allowance;
- Rent-a-Room;
- the s.24 finance-cost restriction. Residential finance costs aren't deducted from profit and get a 20% tax reduction instead, so "profit after expenses" in the SPI may or may not be before finance costs. Pin down which before binding anything.
2. Impute landlord profit from the SPI
- Draw it through the existing SPI channel. Use a QRF on the SPI property-profit field, conditioned on:
- age;
- region;
- total income and the other income components;
- tenure;
- WAS other-property wealth (the buy-to-let value that UK spine follow-ups: SPI donors funded, WAS coherence, residential split, Child Benefit, release-cut blockers (#1063) #1089 now places).
- Keep it coherent with wealth. A household with landlord profit should hold other residential property, and the reverse should mostly hold too. The WAS coherence gate added in UK spine follow-ups: SPI donors funded, WAS coherence, residential split, Child Benefit, release-cut blockers (#1063) #1089 is the natural place for that check.
- Use identity-keyed draws, as the newer stages do, so later stages don't reshuffle it.
3. Bind the right targets
- Amounts: un-exclude the 26 SPI property-income rows once the spine holds the matching concept. They are net of expenses, which is the taxable concept.
- Counts: the PRIS landlord count is fine to bind (or keep as a diagnostic beside the SPI counts), because expenses change the amount per landlord, not the number of landlords.
- PRIS amounts: only as a diagnostic, reported against the modelled gross equivalent (profit plus imputed expenses) if we model expenses. Never as a bound amount.
4. Acceptance checks (receipts)
- The aggregate net property profit against the SPI total, and against HMRC's net figures.
- The landlord count against PRIS.
- The distribution across the SPI income bands, inside the usual fit.
- Income tax on property income against HMRC's estimate, if one is available.
- A short note quantifying the gross-to-net gap (PRIS against SPI), so the size of the concept difference is on record.
5. Downstream
- Flag in the release notes that property-tax analyses (LVT, high-value property charges, property CGT) should read the new landlord-profit variable once it lands.
- Once a fix is decided, open the matching issue in policyengine-uk-data.
Suggested order
- Confirm the engine's taxable property-income definition (allowance, Rent-a-Room, finance costs).
- Pin down the SPI field and its concept (before or after finance costs).
- Add the spine variable and the SPI-channel imputation behind a stage, with the coherence check.
- Un-exclude the SPI amount rows, add the PRIS count, and run a licensed arm with receipts.
This can go on the #1095 tracker if that's simpler.
Activity
juaristi22 commentedon Oct 5, 2026
Thanks for opening this. Below: corrections to how main stands, answers to the two open questions, what the plan misses, and a proposal to model landlords' expenses in full. Build figures come from the certified #1089 build (64c460b, candidate
aa31bdf6…, before #1100) and the 30 September build from main (c5a1cba), at calibrated weights.Corrections to "where Microcosm UK stands today"
property_income_undercount_adjustment_missing(2026-09-05,uk/target_reference_signed_exclusions.json). The 13 count rows are active references: 11 reach the national registry (the two bands from £500,000 don't) and fit within 0.3% in both builds. The fence inhmrc_income_replay_report.jsoncomes from thehmrc_spi_income_spinestage's own replay of the 208 SPI facts; the calibration binds from the Ledger-compiled registry (Complete #622: compile the UK target surface from Ledger facts at the 2024-25 line #735), where the count rows are active.INCPROP, net income from property. In the UK spine follow-ups: SPI donors funded, WAS coherence, residential split, Child Benefit, release-cut blockers (#1063) #1089 build, SPI-channel records hold £17.8bn of the £30.7bn: £15.5bn on the synthetic channel and £2.3bn on the band donors. FRS records hold £12.8bn. So step 2's imputation from the SPI is largely in place. Because no amount is bound, the total floats: the 30 September build held £42.5bn. In the taxpayer bands the UK spine follow-ups: SPI donors funded, WAS coherence, residential split, Child Benefit, release-cut blockers (#1063) #1089 build holds about £29.5bn, against the SPI's £29.4bn for 2023-24. Uprated to 2025 with the registry's per-capita GDP index, the SPI figure is about £31.8bn. (These bands use a sum of income components, not the engine's total income.)royyr1is rent from other property, not royalties. The FRS 2024-25 variable listing labels ROYYR1 "Rent before tax from other property" (question PropRent); royalties are ROYYR2. Landlords' letting income is therefore on the FRS rows, but on a different concept. PropRent asks for rent received "AFTER paying for any of the things on this card". The card lists mortgage payments and interest on a loan to buy the property, plus a 10% wear-and-tear allowance abolished in 2016. FRS amounts therefore sit below taxable profit for landlords with mortgages.cvpayis rent a lodger pays, recorded on the lodger's own record. Max's draft UK FRS spine: stop counting lodgers' rent and property losses as property income; sub-letting rent for every tenure #1081 removes it, counts losses flagged byRENTPROFas zero and takessubrenton every tenure._PROPERTY_INCOME_SCALE = 1.9intargets/sources/hmrc_spi.py(Property income may be underestimated (SPI ~£26bn vs HMRC ~£48bn) policyengine-uk-data#230). The factor is the rental statistics' £46.68bn over the SPI's £24.5bn for 2020-21. The Enhanced FRS file our national builds evaluate against carries £54.4bn.Answers to the open questions
INCPROP.taxable_property_income(ITTOIA s.268) isproperty_incomelessproperty_allowance_deduction. That deduction is the lesser ofproperty_incomeand £1,000, for every landlord.sublet_incomeexists as an input, but nothing reads it.other_tax_credits, a lump sum whose docstring includes "landlord tax relief"; microcosm doesn't fill it.property_income_taxapplies the property rates of 22%, 42% and 47% outside Scotland.What the plan misses
Finance costs are already on the SPI tape.
LLIR_RESTRICT_AMT_TOTholds the residential finance costs that get relief: 1.11m landlords and £5.77bn in 2022-23. On those recordsTAX_CREDequals 20% of it (10th to 90th percentile ratio 0.199 to 0.205). Microcosm reads neither column. Without the reduction, microcosm overstates landlords' income tax by between £1.2bn (20% of the tape's 2022-23 amount) and £2.6bn. The £2.6bn is an upper bound: 20% of the £12.82bn declared for 2024-25, which includes partnerships and is before the caps. From April 2027 the reduction is given at the property basic rate of 22% (Budget 2025).The engine gives the £1,000 allowance on top of expenses. HMRC's SA105 notes say that if you claim the property income allowance, "you cannot deduct any allowable expenses or claim any other allowances." Applied to after-expenses profit, the engine takes £2.76bn off the taxable base in the UK spine follow-ups: SPI donors funded, WAS coherence, residential split, Child Benefit, release-cut blockers (#1063) #1089 build, across 2.87m landlords. The 0.24m whose profit is £1,000 or less pay nothing on it.
The rental statistics publish expenses as well as income. The 2026 edition (2024-25) reports 2.88m landlords and £58.99bn of income: £49.81bn for individuals and £9.18bn for partnerships. Expenses total £34.75bn in seven categories:
Income less every expense except residential finance costs is £37.06bn (£58.99bn less £21.93bn), which is the taxable-profit concept. Income less all expenses is £24.24bn, below it.
The rental statistics' landlord count is not our count. It counts everyone who declared rental income in Self Assessment, including landlords with a loss and partnerships, and leaves out landlords outside Self Assessment. The SPI counts are taxpayers with positive net property income. Binding the rental statistics count on
property_income > 0mixes two definitions of a landlord.The wealth check needs a buy-to-let column first. Since UK: port the unblocked uk-data fixes tracked in #1095 #1100's
rental_incomepredictor, 88.3% of households with rental income hold other residential or non-residential property, up from 11.6%. Buy-to-let still has no column of its own:other_residential_property_value(WASDVHseVal) excludes it;property_wealth, which is an open call on UK spine follow-ups: SPI donors funded, WAS coherence, residential split, Child Benefit, release-cut blockers (#1063) #1089.A coherence rule on those columns would flag landlords who hold only buy-to-let. WAS round 8 has the needed columns:
DVBltValR8,DVBLtDebtR8,OthMortR8, and per-person gross and net rent (DVGrsRentAmtAnnualR8,DVNetRentAmtAnnualR8).Finance costs need their own uprating. The tape and the rental statistics agree on the number of landlords with finance costs (1.11m and 1.15m), but the amount more than doubles, from £5.77bn in 2022-23 to £12.82bn in 2024-25. Finance costs should move with the engine's OBR mortgage-interest index, not per-capita GDP.
Proposal: model landlords' deductions in full
The rules the engine has to apply:
The engine can only make these choices if it sees rental income and expenses separately. Step 1 therefore becomes four person-level inputs:
sublet_income).The engine (policyengine-uk) then computes three things:
With rental income modelled, landlords with a loss appear as records rather than zeros.
In microcosm:
Keep each landlord's SPI profit fixed. Draw expenses from the rental statistics' expense ratios by size of rental income, and set rental income to profit plus expenses. The profit the calibration binds to the SPI then doesn't move.
Draw finance costs with the other SPI components from
LLIR_RESTRICT_AMT_TOT, and impute them on FRS rows.Put FRS rows on the same concept first. After UK FRS spine: stop counting lodgers' rent and property losses as property income; sub-letting rent for every tenure #1081's fixes, add back the mortgage interest that PropRent nets off.
Bind the four pieces:
The rental statistics' amounts thus become bound targets on the rental-income variable, not diagnostics. Binding them needs a Chronicle package for the rental statistics, which doesn't exist yet.
Diagnostics: WAS gross against net rent, once WAS's "net" is pinned down. Also the tape's non-taxpayers (0.54m people with £3.67bn in 2022-23), whom no SPI table covers.
Suggested order: finance costs first (the largest gap, with the data already in hand), then expenses with the allowance choice, then Rent-a-Room. Each step needs a matching change in policyengine-uk.
Sources:
🤖 Generated with Claude Code
juaristi22 commentedon Oct 5, 2026
María's decision (2026-10-05): bind both HMRC property-income amounts, each on its own concept.
property_income, now.property_incomeholds.property_income_undercount_adjustment_missinginuk/target_reference_signed_exclusions.jsonand regenerate the target references. The 13 amount rows then bind unscaled, beside the count rows that are already active.property_income.Two corrections to my comment above:
hmrc-property-rental-income-2026(UK income facts for the 2025 calibration: SPI 2023-24 Tables 3.3/3.4/3.5/3.8/3.11 and the 3.7 remainder, HMRC liabilities projections (Tables 2.1 to 2.6), ESA caseload by payment type, property rental income statistics 2026, DWP Spring 2026 expenditure tables chronicle#280, merged in Add the UK income facts issue 280 asks for, and one name per UK geography chronicle#282). They are in the feed main pins (825406f): 434 facts covering tax years 2020-21 to 2024-25. Binding them waits only on the policyengine-uk variable.DVGrsRentAmtAnnualR8withDVNetRentAmtAnnualR8, and the rental statistics fix the totals.🤖 Generated with Claude Code
Bind the SPI net property-income amounts unscaled (#1106)
Leave property_wealth to the engine at both engine boundaries (#1106)
Add the #1106 receipts for the SPI amounts and the property-wealth drop
Lock policyengine-uk 2.123.0 for the landlord inputs (#1106)
Draw landlords' restricted finance costs on the SPI channel (#1106)
Add landlords' receipts and finance costs as a spine stage (#1106)
Bind HMRC's property rental income statistics on the landlord inputs (#…
Fill the receipts bands by PRIS's shares of the spine's landlords (#1106
Keep PRIS a diagnostic: drop the three PRIS calibration targets (#1106)
Add the receipts for the property-components arms (#1106)
Add the final head's arm to the #1106 receipts
Bind the SPI net property-income amounts unscaled (#1106)
38 remaining items
Add landlords' receipts and finance costs as a spine stage (#1106)
Bind HMRC's property rental income statistics on the landlord inputs (#…
Fill the receipts bands by PRIS's shares of the spine's landlords (#1106
Keep PRIS a diagnostic: drop the three PRIS calibration targets (#1106)
Add the receipts for the property-components arms (#1106)
Add the final head's arm to the #1106 receipts
Address the adversarial review on #1145 (#1106)
Retire the stale West Midlands deferral and sign the landlord registe…
Uprate the SPI property amounts by the band index (#1106)
Add the review-fixed head's arm to the #1106 receipts
Address the re-review's minor items on #1145 (#1106)
Rebase onto main: re-derive the surfaces against feed 1ee7dfe (#1106)
Record the post-rebase arms c8 and c9 in the receipts note (#1106)
Record the three items of Vahid's #1145 review in the #1106 receipts …