Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Rightmove API page →
Real Estate

Rightmove API & Scraper

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

6 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

You call location_search to resolve a location, then search returns listings; you can also pull property_detail, an agent, similar properties and sold_prices. It is built for UK proptech and property analytics that need Rightmove data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

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.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/rightmove/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "location": "London"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "rightmove",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 2961.8,
    "record_count": 25,
    "bytes": 0,
    "cache_hit": false,
    "completeness_pct": 100,
    "channel": "buy",
    "location_identifier": "REGION^87490",
    "resolved_from": "London",
    "completeness_basis": {
      "items": 25,
      "checks": [
        "property_id",
        "price_amount",
        "price_display"
      ]
    }
  },
  "data": {
    "items": [
      {
        "property_id": 90447366,
        "url": "https://www.rightmove.co.uk/properties/90447366",
        "channel": "buy",
        "transaction_type": "buy",
        "price_amount": 600000,
        "price_currency": "GBP",
        "price_frequency": "not specified",
        "price_display": "£600,000",
        "price_qualifier": "",
        "bedrooms": 2,
        "bathrooms": 1,
        "property_sub_type": "Flat",
        "property_type_full": "2 bedroom flat for sale",
        "display_address": "Hazelbourne Road, London",
        "latitude": 51.451965,
        "longitude": -0.145681,
        "summary": "A fantastic, two double bedroom first floor flat offering an excellent opportunity for first-time buyers and investors alike. The property benefits from a share of the freehold and is offered with no onward chain, allowing for a straightforward purchase. Retaining a number of attractive period...",
        "tenure": "SHARE_OF_FREEHOLD",
        "num_images": 10,
        "num_floorplans": 1,
        "num_virtual_tours": 0,
        "images": [
          "https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/b2022e06b/90447366/b2022e06b4ddd[redacted-phone]c62f243a68_max_476x317.jpeg",
          "https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/f8449f72f/90447366/f8449f72ffa8f34005a44d710a97c5a7_max_476x317.jpeg",
          "https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/b295233aa/90447366/b295233aaf924e53d1194eb998ff1604_max_476x317.jpeg"
        ],
        "first_visible_date": "[redacted-phone]T09:59:31Z",
        "added_or_reduced": "Added on 03/07/2026",
        "listing_update_reason": "new",
        "listing_update_date": "[redacted-phone]T10:05:13Z",
        "fees_apply": false,
        "fees_apply_text": null,
        "display_size": "",
        "distance": null,
        "static_map_url": null,
        "is_development": false,
        "is_commercial": false,
        "is_student": false,
        "is_auction": false,
        "agent": {
          "branch_id": 106402,
          "branch_display_name": "Patrick Henry, Clapham South",
          "brand_trading_name": "Patrick Henry",
          "contact_telephone": null,
          "branch_landing_page_url": "https://www.rightmove.co.uk/estate-agents/agent/Patrick-Henry/Clapham-South-106402.html",
          "logo_url": "https://media.rightmove.co.uk:443/partner-logo/14048608-PRODUCTS_LOGO-[redacted-phone].png"
        }
      },
      {
        "property_id": 760770556763601,
        "url": "https://www.rightmove.co.uk/properties/[redacted-phone]",
        "channel": "buy",
        "transaction_type": "buy",
        "price_amount": 65000000,
        "price_currency": "GBP",
        "price_frequency": "not specified",
        "price_display": "POA",
        "price_qualifier": "",
        "bedrooms": 0,
        "bathrooms": null,
        "property_sub_type": "Land",
        "property_type_full": "Land for sale",
        "display_address": "One Page Street, London, SW1P 4PQ",
        "latitude": 51.493786,
        "longitude": -0.12729,
        "summary": "An exceptional prime office to residential opportunity in the heart of Westminster",
        "tenure": "FREEHOLD",
        "num_images": 3,
        "num_floorplans": 0,
        "num_virtual_tours": 0,
        "images": [
          "https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/26213ed6b/[redacted-phone]/26213ed6b802f47cedac6c6a184d2e96_max_476x317.jpeg",
          "https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/644d6165a/[redacted-phone]/644d6165a64631d1df9a0f5e6430a0c5_max_476x317.jpeg",
          "https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/6231f9713/[redacted-phone]/6231f971326a209abece4ee0e932522d_max_476x317.jpeg"
        ],
        "first_visible_date": "[redacted-phone]T16:41:29Z",
        "added_or_reduced": "",
        "listing_update_reason": "new",
        "listing_update_date": "[redacted-phone]T16:47:05Z",
        "fees_apply": false,
        "fees_apply_text": null,
        "display_size": "",
        "distance": null,
        "static_map_url": null,
        "is_development": false,
        "is_commercial": true,
        "is_student": false,
        "is_auction": false,
        "agent": {
          "branch_id": 208037,
          "branch_display_name": "Savills, Margaret Street- Development",
          "brand_trading_name": "Savills",
          "contact_telephone": null,
          "branch_landing_page_url": "https://www.rightmove.co.uk/estate-agents/agent/Savills/Margaret-Street--Development-208037.html",
          "logo_url": "https://media.rightmove.co.uk:443/partner-logo/11692847-PRODUCTS_LOGO-[redacted-phone].jpeg"
        }
      },
      {
        "property_id": 148711631,
        "url": "https://www.rightmove.co.uk/properties/[redacted-phone]",
        "channel": "buy",
        "transaction_type": "buy",
        "price_amount": 60000000,
        "price_currency": "GBP",
        "price_frequency": "not specified",
        "price_display": "£60,000,000",
        "price_qualifier": "",
        "bedrooms": 5,
        "bathrooms": 5,
        "property_sub_type": "Apartment",
        "property_type_full": "5 bedroom apartment for sale",
        "display_address": "One Hyde Park, Knightsbridge, London, SW1X",
        "latitude": 51.501871,
        "longitude": -0.161945,
        "summary": "A magnificent five-bedroom lateral apartment occupying the entire floor plate within One Hyde Park Knightsbridge, the most distinguished and exclusive developments in the world, designed for luxurious living on a grand scale. ",
        "tenure": "LEASEHOLD",
        "num_images": 6,
        "num_floorplans": 0,
        "num_virtual_tours": 0,
        "images": [
          "https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/ac0fce363/[redacted-phone]/ac0fce3632213fac05662b8410f75693_max_476x317.jpeg",
          "https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/e302305b7/[redacted-phone]/e302305b73a93362f1a6ee3f97a7bea4_max_476x317.jpeg",
          "https://media.rightmove.co.uk:443/dir/crop/10:9-16:9/property-photo/29a142c6c/[redacted-phone]/29a142c6cb44d65190e93d8882e245cf_max_476x317.jpeg"
        ],
        "first_visible_date": "[redacted-phone]T16:02:39Z",
        "added_or_reduced": "Added on 05/07/2024",
        "listing_update_reason": "new",
        "listing_update_date": "[redacted-phone]T16:08:05Z",
        "fees_apply": false,
        "fees_apply_text": null,
        "display_size": "9,000 sq. ft.",
        "distance": null,
        "static_map_url": null,
        "is_development": false,
        "is_commercial": false,
        "is_student": false,
        "is_auction": false,
        "agent": {
          "branch_id": 271223,
          "branch_display_name": "Global 1, London",
          "brand_trading_name": "Global 1",
          "contact_telephone": null,
          "branch_landing_page_url": "https://www.rightmove.co.uk/estate-agents/agent/Global-1/London-271223.html",
          "logo_url": "https://media.rightmove.co.uk:443/partner-logo/31973465-PRODUCTS_LOGO-[redacted-phone].png"
        }
      }
    ],
    "count": 25,
    "pages_fetched": 1,
    "channel": "buy",
    "location_identifier": "REGION^87490",
    "result_count": 61203,
    "result_count_display": "61,203",
    "pages_total": 42,
    "duplicates_skipped": 0,
    "filters_applied": null,
    "sort": null,
    "stop_reason": "max_pages",
    "result_cap_hit": false,
    "result_cap_note": null
  }
}
Actions

