Willhaben Property Scraper - Austria Real Estate Data avatar

Willhaben Property Scraper - Austria Real Estate Data

Pricing

from $1.06 / 1,000 property listings

Go to Apify Store
Willhaben Property Scraper - Austria Real Estate Data

Willhaben Property Scraper - Austria Real Estate Data

Scrape every willhaben.at property listing across Austria — apartments, houses, plots and commercial, to buy or to rent. Price, price per m², area, rooms, GPS, agency and photos on every row, plus the energy certificate and agency phone number on demand.

Pricing

from $1.06 / 1,000 property listings

Rating

0.0

(0)

Developer

SIÁN OÜ

SIÁN OÜ

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Willhaben Property Scraper — Austrian Real Estate Data 🏘️

SIÁN Agency Store ImmobilienScout24 Property Scraper Immowelt Property Scraper WG-Gesucht Property Scraper

🎉 200 listings per request, no depth limit — a 42,000-listing category comes out whole

Built for analysts, agencies and investors who need the Austrian market as a spreadsheet

🔎 What is the Willhaben Property Scraper — and when should you use it?

The Willhaben Property Scraper turns public property listings from willhaben.at, Austria's dominant classifieds portal into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

Use it when you need: Austrian property listings in bulk: asking price or monthly rent, price per square metre, living area, plot area, room count, property type, fittings, outdoor space, postcode, district, province, GPS coordinates, the listing agency and every photo. Switch on full details and each row also carries the complete description, the energy certificate with its HWB value and class, heating and building type, monthly running costs, the availability date and the agency's phone number.

Use something else when: the property is not in Austria. Use ImmobilienScout24 Property Scraper for the German market, where ImmobilienScout24 plays the role willhaben plays in Austria. Use Immowelt Property Scraper for Germany's second portal, useful when a German search needs a second source. Use WG-Gesucht Property Scraper for flatshares and student rooms, which willhaben barely carries. This actor covers willhaben's property section only. Cars, jobs and the general marketplace use different attribute sets and are out of scope.

🤖 Use with AI agents

Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/willhaben-property-scraper

Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

I want Austrian property listings and prices from willhaben using the Apify Actor `sian.agency/willhaben-property-scraper`.
Use it when I need: Austrian property listings in bulk: asking price or monthly rent, price per square metre, living area, plot area, room count, property type, fittings, outdoor space, postcode, district, province, GPS coordinates, the listing agency and every photo. Switch on full details and each row also carries the complete description, the energy certificate with its HWB value and class, heating and building type, monthly running costs, the availability date and the agency's phone number.
Don't use it when: the property is not in Austria — use immobilienscout24-property-scraper or immowelt-property-scraper or wg-gesucht-property-scraper instead.
How to call it: pick a `propertyCategory` (`101` apartments for sale, `131` apartments for rent, `102` houses for sale, `14` plots, `90` everything) and optionally a `province` (`900` Wien, `3` Niederösterreich, `6` Steiermark, `all` for the country). Narrow with `minPrice`, `maxPrice`, `minLivingArea`, `maxLivingArea`, `rooms`, `outdoorSpace`, `availableNow`, `postedLast48Hours` or a German `keyword`, and cap the run with `maxResults`. `includeDetails` adds the full description, energy certificate and agency phone number for an extra charge per listing. To expand listings you already have, set `operation` to `detail` and pass `listingUrls`; to reuse a search you built on willhaben.at, paste it into `searchUrls`.
Start with this input:
{
"operation": "search",
"propertyCategory": "101",
"province": "900",
"minPrice": 300000,
"maxPrice": 500000,
"rooms": "3X3",
"maxResults": 200
}
Ask me which property category and which province, and whether they want the full details with the energy rating and agency phone number, then run the Actor and summarise the results as a table.

Things you can ask your agent for:

  • Pull every three-room apartment for sale in Vienna between 300k and 500k and rank the districts by median price per square metre.
  • Give me everything listed for rent in Steiermark in the last 48 hours, with the agency phone number, sorted newest first.
  • Compare apartments for sale against apartments for rent in the same postcodes and show me gross rental yield by district.

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/willhaben-property-scraper.md.

📋 Overview

willhaben.at is where Austrian property lives. This actor turns any of its twelve property categories into clean rows: price, price per square metre, living area, rooms, location, GPS, agency and photos. Switch on full details and each row also carries the energy certificate and the agency's phone number.

