- Data
- REST API
- Market data
- Market listings
Market listings
GET /v1/market/listingsMonthly 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 MCP
Supply-side listing statisticslisting_market_seriesAuthenticate with an API key from the API & MCP Hub. The same call is available as an MCP tool at the same price.
Reference
What GET /v1/market/listings returns
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.
Request
Calling GET /v1/market/listings
curl "https://api.marketcode.ai/v1/market/listings?area_code=SE22&area_type=district&limit=3" \
-H "Authorization: Bearer $MARKETCODE_API_KEY"Send your API key as a Bearer token. Every response carries credits_charged and credits_remaining.
Inputs
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| area_code | Query | string | No | Postcode district, local authority NAME with area_type=lad, or NATIONALDefault: NATIONAL |
| area_type | Query | string | No | district | lad | nationalDefault: district |
| channel | Query | string | No | residential_sale | residential_rentDefault: residential_sale |
| bedroom_band | Query | string | No | all | 1bed | 2bed | 3bed | 4bed | 5plus | unknownDefault: all |
| from | Query | string | No | YYYY or YYYY-MM |
| to | Query | string | No | |
| limit | Query | integer | No | Default: 60 |
Response
What GET /v1/market/listings returns for a real request
curl "https://api.marketcode.ai/v1/market/listings?area_code=SE22&area_type=district&limit=3" \
-H "Authorization: Bearer $MARKETCODE_API_KEY"{
"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.
Response
Response fields
| 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.
Price and licence
What it costs, and where the data comes from
Market listings 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
Endpoints used with Market listings
- 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 Market listings
How much does `listing_market_series` cost?
+
Market listings 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.
How do I authenticate?
+
Send your API key as a Bearer token in the Authorization header. Keys are created in the API & MCP Hub, shown once and revocable. Every response carries the credits charged and your remaining balance.
Is there an MCP version?
+
Yes. The listing_market_series tool on the MarketCode MCP server is the same call at the same price, signed in with OAuth rather than a key, so Claude, ChatGPT, Codex and Cursor can run it in a conversation.
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 Market listings on a real address.
30-minute call. We'll provision a key and walk through the endpoint on your use case.