Search used cars.
Searches Otomoto.pl used cars like its search page for a query: title, price in PLN, mileage in km, fuel type and listing link, in the page's order. First page of results (about 32 listings). Returns an empty list when nothing matches.
- Site
- Otomoto, Poland
- Version
- v1
- Runs, last 7 days
- No reports yet
- sha256
- 83cb27c9b934…
Run it with your agent
after installing WieldAsk in plain words. Your agent finds this recipe and calls it:
“Search used cars.”
Read-only: it changes nothing on the site. No login needed.
{ "tool": "run", "arguments": { "recipe_id": "otomoto.pl/search-used-cars", "params": { "query": "volkswagen golf" } } }
Requests
sent from your browser, in order- 1GET/osobowe/suche/q-{{params.query | urlencode}}Server-rendered search results page /osobowe/suche/q-<query>; read-only GET. Listing links and ids are the article[data-id] tiles. Titles, prices, mileage and fuel type come from the page's listing JSON-LD, in the same order as the tiles.
Parameters
from your agentquerystringrequiredMake, model or words to search for, e.g. 'volkswagen golf', 'skoda octavia', 'bmw seria 3'
Returns
to your agentlistingsobject[]fuel_type, id, mileage_km, price_pln, title, url
querystring
Where it can send
- www.otomoto.pl
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) > `0`
- length(output.listings[?price_pln > `0`]) > `0`
- length(output.listings[?starts_with(url, 'https://www.otomoto.pl/')]) == length(output.listings)
- length(output.listings[?title != `null`]) == length(output.listings)
Raw recipe
Served as canonical JSON from /api/v1/recipes/otomoto.pl/search-used-cars, so its sha256 matches the ETag and the index.
Check it yourself
curl -s https://wield.run/api/v1/recipes/otomoto.pl/search-used-cars | shasum -a 256 # 83cb27c9b934c9c370609c95dd270ca41859a600d51abbdd55f7a2091aaacdd5
otomoto.pl/search-used-cars.json, v1
{ "description": "Searches Otomoto.pl used cars like its search page for a query: title, price in PLN, mileage in km, fuel type and listing link, in the page's order. First page of results (about 32 listings). Returns an empty list when nothing matches.", "effect": "read", "id": "otomoto.pl/search-used-cars", "keywords": [ "otomoto", "samochody", "używane samochody", "ogłoszenia", "auto", "motoryzacja", "otomoto.pl", "polska", "used cars", "cars", "poland", "vehicles" ], "output": { "schema": { "properties": { "listings": { "items": { "properties": { "fuel_type": { "type": [ "string", "null" ] }, "id": { "type": [ "string", "null" ] }, "mileage_km": { "type": [ "number", "null" ] }, "price_pln": { "type": [ "number", "null" ] }, "title": { "type": [ "string", "null" ] }, "url": { "type": "string" } }, "required": [ "title", "url" ], "type": "object" }, "type": "array" }, "query": { "type": "string" } }, "required": [ "query", "listings" ], "type": "object" }, "value": "{query: params.query, listings: map(&{id: [0].id || `null`, title: [1].name || `null`, price_pln: ([1].price && to_number([1].price)) || `null`, mileage_km: ([1].mileage && to_number([1].mileage)) || `null`, fuel_type: [1].fuel || `null`, url: ([0].href && (starts_with([0].href, 'http') && [0].href || join('', ['https://www.otomoto.pl', [0].href]))) || `null`}, zip(steps.search.ads || `[]`, steps.search.offers || `[]`))[?url != `null`]}" }, "params": { "additionalProperties": false, "properties": { "query": { "description": "Make, model or words to search for, e.g. 'volkswagen golf', 'skoda octavia', 'bmw seria 3'", "maxLength": 100, "minLength": 2, "type": "string" } }, "required": [ "query" ], "type": "object" }, "provenance": { "method": "har", "notes": "One GET to /osobowe/suche/q-<query> (the query goes into the path, spaces as %20; the ?q= parameter is ignored by the site). Listing ids and links come from article[data-id] tiles; name, price, mileage and fuel come from the listing JSON-LD (script data-testid=listing-json-ld), which lists the same offers in the same order. Results are zipped by position. Promoted listings are included with the others.", "recorded_at": "2026-11-08T15:27:23.000Z", "recorded_by": "wield-forge (claude-haiku agent)" }, "requires_login": false, "schema": "https://wield.run/schema/recipe/v1.json", "site": { "country": "PL", "id": "otomoto.pl", "language": "pl", "name": "Otomoto", "origin": "https://www.otomoto.pl", "origins": [ "https://www.otomoto.pl" ] }, "steps": [ { "description": "Server-rendered search results page /osobowe/suche/q-<query>; read-only GET. Listing links and ids are the article[data-id] tiles. Titles, prices, mileage and fuel type come from the page's listing JSON-LD, in the same order as the tiles.", "expect": { "content_type": "html", "status": [ 200 ] }, "extract": { "embedded_json": { "required": false, "selector": "script[data-testid='listing-json-ld']", "vars": { "offers": "mainEntity.itemListElement[].{name: itemOffered.name, price: priceSpecification.price, fuel: itemOffered.fuelType, mileage: itemOffered.mileageFromOdometer.value}" } }, "html_items": { "ads": { "fields": { "href": { "attr": "href", "selector": "h2 a" }, "id": { "attr": "data-id", "selector": ":scope" } }, "max": 60, "selector": "article[data-id]" } } }, "id": "search", "request": { "headers": { "Accept": "text/html" }, "method": "GET", "url": "/osobowe/suche/q-{{params.query | urlencode}}" } } ], "task": "Search used cars", "tos": { "notes": "Not reviewed. One search page per call, the same page a visitor loads. The site's terms on automated access were not checked.", "reviewed": false }, "verify": { "checks": [ "length(output.listings) > `0`", "length(output.listings[?price_pln > `0`]) > `0`", "length(output.listings[?starts_with(url, 'https://www.otomoto.pl/')]) == length(output.listings)", "length(output.listings[?title != `null`]) == length(output.listings)" ], "example_params": { "query": "volkswagen golf" }, "max_ms": 5000 }, "version": 1 }