Dataspryva

Willhaben Marketplace, Cars & Real Estate Listings Scraper

Search Willhaben.at classifieds, used cars, and real estate (rent or buy apartments, houses, land) by keyword, price range, and sort order. Get listing prices, locations, images, and category-specific details such as car mileage or living area.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringrequiredChoose a marketplace section, cars, real estate, jobs, or paste Willhaben URLs.
querystringoptionalFree-text keyword, e.g. 'sofa', 'iPhone', 'BMW', 'Wohnung'. Leave empty to browse the category.
startUrlsarrayoptional(mode=byUrls) Paste search, category, single listing, job search or single job URLs. Filters already in the URL are preserved.
Show all input fields
FieldTypeRequiredDescription
modestringrequiredChoose a marketplace section, cars, real estate, jobs, or paste Willhaben URLs.
querystringoptionalFree-text keyword, e.g. 'sofa', 'iPhone', 'BMW', 'Wohnung'. Leave empty to browse the category.
startUrlsarrayoptional(mode=byUrls) Paste search, category, single listing, job search or single job URLs. Filters already in the URL are preserved.
statestringoptionalRestrict listings to one Austrian federal state (or other countries). Location overrides this when both are set.
locationstringoptionale.g. 'Wien', 'Graz', '1050'. Resolved through Willhaben's location search. For jobs it is sent as the job location.
radiusKmintegeroptional(mode=searchJobs) Radius around the location, 1-100 km.
sortBystringoptionalResult ordering. Jobs support relevance and newest; other orders are mapped to newest for jobs.
priceMinintegeroptionalMinimum listing price in euros. Ignored for jobs.
priceMaxintegeroptionalMaximum listing price in euros. Ignored for jobs.
maxItemsintegeroptionalMaximum listings or jobs to return.
includeDetailsbooleanoptionalAdd the full description, seller/contact data and extra car or real-estate details from each listing/job page. Slower and more expensive.
includeRawAttributesbooleanoptionalAdd every source attribute as a rawAttributes list. Useful for category-specific analysis; increases output size.
sellerTypestringoptionalFilter by private seller or commercial dealer. Applies to marketplace items and cars; ignored for real estate and jobs.
vehicleCategorystringoptional(mode=searchCars) Which vehicle section to search.
carMakestringoptional(mode=searchCars) Vehicle manufacturer.
carModelstringoptional(mode=searchCars) Model name, e.g. '3er-Reihe' or 'Golf'. Requires Car make.
yearFromintegeroptional(mode=searchCars) Earliest registration year.
yearTointegeroptional(mode=searchCars) Latest registration year.
mileageFromintegeroptional(mode=searchCars) Minimum mileage.
mileageTointegeroptional(mode=searchCars) Maximum mileage.
fuelTypestringoptional(mode=searchCars)
transmissionstringoptional(mode=searchCars)
bodyTypestringoptional(mode=searchCars)
carConditionstringoptional(mode=searchCars)
driveTypestringoptional(mode=searchCars)
colorstringoptional(mode=searchCars)
powerFromintegeroptional(mode=searchCars) Minimum engine power.
powerTointegeroptional(mode=searchCars) Maximum engine power.
realEstateCategorystringoptional(mode=searchRealEstate) Which property market to search.
propertySubtypestringoptional(mode=searchRealEstate) Optional subtype such as penthouse, detached house or building plot.
roomsstringoptional(mode=searchRealEstate) Room-count bucket.
livingAreaFromintegeroptional(mode=searchRealEstate)
livingAreaTointegeroptional(mode=searchRealEstate)
plotAreaFromintegeroptional(mode=searchRealEstate)
plotAreaTointegeroptional(mode=searchRealEstate)
freeAreaTypestringoptional(mode=searchRealEstate) Balcony, terrace, garden, etc.
equipmentstringoptional(mode=searchRealEstate) e.g. lift, cellar, parking, built-in kitchen.
availableNowbooleanoptional(mode=searchRealEstate) Only listings available now.
jobRegionstringoptional(mode=searchJobs)
employmentModestringoptional(mode=searchJobs)
jobPositionstringoptional(mode=searchJobs)
jobOperationAreastringoptional(mode=searchJobs)
jobCompanyTypestringoptional(mode=searchJobs)
jobTimeLimitstringoptional(mode=searchJobs)
incrementalModebooleanoptionalReturn only new/changed listings or jobs on recurring runs. The first run returns everything as NEW.
stateKeystringoptional(incrementalMode) Stable name for this search so later runs compare against the right state. Leave empty to derive it from the filters.
emitUnchangedbooleanoptional(incrementalMode) Also return records whose tracked fields did not change.
emitExpiredbooleanoptional(incrementalMode) After a complete scan, also emit listings/jobs that disappeared since the last run.

