Search and retrieve property listings from willhaben.at using their public webapi. No browser automation needed.
Requires python3 with the requests library (pre-installed in most environments).
bash
# 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
bash
python3 scripts/willhaben-search.py --detail 1148259428
python3 scripts/willhaben-search.py --detail 1148259428 --format json
Detail fields include:
CLI TypeWillhaben CategoryapartmentEigentumswohnung (buy)houseHaus kaufen
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:
DistrictSlugSchärdingschaerdingRied im Innkreisried-im-innkreisWels (Stadt)welsLinz (Stadt)linzLinz-Landlinz-landBraunau am Innbraunau-am-innWienwienGrazgrazSalzburgsalzburg-stadtInnsbruckinnsbruckKlagenfurtklagenfurt
Any valid willhaben district slug works — these are just examples.
Default state is oberoesterreich. Override with --state:
bash
python3 scripts/willhaben-search.py --state salzburg --district salzburg-stadt --type apartment
Available: oberoesterreich, niederoesterreich, wien, salzburg, steiermark, kaernten, tirol, vorarlberg, burgenland
ParameterDescription--districtDistrict URL slug (required for search)--stateAustrian state (default: oberoesterreich)--typeProperty type: apartment or house``--max-priceMaximum price in EUR--min-roomsMinimum number of rooms--max-pagesMax result pages (default: 5)--with-detailsFetch heating/energy/condition for each listing--detailGet full details for a specific listing ID--format``text or json
Uses willhaben's public webapi:
GET https://www.willhaben.at/webapi/iad/search/atz/seo/immobilien/{type}/{state}/{district}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).
https://www.willhaben.at/iad/{SEO_URL}