What you get:

  • All twelve categories: apartments, houses, plots, commercial, holiday property and new builds, to buy or to rent
  • 200 listings per request: one call returns 200 parsed rows, so a 42,000-listing category is 210 requests
  • 🎯 No depth ceiling: page 210 of a 42,000-listing sweep still returns rows, so you get the whole category rather than the first thousand
  • 💰 From $1.20 per 1,000 listings: below every willhaben property specialist on the Store, with 25 rows free to try
  • 💎 The Energieausweis: full details carry the HWB figure and its energy class, which Austrian law requires on every listing
  • A real search builder: category, province, price band, area, rooms, outdoor space, availability and recency are all form fields, not a URL you have to construct

✨ Features

  • 🏘️ Twelve property categories: pick one from a dropdown instead of hunting for the right willhaben URL
  • 📍 Province filter: all nine Bundesländer, plus willhaben's cross-border bucket
  • 🎛️ The filters that matter: price band, living area, exact room count, outdoor space, available now, posted in the last 48 hours
  • 📄 Full details on demand: complete description, energy certificate, heating, building type and condition, running costs and the agency's direct phone number
  • 🌐 Paste a search instead: any willhaben search URL works, including single-district searches the form does not expose
  • 🖼️ Every photo: full-size image URLs, ready to download or display
  • 🗺️ GPS on most rows: latitude and longitude, so listings drop straight onto a map
  • 🏢 Agency identity: name and stable agency ID on every row, plus a private-seller flag
  • 🔢 Pay per row: errors are never charged, and the run stops the moment your budget is reached

🎬 Quick Start

Pick a category, press Start, and the dataset fills with parsed rows. Nothing to configure — no key, no login, no proxy. The default input sweeps apartments for sale across Austria.

curl -X POST "https://api.apify.com/v2/acts/sian.agency~willhaben-property-scraper/runs?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"operation":"search","propertyCategory":"101","province":"900","maxResults":200}'

🚀 Getting Started (3 Simple Steps)

Step 1: Choose what to sweep

Pick a Property category — apartments for sale, apartments for rent, houses, plots, commercial. Add a Province if you want one region rather than the whole country.

Step 2: Narrow it

Set a price band, a living-area range, a room count or an outdoor-space requirement. Switch on Posted in the last 48 hours if you plan to run this on a schedule.

Step 3: Press Start

Rows arrive 200 at a time. Export as JSON, CSV or Excel, or read them straight from the API.

That's it. In about a minute, you'll have:

  • Every matching listing with price, area, rooms and location
  • GPS coordinates on most rows, ready to map
  • The agency behind each listing, or a private-seller flag

📥 Input Configuration

FieldTypeRequiredDescription
operationstringNosearch for a category sweep, detail for full listing data
propertyCategorystringNowillhaben category id — 101 apartments for sale, 131 for rent, 102 houses, 14 plots, 90 everything
provincestringNoall, or a Bundesland id — 900 Wien, 3 Niederösterreich, 6 Steiermark
keywordstringNoFree-text search across headline and body, in German
maxResultsintegerNoRow budget for the whole run. Default 100
includeDetailsbooleanNoAdd the full description, energy certificate and agency contact. Extra charge per listing
minPrice / maxPriceintegerNoPrice band in euro. Monthly rent on rental categories
minLivingArea / maxLivingAreaintegerNoLiving-area range in square metres
roomsstringNoExact room count: 1X1 through 5X5, 6X9, 10X
outdoorSpacestringNo20 balcony, 10 terrace, 60 garden, 30 loggia, 40 roof terrace, 50 winter garden
availableNowbooleanNoOnly listings marked as available immediately
postedLast48HoursbooleanNoOnly listings published in the last two days
sortstringNo1 newest, 3 cheapest, 4 dearest, 5 smallest, 6 largest, 7 relevance
searchUrlsarrayNoPaste willhaben search URLs. Replaces the form for that run
listingUrlsarrayNoFor detail: willhaben listing URLs. Have only an ad id? Send it as https://www.willhaben.at/iad/object?adId=<id>

Example — three-room apartments in Vienna between €300k and €500k:

{
"operation": "search",
"propertyCategory": "101",
"province": "900",
"minPrice": 300000,
"maxPrice": 500000,
"rooms": "3X3",
"maxResults": 500
}

