willhaben Listing Scraper: Austria Marketplace Data avatar

willhaben Listing Scraper: Austria Marketplace Data

Pricing

from $1.52 / 1,000 successful lookups

Go to Apify Store
willhaben Listing Scraper: Austria Marketplace Data

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

Adrian Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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 attributes map 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

  1. In the Apify Console. Open the actor page and click Start — the items 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~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"]}'
  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

{
"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.