Otomoto Car Scraper: Poland Listing Price & Specs avatar

Otomoto Car Scraper: Poland Listing Price & Specs

Pricing

from $0.65 / 1,000 successful lookups

Go to Apify Store
Otomoto Car Scraper: Poland Listing Price & Specs

Otomoto Car Scraper: Poland Listing Price & Specs

Look up vehicle listings on otomoto.pl, Poland's dominant car marketplace, by URL: check price and mileage before buying a car on Otomoto, or whether Otomoto listings are still live. Get price, make, model, year, mileage, fuel type, engine, gearbox, condition, seller type and city.

Pricing

from $0.65 / 1,000 successful lookups

Rating

0.0

(0)

Developer

Adriana Voss

Adriana Voss

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Otomoto Listing Lookup

Look up any vehicle listing on otomoto.pl, Poland's dominant car marketplace, by URL — price, make, model, year, mileage, fuel type, engine, gearbox, body type, condition, seller, and location. The listing's full detail set is embedded server-side in a __NEXT_DATA__ JSON payload, so this reads structured data directly rather than scraping rendered HTML.

Features

  • URL → full listing record. Title, price, currency, and status straight from the page's own data, not parsed from visible text.
  • Full vehicle spec. Make, model, year, mileage, fuel type, engine power and capacity, gearbox, body type, color, condition, and accident-free flag.
  • Seller & location. Seller type (private/dealer), seller name, city, region, and photo count.
  • Pay only for hits. Listings that don't resolve — sold, removed, or malformed URLs — cost nothing; see Pricing.
  • Built for bulk. Feed in thousands of listing URLs; concurrency, keyword filtering, and column selection are all configurable.

How to use Otomoto Listing Lookup — Poland's Dominant Car Marketplace API

  1. In the Apify Console. Open the actor page and click Start — the listingUrls field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. Via the API. Call it directly with a POST request — no Console needed once you have an API token:
    curl "https://api.apify.com/v2/acts/accountable_eel~otomoto-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
    -X POST \
    -H "Content-Type: application/json" \
    -d '{"listingUrls":["https://www.otomoto.pl/osobowe/oferta/bmw-seria-5-ID6I3va0.html"]}'
  3. On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.

Input

{
"listingUrls": [
"https://www.otomoto.pl/osobowe/oferta/bmw-seria-5-ID6I3va0.html"
]
}

One otomoto.pl vehicle listing URL per line (the /osobowe/oferta/... page). Accepted formats: https://www.otomoto.pl/osobowe/oferta/bmw-seria-5-ID6I3va0.html.

{
"listingUrls": [
"https://www.otomoto.pl/osobowe/oferta/bmw-seria-5-ID6I3va0.html"
],
"testRun": false,
"onlyFound": false,
"maxConcurrency": 5
}

listingUrls is a list of otomoto.pl vehicle listing URLs (the /osobowe/oferta/... page). One dataset row is returned per URL; rows with "found": false are never charged. Turn on testRun to try your list against just the first 5 URLs before running the full batch. Optional includeKeywords / excludeKeywords filter rows by content, maxResults caps the run early, and columns lets you pick which fields to return. proxyConfiguration defaults to Residential proxies — this is a defended marketplace at scale, so a plain datacenter IP risks getting blocked.

Output

queryfoundstatustitlepricecurrencymakemodelyearmileageKmfuelTypeenginePowerengineCapacitygearboxbodyTypecolorconditionaccidentFreesellerTypesellerNamecityregionphotoCountlistingIdurlscrapedAt
https://www.otomoto.pl/osobowe/oferta/bmw-seria-5-ID6I3va0.htmltrueOKBMW Seria 549000PLNBMWSeria 5201998000Benzyna245 KM1 998 cm3AutomatycznaSedanBiałyUżywanytruePRIVATEOlekWrocławDolnośląskie106147794388https://www.otomoto.pl/osobowe/oferta/bmw-seria-5-ID6I3va0.html2026-08-31T07:10:15.700Z

One row per listing URL, for example:

{
"query": "https://www.otomoto.pl/osobowe/oferta/bmw-seria-5-ID6I3va0.html",
"found": true,
"status": "OK",
"listingId": "6I3va0",
"title": "BMW Seria 5 520d xDrive",
"url": "https://www.otomoto.pl/osobowe/oferta/bmw-seria-5-ID6I3va0.html",
"price": 129900,
"currency": "PLN",
"make": "BMW",
"model": "Seria 5",
"year": 2019,
"mileageKm": 98000,
"fuelType": "Diesel",
"enginePower": "190 KM",
"engineCapacity": "1995 cm3",
"gearbox": "Automatyczna",
"bodyType": "Sedan",
"color": "Czarny",
"condition": "Używane",
"accidentFree": true,
"sellerType": "Dealer",
"sellerName": "Auto Centrum Warszawa",
"city": "Warszawa",
"region": "mazowieckie",
"photoCount": 24,
"scrapedAt": "2026-08-21T10:00:00.000Z"
}

Listings that no longer exist — sold or removed — still get a row ("found": false, "status": "NOT_FOUND"), so you always get one row per input URL, but you're never charged for those.

Use cases

  • Price monitoring — track asking prices on a watchlist of listings over time.
  • Inventory enrichment — attach full vehicle spec to a list of listing URLs pulled from search results or a lead list.
  • Dealer research — compare seller type, pricing, and mileage across listings from a specific dealer or region.
  • Market analysis — build a dataset of make/model/year/price combinations for valuation or trend work.
  • Listing health checks — confirm which URLs in a saved list are still live before reaching out to a seller.

Pricing

$1.3 per 1,000 listings, plus a $0.00005 start fee. Misses (found:false) are never charged.

Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

curl "https://api.apify.com/v2/acts/accountable_eel~otomoto-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
-X POST \
-H "Content-Type: application/json" \
-d '{"listingUrls":["https://www.otomoto.pl/osobowe/oferta/bmw-seria-5-ID6I3va0.html"]}'

n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~otomoto-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"listingUrls":["https://www.otomoto.pl/osobowe/oferta/bmw-seria-5-ID6I3va0.html"]} (swap in an expression from an earlier node for a real value).

Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~otomoto-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"listingUrls":["{{listing}}"]}, mapping the row's listing into the listingUrls array.

MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "Otomoto Scraper: Car Listing Price & Specs by URL" — the agent will find and run this actor.

FAQ

Do I need to log in to Otomoto to look up a listing? No. This actor reads the listing's own embedded page data over a plain HTTP request — no account or API key involved.

What happens if a listing has sold or been removed? You get a dataset row with "found": false and "status": "NOT_FOUND" — Otomoto returns HTTP 404 or 410 for gone listings, and that row is never charged.

Why does this default to Residential proxies? Otomoto is a large, actively defended marketplace. A plain datacenter IP risks getting blocked at any real volume, so Residential is the safer default — you can override it in proxyConfiguration if you have your own proxy setup.

Can I look up listings in bulk? Yes. Turn on testRun first to sanity-check your list against 5 URLs, then run the full batch — maxConcurrency controls how many requests run in parallel (keep it conservative; this target has no browser fallback, so getting blocked costs more than slow-and-steady).

What URL format does it accept? The full listing page URL, e.g. https://www.otomoto.pl/osobowe/oferta/bmw-seria-5-ID6I3va0.html. A bare listing slug also works — it gets expanded to the full URL automatically.

Does the price field include currency conversion? No — price and currency are returned exactly as Otomoto lists them (almost always PLN), with no conversion applied.