What the Rightmove API does

ActionDescriptionConcrete use caseKey params
location_searchresolve a text location to a Rightmove locationIdentifier (LOS typeahead)Real-estate investors call location_search to resolve a text location to a Rightmove locationIdentifier (LOS typeahead).query
searchSearch UK property listings by location (for sale / to rent / commercial / student) with structured filters: price, beds, baths, property type, size, radius, added-within, sort, and (rent) furnishing & let-type. Paginate with index/max_pages.Brokerage tools call search to search UK property listings by location (for sale / to rent / commercial / student) with stru….location, location_identifier, channel, for_rent, price_min, ...
property_detailFull property record: price (+£/sqft), description, key features, tenure & lease years, living costs (council tax band, service charge, ground rent), structured features (utilities/heating/parking/garden/flood-risk), images, floorplans, EPC graphs, sizings, nearest stations, street-view coords and the listing agent.Property dashboards call property_detail to get full property record.property_id
agentestate-agent branch profile (+ that branch's live listings via BRANCH^id)Lead-generation teams call agent to get estate-agent branch profile (+ that branch's live listings via BRANCH^id).branch_url, branch_id, max_pages
similarlistings similar to a property (same area + price/bedroom band)Real-estate investors call similar to get listings similar to a property (same area + price/bedroom band).property_id
sold_pricessold/transaction history: by location (search) or per-property (detail_url|uuid). Land-Registry sold data with full per-address transaction history. Area mode pages with `page` (25 rows/page, different rows on every page).Brokerage tools call sold_prices to get sold/transaction history.location, detail_url, uuid, page
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/rightmove/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"location":"London"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.rightmove.search with {"location":"London"}.
Use cases

