Otomoto Listing Lookup — Poland's Dominant Car Marketplace API avatar

Otomoto Listing Lookup — Poland's Dominant Car Marketplace API

Pricing

from $1.50 / 1,000 successful lookups

Go to Apify Store
Otomoto Listing Lookup — Poland's Dominant Car Marketplace API

Otomoto Listing Lookup — Poland's Dominant Car Marketplace API

Look up vehicle listings on otomoto.pl, Poland's dominant car marketplace, by URL. Get price, make, model, year, mileage, fuel type, engine, gearbox, condition, seller type, and city. Pay only for listings that resolve.

Pricing

from $1.50 / 1,000 successful lookups

Rating

0.0

(0)

Developer

Adrian Voss

Adrian Voss

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 hours 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

$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.pl API — Car Listing Data 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.