Download the published input schema

View complete JSON
{
  "description": "Scrape Willhaben.at marketplace items, cars, real estate or jobs — by keyword, location, price and category filters, or by pasting URLs.",
  "properties": {
    "availableNow": {
      "default": false,
      "description": "(mode=searchRealEstate) Only listings available now.",
      "title": "Available immediately",
      "type": "boolean"
    },
    "bodyType": {
      "description": "(mode=searchCars)",
      "editor": "select",
      "enum": [
        "2",
        "4",
        "12",
        "5",
        "6",
        "3",
        "9",
        "10"
      ],
      "enumTitles": [
        "Convertible / roadster",
        "Small / compact car",
        "Minibus",
        "Estate / family van",
        "Saloon",
        "Microcar",
        "Sports car / coupé",
        "SUV / off-road"
      ],
      "title": "Body type",
      "type": "string"
    },
    "carCondition": {
      "description": "(mode=searchCars)",
      "editor": "select",
      "enum": [
        "20",
        "50",
        "10",
        "93",
        "91",
        "30",
        "40"
      ],
      "enumTitles": [
        "Used",
        "Year-old car",
        "New",
        "Classic / vintage",
        "Day registration",
        "Accident-damaged",
        "Demonstration car"
      ],
      "title": "Vehicle condition",
      "type": "string"
    },
    "carMake": {
      "description": "(mode=searchCars) Vehicle manufacturer.",
      "editor": "select",
      "enum": [
        "10004",
        "10012",
        "1000",
        "10031",
        "10025",
        "1002",
        "1003",
        "1734",
        "10042",
        "10066",
        "1004",
        "1005",
        "1069",
        "1006",
        "10034",
        "1007",
        "10017",
        "10001",
        "10057",
        "1008",
        "1012",
        "1009",
        "1010",
        "10018",
        "10026",
        "1011",
        "1013",
        "10037",
        "1014",
        "10061",
        "10019",
        "10043",
        "10032",
        "1015",
        "1016",
        "10044",
        "1017",
        "10071",
        "10062",
        "10067",
        "10039",
        "10030",
        "10016",
        "1018",
        "10041",
        "10065",
        "1019",
        "1020",
        "10035",
        "10009",
        "1021",
        "1022",
        "10027",
        "10052",
        "1023",
        "1024",
        "1059",
        "1025",
        "10005",
        "1026",
        "1027",
        "1028",
        "1029",
        "10048",
        "1030",
        "10014",
        "1031",
        "1032",
        "10045",
        "10003",
        "10028",
        "1033",
        "10055",
        "1035",
        "10020",
        "1036",
        "1037",
        "1038",
        "10013",
        "10058",
        "1039",
        "1040",
        "1041",
        "10054",
        "1042",
        "10069",
        "10047",
        "10053",
        "1043",
        "1045",
        "10029",
        "1047",
        "1048",
        "1049",
        "1051",
        "10063",
        "1052",
        "1053",
        "1054",
        "1056",
        "1057",
        "10033",
        "1058",
        "9999",
        "10050",
        "1060",
        "1061",
        "1073",
        "10002",
        "10008",
        "1062",
        "10023",
        "10015",
        "1064",
        "1065",
        "1066",
        "10051",
        "10070",
        "10024"
      ],
      "enumTitles": [
        "Abarth",
        "Aixam",
        "Alfa Romeo",
        "Alpina",
        "Alpine",
        "Aston Martin",
        "Audi",
        "Austin",
        "BAIC",
        "BAW",
        "Bentley",
        "BMW",
        "British Leyland",
        "Buick",
        "BYD",
        "Cadillac",
        "Casalini",
        "Caterham",
        "Chery",
        "Chevrolet",
        "Chevrolet / Daewoo",
        "Chrysler",
        "Citroën",
        "Corvette",
        "Cupra",
        "Dacia",
        "Daihatsu",
        "DFSK",
        "Dodge",
        "Dongfeng",
        "DS Automobiles",
        "Elaris",
        "Eli",
        "Ferrari",
        "Fiat",
        "Fisker",
        "Ford",
        "GAC",
        "Geco",
        "Geely",
        "Genesis",
        "GMC",
        "Graf Carello",
        "Honda",
        "Hongqi",
        "Hudson",
        "Hummer",
        "Hyundai",
        "Ineos",
        "Infiniti",
        "Isuzu",
        "IVECO",
        "JAC",
        "Jaecoo",
        "Jaguar",
        "Jeep",
        "KGM/SsangYong",
        "KIA",
        "KTM",
        "Lada",
        "Lamborghini",
        "Lancia",
        "Land Rover",
        "Leapmotor",
        "Lexus",
        "Ligier",
        "Lincoln",
        "Lotus",
        "LYNK & Co",
        "Mahindra",
        "MAN",
        "Maserati",
        "Matra",
        "Mazda",
        "McLaren",
        "Mercedes-Benz",
        "Mercury",
        "MG",
        "Microcar",
        "Microlino",
        "MINI",
        "Mitsubishi",
        "Morgan",
        "NIO",
        "Nissan",
        "NSU",
        "Oldsmobile",
        "Omoda",
        "Opel",
        "Peugeot",
        "Polestar",
        "Pontiac",
        "Porsche",
        "Puch",
        "Renault",
        "Riley",
        "Rolls-Royce",
        "Rover",
        "Saab",
        "Seat",
        "Skoda",
        "Skywell Automobile",
        "smart",
        "Sonstige",
        "Steyr",
        "Subaru",
        "Suzuki",
        "Talbot",
        "Tata",
        "Tesla",
        "Toyota",
        "Trabant",
        "Triumph",
        "Volvo",
        "VW",
        "Wiesmann",
        "XPENG",
        "Zeekr",
        "ZhiDou"
      ],
      "title": "Car make",
      "type": "string"
    },
    "carModel": {
      "description": "(mode=searchCars) Model name, e.g. '3er-Reihe' or 'Golf'. Requires Car make.",
      "editor": "textfield",
      "title": "Car model",
      "type": "string"
    },
    "color": {
      "description": "(mode=searchCars)",
      "editor": "select",
      "enum": [
        "1",
        "2",
        "4",
        "3",
        "7",
        "8",
        "6",
        "5",
        "11",
        "13",
        "14",
        "15",
        "17",
        "10",
        "9"
      ],
      "enumTitles": [
        "Beige",
        "Blue",
        "Brown",
        "Bronze",
        "Yellow",
        "Gold",
        "Grey",
        "Green",
        "Orange",
        "Red",
        "Black",
        "Silver",
        "Other",
        "Purple",
        "White"
      ],
      "title": "Exterior colour",
      "type": "string"
    },
    "driveType": {
      "description": "(mode=searchCars)",
      "editor": "select",
      "enum": [
        "2",
        "1",
        "3"
      ],
      "enumTitles": [
        "All-wheel drive",
        "Rear-wheel drive",
        "Front-wheel drive"
      ],
      "title": "Drive type",
      "type": "string"
    },
    "emitExpired": {
      "default": false,
      "description": "(incrementalMode) After a complete scan, also emit listings/jobs that disappeared since the last run.",
      "title": "Include expired records",
      "type": "boolean"
    },
    "emitUnchanged": {
      "default": false,
      "description": "(incrementalMode) Also return records whose tracked fields did not change.",
      "title": "Include unchanged records",
      "type": "boolean"
    },
    "employmentMode": {
      "description": "(mode=searchJobs)",
      "editor": "select",
      "enum": [
        "110",
        "113",
        "109",
        "11796"
      ],
      "enumTitles": [
        "Vollzeit (full-time)",
        "Teilzeit (part-time)",
        "Freiberuflich (freelance)",
        "Geringfügig (marginal)"
      ],
      "title": "Employment type",
      "type": "string"
    },
    "equipment": {
      "description": "(mode=searchRealEstate) e.g. lift, cellar, parking, built-in kitchen.",
      "editor": "select",
      "enum": [
        "24",
        "25",
        "26",
        "27",
        "4",
        "23",
        "250",
        "15",
        "28"
      ],
      "enumTitles": [
        "Storage room",
        "Barrier-free",
        "Carport",
        "Built-in kitchen",
        "Lift",
        "Garage",
        "Cellar",
        "Parking space",
        "Partially / fully furnished"
      ],
      "title": "Real-estate equipment",
      "type": "string"
    },
    "freeAreaType": {
      "description": "(mode=searchRealEstate) Balcony, terrace, garden, etc.",
      "editor": "select",
      "enum": [
        "20",
        "40",
        "60",
        "30",
        "10",
        "50"
      ],
      "enumTitles": [
        "Balcony",
        "Roof terrace",
        "Garden",
        "Loggia",
        "Terrace",
        "Winter garden"
      ],
      "title": "Outdoor area",
      "type": "string"
    },
    "fuelType": {
      "description": "(mode=searchCars)",
      "editor": "select",
      "enum": [
        "100001",
        "100003",
        "100004",
        "100011",
        "100013",
        "100022",
        "110000"
      ],
      "enumTitles": [
        "Petrol",
        "Diesel",
        "Electric",
        "Gas",
        "Hybrid petrol / electric",
        "Hybrid diesel / electric",
        "Hydrogen"
      ],
      "title": "Fuel type",
      "type": "string"
    },
    "includeDetails": {
      "default": false,
      "description": "Add the full description, seller/contact data and extra car or real-estate details from each listing/job page. Slower and more expensive.",
      "prefill": false,
      "title": "Fetch detail pages",
      "type": "boolean"
    },
    "includeRawAttributes": {
      "default": false,
      "description": "Add every source attribute as a rawAttributes list. Useful for category-specific analysis; increases output size.",
      "prefill": false,
      "title": "Include raw attributes",
      "type": "boolean"
    },
    "incrementalMode": {
      "default": false,
      "description": "Return only new/changed listings or jobs on recurring runs. The first run returns everything as NEW.",
      "title": "Incremental monitoring",
      "type": "boolean"
    },
    "jobCompanyType": {
      "description": "(mode=searchJobs)",
      "editor": "select",
      "enum": [
        "agency",
        "direct_employer"
      ],
      "enumTitles": [
        "Staffing agency",
        "Direct employer"
      ],
      "title": "Employer type",
      "type": "string"
    },
    "jobOperationArea": {
      "description": "(mode=searchJobs)",
      "editor": "select",
      "enum": [
        "12666",
        "12681",
        "12746",
        "12769",
        "17007",
        "12887",
        "12984",
        "13094",
        "13186",
        "13260",
        "13272",
        "13342",
        "13359",
        "13375",
        "13440",
        "12806",
        "13483"
      ],
      "enumTitles": [
        "Assistance / secretarial / administration",
        "Education / pedagogy / research",
        "Consulting / law",
        "Purchasing / logistics / transport",
        "Facility management / security / cleaning",
        "Finance / accounting / controlling",
        "Hospitality / tourism / leisure / helpers",
        "Crafts / skilled trades",
        "IT / EDP",
        "Management / executive",
        "Marketing / media / PR / graphics / culture",
        "Public service",
        "Human resources",
        "Care / social / health",
        "Production / manufacturing",
        "Technical professions / engineering / architecture",
        "Sales / retail"
      ],
      "title": "Job field",
      "type": "string"
    },
    "jobPosition": {
      "description": "(mode=searchJobs)",
      "editor": "select",
      "enum": [
        "13540",
        "13541",
        "13539",
        "13542",
        "13543",
        "13544",
        "28428"
      ],
      "enumTitles": [
        "Team lead",
        "Apprenticeship",
        "Management / executive",
        "Employee",
        "Internship",
        "Project management",
        "Traineeship"
      ],
      "title": "Job position",
      "type": "string"
    },
    "jobRegion": {
      "description": "(mode=searchJobs)",
      "editor": "select",
      "enum": [
        "13553",
        "13602",
        "13677",
        "13859",
        "14096",
        "13783",
        "14366",
        "14445",
        "14486",
        "13552",
        "14513",
        "14523"
      ],
      "enumTitles": [
        "Burgenland",
        "Kärnten",
        "Niederösterreich",
        "Oberösterreich",
        "Salzburg",
        "Steiermark",
        "Tirol",
        "Vorarlberg",
        "Wien",
        "Österreich",
        "Deutschland",
        "Schweiz"
      ],
      "title": "Job region",
      "type": "string"
    },
    "jobTimeLimit": {
      "description": "(mode=searchJobs)",
      "editor": "select",
      "enum": [
        "all",
        "last_24_hours",
        "last_72_hours",
        "last_week"
      ],
      "enumTitles": [
        "Any time",
        "Last 24 hours",
        "Last 72 hours",
        "Last week"
      ],
      "title": "Job posting age",
      "type": "string"
    },
    "livingAreaFrom": {
      "description": "(mode=searchRealEstate)",
      "maximum": 100000,
      "minimum": 0,
      "title": "Living area from (m²)",
      "type": "integer"
    },
    "livingAreaTo": {
      "description": "(mode=searchRealEstate)",
      "maximum": 100000,
      "minimum": 0,
      "title": "Living area to (m²)",
      "type": "integer"
    },
    "location": {
      "description": "e.g. 'Wien', 'Graz', '1050'. Resolved through Willhaben's location search. For jobs it is sent as the job location.",
      "editor": "textfield",
      "title": "City / district / postcode",
      "type": "string"
    },
    "maxItems": {
      "default": 20,
      "description": "Maximum listings or jobs to return.",
      "maximum": 50000,
      "minimum": 1,
      "prefill": 3,
      "title": "Max items",
      "type": "integer"
    },
    "mileageFrom": {
      "description": "(mode=searchCars) Minimum mileage.",
      "maximum": 2000000,
      "minimum": 0,
      "title": "Mileage from (km)",
      "type": "integer"
    },
    "mileageTo": {
      "description": "(mode=searchCars) Maximum mileage.",
      "maximum": 2000000,
      "minimum": 0,
      "title": "Mileage to (km)",
      "type": "integer"
    },
    "mode": {
      "default": "searchItems",
      "description": "Choose a marketplace section, cars, real estate, jobs, or paste Willhaben URLs.",
      "editor": "select",
      "enum": [
        "searchItems",
        "searchCars",
        "searchRealEstate",
        "searchJobs",
        "byUrls"
      ],
      "enumTitles": [
        "Marketplace items",
        "Cars & vehicles",
        "Real estate",
        "Jobs",
        "Paste URLs"
      ],
      "prefill": "searchItems",
      "title": "What to scrape",
      "type": "string"
    },
    "plotAreaFrom": {
      "description": "(mode=searchRealEstate)",
      "maximum": 10000000,
      "minimum": 0,
      "title": "Plot area from (m²)",
      "type": "integer"
    },
    "plotAreaTo": {
      "description": "(mode=searchRealEstate)",
      "maximum": 10000000,
      "minimum": 0,
      "title": "Plot area to (m²)",
      "type": "integer"
    },
    "powerFrom": {
      "description": "(mode=searchCars) Minimum engine power.",
      "maximum": 2000,
      "minimum": 0,
      "title": "Power from (kW)",
      "type": "integer"
    },
    "powerTo": {
      "description": "(mode=searchCars) Maximum engine power.",
      "maximum": 2000,
      "minimum": 0,
      "title": "Power to (kW)",
      "type": "integer"
    },
    "priceMax": {
      "description": "Maximum listing price in euros. Ignored for jobs.",
      "maximum": 10000000,
      "minimum": 0,
      "title": "Max price (EUR)",
      "type": "integer"
    },
    "priceMin": {
      "description": "Minimum listing price in euros. Ignored for jobs.",
      "maximum": 10000000,
      "minimum": 0,
      "title": "Min price (EUR)",
      "type": "integer"
    },
    "propertySubtype": {
      "description": "(mode=searchRealEstate) Optional subtype such as penthouse, detached house or building plot.",
      "editor": "select",
      "enum": [
        "110",
        "105",
        "111",
        "113",
        "100",
        "101",
        "102",
        "112",
        "3",
        "16",
        "27",
        "2",
        "9",
        "11",
        "15",
        "1",
        "22",
        "17",
        "19",
        "21",
        "118",
        "14",
        "119",
        "116",
        "117",
        "18"
      ],
      "enumTitles": [
        "Attic apartment",
        "Ground-floor apartment",
        "Garconnière",
        "Co-operative apartment",
        "Loft / studio",
        "Maisonette",
        "Penthouse",
        "Roof-space conversion",
        "Apartment",
        "Room / shared flat",
        "Other apartment",
        "Alpine hut",
        "Farmhouse",
        "Bungalow",
        "Semi-detached house",
        "Detached house",
        "Garden house",
        "Co-operative house",
        "Country house",
        "Building plot",
        "Commercial plot",
        "Plot / land",
        "Industrial plot",
        "Allotment garden",
        "Agricultural / forestry land",
        "Other plot"
      ],
      "title": "Property subtype",
      "type": "string"
    },
    "query": {
      "default": "",
      "description": "Free-text keyword, e.g. 'sofa', 'iPhone', 'BMW', 'Wohnung'. Leave empty to browse the category.",
      "editor": "textfield",
      "prefill": "sofa",
      "title": "Search keyword",
      "type": "string"
    },
    "radiusKm": {
      "description": "(mode=searchJobs) Radius around the location, 1-100 km.",
      "maximum": 100,
      "minimum": 1,
      "title": "Job radius (km)",
      "type": "integer"
    },
    "realEstateCategory": {
      "default": "rentApartment",
      "description": "(mode=searchRealEstate) Which property market to search.",
      "editor": "select",
      "enum": [
        "rentApartment",
        "buyApartment",
        "rentHouse",
        "buyHouse",
        "land",
        "newBuild",
        "commercialRent",
        "commercialBuy",
        "holidayRent",
        "holidayBuy",
        "otherRealEstate"
      ],
      "enumTitles": [
        "Apartment for rent",
        "Apartment for sale",
        "House for rent",
        "House for sale",
        "Land / plot",
        "New-build project",
        "Commercial property for rent",
        "Commercial property for sale",
        "Holiday property for rent",
        "Holiday property for sale",
        "Other real estate"
      ],
      "title": "Real-estate category",
      "type": "string"
    },
    "rooms": {
      "description": "(mode=searchRealEstate) Room-count bucket.",
      "editor": "select",
      "enum": [
        "1X1",
        "2X2",
        "3X3",
        "4X4",
        "5X5",
        "6X9",
        "10X",
        "0X0"
      ],
      "enumTitles": [
        "1 room",
        "2 rooms",
        "3 rooms",
        "4 rooms",
        "5 rooms",
        "6-9 rooms",
        "10+ rooms",
        "Not specified"
      ],
      "title": "Rooms",
      "type": "string"
    },
    "sellerType": {
      "description": "Filter by private seller or commercial dealer. Applies to marketplace items and cars; ignored for real estate and jobs.",
      "editor": "select",
      "enum": [
        "private",
        "dealer"
      ],
      "enumTitles": [
        "Private seller",
        "Dealer / business"
      ],
      "title": "Seller type",
      "type": "string"
    },
    "sortBy": {
      "default": "relevance",
      "description": "Result ordering. Jobs support relevance and newest; other orders are mapped to newest for jobs.",
      "editor": "select",
      "enum": [
        "relevance",
        "newest",
        "distance",
        "priceAsc",
        "priceDesc"
      ],
      "enumTitles": [
        "Relevance",
        "Newest first",
        "Distance (nearest first)",
        "Price: low to high",
        "Price: high to low"
      ],
      "prefill": "relevance",
      "title": "Sort order",
      "type": "string"
    },
    "startUrls": {
      "description": "(mode=byUrls) Paste search, category, single listing, job search or single job URLs. Filters already in the URL are preserved.",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "Paste a Willhaben search, category, listing, job search or job URL.",
            "title": "Willhaben URL",
            "type": "string"
          }
        },
        "type": "object"
      },
      "title": "Willhaben URLs",
      "type": "array"
    },
    "state": {
      "description": "Restrict listings to one Austrian federal state (or other countries). Location overrides this when both are set.",
      "editor": "select",
      "enum": [
        "Burgenland",
        "Kärnten",
        "Niederösterreich",
        "Oberösterreich",
        "Salzburg",
        "Steiermark",
        "Tirol",
        "Vorarlberg",
        "Wien",
        "andere Länder"
      ],
      "enumTitles": [
        "Burgenland",
        "Kärnten",
        "Niederösterreich",
        "Oberösterreich",
        "Salzburg",
        "Steiermark",
        "Tirol",
        "Vorarlberg",
        "Wien",
        "andere Länder"
      ],
      "title": "Federal state",
      "type": "string"
    },
    "stateKey": {
      "description": "(incrementalMode) Stable name for this search so later runs compare against the right state. Leave empty to derive it from the filters.",
      "editor": "textfield",
      "title": "Monitoring campaign name",
      "type": "string"
    },
    "transmission": {
      "description": "(mode=searchCars)",
      "editor": "select",
      "enum": [
        "180004",
        "180001"
      ],
      "enumTitles": [
        "Automatic",
        "Manual"
      ],
      "title": "Transmission",
      "type": "string"
    },
    "vehicleCategory": {
      "default": "cars",
      "description": "(mode=searchCars) Which vehicle section to search.",
      "editor": "select",
      "enum": [
        "cars",
        "motorcycles",
        "caravans",
        "commercial"
      ],
      "enumTitles": [
        "Cars & used cars",
        "Motorcycles & quads",
        "Caravans & motorhomes",
        "Commercial vehicles & pickups"
      ],
      "title": "Vehicle category",
      "type": "string"
    },
    "yearFrom": {
      "description": "(mode=searchCars) Earliest registration year.",
      "maximum": 2100,
      "minimum": 1900,
      "title": "First registration from",
      "type": "integer"
    },
    "yearTo": {
      "description": "(mode=searchCars) Latest registration year.",
      "maximum": 2100,
      "minimum": 1900,
      "title": "First registration to",
      "type": "integer"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Willhaben Scraper Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
listingsstringoptionalDataset containing all scraped Willhaben listings and job ads.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Willhaben.at listings and jobs with prices, locations, seller data, car and property details, images and optional detail-page enrichment.",
  "properties": {
    "listings": {
      "description": "Dataset containing all scraped Willhaben listings and job ads.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Willhaben listings and jobs",
      "type": "string"
    }
  },
  "title": "Willhaben Marketplace, Cars, Real Estate & Jobs Scraper Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Willhaben Listings",
      "transformation": {
        "fields": [
          "recordType",
          "heading",
          "jobTitle",
          "price",
          "priceDisplay",
          "location",
          "state",
          "propertyType",
          "carMake",
          "roomsCount",
          "companyName",
          "adUrl",
          "jobUrl"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Willhaben Marketplace, Cars, Real Estate & Jobs Scraper

Willhaben.at is Austria's largest classifieds site — marketplace goods, used cars, apartments, houses, land and jobs all live in one place. This actor turns those listings into structured records: prices, locations, seller details, car specifications, property areas and energy data, job salaries, images and direct links. Search by keyword and filters, or paste any Willhaben search or listing URL. No login, cookies, API key or proxy setup is needed.

What this actor does

  • Marketplace, cars, real estate and jobs in one actor — choose a section or paste URLs from any of them.
  • Location-aware search — filter by federal state, city, district or Austrian postcode.
  • Real filters, not post-filtering — price, car make/model/year/mileage/fuel/transmission/body/drive/colour/power, property type/rooms/area/outdoor space/equipment, and job region/field/employment type/employer type.
  • Optional detail enrichment — add full descriptions, seller contact details, equipment lists, energy certificates and rent breakdowns from each listing page.
  • Incremental monitoring — on recurring runs return only new, changed, expired or reappeared listings/jobs.
  • Omit-empty output — a field the source does not carry is left out, never sent as null or blank.

Output per listing

Every record has recordType: "listing" and the mode that produced it.

Identity and pricing

  • adId, uuid, heading, description, descriptionSnippet
  • price, currency, priceDisplay, oldPrice, priceReductionDate, pricePerSquareMeter
  • adUrl, categoryId, locationId

Location

  • location, district, state, postcode, address, street, municipality, postalName, country
  • latitude, longitude

Dates, status and seller

  • publishedDate, changedDate, endDate, firstPublishedDate
  • status, isPrivate, sellerType
  • seller, sellerId, sellerContactName, sellerPhone, sellerWebsite, sellerLogoUrl

Media and extras

  • imageUrl, imageUrls, imageCount, floorPlanUrls
  • rawAttributes (when "Include raw attributes" is on)
  • scrapedAt

Cars & vehicles

  • carMake, carModel, carMakeId, carModelId, carModelDetail, vehicleCategory
  • year, registrationMonth, mileageKm, fuelType, transmission
  • engineDisplacementCc, powerKw, consumptionLper100km, co2EmissionsGperKm, batteryCapacityKwh
  • bodyType, condition, driveType, color, doors, seats, owners
  • warranty, inspection, inspectionValidUntil, equipment[]

Real estate

  • propertyType, propertyTypeId, rooms, roomsCount, livingAreaSqm, usableAreaSqm, plotAreaSqm
  • floor, floorSurface, freeAreaType, freeAreaSqm, heating, buildingCondition, constructionYear
  • energyClassHwb, energyDemandHwb, energyClassFgee, energyDemandFgee
  • availableDate, availableNow, ownershipType, rentalTerm
  • rentPerMonth, rentNet, rentVat, totalEncumbrance, deposit, additionalCosts, monthlyCosts
  • equipment[]

Output per job

Job records have recordType: "job".

  • jobId, jobTitle, description, jobUrl
  • companyName, companyId, companySlug, companyUid, companyAddress, companyLogoUrl
  • position, salary, salaryTimeFrame, employmentTime, employmentModes[]
  • locations[] — objects with name, federalState, country
  • publishedDate, modifiedDate, expiryDate
  • isExpired, isTopJob, overpay, brandNew, internalApplication
  • contactName, contactEmail, languageSkills[], professionalExperience
  • mode, scrapedAt

Add includeDetails to fill full descriptions, expiry dates, company addresses, contact details and language skills where the source publishes them. Contact email is only present on some job ads.

Incremental output

When incrementalMode is on, each record also has:

  • changeType — NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED
  • changedFields[] — tracked fields that changed on an UPDATED record
  • firstSeenAt, lastSeenAt, previousPrice
  • emitUnchanged / emitExpired control whether unchanged or missing records are included

The first run returns everything as NEW. Later runs compare against the saved state for the same stateKey (or the same filters when stateKey is empty).

Input

Field Type Default Description
mode string searchItems searchItems, searchCars, searchRealEstate, searchJobs or byUrls
query string – Keyword to search for
startUrls array – Willhaben search, category, listing, job search or job URLs (mode byUrls)
state string – Austrian federal state or other countries
location string – City, district or postcode; for jobs it is the job location
radiusKm integer – Job search radius, 1–100 km
sortBy string relevance relevance, newest, priceAsc, priceDesc, distance
priceMin, priceMax integer – Price range in EUR (ignored for jobs)
maxItems integer 20 Maximum listings or jobs (1–50,000)
includeDetails boolean false Fetch full descriptions, contact/seller and extra detail fields
includeRawAttributes boolean false Add every source attribute as rawAttributes
sellerType string – private or dealer (marketplace items and cars; ignored for real estate and jobs)
vehicleCategory string cars cars, motorcycles, caravans or commercial
carMake string – Car manufacturer
carModel string – Model name; requires carMake
yearFrom, yearTo integer – First-registration year range
mileageFrom, mileageTo integer – Mileage range in km
fuelType string – Petrol, diesel, electric, gas, hybrid or hydrogen
transmission string – Automatic or manual
bodyType string – Convertible, compact, estate, saloon, SUV, etc.
carCondition string – Used, new, classic, demonstration car, etc.
driveType string – All-wheel, rear-wheel or front-wheel drive
color string – Exterior colour
powerFrom, powerTo integer – Engine power range in kW
realEstateCategory string rentApartment Rent/buy apartment or house, land, new-build, commercial, holiday or other
propertySubtype string – Penthouse, detached house, building plot, etc.
rooms string – Room-count bucket (1, 2, … 10+, not specified)
livingAreaFrom, livingAreaTo integer – Living area range in m²
plotAreaFrom, plotAreaTo integer – Plot area range in m²
freeAreaType string – Balcony, terrace, garden, loggia, winter garden or roof terrace
equipment string – Lift, cellar, parking, built-in kitchen, etc.
availableNow boolean false Only properties available immediately
jobRegion string – Austrian state, Austria, Germany or Switzerland
employmentMode string – Full-time, part-time, freelance or marginal
jobPosition string – Management, team lead, employee, apprenticeship, internship, etc.
jobOperationArea string – Job field such as IT, care, finance, sales or trades
jobCompanyType string – Staffing agency or direct employer
jobTimeLimit string – Any time, last 24 hours, last 72 hours or last week
incrementalMode boolean false Return only new/changed records on recurring runs
stateKey string – Stable name for the monitoring campaign
emitUnchanged boolean false Include unchanged records
emitExpired boolean false Include records that disappeared after a complete scan

Example: marketplace furniture

{
  "mode": "searchItems",
  "query": "sofa",
  "state": "Wien",
  "priceMax": 800,
  "sortBy": "priceAsc",
  "maxItems": 100
}

Example: used BMW with detail enrichment

{
  "mode": "searchCars",
  "carMake": "1005",
  "carModel": "3er-Reihe",
  "yearFrom": 2018,
  "mileageTo": 120000,
  "fuelType": "100003",
  "priceMax": 30000,
  "includeDetails": true,
  "maxItems": 50
}

Example: Vienna rental apartments

{
  "mode": "searchRealEstate",
  "realEstateCategory": "rentApartment",
  "state": "Wien",
  "rooms": "2X2",
  "livingAreaFrom": 55,
  "priceMax": 1400,
  "maxItems": 100
}

Example: chef jobs in Vienna

{
  "mode": "searchJobs",
  "query": "Koch",
  "jobRegion": "14486",
  "employmentMode": "110",
  "jobTimeLimit": "last_week",
  "includeDetails": true,
  "maxItems": 50
}

Example: paste search and listing URLs

{
  "mode": "byUrls",
  "startUrls": [
    { "url": "https://www.willhaben.at/iad/immobilien/mietwohnungen/wien?PRICE_TO=1200" },
    { "url": "https://www.willhaben.at/iad/gebrauchtwagen/d/auto/bmw-3er-reihe-320d-1234567890/" },
    { "url": "https://www.willhaben.at/jobs/suche?keyword=koch&region=14486" }
  ],
  "maxItems": 30
}

Use cases

  • Car dealers and buyers — track make/model/year/mileage/price across Austria and compare private vs dealer offers.
  • Real-estate analysts — build €/m², rent, energy-class and availability datasets by district.
  • Property hunters — monitor Vienna or Graz rentals and new-build projects with incremental runs.
  • Recruiters and job analysts — export job ads with salary, company, employment type and location.
  • Resellers — watch marketplace categories for new listings and price reductions.
  • Market researchers — collect cross-section supply data for Austrian goods and property.

FAQ

Is this affiliated with Willhaben? No. This actor reads publicly visible listings and has no relationship with Willhaben.at.

Do I need an account, cookies or an API key? No. Listings, search pages and job ads are read without logging in.

Do I need to configure a proxy? No. The actor chooses a working connection automatically. Just fill in the input and run it.

Why are some fields missing on some records? Sellers do not always publish every attribute. A field the source does not carry is omitted, never sent as null or a blank value.

Why is car mileage or first registration missing on some cars? Some sellers leave those fields empty. The actor returns the data the listing actually contains.

What does "Fetch detail pages" add? Full descriptions, seller/contact details, equipment lists, energy certificates, rent breakdowns, floor plans and extra car specification fields. It is optional because it makes the run slower.

How many records can one run return? Up to maxItems, which can be set to 50,000. Willhaben serves at most 199,800 records per search query; for larger jobs, split by state or price range and combine the results.

Can I run this on a schedule and only get new listings? Yes. Turn on incrementalMode; the first run establishes the baseline and later runs return new, changed, expired or reappeared records according to emitUnchanged and emitExpired.

Do price and seller-type filters work for jobs and real estate? Job ads have no listing price, so price filters are ignored for jobs. Willhaben does not apply seller-type filtering to real estate or jobs; those filters are ignored and the run reports it in its status message.

Are image and listing links usable outside Apify? Yes. Image URLs and listing/job links are public absolute URLs.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build 10AHfQXOlb4fyOst2. Documentation is regenerated from the default published build; private drafts are not included.