Real Estate & Property
Property Investment Scoring API
Gross yield is the number everyone quotes and the one that tells you least. The costs that decide whether a property works sit in the lines nobody models.
- Buy-to-let investors
- Property funds
- Lenders
- Investment platforms
- Portfolio managers
What your customers would see
example interfaceMockupIllustrative mockup of the interface we would build. Figures shown are examples, not results from a live deployment.
The problem this solves
A buy-to-let underwriting spreadsheet usually has rent, mortgage and a maintenance allowance expressed as a percentage someone picked. It omits void periods, letting fees, the service charge escalation on a leasehold flat, the cost of the energy-efficiency work that will be required before the property can legally be let in a few years, and the tax treatment that differs by ownership structure.
Those omissions are not rounding errors. On a modest-yield property, a four-week annual void and a service charge rising faster than rent can move net yield by a third. Investors discover this in year two, and lenders discover it when the stress test they ran turns out to have been optimistic about the expense line.
The appreciation side needs even more care. Local price growth over the next decade is genuinely unforecastable with useful precision, and any model presenting a single capital-growth figure is manufacturing false confidence. The defensible approach is scenario analysis — what the investment returns under a range of growth and rate paths — presented as a range of outcomes rather than a prediction.
Who buys this
Buy-to-let investors, Property funds, Lenders, Investment platforms, Portfolio managers
What the API returns
What comes back
- Net yield after modelled expenses, alongside the gross figure for comparison
- Itemised expense estimates: management, maintenance, voids, insurance, service charge, compliance works
- Vacancy risk scored from local letting-market depth and tenant-demand indicators
- Debt-service coverage under a range of interest-rate paths
- Appreciation scenarios with explicit assumptions, presented as scenarios rather than a forecast
- Cash-flow projection over a configurable holding period
- Composite investment score with every component weight disclosed
- Portfolio aggregation with concentration analysis by area, tenure and property type
Endpoints
| Method | Path | Returns |
|---|---|---|
| POST | /v1/score | Score one property as an investment |
| POST | /v1/score/portfolio | Score and aggregate a portfolio |
| POST | /v1/scenarios | Run growth, rate and void scenarios on a property |
| GET | /v1/areas/{id}/fundamentals | Local yield, vacancy and demand fundamentals |
| GET | /v1/expenses/benchmarks | Expense benchmarks by property type and tenure |
| POST | /v1/cashflow | Cash-flow projection over a holding period |
Request and response
illustrativeRequest
{
"property": {
"address": { "postcode": "M4 5JN", "country": "GB" },
"purchase_price": 215000,
"property_type": "flat",
"tenure": "leasehold",
"lease_years_remaining": 86,
"service_charge_pa": 1850,
"bedrooms": 2,
"epc_rating": "D"
},
"finance": { "ltv": 0.70, "rate_pct": 5.25, "term_years": 25, "interest_only": true },
"holding_period_years": 10,
"scenarios": ["base", "rates_up_200bp", "growth_zero", "void_8_weeks"]
}Response
{
"investment_score": 58,
"band": "moderate",
"rent": { "expected_pcm": 1180, "source": "rental_model", "range_80": [1120, 1245] },
"yield": {
"gross_pct": 6.59,
"net_pct": 3.41,
"net_after_finance_pct": 1.12
},
"expenses_pa": [
{ "item": "management", "amount": 1416 },
{ "item": "maintenance", "amount": 1290 },
{ "item": "voids", "amount": 1090, "basis": "3.8 weeks modelled" },
{ "item": "service_charge", "amount": 1850, "escalation_pct": 4.2 },
{ "item": "insurance", "amount": 240 },
{ "item": "epc_compliance_works", "amount": 5400, "one_off": true,
"note": "estimate only; depends on survey" }
],
"risk": {
"vacancy_risk": 31,
"dscr_base": 1.42,
"dscr_rates_up_200bp": 1.03,
"lease_risk": "monitor_below_80_years"
},
"scenarios": [
{ "scenario": "base", "irr_10y_pct": 7.4 },
{ "scenario": "rates_up_200bp", "irr_10y_pct": 4.1 },
{ "scenario": "growth_zero", "irr_10y_pct": 1.8 },
{ "scenario": "void_8_weeks", "irr_10y_pct": 5.6 }
],
"disclaimer": "Scenario outputs are modelled ranges, not forecasts, and exclude tax."
}Where the data comes from
| Transaction and valuation data | Purchase price context from registries and the valuation model, which anchors both yield and the capital side |
| Rental market data | Expected achieved rent and void expectations from the rental model, rather than an asking rent the investor found on a portal |
| Expense benchmarks | Management fees, maintenance rates, insurance and service charges by property type and tenure, assembled from managed-portfolio data and published schedules |
| Energy-performance records | Efficiency ratings, which in several jurisdictions now imply a dated and costly compliance obligation for lettings |
| Lease and tenure data | Lease length, ground rent and service charge terms, which can dominate the economics of a leasehold flat |
| Local demand indicators | Population, employment and household formation data from official statistics, which underpin the vacancy risk component |
The intelligence layer
The difference between a demo and a service is mostly in this section. These are the parts that keep the answer trustworthy once real traffic is hitting it.
- Yield computed from modelled achieved rent and itemised modelled expenses, never from an asking rent against a gross allowance
- Expense estimation per line item against benchmarks conditioned on property type, tenure and area, with escalation modelled separately from level
- Vacancy risk from local letting-market depth, time-to-let distributions and tenant demand indicators rather than a single area average
- Monte Carlo simulation over rent, void, expense and rate distributions, so the output is a distribution of outcomes
- Scenario analysis with every assumption exposed in the response, because a scenario whose assumptions are hidden is indistinguishable from a forecast
- Explicit refusal to present a point capital-growth prediction; growth enters only as a scenario input the user or your product chooses
- Backtesting of the expense and void components against realised outcomes from managed portfolios where that data is available
- Monitoring on component drift, particularly expense benchmarks, which move with inflation faster than most model inputs
What it changes for the business
Underwriting that survives year two
Modelled voids, service charges and compliance works remove the surprises that break a spreadsheet case.
Comparable assessment
Properties in different areas and tenures become comparable on a consistent net basis.
Lender stress testing
Coverage under a range of rate paths is produced consistently across a book rather than per deal.
Faster screening
Investors can rank a long list on net fundamentals before spending time on viewings.
How it fits into your product
How it embeds
- Single synchronous call for property-level scoring inside a listing or deal-screening flow
- Portfolio endpoints for scheduled re-scoring and concentration reporting
- Scenario endpoints exposed directly to end users so they can set their own assumptions
- Component-level responses so your product can show the expense breakdown rather than only the score
- PDF deal-summary generation where investors expect a document
- Deployment inside your environment where borrower or client portfolio data cannot leave
Included in every build
- Authentication, scoped API keys and per-customer rate limiting
- Input validation with predictable, documented error responses
- Versioned endpoints so your integration never breaks without notice
- Request and response logging for audit and dispute resolution
- Latency, error-rate and usage monitoring with alerting
- OpenAPI specification, sandbox environment and client examples
- Backups, failover design and a documented recovery procedure
- An agreed support arrangement once the service is live
How we would build it
about 20 weeksDiscovery and feasibility
Weeks 1–3
This one depends heavily on data access, so we start by proving the sources exist, can be licensed for your use, and actually carry the signal the model needs. If they do not, you find out here.
Architecture and baseline model
Weeks 4–6
A written architecture and a baseline model measured against a holdout period, so you know what accuracy you are buying before the full build starts.
Production build
Weeks 7–16
Data pipelines, model training and serving, historical archive, validation harness, API, security, monitoring and documentation.
Validation and integration
Weeks 17–20
Backtesting against held-out history, accuracy reporting your team can audit, integration support and an agreed retraining cadence.
Commercial models
There is no fixed price list, because the cost is driven by data complexity, integration count, model requirements, request volume and the support level you need. Scope is agreed in writing before development starts.
Fixed-scope prototype
A defined slice of the service, built and priced as one piece of work. The usual first step when the business case needs proving internally.
Fixed-price build
An agreed scope against a written architecture, delivered for an agreed price. Best when the requirements are already clear.
Build then retainer
We build the service, then operate and improve it under a monthly agreement covering monitoring, updates and model maintenance.
White-label product
The service runs under your brand, your domain and your pricing, with MLPivot invisible to your customers.
Questions buyers ask
Do you forecast house price growth?
No. Ten-year local price growth is not forecastable to a precision that would make a point estimate responsible, and any model that offers one is selling confidence rather than information. Capital growth enters as a scenario assumption, chosen by you or your user, and the response reports the assumption alongside the result so nobody mistakes it for a prediction.
Is this investment advice?
No. The API returns modelled measurements and scenario outputs. It does not recommend buying, holding or selling. Whether your presentation of it constitutes advice or a financial promotion in your jurisdiction is a question for your compliance team, and we build to whatever constraints they set.
How reliable are the expense estimates?
Management, insurance and maintenance benchmark reasonably well. Service charges are property-specific and we use the actual figure where you supply it. Energy-compliance works are the weakest line by some margin — the cost depends on a survey of the actual building, and our estimate is a planning figure that can be wrong by a wide multiple on an older property.
Does it handle tax?
Not by default, and deliberately. Tax treatment depends on ownership structure, residence, other income and rules that change — modelling it generically would produce confident wrong answers. The outputs are pre-tax, labelled as such, and we can integrate your own tax logic if you have it and want to own it.
Can it score a portfolio rather than one property?
Yes, with aggregation and concentration analysis by area, tenure and property type. Concentration is usually the finding that matters: a portfolio of twelve flats in one development has a correlation profile nothing in the per-property scores reveals.
Related blueprints
Rental Price Intelligence API
Expected rent for a property, neighbourhood comparisons and rental trend series, as an API letting agents and investors can call per address.
Automated Property Valuation API
Estimated property values with confidence ranges and the comparable sales behind them, as a valuation endpoint your portal or lending flow can call.
Construction Cost Estimation API
Material, labour and whole-project cost estimates with regional adjustment and a stated uncertainty range, for early-stage feasibility and pricing.
Want this built for your platform?
Tell us what your product does today and what you want another system to be able to ask it. We will come back with an approach, a scope and a price.