Willhaben.at $1π° URL Search | Keyword Filtering | Rich Output
Pricing
from $1.00 / 1,000 results
Willhaben.at $1π° URL Search | Keyword Filtering | Rich Output
From $1/1K. Extract structured listing data directly from Willhaben.at into clean JSON with 40+ fields, including GPS coordinates, photos, dates, seller details, and category-specific attributes. Search by filters or any Willhaben URL.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
4 days ago
Last modified
Categories
Share
Willhaben.at Scraper
Willhaben.at is Austria's largest online marketplace, covering general goods, property, used cars, and jobs. This actor pulls structured listing data straight from willhaben's own data source, so you get clean JSON with roughly 40 fields per ad (often many more), including full geo coordinates, every photo, dates, seller type, and per-category attributes. Build a search from filters, or paste any willhaben search-page URL.
Why This Scraper?
- Roughly 40 base fields per listing, plus every category-specific attribute flattened into the record (cars get make, model, mileage, year, fuel, transmission, equipment; property gets rooms, living area, floor, price per square meter).
- Two ways to start: a search builder (category, keyword, price range, location, sort) and a paste-URLs mode that accepts any willhaben search page.
- GPS latitude and longitude, full address hierarchy (state, district, postcode, municipality), and all photo URLs on every record.
- Optional detail enrichment adds contact name, dealer or organisation info, address detail, and the complete attribute set.
- Fast: reads willhaben's structured data directly instead of rendering pages, with concurrent detail fetching.
- Automatic forward pagination with de-duplication across pages.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
| id | 000000001 |
| url | https://www.willhaben.at/iad/gebrauchtwagen/d/auto/sample-000000001/ |
| title | Sample Listing Title |
| description | Full listing description text appears here. |
| price | 7800 |
| priceDisplay | β¬ 7.800 |
| category | gebrauchtwagen/auto/gebrauchtwagenboerse |
| make | SampleMake |
| model | SampleModel |
| mileage | 120000 |
| year | 2019 |
| fuel | Benzin |
| transmission | Automatik |
| condition | Gebrauchtwagen |
| state | Wien |
| district | Wien |
| postcode | 1010 |
| locationName | Sample Location |
| latitude | 48.2000 |
| longitude | 16.3700 |
| publishedDate | 2026-01-01T00:00:00.000Z |
| advertiserLabel | Privat |
| isPrivate | true |
| imageCount | 12 |
| mainImage | https://cache.willhaben.at/mmo/0/000/000/000_0.jpg |
| images | ["https://cache.willhaben.at/mmo/0/000/000/000_0.jpg", ...] |
| contactName | A. B. |
| organisationName | Sample Dealer |
Plus an attr_* key for every raw attribute the category exposes, and a rawAttributes array preserving the original structure.
How to Use
Search a category (used cars), list-only:
{"mode": "search","category": "gebrauchtwagen/auto/gebrauchtwagenboerse","maxListings": 20,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "AT" }}
Search the marketplace by keyword with a price range:
{"mode": "search","category": "kaufen-und-verkaufen/marktplatz","keyword": "iphone","minPrice": 100,"maxPrice": 500,"sort": "price-asc","maxListings": 200,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "AT" }}
Rentals in Vienna with detail enrichment:
{"mode": "search","category": "immobilien/mietwohnungen","areaId": 900,"fetchDetails": true,"maxListings": 50,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "AT" }}
Search jobs by keyword:
{"mode": "search","category": "jobs","keyword": "python","sort": "newest","maxListings": 100,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "AT" }}
Paste any willhaben search URLs (multi-URL, forward pagination):
{"mode": "url","urls": ["https://www.willhaben.at/iad/immobilien/eigentumswohnung/wien","https://www.willhaben.at/iad/gebrauchtwagen/auto/gebrauchtwagenboerse?YEAR_MODEL_FROM=2018"],"maxPages": 5,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "AT" }}
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| mode | string | search | "search" builds a query from filters; "url" scrapes pasted search pages. |
| category | string | kaufen-und-verkaufen/marktplatz | Section to scrape (Search mode). Includes Jobs, which returns job-specific fields (company, salary, employment type) and ignores the price and area filters. |
| categoryPath | string | (empty) | Advanced: override category with any willhaben SEO path. |
| keyword | string | (empty) | Free-text keyword within the category. |
| areaId | integer | (empty) | willhaben location ID, for example 900 for Vienna. |
| minPrice | integer | (empty) | Minimum price in euros. |
| maxPrice | integer | (empty) | Maximum price in euros. |
| sort | string | default | One of default, newest, price-asc, price-desc. |
| customParameters | array | [] | Extra raw willhaben filters as KEY=VALUE strings. |
| urls | array | (example) | Search-page URLs (URL mode). |
| fetchDetails | boolean | false | Open each detail page for contact and dealer info. |
| maxListings | integer | 20 | Maximum listings across all searches (0 for unlimited). |
| maxPages | integer | (empty) | Optional bound on pages walked per search/URL (about 25 listings per page). Leave empty to walk every result page; maxListings remains the item-count cap. |
| resumeFromRunId | string | (empty) | Paste a previous run ID (or dataset ID) from this actor to skip listings already collected there, so this run only returns new ones. For recurring daily/weekly monitoring of the same search, use incrementalMode below instead. |
| incrementalMode | boolean | false | Turn on for daily/recurring monitoring of the same search. The first run returns everything as NEW; later runs return only NEW/UPDATED/REAPPEARED by default. State is kept per search/category/URL/filter combination. |
| stateKey | string | (empty) | Optional: name the monitoring campaign so its state stays stable, or to deliberately share state across differently-configured runs. Leave empty to derive a key automatically from the search/filter settings. |
| emitUnchanged | boolean | false | Incremental mode only: also return (and bill) listings unchanged since the last run, marked UNCHANGED. |
| emitExpired | boolean | false | Incremental mode only: also return (and bill) listings from a previous run no longer found, marked EXPIRED. Only produced after a run that fully scanned the tracked search (not capped by maxListings, not a Resume run). |
| proxy | object | Residential AT | Proxy settings. Residential Austria is required. |
Incremental mode adds changeType (NEW/UPDATED/UNCHANGED/REAPPEARED/EXPIRED), changedFields, firstSeenAt, and lastSeenAt to every record.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape β the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record β not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify β Settings β Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"id": "000000001","uuid": "00000000-0000-0000-0000-000000000000","url": "https://www.willhaben.at/iad/gebrauchtwagen/d/auto/sample-000000001/","title": "Sample Listing Title","description": "Full listing description text appears here.","price": 7800,"priceDisplay": "β¬ 7.800","category": "gebrauchtwagen/auto/gebrauchtwagenboerse","make": "SampleMake","model": "SampleModel","mileage": 120000,"year": 2019,"fuel": "Benzin","transmission": "Automatik","condition": "Gebrauchtwagen","country": "Γsterreich","state": "Wien","district": "Wien","postcode": "1010","locationName": "Sample Location","latitude": 48.2000,"longitude": 16.3700,"publishedDate": "2026-01-01T00:00:00.000Z","changedDate": "2026-01-01T00:00:00.000Z","isPrivate": true,"advertiserLabel": "Privat","imageCount": 2,"mainImage": "https://cache.willhaben.at/mmo/0/000/000/000_0.jpg","images": ["https://cache.willhaben.at/mmo/0/000/000/000_0.jpg","https://cache.willhaben.at/mmo/0/000/000/000_1.jpg"]}
Plan Requirement
willhaben.at accepts traffic only from Austrian (or nearby EU) residential connections; datacenter proxies are rejected. Use an Apify plan that includes Residential proxy (Starter or higher) and set the proxy country to AT. The actor automatically rotates AT and DE residential exits and falls back to a backup route if needed. On the free plan, residential proxy is not available, so runs may return no results; the actor logs guidance when that happens.