Sign inTry it

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.

No reports yetRead-only, no login
Site
Otomoto, Poland
Version
v1
Runs, last 7 days
No reports yet
sha256
83cb27c9b934…

Run it with your agent

after installing Wield

Ask 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
  1. 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 agent
querystringrequiredMake, model or words to search for, e.g. 'volkswagen golf', 'skoda octavia', 'bmw seria 3'

Returns

to your agent
listingsobject[]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
}