Sign inTry it

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.

No reports yetRead-only, no login
Site
OnTheMarket, United Kingdom
Version
v1
Runs, last 7 days
No reports yet
sha256
00790910b5cd…

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 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
  1. 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.repeats, max 1

Parameters

from your agent
channelenum "rent" | "buy" = "rent"
include_spotlightbooleanKeep paid spotlight listings (marked promoted) = false
locationstringrequiredTown, area or postcode district as OnTheMarket names it, e.g. 'london', 'manchester', 'sw11', 'bristol'
max_priceintegerGBP (per month when renting)
min_bedroomsinteger
min_priceintegerGBP (per month when renting)
pageinteger = 1
sortenum "recommended" | "price_low" | "price_high" | "newest" = "recommended"

Returns

to your agent
channelstring
locationstring
pageinteger
propertiesobject[]added, address, agent, bathrooms, bedrooms, id, latitude, longitude, price_gbp, price_qualifier, price_text, promoted, property_type, title, url
totalinteger

Where 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.

Check it yourself
curl -s https://wield.run/api/v1/recipes/onthemarket.com/search-properties | shasum -a 256
# 00790910b5cdc3e4d564285e8cc92d61a8fdf63737307980364d1ca0c44305fd
onthemarket.com/search-properties.json, v1
{
  "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
}