willhaben Listing Scraper: Austria Marketplace Data
Pricing
from $1.52 / 1,000 successful lookups
willhaben Listing Scraper: Austria Marketplace Data
Look up any willhaben.at listing by URL: price, title, status, and full category attributes (mileage, make, model, fuel type, transmission for vehicles; raw attributes for every other category). Charged only for listings that resolve.
Pricing
from $1.52 / 1,000 successful lookups
Rating
0.0
(0)
Developer
Adrian Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
willhaben Listing Lookup
Look up any listing on willhaben.at, Austria's largest online marketplace for vehicles, real estate, and general classifieds — price, title, status, and the full category attribute set (mileage, make, model, fuel type, transmission for vehicles; the equivalent raw attributes for every other category). This is not an official willhaben API: the actor fetches the public listing page and reads the same structured data the page itself renders from.
Features
- URL → structured listing record. Ad ID, title, status, price (numeric and as-displayed), and currency.
- Vehicle-specific fields. Make, model, mileage (km), fuel type, transmission, and model year, pulled straight out of the listing's own attribute set.
- Every category attribute, raw. A
attributesmap with every name/value pair willhaben stores on the listing, so non-vehicle categories (real estate, general marketplace) aren't left with empty fields. - Pay only for hits. Removed, expired, or invalid listing URLs cost nothing — see Pricing.
- Built for bulk. Feed in thousands of listing URLs; concurrency and proxy group are both configurable.
How to use willhaben Listing Lookup — Price & Vehicle Attribute API
- In the Apify Console. Open the actor page and click Start — the
itemsfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - 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~willhaben-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"items":["https://www.willhaben.at/iad/gebrauchtwagen/d/auto/vw-touran-comfortline-1-6-tdi-comfortline-dsg-1731057880"]}'
- 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
{"items": ["https://www.willhaben.at/iad/gebrauchtwagen/d/auto/alfa-romeo-mito-...-991753367","/iad/gebrauchtwagen/d/auto/some-other-listing-123456789"],"maxConcurrency": 5,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
items is a list of willhaben listing identifiers — full listing URLs (the
/iad/.../d/... permalink) or bare paths, which are resolved against
https://www.willhaben.at automatically. maxConcurrency (default 5, max 20)
controls how many listings are fetched in parallel; keep it conservative, since
this target has no browser fallback if it starts blocking. proxyConfiguration
defaults to the Residential proxy group — plain datacenter IPs get a 403 from
this target, so leave the default in place unless you know your setup works
around it.
Output
One row per input item, for example:
{"query": "https://www.willhaben.at/iad/gebrauchtwagen/d/auto/alfa-romeo-mito-...-991753367","found": true,"data": {"adId": "991753367","title": "Alfa Romeo MiTo 1.4 TB MultiAir Distinctive","status": "ACTIVE","price": 8990,"priceDisplay": "€ 8.990,-","currency": "EUR","make": "Alfa Romeo","model": "MiTo","mileageKm": 87000,"fuelType": "Benzin","transmission": "Manuell","yearModel": "2010","attributes": { "...": "every raw attribute name/value pair from the listing" },"image": "https://cache.willhaben.at/...","url": "https://www.willhaben.at/iad/gebrauchtwagen/d/auto/alfa-romeo-mito-...-991753367"},"scrapedAt": "2026-08-20T12:00:00.000Z"}
A listing that's been removed, expired, or was never valid — willhaben 308-redirects
those to an unrelated category page with no listing data — comes back as
{ "query": "...", "found": false, "scrapedAt": "..." } and is never charged.
Use cases
- Track price changes on specific vehicle, real estate, or marketplace listings over time.
- Pull mileage, fuel type, and transmission across a shortlist of cars for side-by-side comparison.
- Check whether a batch of previously-seen listings is still active or has been removed/sold.
- Build a structured dataset from category attributes for local market research.
- Verify a listing URL is live and resolvable before linking to it elsewhere.
Pricing
$2 per 1,000 results, 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~willhaben-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"items":["https://www.willhaben.at/iad/gebrauchtwagen/d/auto/vw-touran-comfortline-1-6-tdi-comfortline-dsg-1731057880"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~willhaben-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"items":["https://www.willhaben.at/iad/gebrauchtwagen/d/auto/vw-touran-comfortline-1-6-tdi-comfortline-dsg-1731057880"]} (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~willhaben-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"items":["{{value}}"]}, mapping the row's value into the items array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "willhaben Listing Lookup | Apify" — the agent will find and run this actor.
FAQ
What can I put in items? Full willhaben listing URLs (the /iad/.../d/...
permalink), or a bare path starting with /iad/... — those get the
https://www.willhaben.at domain prepended automatically.
What happens if a listing was removed or the URL is wrong? willhaben
308-redirects invalid or expired listing IDs to an unrelated category page that
has no advertDetails in its data. The actor treats that as not-found, records
found: false, and does not charge for it.
Is this using an official willhaben API? No — willhaben doesn't publish one.
The actor requests the public listing page and reads the same __NEXT_DATA__
JSON the page uses to render itself, which is more stable than parsing rendered
HTML but is still a page scrape, not a documented API contract.
Why do vehicle listings have more fields than other categories? The
make/model/mileageKm/fuelType/transmission/yearModel fields are
convenience shortcuts pulled from vehicle-specific attribute keys. Every
category — vehicles included — also gets the full raw attributes object, so
real estate or general marketplace listings aren't missing data, just the
named shortcuts.
Do I need to change the proxy configuration? No, and you generally shouldn't. This target returns HTTP 403 through the shared datacenter proxy pool but works through Residential, which is the default — only touch it if you have a specific reason to.
How high can I set maxConcurrency? Up to 20, but the default of 5 is a
reasonable starting point. This target has no browser fallback, so a burst of
concurrent requests that trips anti-bot defenses costs you more (blocked, unpaid
requests) than a slower, steady crawl.