Sign inTry it

Search UK homes to rent or buy on Rightmove.

Searches Rightmove, the UK's largest property portal: homes to rent or for sale in a town, area or postcode (found with Rightmove's own location search), by price, bedrooms, type, radius and sort. Each result has the price (and monthly rent for lets), bedrooms, bathrooms, type, address, summary, added or reduced, available from, agent, coordinates, photo and link. Featured (paid extra) slots are dropped by default; premium listings stay, marked promoted.

No reports yetRead-only, no login
Site
Rightmove, United Kingdom
Version
v1
Runs, last 7 days
No reports yet
sha256
2a445714c7ee…

Run it with your agent

after installing Wield

Ask in plain words. Your agent finds this recipe and calls it:

“Search UK homes to rent or buy on Rightmove.”

Read-only: it changes nothing on the site. No login needed.

{
  "tool": "run",
  "arguments": {
    "recipe_id": "rightmove.co.uk/search-properties",
    "params": {
      "location": "Manchester",
      "max_price": 2000,
      "min_bedrooms": 2,
      "sort": "lowest_price"
    }
  }
}

Requests

sent from your browser, in order
  1. 1GETlos.rightmove.co.uk/typeahead?exclude&limit&queryRightmove's location search on los.rightmove.co.uk (Rightmove's own location service; the search box calls it from www with CORS). The first match becomes the locationIdentifier, e.g. REGION^904 or POSTCODE^837246.no cookies
  2. 2GET/{{f.path}}/find.html?index&locationIdentifier&maxBedrooms&maxPrice&minBedrooms&minPrice&propertyTypes&radius&sortTypeThe list page (server-rendered, __NEXT_DATA__ props.pageProps.searchResults). The one-item foreach picks the rent or sale path, the sort code and the page offset.repeats, max 1

Parameters

from your agent
channelenum "rent" | "buy" = "rent"
include_featuredbooleanKeep featured (paid) listings, marked = false
locationstringrequiredTown, area or postcode, e.g. 'Manchester', 'Clapham', 'SW1A 1AA'. The first match of Rightmove's location search is used
max_bedroomsinteger
max_priceintegerGBP; per calendar month when renting
min_bedroomsinteger
min_priceintegerGBP; per calendar month when renting
pageinteger = 1
property_typeenum "flat" | "detached" | "semi-detached" | "terraced" | "bungalow" | "land" | "park-home"
radius_milesenum 0 | 0.25 | 0.5 | 1 | 3 | 5 | 10 | 15 | 20 | 30 | 40 = 0
sortenum "newest" | "lowest_price" | "highest_price" | "oldest" = "newest"

Returns

to your agent
channelstring
locationstringThe place Rightmove matched
pageinteger
propertiesobject[]address, agent, auction, available_from, bathrooms, bedrooms, featured, first_listed, frequency, id, image, latitude, listed, longitude, price_gbp, price_text, promoted, rent_pcm_gbp, students, summary, title, type, url
totalinteger

Where it can send

  • www.rightmove.co.uk
  • los.rightmove.co.uk

Anything else is blocked by the extension.

Reads from your session

Nothing. Your browser attaches the site's cookies by itself.

Used only in requests to the addresses on the left. Never sent to wield.run or your agent.

Checks

a run passes when
  • length(output.properties) > `15`
  • starts_with(output.location, 'Manchester')
  • output.total > `100`
  • length(output.properties[?featured]) == `0`
  • length(output.properties[?bedrooms < `2`]) == `0`
  • length(output.properties[?starts_with(url, 'https://www.rightmove.co.uk/properties/') && price_gbp > `0`]) == length(output.properties)

Raw recipe

Served as canonical JSON from /api/v1/recipes/rightmove.co.uk/search-properties, so its sha256 matches the ETag and the index.

