Overview
This API reads publicly rendered OnTheMarket pages and returns them in a stable JSON envelope. Search cards keep OnTheMarket’s kebab-case keys (property-title, short-price, details-url). Detail payloads are the site’s native camelCase property object. We do not invent listings.
Resolve a place first/properties/auto-complete?query=oxford → location-id oxford.
Then search or open a listing
Pass that id into search-buy / search-rent, or pass a listing id into /properties/details.
Typical flow
1. Autocomplete → 2. Search a channel → 3. Details by listing id. Agent lookup is the same pattern with a branch slug.
GET /properties/auto-complete?query=oxford GET /properties/search-buy?locationId=oxford&page=1&limit=25 GET /properties/details?id=20138220 GET /agents/details?id=allen-and-harris-oxford-rose-hill
Authentication
On RapidAPI, send your RapidAPI application key. The origin key is injected by RapidAPI and is not required in client code.
X-RapidAPI-Key: YOUR_RAPIDAPI_KEY X-RapidAPI-Host: YOUR_RAPIDAPI_HOST
Direct calls to this origin use X-API-Key with the provider secret. /OTM and /otm/health are public.
Endpoints
Base URL https://api.ukrealestatedata.com. Same paths on RapidAPI once the Hub listing points at this origin.
| Method | Path | Purpose |
|---|---|---|
| GET | /properties/auto-complete | Place suggestions. Read data[].location-id. |
| GET | /properties/search-buy | Live for-sale listings. |
| GET | /properties/search-rent | Live to-rent listings. |
| GET | /properties/search-new-homes | New-build channel. |
| GET | /properties/details | Full listing. Query id from search. |
| GET | /map/search-buy · /map/search-rent · /map/search-new-homes | Pin-shaped cards for map views. |
| GET | /agents/auto-complete | Same location resolver as properties. |
| GET | /agents/search | Branches in a place. Read data.agents[].id. |
| GET | /agents/details | Branch page. Query id is the slug, e.g. acorn-london-bridge. |
curl -s "https://api.ukrealestatedata.com/properties/search-buy?locationId=oxford&limit=5&page=1" \ -H "X-API-Key: YOUR_ORIGIN_KEY"
Parameters
Search (buy, rent, new-homes, map)
| Name | In | Type | Description | |
|---|---|---|---|---|
locationId |
query | string | required | From auto-complete location-id. Example oxford. |
page |
query | integer ≥ 1 | optional | Result page. Default 1. Page 2 hits OnTheMarket with ?page=2. |
limit |
query | integer 1–50 | optional | How many cards to return from that page. Default 25. |
sort |
query | string | optional | recommended (default), most-recent, highest-price, lowest-price. |
priceRange |
query | string | optional | Min and max, comma-separated. Example 200000,450000. |
bedrooms |
query | string | optional | Min and max, comma-separated. Example 2,4. |
propertyType |
query | string | optional | Comma-separated: detached, semi-detached, terraced, flats, bungalows, farms-land. |
radius |
query | string | optional | Miles from the location. Omit or 0 for the place only. |
keywords |
query | string | optional | Free-text filter, passed through to OnTheMarket. |
addedToSite |
query | string | optional | Recently added window, e.g. 24-hours, 3-days, 7-days. |
onlyShow |
query | string | optional | Comma-separated flags: new-home, retirement, auction, shared-ownership, pet-friendly, recently-reduced. |
includeUnderOffer |
query | boolean | optional | Sale searches. Include under-offer stock. |
furnished · letLength · includeLetAgreed |
query | — | rent | Lettings-only filters. |
Details and agents
| Name | Endpoint | Description | |
|---|---|---|---|
query |
auto-complete | required | Partial place name, e.g. London Bridge. |
id |
/properties/details | required | From data.properties[].id. |
locationId |
/agents/search | required | Same location ids as property search. Alias: id. |
id |
/agents/details | required | Branch slug from data.agents[].id or the path in details-url. |
Response body
Every JSON body is { status, message, timestamp, data }. status is true on success.
| Field | Type | Meaning |
|---|---|---|
data.location-id | string | Resolved place, e.g. oxford. |
data.location-name | string | Display name from OnTheMarket. |
data.properties | array | Listing cards. Client path: data → properties → id. |
data.total-results | integer | Full result count for the search, not the page length. |
data.page · data.limit | integer | Echo of the request. |
data.total-pages | integer | Last page OnTheMarket advertises. |
data.source-url | string | The onthemarket.com URL that was fetched. |
Search card
| Field | Type | Meaning |
|---|---|---|
id | string | Listing id for /properties/details. |
property-title | string | e.g. 2 bedroom property for sale. |
address · price · short-price | string | As shown on the card. |
bedrooms · bathrooms | integer | When OnTheMarket supplies them. |
details-url | string | Absolute onthemarket.com details link. |
location.lat · location.lon | number | Pin coordinates when present. |
agent.id | string | Branch slug, e.g. allen-and-harris-oxford-rose-hill. |
cover-image · images | object / array | Default and webp URLs. |
Pagination
Pass page=2, page=3, … The origin fetches ?page=N on OnTheMarket. limit only slices the current page; it does not change the upstream page size.
Featured cards can repeat
A short numeric id (for example 3142) may appear on more than one page. That is OnTheMarket’s spotlight row, not a stuck page parameter. Compare the longer listing ids — those move.
GET /properties/search-buy?locationId=oxford&limit=5&page=1 GET /properties/search-buy?locationId=oxford&limit=5&page=2 GET /properties/search-buy?locationId=oxford&limit=5&page=3
Details
GET /properties/details?id=20138220 returns the listing’s Redux property object. Keys are camelCase: displayAddress, humanisedPropertyType, priceRaw, agent, images, floorplans, similar properties. Search stayed kebab-case because that is how OnTheMarket’s list endpoint is shaped.
Agents
data.agents[].id is the branch slug taken from /agents/branch/{slug}/. Use that slug on /agents/details?id=. Do not send OnTheMarket’s internal numeric branch id.
Examples
Autocomplete
query=oxford
{
"status": true,
"message": "Successful.",
"data": [
{
"location-id": "oxford",
"display-name": "Oxford, Oxfordshire",
"location-type": "city"
}
]
}
Search buy, page 1
locationId=oxford&limit=2
{
"status": true,
"message": "Successful.",
"data": {
"location-id": "oxford",
"page": 1,
"limit": 2,
"total-results": 904,
"total-pages": 34,
"properties": [
{
"id": "20138220",
"property-title": "2 bedroom property for sale",
"address": "Harefields, Oxford, Oxfordshire, OX2",
"price": "£102,500",
"bedrooms": 2,
"details-url": "https://www.onthemarket.com/details/20138220/"
}
]
}
}
Details
id=20138220 — data.id, data.displayAddress, data.price, data.agent.
Errors
| HTTP | error | When |
|---|---|---|
| 400 | bad_request | Missing query, locationId, or listing id. |
| 401 | unauthorized | Missing or invalid API key. |
| 404 | not_found | Listing or agent slug is not on OnTheMarket. |
| 502 | parse_error / upstream_error | Challenge page or OnTheMarket error. Retry once; allow 90 seconds. |
{
"status": false,
"message": "locationId is required",
"error": "bad_request",
"details": {}
}
Limits
Free RapidAPI BASIC is capped per month. This product is unofficial and is not affiliated with OnTheMarket or Strike.