Who uses this API and why

  • Property portals call location_search then search to list Rightmove properties.
  • Investors use sold_prices to value an area from real transactions.
  • Agent tools use agent and similar to benchmark listings.
FAQ

Questions developers ask before integrating

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.

docs / rightmove

Rightmove

UK property listings for sale and to rent.

base /rightmove/v16 endpoints
post/rightmove/v1/property_detail3 credits

Full property record: price (+£/sqft), description, key features, tenure & lease years, living costs (council tax band, service charge, ground rent), structured features (utilities/heating/parking/garden/flood-risk), images, floorplans, EPC graphs, sizings, nearest stations, street-view coords and the listing agent.

ParameterAllowed / rangeDescription
property_idrequiredRightmove property id (the digits in a /properties/<id> URL or a search result's property_id).
Try in playground →
post/rightmove/v1/agent1 credit

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

ParameterAllowed / rangeDescription
branch_urloptionalAn estate-agent branch landing-page URL (full or path). Provide this OR branch_id.
branch_idoptionalRightmove branch id — lists that branch's live stock via BRANCH^id. Provide this OR branch_url.
max_pages = 1optional1–How many 24-result pages to fetch and merge (ignored when fetch_all=true).
Try in playground →
post/rightmove/v1/similar2 credits

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

ParameterAllowed / rangeDescription
property_idrequiredRightmove property id (the digits in a /properties/<id> URL or a search result's property_id).
Try in playground →
post/rightmove/v1/sold_prices2 credits

sold/transaction history: by location (search) or per-property (detail_url|uuid). Land-Registry sold data with full per-address transaction history. Area mode pages with `page` (25 rows/page, different rows on every page).

ParameterAllowed / rangeDescription
locationoptionalArea for sold-price history (postcode/outcode/town, e.g. 'SW9', 'KT2 5HF'). Provide this OR detail_url/uuid.
detail_urloptionalA house-prices detail URL for one property's sold history (alternative to location).
uuidoptionalA house-prices detail uuid for one property's sold history (alternative to location).
page = 1optional1–1-based page of sold-price results (area mode), 25 rows per page. Each page returns different transactions. The reachable depth is capped per area (returned as `page_cap` / `max_records`, e.g. 40 pages = 1,000 rows for a busy London outcode) — that cap is usually SMALLER than `total_reported`; a page past it returns no rows and `page_clamped: true`. Narrow the area to reach more history.
Try in playground →
Comparing scraping APIs?ReefAPI vs Bright Data