Search Gumtree classifieds in the UK.
Searches Gumtree, the UK's classifieds site, like its search page: title, price in GBP, location, short description, a photo and the link, for a query near a place, with a price range, distance and sort. Featured (paid) ads are dropped by default; Urgent ads are kept and marked.
- Site
- Gumtree, United Kingdom
- Version
- v1
- Runs, last 7 days
- No reports yet
- sha256
- 98948c3b31ab…
Run it with your agent
after installing WieldAsk in plain words. Your agent finds this recipe and calls it:
“Search Gumtree classifieds in the UK.”
Read-only: it changes nothing on the site. No login needed.
{ "tool": "run", "arguments": { "recipe_id": "gumtree.com/search-listings", "params": { "location": "london", "max_price": 300, "query": "road bike", "sort": "newest" } } }
Requests
sent from your browser, in order- 1GET/search?distance&max_price&min_price&page&q&search_category&search_location&sortThe server-rendered search page /search with the same parameters the site's search form sends. Cards are read from their data-q attributes (the page's ld+json lists only links). The one-item foreach maps the sort.
Parameters
from your agentReturns
to your agentWhere it can send
- www.gumtree.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.listings) > `10`
- output.total > `20`
- length(output.listings[?featured]) == `0`
- length(output.listings[?price_gbp > `300`]) == `0`
- length(output.listings[?starts_with(url, 'https://www.gumtree.com/p/') && title != `null`]) == length(output.listings)
Raw recipe
Served as canonical JSON from /api/v1/recipes/gumtree.com/search-listings, so its sha256 matches the ETag and the index.
curl -s https://wield.run/api/v1/recipes/gumtree.com/search-listings | shasum -a 256 # 98948c3b31ab5cf4258c73fb9e4b8303ec6f1647f4ebf50afb2f4c66b95491f4
{ "description": "Searches Gumtree, the UK's classifieds site, like its search page: title, price in GBP, location, short description, a photo and the link, for a query near a place, with a price range, distance and sort. Featured (paid) ads are dropped by default; Urgent ads are kept and marked.", "effect": "read", "id": "gumtree.com/search-listings", "keywords": [ "gumtree", "classifieds", "for sale", "second hand", "used", "buy", "sell", "bike", "furniture", "sofa", "free", "uk", "london", "manchester", "marketplace" ], "output": { "schema": { "properties": { "listings": { "items": { "properties": { "description": { "type": [ "string", "null" ] }, "featured": { "description": "Paid Featured ad", "type": "boolean" }, "id": { "type": [ "string", "null" ] }, "image": { "type": [ "string", "null" ] }, "location": { "type": [ "string", "null" ] }, "price_gbp": { "type": [ "number", "null" ] }, "price_text": { "description": "As shown, e.g. '£120', '£15pw'", "type": [ "string", "null" ] }, "title": { "type": "string" }, "urgent": { "type": "boolean" }, "url": { "type": "string" } }, "type": "object" }, "type": "array" }, "location": { "type": [ "string", "null" ] }, "page": { "type": "integer" }, "query": { "type": "string" }, "total": { "description": "From the page heading ('1,779 ads for …')", "type": [ "integer", "null" ] } }, "required": [ "query", "listings" ], "type": "object" }, "value": "let $feat = params.include_featured == `true`, $h = steps.search[0].heading || '' in {query: params.query, location: params.location || 'uk', total: contains($h, ' ad') && to_number(replace(split($h, ' ')[0], ',', '')) || `null`, page: params.page || `1`, listings: map(&(let $a = @ in let $p = $a.price && replace(replace(split($a.price, ' ')[0], '£', ''), ',', '') || '' in {id: $a.href && split($a.href, '/')[-1] || `null`, title: $a.title, price_gbp: $p && to_number($p) || `null`, price_text: $a.price || `null`, location: $a.location || `null`, description: $a.description || `null`, featured: contains($a.badges || '', 'Featured'), urgent: contains($a.badges || '', 'Urgent'), image: $a.image || `null`, url: join('', ['https://www.gumtree.com', $a.href])}), steps.search[0].ads[?href && title] || `[]`)[?$feat || !featured]}" }, "params": { "additionalProperties": false, "properties": { "category": { "description": "Gumtree category; default all, or for-sale when a price range is given (Gumtree applies price filters only within a category)", "enum": [ "all", "for-sale", "cars-vans-motorbikes", "property", "jobs", "services", "pets", "community" ], "type": "string" }, "distance_miles": { "description": "Radius around the location", "enum": [ 1, 3, 5, 10, 15, 30, 50, 75, 100 ], "type": "integer" }, "include_featured": { "default": false, "description": "Keep Featured (paid) ads, marked", "type": "boolean" }, "location": { "default": "uk", "description": "Town, area or postcode, e.g. 'london', 'manchester', 'SW1A 1AA'; 'uk' for everywhere", "maxLength": 60, "minLength": 2, "type": "string" }, "max_price": { "description": "GBP", "minimum": 0, "type": "integer" }, "min_price": { "description": "GBP", "minimum": 0, "type": "integer" }, "page": { "default": 1, "maximum": 20, "minimum": 1, "type": "integer" }, "query": { "description": "What to look for, e.g. 'road bike', 'sofa', 'iphone 13'", "maxLength": 100, "minLength": 2, "type": "string" }, "sort": { "default": "relevance", "enum": [ "relevance", "newest", "price_low", "price_high" ], "type": "string" } }, "required": [ "query" ], "type": "object" }, "provenance": { "method": "browser-inspect", "notes": "gumtree.com/search?search_category=all&q=…&search_location=… is server-rendered (Emotion CSS-in-JS; <style> tags sit inside the cards, the interpreter's visible text skips them). Cards: [data-q=search-result] with a[data-q=search-result-anchor], [data-q=tile-title], [data-q=tile-price], [data-q=tile-location], [data-q=tile-description] and a badges box ('Featured' = paid placement, 'Urgent' = paid flag on a genuine ad). The page's ld+json ItemList carries only URLs. The total comes from the H1 ('1,779 ads for road bike in London'). Parameters as the search form sends them (search_category: all, for-sale, …; the price range is applied only within a category, so the recipe uses for-sale when a price is given without a category): min_price, max_price, distance, sort (date, price_lowest_first, price_highest_first), page. robots.txt has no rules for Claude-User or anthropic agents and allows /search. Servers get a bot check: after 6 requests in ~10 minutes Gumtree answered HTTP 247 (its own bot-management status), so the example passed live once from Node and the variants are untested; expect health checks from servers to be blocked (browser-only).", "recorded_at": "2026-11-07T22:25:00+01:00", "recorded_by": "C4" }, "requires_login": false, "schema": "https://wield.run/schema/recipe/v1.json", "site": { "country": "GB", "id": "gumtree.com", "language": "en", "name": "Gumtree", "origin": "https://www.gumtree.com", "origins": [ "https://www.gumtree.com" ] }, "steps": [ { "description": "The server-rendered search page /search with the same parameters the site's search form sends. Cards are read from their data-q attributes (the page's ld+json lists only links). The one-item foreach maps the sort.", "expect": { "content_type": "html", "status": [ 200 ] }, "extract": { "html": { "heading": { "selector": "h1" } }, "html_items": { "ads": { "fields": { "badges": { "selector": "[data-testid=\"rh-standard-card-badges\"]" }, "description": { "selector": "[data-q=\"tile-description\"]" }, "href": { "attr": "href", "selector": "a[data-q=\"search-result-anchor\"]" }, "image": { "attr": "src", "selector": "img" }, "location": { "selector": "[data-q=\"tile-location\"]" }, "price": { "selector": "[data-q=\"tile-price\"]" }, "title": { "selector": "[data-q=\"tile-title\"]" } }, "max": 60, "selector": "[data-q=\"search-result\"]" } } }, "foreach": { "as": "f", "in": "[{cat: params.category || ((params.min_price || params.max_price) && 'for-sale') || 'all', sort: (params.sort == 'newest' && 'date') || (params.sort == 'price_low' && 'price_lowest_first') || (params.sort == 'price_high' && 'price_highest_first') || `null`, page: (params.page || `1`) > `1` && to_string(params.page) || `null`}]", "max": 1 }, "id": "search", "parse": "html", "request": { "headers": { "Accept": "text/html" }, "method": "GET", "query": { "distance": "{{params.distance_miles}}", "max_price": "{{params.max_price}}", "min_price": "{{params.min_price}}", "page": "{{f.page}}", "q": "{{params.query}}", "search_category": "{{f.cat}}", "search_location": "{{params.location}}", "sort": "{{f.sort}}" }, "url": "/search" } } ], "task": "Search Gumtree classifieds in the UK", "tos": { "notes": "robots.txt has no AI-agent rules (no Claude-User, ClaudeBot or anthropic-ai group, no Content-Signal), checked 2026-11-07. Terms not reviewed yet for automated access. One person's search: 1 request for one results page, as the site serves it. Replies to sellers stay on gumtree.com.", "reviewed": false }, "verify": { "checks": [ "length(output.listings) > `10`", "output.total > `20`", "length(output.listings[?featured]) == `0`", "length(output.listings[?price_gbp > `300`]) == `0`", "length(output.listings[?starts_with(url, 'https://www.gumtree.com/p/') && title != `null`]) == length(output.listings)" ], "example_params": { "location": "london", "max_price": 300, "query": "road bike", "sort": "newest" }, "max_ms": 6000 }, "version": 1 }