Check it yourself
curl -s https://wield.run/api/v1/recipes/rightmove.co.uk/search-properties | shasum -a 256
# 2a445714c7ee78df5eb7727c7faaa44cee30dc90e681792a5fe8b62791537b6f
rightmove.co.uk/search-properties.json, v1
{
  "description": "Searches Rightmove, the UK's largest property portal: homes to rent or for sale in a town, area or postcode (found with Rightmove's own location search), by price, bedrooms, type, radius and sort. Each result has the price (and monthly rent for lets), bedrooms, bathrooms, type, address, summary, added or reduced, available from, agent, coordinates, photo and link. Featured (paid extra) slots are dropped by default; premium listings stay, marked promoted.",
  "effect": "read",
  "id": "rightmove.co.uk/search-properties",
  "keywords": [
    "rightmove",
    "property",
    "rent",
    "to let",
    "flat",
    "house",
    "for sale",
    "buy a house",
    "estate agent",
    "lettings",
    "pcm",
    "bedroom",
    "uk",
    "london",
    "manchester",
    "immobilien",
    "wohnung",
    "england",
    "scotland",
    "wales"
  ],
  "output": {
    "schema": {
      "properties": {
        "channel": {
          "type": "string"
        },
        "location": {
          "description": "The place Rightmove matched",
          "type": "string"
        },
        "page": {
          "type": "integer"
        },
        "properties": {
          "items": {
            "properties": {
              "address": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "agent": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "auction": {
                "type": "boolean"
              },
              "available_from": {
                "description": "Lets: YYYY-MM-DD",
                "type": [
                  "string",
                  "null"
                ]
              },
              "bathrooms": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "bedrooms": {
                "type": [
                  "integer",
                  "null"
                ]
              },
              "featured": {
                "description": "A 'Featured Property' slot (a paid extra placement); dropped unless include_featured",
                "type": "boolean"
              },
              "first_listed": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "frequency": {
                "description": "monthly, weekly, … for lets; not_specified for sales",
                "type": [
                  "string",
                  "null"
                ]
              },
              "id": {
                "type": "string"
              },
              "image": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "latitude": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "listed": {
                "description": "e.g. 'Added today', 'Reduced on 03/11/2026'",
                "type": [
                  "string",
                  "null"
                ]
              },
              "longitude": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "price_gbp": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "price_text": {
                "description": "As Rightmove shows it, e.g. '£1,850 pcm', 'Offers over £350,000'",
                "type": [
                  "string",
                  "null"
                ]
              },
              "promoted": {
                "description": "Premium listing: the agent paid for a larger card; a genuine result in its normal place",
                "type": "boolean"
              },
              "rent_pcm_gbp": {
                "description": "Rent per calendar month (weekly rents × 52 / 12)",
                "type": [
                  "number",
                  "null"
                ]
              },
              "students": {
                "type": "boolean"
              },
              "summary": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "title": {
                "description": "e.g. '2 bedroom apartment'",
                "type": [
                  "string",
                  "null"
                ]
              },
              "type": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "url": {
                "type": "string"
              }
            },
            "type": "object"
          },
          "type": "array"
        },
        "total": {
          "type": [
            "integer",
            "null"
          ]
        }
      },
      "required": [
        "location",
        "channel",
        "properties"
      ],
      "type": "object"
    },
    "value": "let $feat = params.include_featured == `true` in {location: steps.place.location_name, channel: params.channel || 'rent', total: steps.search[0].total && to_number(replace(steps.search[0].total, ',', '')) || `0`, page: params.page || `1`, properties: map(&(let $p = @ in {id: $p.id, title: $p.title, address: $p.address, price_gbp: $p.price, frequency: $p.frequency, rent_pcm_gbp: ($p.frequency == 'monthly' && $p.price) || ($p.frequency == 'weekly' && $p.price && floor($p.price * `52` / `12` + `0.5`)) || ($p.frequency == 'yearly' && $p.price && floor($p.price / `12` + `0.5`)) || `null`, price_text: $p.price_text, bedrooms: $p.bedrooms, bathrooms: $p.bathrooms, type: $p.type, summary: $p.summary, listed: $p.listed, first_listed: $p.first_listed, available_from: $p.available_from, agent: $p.agent, latitude: $p.latitude, longitude: $p.longitude, image: $p.image, featured: $p.featured, promoted: $p.promoted, students: $p.students, auction: $p.auction, url: join('', ['https://www.rightmove.co.uk/properties/', $p.id])}), steps.search[0].properties || `[]`)[?$feat || !featured]}"
  },
  "params": {
    "additionalProperties": false,
    "properties": {
      "channel": {
        "default": "rent",
        "enum": [
          "rent",
          "buy"
        ],
        "type": "string"
      },
      "include_featured": {
        "default": false,
        "description": "Keep featured (paid) listings, marked",
        "type": "boolean"
      },
      "location": {
        "description": "Town, area or postcode, e.g. 'Manchester', 'Clapham', 'SW1A 1AA'. The first match of Rightmove's location search is used",
        "maxLength": 80,
        "minLength": 2,
        "type": "string"
      },
      "max_bedrooms": {
        "maximum": 10,
        "minimum": 0,
        "type": "integer"
      },
      "max_price": {
        "description": "GBP; per calendar month when renting",
        "minimum": 0,
        "type": "integer"
      },
      "min_bedrooms": {
        "maximum": 10,
        "minimum": 0,
        "type": "integer"
      },
      "min_price": {
        "description": "GBP; per calendar month when renting",
        "minimum": 0,
        "type": "integer"
      },
      "page": {
        "default": 1,
        "maximum": 42,
        "minimum": 1,
        "type": "integer"
      },
      "property_type": {
        "enum": [
          "flat",
          "detached",
          "semi-detached",
          "terraced",
          "bungalow",
          "land",
          "park-home"
        ],
        "type": "string"
      },
      "radius_miles": {
        "default": 0,
        "enum": [
          0,
          0.25,
          0.5,
          1,
          3,
          5,
          10,
          15,
          20,
          30,
          40
        ],
        "type": "number"
      },
      "sort": {
        "default": "newest",
        "enum": [
          "newest",
          "lowest_price",
          "highest_price",
          "oldest"
        ],
        "type": "string"
      }
    },
    "required": [
      "location"
    ],
    "type": "object"
  },
  "provenance": {
    "method": "browser-inspect",
    "notes": "The search box calls https://los.rightmove.co.uk/typeahead?query=…&limit=10&exclude=STREET (Rightmove's location service, CORS for www with credentials; also matches postcodes: POSTCODE^837246 for SW1A 1AA). The list pages /property-to-rent/find.html and /property-for-sale/find.html are server-rendered: __NEXT_DATA__ props.pageProps.searchResults has resultCount ('3,021', a formatted string), 25 properties per page (index steps by 24) and searchParameters. sortType: 1 lowest price, 2 highest, 6 newest, 10 oldest. Featured Property cards (featuredProperty) are paid extra placements at the top; dropped by default. Premium listings (premiumListing) are genuine results with a larger card; kept and marked promoted. Weekly rents are converted to pcm × 52/12 the way Rightmove shows both. Answers servers.",
    "recorded_at": "2026-11-07T21:36:00+01:00",
    "recorded_by": "C4"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "GB",
    "id": "rightmove.co.uk",
    "language": "en",
    "name": "Rightmove",
    "origin": "https://www.rightmove.co.uk",
    "origins": [
      "https://www.rightmove.co.uk",
      "https://los.rightmove.co.uk"
    ]
  },
  "steps": [
    {
      "description": "Rightmove's location search on los.rightmove.co.uk (Rightmove's own location service; the search box calls it from www with CORS). The first match becomes the locationIdentifier, e.g. REGION^904 or POSTCODE^837246.",
      "expect": {
        "assert": "length(body.matches) > `0`",
        "content_type": "json",
        "status": [
          200
        ]
      },
      "extract": {
        "json": {
          "location_id": "join('^', [matches[0].type, matches[0].id])",
          "location_name": "matches[0].displayName"
        }
      },
      "id": "place",
      "request": {
        "credentials": "omit",
        "headers": {
          "Accept": "application/json"
        },
        "method": "GET",
        "query": {
          "exclude": "STREET",
          "limit": "10",
          "query": "{{params.location}}"
        },
        "url": "https://los.rightmove.co.uk/typeahead"
      }
    },
    {
      "description": "The list page (server-rendered, __NEXT_DATA__ props.pageProps.searchResults). The one-item foreach picks the rent or sale path, the sort code and the page offset.",
      "expect": {
        "content_type": "html",
        "status": [
          200
        ]
      },
      "extract": {
        "embedded_json": {
          "selector": "script#__NEXT_DATA__",
          "vars": {
            "properties": "props.pageProps.searchResults.properties[].{id: to_string(id), title: propertyTypeFullDescription || `null`, address: displayAddress || `null`, price: price.amount || `null`, frequency: price.frequency || `null`, price_text: price.displayPrices[0].displayPrice || `null`, bedrooms: bedrooms, bathrooms: bathrooms, type: propertySubType || `null`, summary: summary || `null`, listed: addedOrReduced || `null`, first_listed: firstVisibleDate && firstVisibleDate[0:10] || `null`, available_from: letAvailableDate && letAvailableDate[0:10] || `null`, agent: customer.brandTradingName && join('', [customer.brandTradingName, customer.branchName && join('', [', ', customer.branchName]) || '']) || `null`, latitude: location.latitude || `null`, longitude: location.longitude || `null`, image: images[0].srcUrl || `null`, featured: featuredProperty == `true`, promoted: premiumListing == `true`, students: students == `true`, auction: auction == `true`}",
            "total": "props.pageProps.searchResults.resultCount"
          }
        }
      },
      "foreach": {
        "as": "f",
        "in": "[{path: params.channel == 'buy' && 'property-for-sale' || 'property-to-rent', loc: steps.place.location_id, sort: (params.sort == 'lowest_price' && '1') || (params.sort == 'highest_price' && '2') || (params.sort == 'oldest' && '10') || '6', index: to_string(((params.page || `1`) - `1`) * `24`), radius: to_string(params.radius_miles || `0`)}]",
        "max": 1
      },
      "id": "search",
      "parse": "html",
      "request": {
        "headers": {
          "Accept": "text/html"
        },
        "method": "GET",
        "query": {
          "index": "{{f.index}}",
          "locationIdentifier": "{{f.loc}}",
          "maxBedrooms": "{{params.max_bedrooms}}",
          "maxPrice": "{{params.max_price}}",
          "minBedrooms": "{{params.min_bedrooms}}",
          "minPrice": "{{params.min_price}}",
          "propertyTypes": "{{params.property_type}}",
          "radius": "{{f.radius}}",
          "sortType": "{{f.sort}}"
        },
        "url": "/{{f.path}}/find.html"
      }
    }
  ],
  "task": "Search UK homes to rent or buy on Rightmove",
  "tos": {
    "notes": "Terms not reviewed yet for automated access (tos.reviewed false). One person's search: 2 requests, the same ones the search box and the list page make, no contact forms. robots.txt allows the find.html list pages. Enquiries and viewings stay on rightmove.co.uk.",
    "reviewed": false
  },
  "verify": {
    "checks": [
      "length(output.properties) > `15`",
      "starts_with(output.location, 'Manchester')",
      "output.total > `100`",
      "length(output.properties[?featured]) == `0`",
      "length(output.properties[?bedrooms < `2`]) == `0`",
      "length(output.properties[?starts_with(url, 'https://www.rightmove.co.uk/properties/') && price_gbp > `0`]) == length(output.properties)"
    ],
    "example_params": {
      "location": "Manchester",
      "max_price": 2000,
      "min_bedrooms": 2,
      "sort": "lowest_price"
    },
    "max_ms": 5000
  },
  "version": 1
}