Willhaben Real Estate Search
Search and retrieve property listings from willhaben.at using their public webapi. No browser automation needed.
Prerequisites
Requires python3 with the requests library (pre-installed in most environments).
Quick Start
Search listings
# Apartments for sale in Schärding, max €300k
python3 scripts/willhaben-search.py --district schaerding --type apartment --max-price 300000
# Houses in Wels, max €350k
python3 scripts/willhaben-search.py --district wels --type house --max-price 350000
# With room filter and JSON output
python3 scripts/willhaben-search.py --district linz --type apartment --max-price 300000 --min-rooms 2 --format json
# With full details (heating, energy, condition) for each listing
python3 scripts/willhaben-search.py --district schaerding --type apartment --max-price 300000 --with-details
Get detail for a specific listing
python3 scripts/willhaben-search.py --detail 1148259428
python3 scripts/willhaben-search.py --detail 1148259428 --format json
Detail fields include:
- HEATING (heating type): Fernwärme, Fußbodenheizung, Zentralheizung, Gasheizung, etc.
- BUILDING_CONDITION: Erstbezug, Sehr gut/gut, Renoviert, Renovierungsbedürftig
- YEAR_OF_BUILDING: Construction year
- ENERGY_HWB + ENERGY_HWB_CLASS: Energy rating (kWh/m²a) + class (A-G)
- ENERGY_FGEE + ENERGY_FGEE_CLASS: Overall energy efficiency factor
- Parking: Extracted from listing body text (garage, stellplatz, carport, tiefgarage)
Property Types
| CLI Type |
Willhaben Category |
apartment |
Eigentumswohnung (buy) |
house |
Haus kaufen |
District Slugs
Districts use willhaben's URL slug format — the slug is taken directly from the willhaben URL path. Browse willhaben.at/iad/immobilien/ to discover slugs for any district.
Examples:
| District |
Slug |
| Schärding |
schaerding |
| Ried im Innkreis |
ried-im-innkreis |
| Wels (Stadt) |
wels |
| Linz (Stadt) |
linz |
| Linz-Land |
linz-land |
| Braunau am Inn |
braunau-am-inn |
| Wien |
wien |
| Graz |
graz |
| Salzburg |
salzburg-stadt |
| Innsbruck |
innsbruck |
| Klagenfurt |
klagenfurt |
Any valid willhaben district slug works — these are just examples.
States
Default state is oberoesterreich. Override with --state:
python3 scripts/willhaben-search.py --state salzburg --district salzburg-stadt --type apartment
Available: oberoesterreich, niederoesterreich, wien, salzburg, steiermark, kaernten, tirol, vorarlberg, burgenland
Parameters
| Parameter |
Description |
--district |
District URL slug (required for search) |
--state |
Austrian state (default: oberoesterreich) |
--type |
Property type: apartment or house |
--max-price |
Maximum price in EUR |
--min-rooms |
Minimum number of rooms |
--max-pages |
Max result pages (default: 5) |
--with-details |
Fetch heating/energy/condition for each listing |
--detail |
Get full details for a specific listing ID |
--format |
text or json |
API Details
Uses willhaben's public webapi:
- Search:
GET https://www.willhaben.at/webapi/iad/search/atz/seo/immobilien/{type}/{state}/{district}
- Detail:
GET https://www.willhaben.at/webapi/iad/atverz/{ad_id}
No authentication needed. Be respectful with request rates — add delays between detail requests (~200-300ms).
Notes
- Listing URLs follow pattern:
https://www.willhaben.at/iad/{SEO_URL}
- Search returns: id, title, price, rooms, area, location, district, postcode, published date
- Detail adds: heating, building condition, year built, HWB/fGEE energy ratings, parking
- Parking is extracted from the listing body text when not in structured fields
1---2name: willhaben-realestate-search3description: Search willhaben.at real estate listings (apartments, houses) via their public webapi. No browser needed. Search any Austrian state and district with price/room filters. Get full listing details including heating type, building condition, energy class (HWB/fGEE), parking, and floor. Use for Austrian property searches, willhaben real estate queries, or building property reports. Triggers on "willhaben", "Austrian real estate", "Eigentumswohnung", "Haus kaufen Österreich", property search Austria.4---56# Willhaben Real Estate Search78Search and retrieve property listings from willhaben.at using their public webapi. No browser automation needed.910## Prerequisites1112Requires `python3` with the `requests` library (pre-installed in most environments).1314## Quick Start1516### Search listings1718```bash19# Apartments for sale in Schärding, max €300k20python3 scripts/willhaben-search.py --district schaerding --type apartment --max-price 3000002122# Houses in Wels, max €350k23python3 scripts/willhaben-search.py --district wels --type house --max-price 3500002425# With room filter and JSON output26python3 scripts/willhaben-search.py --district linz --type apartment --max-price 300000 --min-rooms 2 --format json2728# With full details (heating, energy, condition) for each listing29python3 scripts/willhaben-search.py --district schaerding --type apartment --max-price 300000 --with-details30```3132### Get detail for a specific listing3334```bash35python3 scripts/willhaben-search.py --detail 114825942836python3 scripts/willhaben-search.py --detail 1148259428 --format json37```3839Detail fields include:40- **HEATING** (heating type): Fernwärme, Fußbodenheizung, Zentralheizung, Gasheizung, etc.41- **BUILDING_CONDITION**: Erstbezug, Sehr gut/gut, Renoviert, Renovierungsbedürftig42- **YEAR_OF_BUILDING**: Construction year43- **ENERGY_HWB** + **ENERGY_HWB_CLASS**: Energy rating (kWh/m²a) + class (A-G)44- **ENERGY_FGEE** + **ENERGY_FGEE_CLASS**: Overall energy efficiency factor45- **Parking**: Extracted from listing body text (garage, stellplatz, carport, tiefgarage)4647## Property Types4849| CLI Type | Willhaben Category |50|----------|-------------------|51| `apartment` | Eigentumswohnung (buy) |52| `house` | Haus kaufen |5354## District Slugs5556Districts use willhaben's URL slug format — the slug is taken directly from the willhaben URL path. Browse `willhaben.at/iad/immobilien/` to discover slugs for any district.5758Examples:5960| District | Slug |61|----------|------|62| Schärding | `schaerding` |63| Ried im Innkreis | `ried-im-innkreis` |64| Wels (Stadt) | `wels` |65| Linz (Stadt) | `linz` |66| Linz-Land | `linz-land` |67| Braunau am Inn | `braunau-am-inn` |68| Wien | `wien` |69| Graz | `graz` |70| Salzburg | `salzburg-stadt` |71| Innsbruck | `innsbruck` |72| Klagenfurt | `klagenfurt` |7374Any valid willhaben district slug works — these are just examples.7576## States7778Default state is `oberoesterreich`. Override with `--state`:7980```bash81python3 scripts/willhaben-search.py --state salzburg --district salzburg-stadt --type apartment82```8384Available: `oberoesterreich`, `niederoesterreich`, `wien`, `salzburg`, `steiermark`, `kaernten`, `tirol`, `vorarlberg`, `burgenland`8586## Parameters8788| Parameter | Description |89|-----------|-------------|90| `--district` | District URL slug (required for search) |91| `--state` | Austrian state (default: `oberoesterreich`) |92| `--type` | Property type: `apartment` or `house` |93| `--max-price` | Maximum price in EUR |94| `--min-rooms` | Minimum number of rooms |95| `--max-pages` | Max result pages (default: 5) |96| `--with-details` | Fetch heating/energy/condition for each listing |97| `--detail` | Get full details for a specific listing ID |98| `--format` | `text` or `json` |99100## API Details101102Uses willhaben's public webapi:103- Search: `GET https://www.willhaben.at/webapi/iad/search/atz/seo/immobilien/{type}/{state}/{district}`104- Detail: `GET https://www.willhaben.at/webapi/iad/atverz/{ad_id}`105106No authentication needed. Be respectful with request rates — add delays between detail requests (~200-300ms).107108## Notes109110- Listing URLs follow pattern: `https://www.willhaben.at/iad/{SEO_URL}`111- Search returns: id, title, price, rooms, area, location, district, postcode, published date112- Detail adds: heating, building condition, year built, HWB/fGEE energy ratings, parking113- Parking is extracted from the listing body text when not in structured fields