Example — expand listings you already have:

{
"operation": "detail",
"listingUrls": ["https://www.willhaben.at/iad/object?adId=1738704240", "https://www.willhaben.at/iad/object?adId=1706110198"]
}

📤 Output

Rows are saved to the Apify dataset with 50+ fields. The most useful ones:

FieldTypeDescription
adIdstringwillhaben's own listing id — the key for de-duplicating across runs
listingTitlestringThe headline the seller wrote
urlstringDirect link to the listing
pricenumberAsking price, or monthly rent on rental categories
pricePerSqmnumberPrice divided by living area, pre-computed
livingAreanumberHabitable floor area in m²
roomsnumberRoom count as Austria counts it — the living room is included
propertyTypestringwillhaben's own type label, e.g. Maisonette, Dachgeschoßwohnung
featuresarrayFittings: lift, garage, cellar, fitted kitchen, step-free access
outdoorSpacestringBalcony, terrace, garden, loggia, roof terrace or winter garden
postcode / district / statestringAustrian postcode, Bezirk and Bundesland
latitude / longitudenumberGPS, on roughly nine rows in ten
advertiserName / advertiserIdstringThe agency, or Privat for an owner
energyClass / energyHwbstring / numberEnergy certificate class and heating demand — full details only
contactPhone / contactWebsitestringAgency contact — full details only
listingDescriptionstringThe complete listing text, tags stripped — full details only
imageUrlsarrayEvery photo, full size

Example row:

{
"adId": "1036472599",
"listingTitle": "Lichtdurchflutete Dachgeschoss-Maisonette mit Galerie und großzügiger 29 m² Dachterrasse",
"url": "https://www.willhaben.at/iad/immobilien/d/eigentumswohnung/wien/wien-1050-margareten/lichtdurchflutete-dachgeschoss-maisonette-1036472599/",
"price": 649000,
"priceText": "€ 649.000",
"pricePerSqm": 5954.13,
"currency": "EUR",
"livingArea": 109,
"rooms": 3,
"propertyType": "Maisonette",
"features": ["Storage room", "Furnished or part-furnished", "Lift"],
"outdoorSpace": "Terrasse",
"address": "Kohlgasse 17",
"location": "Wien, 05. Bezirk, Margareten",
"postcode": "1050",
"state": "Wien",
"latitude": 48.18422,
"longitude": 16.3536,
"advertiserName": "JP Immobilien",
"advertiserId": "19086746",
"isPrivateSeller": false,
"publishedAt": "2026-08-29T18:13:00.000Z",
"imageCount": 12,
"categoryLabel": "Apartments for sale",
"status": "success"
}

💼 Use Cases & Examples

1. Austrian market analysis

A property analyst who needs the national picture, not a sample.

Input: Apartments for sale, one province per run, no keyword. Output: Every live listing with price, price per m², area, rooms and energy class. Use: Median price per m² by postcode, inventory counts by district, and a monthly time series once the run is scheduled.

2. Agency and competitor monitoring

An estate agency that wants to know what everyone else is holding.

Input: A category and province, then group by advertiserId. Output: Every agency's live book, with prices and how long each listing has been up. Use: Spot who is winning instructions in your district, and which listings are going stale.

3. Investment and yield screening

An investor comparing districts rather than individual flats.

Input: Two runs — apartments for sale and apartments for rent, same province. Output: Price per m² on the sale side, rent per m² on the rental side. Use: Gross yield by postcode falls out of a single division, because both sides arrive pre-computed.

4. New-listing alerts and lead generation

A buying agent who needs to be first to the phone.

Input: Posted in the last 48 hours, sorted newest first, full details on, scheduled daily. Output: Only what went up since yesterday, with the agency's direct number. Use: You pay for the new rows rather than re-buying the whole market every morning.

5. Energy and renovation targeting

A heat-pump or insulation business looking for the worst-rated stock.

Input: A province with full details on, then filter rows to energy class E, F or G. Output: Buildings with a high HWB figure, their heating type and their year of construction. Use: A territory list that is already qualified by the thing you actually sell against.

6. Relocation and site selection

A company moving staff, or a family moving country.

Input: Apartments for rent, a price ceiling, a minimum living area and a room count. Output: Everything available in budget, with GPS and the availability date. Use: Map the shortlist against commute times before anyone books a viewing.

7. Feeding a property portal or an AI agent

