Search UK homes to rent or buy on OnTheMarket.
Searches OnTheMarket, the UK property portal, like its list pages: homes to rent or buy in a town, area or postcode district, with title, address, price (monthly rent or asking price) and price qualifier, bedrooms, bathrooms, property type, when added or reduced, agent, map position and link. Filters: price range, minimum bedrooms, sort. Paid spotlight listings are dropped by default.
- Site
- OnTheMarket, United Kingdom
- Version
- v1
- Runs, last 7 days
- No reports yet
- sha256
- 00790910b5cd…
Run it with your agent
after installing WieldAsk in plain words. Your agent finds this recipe and calls it:
“Search UK homes to rent or buy on OnTheMarket.”
Read-only: it changes nothing on the site. No login needed.
{ "tool": "run", "arguments": { "recipe_id": "onthemarket.com/search-properties", "params": { "channel": "rent", "location": "london", "max_price": 2000, "min_bedrooms": 2 } } }
Requests
sent from your browser, in order- 1GET/{{f.path}}/property/{{f.loc | urlencode}}/?direction&max-price&min-bedrooms&min-price&page&sort-fieldThe list page (server-rendered; results in the page's Redux state). The one-item foreach builds the path and sort.
Parameters
from your agentReturns
to your agentWhere it can send
- www.onthemarket.com
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) > `10`
- output.total > `100`
- length(output.properties[?price_gbp > `2000`]) == `0`
- length(output.properties[?bedrooms < `2`]) == `0`
- length(output.properties[?promoted]) == `0`
- length(output.properties[?starts_with(url, 'https://www.onthemarket.com/details/')]) == length(output.properties)
Raw recipe
Served as canonical JSON from /api/v1/recipes/onthemarket.com/search-properties, so its sha256 matches the ETag and the index.
curl -s https://wield.run/api/v1/recipes/onthemarket.com/search-properties | shasum -a 256 # 00790910b5cdc3e4d564285e8cc92d61a8fdf63737307980364d1ca0c44305fd
{ "description": "Searches OnTheMarket, the UK property portal, like its list pages: homes to rent or buy in a town, area or postcode district, with title, address, price (monthly rent or asking price) and price qualifier, bedrooms, bathrooms, property type, when added or reduced, agent, map position and link. Filters: price range, minimum bedrooms, sort. Paid spotlight listings are dropped by default.", "effect": "read", "id": "onthemarket.com/search-properties", "keywords": [ "onthemarket", "property", "to rent", "for sale", "flat", "house", "rent", "buy", "uk", "london", "estate agent", "homes", "rightmove alternative" ], "output": { "schema": { "properties": { "channel": { "type": "string" }, "location": { "type": "string" }, "page": { "type": "integer" }, "properties": { "items": { "properties": { "added": { "description": "As shown, e.g. 'Added yesterday', 'Reduced 3 days ago'", "type": [ "string", "null" ] }, "address": { "type": [ "string", "null" ] }, "agent": { "type": [ "string", "null" ] }, "bathrooms": { "type": [ "integer", "null" ] }, "bedrooms": { "type": [ "integer", "null" ] }, "id": { "type": "string" }, "latitude": { "type": [ "number", "null" ] }, "longitude": { "type": [ "number", "null" ] }, "price_gbp": { "description": "Monthly rent or asking price", "type": [ "number", "null" ] }, "price_qualifier": { "description": "e.g. 'Guide price', 'Offers over'", "type": [ "string", "null" ] }, "price_text": { "description": "e.g. '£1,700 pcm (£392 pw)'", "type": [ "string", "null" ] }, "promoted": { "description": "Paid spotlight listing", "type": "boolean" }, "property_type": { "type": [ "string", "null" ] }, "title": { "type": [ "string", "null" ] }, "url": { "type": "string" } }, "type": "object" }, "type": "array" }, "total": { "type": [ "integer", "null" ] } }, "required": [ "location", "properties" ], "type": "object" }, "value": "let $keep = params.include_spotlight == `true`, $s = steps.search[0] in {location: params.location, channel: params.channel || 'rent', total: $s.total || `0`, page: params.page || `1`, properties: map(&(let $p = @ in {id: $p.id, title: $p.\"property-title\" || `null`, address: $p.address || `null`, price_gbp: $p.price && to_number(replace(replace(split($p.price, ' ')[0], '£', ''), ',', '')) || `null`, price_text: $p.price || `null`, price_qualifier: $p.\"price-qualifier\" || `null`, bedrooms: $p.bedrooms || `null`, bathrooms: $p.bathrooms || `null`, property_type: $p.\"humanised-property-type\" || `null`, added: $p.\"days-since-added-reduced\" || `null`, agent: $p.agent.name || `null`, latitude: $p.location.lat || `null`, longitude: $p.location.lon || `null`, promoted: $p.\"spotlight?\" == `true`, url: $p.\"details-url\" && join('', ['https://www.onthemarket.com', $p.\"details-url\"]) || `null`}), ($s.list || `[]`)[?id != `null` && \"details-url\" != `null`])[?$keep || !promoted]}" }, "params": { "additionalProperties": false, "properties": { "channel": { "default": "rent", "enum": [ "rent", "buy" ], "type": "string" }, "include_spotlight": { "default": false, "description": "Keep paid spotlight listings (marked promoted)", "type": "boolean" }, "location": { "description": "Town, area or postcode district as OnTheMarket names it, e.g. 'london', 'manchester', 'sw11', 'bristol'", "maxLength": 60, "minLength": 2, "type": "string" }, "max_price": { "description": "GBP (per month when renting)", "minimum": 0, "type": "integer" }, "min_bedrooms": { "maximum": 10, "minimum": 0, "type": "integer" }, "min_price": { "description": "GBP (per month when renting)", "minimum": 0, "type": "integer" }, "page": { "default": 1, "maximum": 20, "minimum": 1, "type": "integer" }, "sort": { "default": "recommended", "enum": [ "recommended", "price_low", "price_high", "newest" ], "type": "string" } }, "required": [ "location" ], "type": "object" }, "provenance": { "method": "browser-inspect", "notes": "List pages /to-rent/property/<location>/ and /for-sale/property/<location>/ with min-price, max-price, min-bedrooms, sort-field (price, update_date), direction=asc and page; the results (list of 30, totalResults) are in __NEXT_DATA__ props.pageProps.initialReduxState.results. The price is the first token of the full price text ('£400,000', '£1,700 pcm (£392 pw)'); short-price abbreviates sale prices ('£400k'). Keys are hyphenated (\"short-price\", \"spotlight?\") and quoted in JMESPath. Spotlight listings are paid placements. robots.txt gives ClaudeBot a crawl delay only. Answers servers.", "recorded_at": "2026-11-07T22:33:00+01:00", "recorded_by": "C4" }, "requires_login": false, "schema": "https://wield.run/schema/recipe/v1.json", "site": { "country": "GB", "id": "onthemarket.com", "language": "en", "name": "OnTheMarket", "origin": "https://www.onthemarket.com", "origins": [ "https://www.onthemarket.com" ] }, "steps": [ { "description": "The list page (server-rendered; results in the page's Redux state). The one-item foreach builds the path and sort.", "expect": { "content_type": "html", "status": [ 200 ] }, "extract": { "embedded_json": { "selector": "script#__NEXT_DATA__", "vars": { "list": "props.pageProps.initialReduxState.results.list", "total": "props.pageProps.initialReduxState.results.totalResults" } } }, "foreach": { "as": "f", "in": "[{path: params.channel == 'buy' && 'for-sale' || 'to-rent', loc: replace(lower(trim(params.location)), ' ', '-'), field: (params.sort == 'price_low' || params.sort == 'price_high') && 'price' || (params.sort == 'newest' && 'update_date') || `null`, dir: params.sort == 'price_low' && 'asc' || `null`, page: (params.page || `1`) > `1` && to_string(params.page) || `null`}]", "max": 1 }, "id": "search", "request": { "headers": { "Accept": "text/html" }, "method": "GET", "query": { "direction": "{{f.dir}}", "max-price": "{{params.max_price}}", "min-bedrooms": "{{params.min_bedrooms}}", "min-price": "{{params.min_price}}", "page": "{{f.page}}", "sort-field": "{{f.field}}" }, "url": "/{{f.path}}/property/{{f.loc | urlencode}}/" } } ], "task": "Search UK homes to rent or buy on OnTheMarket", "tos": { "notes": "One list page per call, the same page a visitor sees; no enquiries to agents.", "reviewed": false }, "verify": { "checks": [ "length(output.properties) > `10`", "output.total > `100`", "length(output.properties[?price_gbp > `2000`]) == `0`", "length(output.properties[?bedrooms < `2`]) == `0`", "length(output.properties[?promoted]) == `0`", "length(output.properties[?starts_with(url, 'https://www.onthemarket.com/details/')]) == length(output.properties)" ], "example_params": { "channel": "rent", "location": "london", "max_price": 2000, "min_bedrooms": 2 }, "max_ms": 5000 }, "version": 1 }