- Data
- MCP server
- Market Intelligence
- Supply-side listing statistics
Supply-side listing statistics
listing_market_seriesMonthly supply-side statistics from portal listings for one area, channel and bedroom band: listings added and reduced, reduction share (the market-temperature signal), asking price or rent median and quartiles, £/m² where a floor area is stated, new-build share, agent concentration (HHI, top-3 share), and — on rent rows — gross yield on two bases (cell rent over cell price; per-listing rent over the unit's AVM value), and on sale rows the asking-to-sold ratio and days to completion on listings the registry matched to a sale.
Same call over REST
Market listings/v1/market/listingsNot connected yet? Connect your assistant. Sign in with your MarketCode account; no API key needed.
Reference
What listing_market_series answers
THREE THINGS TO SAY WHEN YOU QUOTE THIS. (1) listings_added_n is the NEVER-REDUCED cohort — listings later reduced carry no listing date — so it undercounts new listings by reduction_share. (2) sold_matched_n is a match-rate-limited subset; never divide it by listings_added_n and call it a sell-through rate. (3) There is no days-on-market-to-sale here: the portal records no exit dates. Use listing_stock_series for what is on the market NOW.
Inputs
Before you call it
- area_code
- The area code is a postcode district ("W14") with
area_typeset to district, or a local authority name ("Camden", not a GSS code) witharea_typeset to lad. No lookup is needed. An unknown area returns an error naming the nearest matches; read them back rather than guessing.
Example
An example call to listing_market_series
Use the MarketCode tool listing_market_series with {"area_code":"SE22","area_type":"district","limit":3} and show me the result.{
"country": "UK",
"query": {
"area_code": "SE22",
"area_type": "district",
"channel": "residential_sale",
"bedroom_band": "all",
"limit": 3
},
"data": {
"area": {
"scope": "district",
"area_key": "1520d540-4a9e-4fa2-abda-607791b5b7c3",
"area_code": "se22",
"area_name": "se22"
},
"channel": "residential_sale",
"bedroom_band": "all",
"basis": "Monthly statistics from portal listings by area and bedroom band. listings_added_n is the NEVER-REDUCED cohort dated by 'Added on' and undercounts new listings…",
"series": [
{
"period": "2026M06",
"period_start": "2026-06-01",
"listings_added_n": 2,
"listings_reduced_n": 36,
"reduction_share": 0.9473684210526316,
"asking_price_median": 500000,
"asking_price_p25": 400000,
"asking_price_p75": 800000,
"asking_price_psm_median": 7859.600791060646,
"asking_rent_median": null,
"asking_rent_p25": null,
"asking_rent_p75": null,
"asking_rent_psm_median": null,
"new_home_share": 0,
"agents_n": 14,
"agent_hhi": 0.19252077562326864,
"agent_top3_share": 0.5789473684210527,
"gross_yield_asking": null,
"gross_yield_avm_median": null,
"gross_yield_avm_n": null,
"asking_to_sold_median": null,
"days_to_completion_median": null,
"sold_matched_n": null
},
{
"period": "2026M07",
"period_start": "2026-07-01",
"listings_added_n": 10,
"listings_reduced_n": 18,
"reduction_share": 0.6428571428571429,
"asking_price_median": 587500,
"asking_price_p25": 425000,
"asking_price_p75": 706250,
"asking_price_psm_median": 7873.875794577874,
"asking_rent_median": null,
"asking_rent_p25": null,
"asking_rent_p75": null,
"asking_rent_psm_median": null,
"new_home_share": 0,
"agents_n": 12,
"agent_hhi": 0.125,
"agent_top3_share": 0.49999999999999994,
"gross_yield_asking": null,
"gross_yield_avm_median": null,
"gross_yield_avm_n": null,
"asking_to_sold_median": null,
"days_to_completion_median": null,
"sold_matched_n": null
},
{
"period": "2026M08",
"period_start": "2026-08-01",
"listings_added_n": 3,
"listings_reduced_n": 7,
"reduction_share": 0.7,
"asking_price_median": 575000,
"asking_price_p25": 443750,
"asking_price_p75": 837500,
"asking_price_psm_median": 7586.199456835013,
"asking_rent_median": null,
"asking_rent_p25": null,
"asking_rent_p75": null,
"asking_rent_psm_median": null,
"new_home_share": 0,
"agents_n": 6,
"agent_hhi": 0.20000000000000004,
"agent_top3_share": 0.7,
"gross_yield_asking": null,
"gross_yield_avm_median": null,
"gross_yield_avm_n": null,
"asking_to_sold_median": null,
"days_to_completion_median": null,
"sold_matched_n": null
}
],
"provenance": {
"source_table": "marts_facts.listing_market",
"n_periods": 3,
"first_period": "2026M06",
"last_period": "2026M08",
"built_at": "2026-09-05T11:03:04.968604+00:00",
"cell_floor": "5 dated listings per month; agent concentration on the 'all' band only"
},
"notes": [
"sold_matched_n is how many listings the registry matched to a sale within 18 months. The listing UPRN is building-level on most rows, so the match rate underst…"
],
"source": "robosapien",
"cached": true,
"time_ms": 0.5
},
"credits_charged": 0
}A real response, captured from production and trimmed: arrays to three items, long strings shortened, volatile keys dropped.
Inputs
Arguments listing_market_series takes
| Name | Type | Required | Description |
|---|---|---|---|
| area_code | string | No | Default: NATIONAL |
| area_type | string | No | One of: district, lad, nationalDefault: district |
| channel | string | No | One of: residential_sale, residential_rentDefault: residential_sale |
| bedroom_band | string | No | One of: all, 1bed, 2bed, 3bed, 4bed, 5plus, unknownDefault: all |
| start | string | No | |
| end | string | No | |
| limit | integer | No | Default: 60 |
Response
What comes back
| Field | Type | Example |
|---|---|---|
| country | string | UK |
| query | object | |
| query.area_code | string | SE22 |
| query.area_type | string | district |
| query.channel | string | residential_sale |
| query.bedroom_band | string | all |
| query.limit | integer | 3 |
| data | object | |
| data.area | object | |
| data.area.scope | string | district |
| data.area.area_key | string | 1520d540-4a9e-4fa2-abda-607791b5b7c3 |
| data.area.area_code | string | se22 |
| data.area.area_name | string | se22 |
| data.channel | string | residential_sale |
| data.bedroom_band | string | all |
| data.basis | string | Monthly statistics from portal listings by area |
| data.series | array | |
| data.series[].period | string | 2026M06 |
| data.series[].period_start | string | 2026-06-01 |
| data.series[].listings_added_n | integer | 2 |
| data.series[].listings_reduced_n | integer | 36 |
| data.series[].reduction_share | number | 0.9473684210526315 |
| data.series[].asking_price_median | integer | 500000 |
| data.series[].asking_price_p25 | integer | 400000 |
| data.series[].asking_price_p75 | integer | 800000 |
| data.series[].asking_price_psm_median | number | 7859.600791060646 |
| data.series[].asking_rent_median | null | |
| data.series[].asking_rent_p25 | null | |
| data.series[].asking_rent_p75 | null | |
| data.series[].asking_rent_psm_median | null | |
| data.series[].new_home_share | integer | 0 |
| data.series[].agents_n | integer | 14 |
| data.series[].agent_hhi | number | 0.19252077562326866 |
| data.series[].agent_top3_share | number | 0.5789473684210527 |
| data.series[].gross_yield_asking | null | |
| data.series[].gross_yield_avm_median | null | |
| data.series[].gross_yield_avm_n | null | |
| data.series[].asking_to_sold_median | null | |
| data.series[].days_to_completion_median | null | |
| data.series[].sold_matched_n | null | |
| data.provenance | object | |
| data.provenance.source_table | string | marts_facts.listing_market |
| data.provenance.n_periods | integer | 3 |
| data.provenance.first_period | string | 2026M06 |
| data.provenance.last_period | string | 2026M08 |
| data.provenance.built_at | string | 2026-09-05T11:03:04.968604+00:00 |
| data.provenance.cell_floor | string | 5 dated listings per month; agent concentration |
| data.notes | array | |
| data.source | string | robosapien |
| data.cached | boolean | true |
| data.time_ms | number | 0.5 |
| credits_charged | integer | 0 |
Fields observed in the example response above; a field the example did not exercise is not listed.
Usage
How to run listing_market_series in your assistant
Ask your assistant in plain English, for example:
"Use the MarketCode tool listing_market_series for <address or area>.
Show the result and the credits charged."
The arguments the assistant will send, for the example on this page:
{"area_code":"SE22","area_type":"district","limit":3}The connect steps for Claude, ChatGPT, Codex, Cursor and Claude Code are on the MCP page.
Skills
Skills that use listing_market_series
Price and licence
What it costs, and where the data comes from
listing_market_series is free over MCP and over REST, and the two surfaces share one credit balance. Free calls need a signed-in account or an API key and appear in your usage, but they never touch your balance.
Credits are granted on sign-up and bought in packs; the pricing page lists every call.
Computed by MarketCode from
- Property portals
Sale and lettings listings
Collected from publicly marketed listings · Great Britain
How the model or index is built, and where it is weak, is on the methodology page.
Related
Tools used with listing_market_series
- Live listings stock, dailyFree
listing_stock_seriesLive listings on the market by day for one area, channel and bedroom band — the stock-on-market series, with the median age of the dated live stock, median asking price or rent, and the new-build count.Named in the description - Estate agent activity in an areaFree
agent_activityWhich estate agents actually transact in an area, ranked by listing count.Same category - What changed since your cursor1 credit
changes_sinceWhat changed since you last looked — the portal change feed. Pass the `next_cursor` from your previous call to get only what is new; on a first call give a scope (`postcode_districts` or `uprns`) or a `since` date, because an unbounded read of a 14.6-million-row feed is refused.Same category - Equity gain estimateFree
equity_estimateCurrent estimated value against the last recorded sale: gain in pounds and percent, and how long it has been held.Same category - Listing history for a property3 credits
listing_historyEvery marketing snapshot for a property: asking price over time, price reductions, days listed, status changes, agent, image count and whether it had a floor plan.Same category - Long-held, high-equity properties8 credits
long_held_high_equityLong-held properties in an area carrying a large paper gain — the classic off-market cohort, ordered by gain rather than by value.Same category
Glossary
Terms used here
- Price per square metre (£/m²): Sale or asking price divided by internal floor area; the one number that makes properties of different sizes comparable, and what the valuation back-series is scaled by.
- Asking price and asking-to-sold ratio: The price a property is marketed at, as against the price it sells for; asking leads sold by months and includes what never sells, and the ratio between them is a temperature gauge.
- Days on market: How long a listing has been marketed; MarketCode reports the age of live stock and the days to completion on matched sales, and is explicit that a true days-to-sale is not observable from portals.
- Listing stock (stock on market): The number of properties live on the market in an area on a given day, by channel and bedroom band; a series MarketCode observes forward from September 2026 because it cannot be reconstructed.
- Gross yield: Annual rent as a percentage of price, before costs; net yield deducts costs. MarketCode computes gross yield from listing rents and prices and reports net yield only where an auctioneer quoted one.
- Agent market share: Which estate and letting agents actually list in an area, ranked by listings, with concentration measured by the Herfindahl index and the top-three share.
FAQ
Questions about listing_market_series
How much does `listing_market_series` cost?
+
listing_market_series is free over MCP and over REST, and the two surfaces share one credit balance. Free calls need a signed-in account or an API key and appear in your usage, but they never touch your balance.
Which assistants can run `listing_market_series`?
+
Any MCP client: Claude (claude.ai, Claude Desktop, Claude Code), ChatGPT in developer mode, Codex and Cursor, each documented on the MCP page. You sign in with your MarketCode account over OAuth; there is no key to paste, and the connection is read-only.
Where does the data come from?
+
Computed by MarketCode from Property portals listings. The methodology page describes how the model or index is built.
Does `listing_market_series` change anything?
+
No. The tool is annotated read-only on the server, so it never writes to your data or ours and an assistant can call it without a confirmation step.
Try listing_market_series in your assistant.
30-minute call. We'll connect your assistant live on a real address.