Rightmove API

Get Rightmove data with one API

The Rightmove API returns UK real-estate data as clean JSON.

R
/rightmove/v1

6 active endpoints, on 0, 1, 2 and 3 credit tiers.

  • POST/rightmove/v1/location_search
  • POST/rightmove/v1/search
  • POST/rightmove/v1/property_detail
  • POST/rightmove/v1/agent
  • POST/rightmove/v1/similar
  • POST/rightmove/v1/sold_prices

What Rightmove endpoints does ReefAPI ship?

6 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

6 endpoints

location_search

0 cr

resolve a text location to a Rightmove locationIdentifier (LOS typeahead).

required
query
optional

search

2 cr

Search UK property listings by location (for sale / to rent / commercial / student) with stru…

required
optional
location, location_identifier, channel, for_rent, price_min, price_max, beds_min, beds_max, baths_min, property_type, sqft_min, sqft_max, radius, added_within_days, sort, furnished, let_type, must_have, dont_show, include_sstc, max_pages, fetch_all, index, filters

property_detail

3 cr

Full property record.

required
property_id
optional

agent

1 cr

estate-agent branch profile (+ that branch's live listings via BRANCH^id).

required
optional
branch_url, branch_id, max_pages

similar

2 cr

listings similar to a property (same area + price/bedroom band).

required
property_id
optional

sold_prices

2 cr

sold/transaction history.

required
optional
location, detail_url, uuid, page

Every parameter, every allowed value →

Rightmove API

3 of 6 endpoints, ready to run

View docs ↗

resolve a text location to a Rightmove locationIdentifier (LOS typeahead).

0 credits1 required · 0 optional
POST/rightmove/v1/location_search
idle
// Press "Try it" and this pane shows exactly what the
// live site returned this second — including an empty
// result, if that is the truth. No key, no account.

How the Rightmove API works

Rightmove is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 185 engines.

02
Call
POST /rightmove/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
0 or 1 or 2 or 3 credits per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Rightmove locationIdentifier prefixes and the real price vocabulary

Two things trip up every Rightmove integration: the locationIdentifier format, which is a prefix plus a caret plus an id, and the price vocabulary, which is not one field but three that disagree with each other. Every value below was measured on 2026-08-27 from live location_search and search calls covering 75 London sale rows, 75 Manchester rental rows and 85 London commercial rows.

Token or valueWhere it appearsMeasured 2026-08-27
REGION^87490location_identifier"London". Manchester is REGION^904 and Central London is REGION^92824
OUTCODE^2522location_identifier"SW9". Postcode outcodes get their own numeric id
POSTCODE^1327582location_identifier"E14 5AB". A full postcode resolves to exactly one match
STATION^2156location_identifier"Clapham Junction Station"
STREET^Po8SVH56WnaE_XwZ9vjFYIG4IU7qSz_Ilocation_identifier"Shakespeare Road, Lambeth, London, SW9". Street ids are opaque 32-character tokens, not digits
"" (empty string)price_qualifierthe default case: 47 of 75 London sale rows and 74 of 75 Manchester rental rows
"Guide Price"price_qualifier26 of 75 London sale rows and 8 of 58 London commercial rows
"Offers in Excess of"price_qualifier20 of 58 London commercial rows and 1 of 75 London sale rows
"Offers in Region of"price_qualifier5 of 58 London commercial rows and 1 of 75 London sale rows
"Fixed Price" and "From"price_qualifier1 Manchester rental and 1 London commercial row respectively
"POA"price_display, never price_qualifier11 of 85 London commercial rows; price_amount on those rows was 1 on one listing and 65,000,000 on another
price_frequencyrent rows versus sale rows"monthly" on 74 of 75 Manchester rentals and "weekly" on 1; "not specified" on sale and commercial rows

price_qualifier is an empty string when absent rather than null, so test for falsiness rather than for null. The spec also accepts BRANCH^<id> as a location_identifier to list one agent's stock; that path was not exercised in this pass and is listed here as unverified.

What people build with Rightmove

The jobs this data is most often used for.

6

endpoints

0/1/2/3

credits per call

01

Property portals call location_search then search to list Rightmove properties.

02

Investors use sold_prices to value an area from real transactions.

03

Agent tools use agent and similar to benchmark listings.

What Rightmove data costs

The cheapest call here is 0 credits, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 185 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/rightmove/v1/location_search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"London"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/rightmove/v1/location_search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "London"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Rightmove.

Get a free key →
What does a Rightmove locationIdentifier look like and how do I get one?

It is a type prefix, a caret and an id: REGION^87490 for London, OUTCODE^2522 for SW9, POSTCODE^1327582 for E14 5AB and STATION^2156 for Clapham Junction Station. STREET is the odd one out because its id is an opaque token rather than a number, as in STREET^Po8SVH56WnaE_XwZ9vjFYIG4IU7qSz_I for Shakespeare Road in Lambeth. Resolve one with location_search, or skip the step and pass free text as location: the search response echoes meta.location_identifier "REGION^87490" and meta.resolved_from "London" so you can see what it picked.

What are the real Rightmove price qualifier strings?

Measured across 218 live listings on 2026-08-27, the vocabulary that actually appeared was an empty string (the common case), "Guide Price", "Offers in Excess of", "Offers in Region of", "Fixed Price" and "From". The mix varies sharply by channel: 26 of 75 London sale listings carried "Guide Price", while "Offers in Excess of" appeared on 20 of 58 London commercial listings and only once in the residential sample. Note that "POA" is not a price_qualifier value at all, despite what most people expect. It lives in price_display.

How should I handle POA listings?

Detect them on price_display and then ignore price_amount, because price_amount is not a real asking price on those rows. Measured on 2026-08-27, 11 of 85 London commercial listings had price_display "POA": an office at Alfa Laval Tower came back with price_amount 1, a land listing at One Page Street with 65,000,000 and an industrial unit with 10,500,000. Those are placeholders of wildly different scale, so any average or price filter that includes them is wrong. Gate on price_display == "POA" and treat the price as unknown.

What is the difference between count, result_count and pages_total?

count is what you received, result_count is the true market total, and pages_total is what Rightmove will actually let you page through. A Manchester furnished rental search with max_pages 3 returned count 75 (three merged pages of about 24), result_count 3,342 with result_count_display "3,342", pages_total 42, duplicates_skipped 0 and stop_reason "max_pages". Note that 42 pages of 24 is roughly 1,000, which is Rightmove's result ceiling, not the 3,342 total. To reach deeper inventory you narrow the search with a smaller radius or a tighter price band rather than paging harder, and result_cap_hit tells you when you have hit the wall.

Is a Rightmove property_id always 8 or 9 digits?

No, and this one bites. Residential rows returned ids like 92186892 and 148711631, but commercial rows returned 15-digit ids: 760770556763601, 733927782766401 and 758381082588465. Store property_id as a string. A 32-bit integer column overflows on commercial stock, and while JavaScript's Number handles 15 digits, you lose nothing by keeping them as text since that is what property_detail accepts anyway.

How do sale rows and rent rows differ in the response?

Beyond the price itself, three fields diverge. Rental rows carry price_frequency "monthly" (74 of 75 measured, with one "weekly") and a price_display formatted as "£1,850 pcm", tenure null, and fees_apply true with a fees_apply_text running to several kilobytes of the agent's tenancy fee schedule. Sale rows carry price_frequency "not specified", a real tenure value such as SHARE_OF_FREEHOLD or LEASEHOLD, and no fee text. The channel enum is buy, rent, new_homes, commercial_sale, commercial_rent and student, with aliases like for_sale, to_rent, lettings and new_build accepted. Unlike most parameters here, an unknown channel is rejected outright with the valid list rather than ignored.

What does property_detail add over a search row?

A lot, though some of it is null more often than you would hope. Measured for property 148711631: living_costs with council_tax_band "H", sizings expressed in four units at once (0.21 ac, 836 sqm, 0.08 ha, 9,000 sqft), nearest_stations with types such as LONDON_UNDERGROUND and a distance in miles (Knightsbridge at 0.049), epc_graphs image URLs, floorplans, price_per_sqft, price_qualifier_message, tenure LEASEHOLD, street_view coordinates and agent{branch_id 271223, company_name REGENTS ESTATE HOLDINGS LTD}. On that same leasehold flat, years_remaining_on_lease, annual_service_charge and annual_ground_rent were all null: the fields exist, but agents frequently do not publish them, so treat them as optional rather than guaranteed.

Can I pull every listing from one estate agent?

Yes, through the agent action, which takes branch_id or branch_url and returns the branch profile plus that branch's live stock with max_pages paging. The branch id is discoverable from any listing: property_detail returned agent.branch_id 271223 with branch_display_name "Global 1, London" and company_name "REGENTS ESTATE HOLDINGS LTD", and search rows carry an agent block too. This is the usual route for agent-monitoring and competitor-stock tools, since it gives you one company's inventory without running a location search per area.

What is the Rightmove API?

Rightmove API is a ReefAPI endpoint group for uk property listings for sale and to rent. It returns live JSON through POST requests under /rightmove/v1.

Is the Rightmove API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Rightmove calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Rightmove login or account?

No login to Rightmove is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Rightmove data?

The page example is captured from a live location_search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Rightmove API use?

Rightmove actions currently cost 1-3 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Rightmove from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call rightmove actions with the same key, credit pool and JSON envelope used by normal REST requests.

11 Real Estate APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Rightmove, you are one call away from the rest of the category — no second contract, no second integration.

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts.