DEV Community

Cover image for How to Scrape willhaben.at Listings in Vienna Without a Paid API
Tim Zinin
Tim Zinin

Posted on Originally published at apify.com

How to Scrape willhaben.at Listings in Vienna Without a Paid API

The problem

Willhaben.at is Austria's biggest classifieds portal, and its Vienna apartment listings — rentals under mietwohnungen, for-sale apartments under eigentumswohnung — are the raw material for anyone tracking the Viennese housing market. There is no public API, so the manual route is browsing search pages, opening each ad, and transcribing price, rooms, area, district and photos into a spreadsheet. For a market-research snapshot that is tedious; for a monitoring workflow that needs fresh numbers every day, it is a part-time job.

A do-it-yourself scraper runs into practical walls quickly: pagination behavior, German-language labels that do not map cleanly onto English field names, coordinates and posting dates that must be normalized, and the usual question of what to do when a query legitimately returns zero results — is the city slug wrong, or is the market empty?

What the actor does

The Willhaben Vienna Real Estate Listings actor pulls live apartment listings straight from Willhaben.at's public search-results feed for Vienna. No login, no API key, no browser, no proxies on your side. For every ad found it extracts:

  • title, price in EUR as a number (monthly rent for rentals, asking price for sales), and deal_type (rent or sale, from your input filter);
  • property_type as the raw German label Willhaben shows (e.g. "Wohnung" for apartment), rooms and area_sqm (null when the listing doesn't state them);
  • location as district/street text (e.g. "Wien, 22. Bezirk, Donaustadt"), plus lat and lng coordinates when the listing publishes them;
  • posted_date as a full ISO-8601 timestamp with year, a short description, up to 5 preview images from the listing's gallery, and the direct listing url;
  • provenance fields found, source_portal and scraped_at on every row.

Input is deliberately small: deal_type (mietwohnungen for rentals, eigentumswohnung for sale), city (defaults to wien), max_items (default 100) and max_pages (default 3, 30 listings per page).

Zero-result queries are explicit, not silent. A found: false row with a plain-language note — for example, that Willhaben does not recognize the city slug for that deal type — tells you the query was answered with nothing, as distinct from a request error. Those rows are never charged.

The README is candid about scope: only the wien city slug is verified to work reliably — Willhaben structures some regions' URLs differently, and a real Austrian city like Graz 404s under the same path shape. The actor reads only what the search-results feed already includes; it does not fetch the seller's phone number or the full listing-detail page.

Example: input and output

{
    "deal_type": "mietwohnungen",
    "city": "wien",
    "max_items": 5,
    "max_pages": 1
}
Enter fullscreen mode Exit fullscreen mode

A real row from a verification run (2026-07-30):

{
    "found": true,
    "url": "https://www.willhaben.at/iad/immobilien/d/mietwohnungen/wien/wien-1220-donaustadt/freiheit-mieten-pioniere-sein-dein-neuer-ort-dein-neues-zuhause-am-hausfeld-top-33-1516598431/",
    "title": "FREIHEIT MIETEN, PIONIERE SEIN. Dein neuer Ort, dein neues Zuhause am Hausfeld! (Top 33)",
    "price": 1144.18,
    "currency": "EUR",
    "deal_type": "rent",
    "property_type": "Wohnung",
    "rooms": 2,
    "area_sqm": 51,
    "location": "Wien, 22. Bezirk, Donaustadt",
    "lat": 48.23089198,
    "lng": 16.47927772,
    "posted_date": "2026-07-30T08:59:03Z",
    "description": "Bist Du bereit, als Pionier das Obere Hausfeld zu erobern? Hier, am Hausfeld, direkt an der neuen U2, verschmelzen die Vorzüge der Metropole mit der Weite des Umlands zu einem einzigartigen Lebensgefühl...",
    "images": [
        "https://cache.willhaben.at/mmo/1/151/659/8431_741170553.jpg",
        "https://cache.willhaben.at/mmo/1/151/659/8431_-1458965307.jpg"
    ],
    "source_portal": "willhaben-vienna",
    "scraped_at": "2026-07-30T07:16:39.368Z"
}
Enter fullscreen mode Exit fullscreen mode

(The actual row carries five preview images; two shown here.)

Pricing and the free limit

Pay per event: $0.005 per run start plus $0.002 per result row. A run that collects 100 listings costs about $0.205. Rows where the source returned nothing — an unrecognized city, a query with zero matching listings — come back for transparency but are never charged.

Apify's free plan gives $5 of usage credits per month. At this tariff, $5 covers about 24 full 100-listing runs (24 × $0.205 = $4.92).

Try it

The city already defaults to wien — pick a deal type and press Start: Willhaben Vienna Real Estate Listings

For AI agents and MCP

The actor takes JSON in and returns structured JSON dataset rows via the Apify API, so an agent can start a run, read the dataset, and branch on the found flag — real listings carry price, rooms, area, coordinates and deal type, while found: false rows explain themselves in a note field. Results export to JSON, CSV or Excel, or flow onward through a webhook. The README documents an MCP server setup for the actor alongside JavaScript, Python and CLI examples.

Top comments (0)