A product team that needs Austrian inventory in their own database.

Input: A scheduled sweep of the categories you cover. Output: Stable adId keys, so today's run diffs cleanly against yesterday's. Use: Keep a mirror in sync, or hand the dataset to a model that answers questions about the market.


🔗 Integration Examples

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('sian.agency/willhaben-property-scraper').call({
operation: 'search',
propertyCategory: '131',
province: '900',
maxPrice: 1500,
maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('sian.agency/willhaben-property-scraper').call(run_input={
'operation': 'search',
'propertyCategory': '101',
'province': '900',
'minPrice': 300000,
'maxPrice': 500000,
'maxResults': 500,
})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item['adId'], item.get('price'), item.get('livingArea'))

cURL

curl -X POST 'https://api.apify.com/v2/acts/sian.agency~willhaben-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation":"search","propertyCategory":"102","province":"6","maxResults":200}'

Automation Workflows (N8N / Zapier / Make)

  1. Trigger: Schedule the run daily with Posted in the last 48 hours switched on
  2. HTTP Request: Call the actor API and wait for the dataset
  3. Process: Filter on price per m², energy class or agency
  4. Action: Append to a sheet, upsert into a database, or push an alert to Slack

📊 Performance & Pricing

FREE Tier (Try It Now)

  • 25 listings per run — every field, every category, same quality
  • No credit card required
  • Enough to see the row shape and check the fields you need are there
  • Unlimited listings per run — a whole 42,000-listing category in one go
  • Pay per row delivered: failed inputs are never charged
  • Full details available as a per-listing add-on

💰 From $1.20 per 1,000 listings — below every willhaben property specialist on the Store.

🔗 View current pricing


❓ Frequently Asked Questions

Q: Do I need an API key, a willhaben login or a proxy? A: No. Pick a category and press Start.

Q: How deep does a sweep go? A: All the way. Apartments for sale carries about 42,000 listings and the last page still returns its tail rows. Many property portals stop you at the first thousand results; willhaben does not.

Q: Which property categories are covered? A: All twelve — apartments and houses to buy or rent, plots, commercial to buy or rent, holiday property to buy or rent, new-build projects, other property, and an all-property sweep.

Q: What do full details add over a listing row? A: The complete description, the energy certificate (HWB value and class), heating and building type, monthly running costs, the availability date, and the agency's phone number, website and office address.

Q: Does it return the exact street address? A: When the seller published one, yes — roughly a third of listings carry a street. Every listing carries the postcode and district, and most carry GPS, though willhaben blurs the point to a radius on some listings.

Q: Is the price the asking price or the rent? A: Whatever willhaben shows on the card. Sale categories give the asking price; rental categories give the monthly rent, which also lands in its own Monthly rent column so the two never blur in a merged dataset.

Q: Can I paste a willhaben search URL instead of using the filters? A: Yes. Put it in Search URLs and every parameter in it is honoured, including single-district searches and filters the form does not expose. A pasted search replaces the form for that run.

Q: What output formats are available? A: JSON, CSV and Excel, exported straight from the Apify dataset, or read over the API.

Q: Does it cover cars, jobs or the general marketplace? A: No. This actor is property-only, and the attribute set it parses is the property one.


🐛 Troubleshooting

The run returned fewer rows than the category claims

  • The row budget in Max listings stops the run. Raise it.
  • Free accounts are capped at 25 rows per run whatever the budget says.

A pasted search URL was skipped

  • The URL has to be a willhaben property search, so its path starts with /iad/immobilien. Car and job searches are out of scope.
  • A single listing pasted into Search URLs is refused on purpose — put it in Listing URLs or ad IDs and switch the operation to Property Detail.

Energy class and the phone number are empty

  • Those live on the listing page, not on the results card. Switch on Add full details, or use Property Detail mode.

A listing ID no longer resolves

  • willhaben removes a listing once it sells, so IDs from an older export expire. The row says so rather than failing the run, and expired listings are not charged.

The room count looks one too high

  • That is Austrian convention: the room count includes the living room, so a two-room flat is a one-bedroom flat.

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the legality of web scraping.

willhaben is a trademark of willhaben internet service GmbH & Co KG. This actor is not affiliated with, endorsed by, or sponsored by willhaben.


🤝 Support

Telegram Support

Join our active support community


Built by SIÁN Agency | More Tools