# Willhaben Property Search Scraper (`ecomscrape/willhaben-property-search-scraper`) Actor

Extract comprehensive property listings from willhaben.at, Austria's largest marketplace with 4.2+ million monthly users. Automate real estate data collection for rental apartments, houses, and commercial properties with detailed attributes, images, and advertiser information for market analysis.

- **URL**: https://apify.com/ecomscrape/willhaben-property-search-scraper.md
- **Developed by:** [ecomscrape](https://apify.com/ecomscrape) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 32 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Contact

If you encounter any issues or need to exchange information, please feel free to contact us through the following link:
[My profile](https://apify.com/ecomscrape)

## **Willhaben.at Property Scraper: Extract Austrian Real Estate Data Efficiently**

### Introduction: Why Scrape Willhaben.at Property Data?

Willhaben.at stands as Austria's premier digital marketplace, attracting over 4.2 million users monthly and hosting more than 10 million active advertisements. The platform dominates the Austrian real estate market, offering an extensive range of properties including rental apartments (Mietwohnungen), houses for rent (Haus-Mieten), commercial real estate (Gewerbeimmobilien), and properties for sale across all Austrian regions from Vienna to Salzburg.

For real estate professionals, market analysts, property investors, and data researchers, manually browsing through thousands of listings is time-consuming and inefficient. The Willhaben.at Property Scraper addresses this challenge by automating the data extraction process, enabling users to collect comprehensive property information at scale. Whether you're conducting market research, tracking price trends, analyzing regional property availability, or building property comparison tools, this scraper provides structured access to Austria's most valuable real estate dataset.

### Overview: Powerful Real Estate Data Extraction Tool

The Willhaben.at Property Scraper is a specialized web scraping tool designed to extract detailed property listings from Austria's largest classified marketplace. This scraper navigates through property search result pages and systematically collects comprehensive information about each listing, including property attributes, pricing, location data, images, and advertiser details.

#### Key Advantages

**Comprehensive Data Collection**: Unlike basic scrapers that only capture surface-level information, this tool extracts complete property records including vertical IDs, product identifiers, advertising status, detailed attributes, multiple images, and advertiser contact information.

**Flexible Search Support**: The scraper works with any willhaben.at property search URL, supporting various property types such as rental apartments (Mietwohnungen), houses for rent (Haus-Mieten), and commercial properties (Gewerbeimmobilien). It handles filtered searches with room count specifications, location filters, and custom pagination.

**Production-Ready Reliability**: Built with retry mechanisms (configurable retries per URL), residential proxy support for bot detection avoidance, and error handling for failed URLs, ensuring stable data collection even with large-scale scraping operations.

#### Who Benefits from This Scraper?

- **Real Estate Agencies**: Monitor competitor listings, track market inventory, and identify new properties instantly
- **Property Investors**: Analyze investment opportunities, track price movements, and identify undervalued properties
- **Market Researchers**: Conduct comprehensive market analysis, study regional pricing trends, and generate real estate reports
- **PropTech Companies**: Build property aggregation platforms, comparison tools, or automated alert systems
- **Data Analysts**: Create datasets for machine learning models, predictive pricing algorithms, or market forecasting

### Input Configuration Explained

Example url 1: https://www.willhaben.at/iad/immobilien/mietwohnungen/mietwohnung-angebote?sfId=928d562c-74aa-445c-9db4-f4be9d6ce8e8\&isNavigation=true\&NO_OF_ROOMS_BUCKET=1X1\&NO_OF_ROOMS_BUCKET=2X2\&page=2\&rows=30

Example url 2: https://www.willhaben.at/iad/immobilien/haus-mieten/haus-angebote?page=1\&sfId=3d55b09f-a7ac-452a-9ba8-30844acffdb6\&isNavigation=true

Example url 3: https://www.willhaben.at/iad/immobilien/gewerbeimmobilien-kaufen/gewerbeimmobilien-angebote?sfId=bcd1bd82-99d8-4530-a3ef-c6efe585dd23\&isNavigation=true\&page=2\&rows=30

Example Screenshot of property list by query page:

![](https://i.ibb.co/0yW17k0Q/Screenshot-from-2025-10-28-18-02-57.png)

#### Input Format Specification

The scraper accepts JSON configuration with precise parameters to customize data extraction according to specific requirements. The input structure includes essential settings for proxy configuration, retry mechanisms, and URL specifications.

**Example Input Configuration:**

```json
{
  "max_retries_per_url": 2, // Maximum waiting time when accessing the links you provided.
  "proxy": { // Add a proxy to ensure that during the data collection process, you are not detected as a bot.
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL" 
    ],
    "apifyProxyCountry": "SG" // You should choose an Country that coincides with the Country you want to collect data from
  },
  "max_items_per_url": 20,
  "ignore_url_failures": true,
  "urls": [ // Links to property list by query pages.
    "https://www.willhaben.at/iad/immobilien/mietwohnungen/mietwohnung-angebote?sfId=928d562c-74aa-445c-9db4-f4be9d6ce8e8&isNavigation=true&NO_OF_ROOMS_BUCKET=1X1&NO_OF_ROOMS_BUCKET=2X2&page=2&rows=30",
    "https://www.willhaben.at/iad/immobilien/haus-mieten/haus-angebote?page=1&sfId=3d55b09f-a7ac-452a-9ba8-30844acffdb6&isNavigation=true",
    "https://www.willhaben.at/iad/immobilien/gewerbeimmobilien-kaufen/gewerbeimmobilien-angebote?sfId=bcd1bd82-99d8-4530-a3ef-c6efe585dd23&isNavigation=true&page=2&rows=30"
  ]
}
```

**Parameter Explanations:**

**max_retries_per_url** (integer, default: 2): Maximum retry attempts if a URL fails to load. Recommended: 2-3 for stability.

**proxy** (object): Configure proxy settings to avoid bot detection. Using residential proxies is highly recommended for willhaben.at.

- **useApifyProxy**: Enable proxy rotation
- **apifyProxyGroups**: Use "RESIDENTIAL" for best results
- **apifyProxyCountry**: Match the target country (use "AT" for Austria, though other locations work)

**max_items_per_url** (integer, default: 20): Limits properties extracted per search page. Adjust based on your needs (20-100 typical range).

**ignore_url_failures** (boolean, default: true): Continue scraping other URLs if one fails, useful for batch operations.

**urls** (array): List of willhaben.at property search result page URLs. Obtain these by:

1. Visiting willhaben.at and searching for properties
2. Applying your desired filters (location, room count, price range)
3. Copying the URL from your browser
4. Adding pagination parameters (?page=1, ?page=2) to scrape multiple pages

#### Comprehensive Output Data Structure

You get the output from the willhaben.at Property Search Scraper stored in a tab. The following is an example of the Information Fields collected after running the Actor.

```json
[ // List of property information
  {
  "id": "2000128544",
  "vertical_id": 2,
  "ad_type_id": 2,
  "product_id": 200,
  "advert_status": {
    "id": "active",
    "description": "aktiv",
    "status_id": 50
  },
  "description": "Gemeindewohnung 30 m² ab sofort abzugeben (nur mit Vormerkschein) 1 Person",
  "attributes": {
    "attribute": [
      {
        "name": "LOCATION",
        "values": [
          "Wien, 21. Bezirk, Floridsdorf"
        ]
      },
      {
        "name": "POSTCODE",
        "values": [
          "1210"
        ]
      },
      {
        "name": "STATE",
        "values": [
          "Wien"
        ]
      },
      {
        "name": "BODY_DYN",
        "values": [
          "Gemeindewohnung für 1 Person, , möbliert, Wohn- Schlafzimmer, Küche, Badezimmer, Balkon, 30 m², ab sofort zu übernehmen ( nur mit Vormerkschein! ). Ablöse nach Vereinbarung. Gute Verkehrsanbindung (Bus) 21. Bezirk Jedleseerstraße Kontakt +43 676 4965375..."
        ]
      },
      {
        "name": "ORG_UUID",
        "values": [
          "b44370e0-70b5-4718-929a-c82a3667e9e5"
        ]
      },
      {
        "name": "ESTATE_SIZE/LIVING_AREA",
        "values": [
          "30"
        ]
      },
      {
        "name": "DISTRICT",
        "values": [
          "Wien"
        ]
      },
      {
        "name": "HEADING",
        "values": [
          "Gemeindewohnung 30 m² ab sofort abzugeben (nur mit Vormerkschein) 1 Person"
        ]
      },
      {
        "name": "LOCATION_QUALITY",
        "values": [
          "1.0"
        ]
      },
      {
        "name": "FLOOR",
        "values": [
          "1"
        ]
      },
      {
        "name": "PUBLISHED",
        "values": [
          "1761648000000"
        ]
      },
      {
        "name": "COUNTRY",
        "values": [
          "Österreich"
        ]
      },
      {
        "name": "LOCATION_ID",
        "values": [
          "117243"
        ]
      },
      {
        "name": "PROPERTY_TYPE",
        "values": [
          "Wohnung"
        ]
      },
      {
        "name": "NUMBER_OF_ROOMS",
        "values": [
          "1"
        ]
      },
      {
        "name": "ADTYPE_ID",
        "values": [
          "2"
        ]
      },
      {
        "name": "PROPERTY_TYPE_ID",
        "values": [
          "3"
        ]
      },
      {
        "name": "ADID",
        "values": [
          "2000128544"
        ]
      },
      {
        "name": "ORGID",
        "values": [
          "24194291"
        ]
      },
      {
        "name": "SEO_URL",
        "values": [
          "immobilien/d/mietwohnungen/wien/wien-1210-floridsdorf/gemeindewohnung-30-m-ab-sofort-abzugeben-nur-mit-vormerkschein-1-person-2000128544/"
        ]
      },
      {
        "name": "FREE_AREA_TYPE",
        "values": [
          "20"
        ]
      },
      {
        "name": "ALL_IMAGE_URLS",
        "values": [
          "4/200/012/8544_-1987516515.jpg;4/200/012/8544_-2067738786.jpg;4/200/012/8544_-617753062.jpg;4/200/012/8544_769187249.jpg;4/200/012/8544_298639208.jpg"
        ]
      },
      {
        "name": "PUBLISHED_String",
        "values": [
          "2025-10-28T11:40:00Z"
        ]
      },
      {
        "name": "ESTATE_PREFERENCE",
        "values": [
          "24, 250, 27, 28, 4"
        ]
      },
      {
        "name": "categorytreeids",
        "values": [
          "7276"
        ]
      },
      {
        "name": "RENT/PER_MONTH_LETTINGS",
        "values": [
          "340.0"
        ]
      },
      {
        "name": "PRODUCT_ID",
        "values": [
          "200"
        ]
      },
      {
        "name": "IS_BUMPED",
        "values": [
          "1"
        ]
      },
      {
        "name": "MMO",
        "values": [
          "4/200/012/8544_-1987516515.jpg"
        ]
      },
      {
        "name": "ROOMS",
        "values": [
          "1X1"
        ]
      },
      {
        "name": "AD_UUID",
        "values": [
          "da69f143-d925-46ec-bd0c-b34e9d305250"
        ]
      },
      {
        "name": "ADDRESS",
        "values": [
          "Jedleseerstrasse 66-94"
        ]
      },
      {
        "name": "COORDINATES",
        "values": [
          "48.26322,16.3869"
        ]
      },
      {
        "name": "PRICE",
        "values": [
          "340"
        ]
      },
      {
        "name": "PRICE_FOR_DISPLAY",
        "values": [
          "€ 340"
        ]
      },
      {
        "name": "ESTATE_SIZE",
        "values": [
          "30"
        ]
      },
      {
        "name": "ISPRIVATE",
        "values": [
          "0"
        ]
      },
      {
        "name": "PROPERTY_TYPE_FLAT",
        "values": [
          "true"
        ]
      },
      {
        "name": "FREE_AREA_TYPE_NAME",
        "values": [
          "Balkon"
        ]
      }
    ]
  },
  "advert_image_list": {
    "advert_image": [
      {
        "id": 1,
        "name": "4/200/012/8544_-1987516515.jpg",
        "self_link": "https://api.willhaben.at/restapi/v2/atimage/2000128544/1",
        "description": "Cover Image",
        "main_image_url": "https://cache.willhaben.at/mmo/4/200/012/8544_-1987516515_hoved.jpg",
        "thumbnail_image_url": "https://cache.willhaben.at/mmo/4/200/012/8544_-1987516515_thumb.jpg",
        "reference_image_url": "https://cache.willhaben.at/mmo/4/200/012/8544_-1987516515.jpg",
        "similar_image_search_url": null,
        "reference": "4/200/012/8544_-1987516515.jpg"
      },
      {
        "id": 1,
        "name": "4/200/012/8544_-2067738786.jpg",
        "self_link": "https://api.willhaben.at/restapi/v2/atimage/2000128544/1",
        "description": "Cover Image",
        "main_image_url": "https://cache.willhaben.at/mmo/4/200/012/8544_-2067738786_hoved.jpg",
        "thumbnail_image_url": "https://cache.willhaben.at/mmo/4/200/012/8544_-2067738786_thumb.jpg",
        "reference_image_url": "https://cache.willhaben.at/mmo/4/200/012/8544_-2067738786.jpg",
        "similar_image_search_url": null,
        "reference": "4/200/012/8544_-2067738786.jpg"
      },
      {
        "id": 1,
        "name": "4/200/012/8544_-617753062.jpg",
        "self_link": "https://api.willhaben.at/restapi/v2/atimage/2000128544/1",
        "description": "Cover Image",
        "main_image_url": "https://cache.willhaben.at/mmo/4/200/012/8544_-617753062_hoved.jpg",
        "thumbnail_image_url": "https://cache.willhaben.at/mmo/4/200/012/8544_-617753062_thumb.jpg",
        "reference_image_url": "https://cache.willhaben.at/mmo/4/200/012/8544_-617753062.jpg",
        "similar_image_search_url": null,
        "reference": "4/200/012/8544_-617753062.jpg"
      }
    ],
    "floor_plans": []
  },
  "self_link": "https://api.willhaben.at/restapi/v2/atverz/2000128544",
  "context_link_list": {
    "context_link": [
      {
        "id": "selfLink",
        "description": "Identifies this entity",
        "uri": "https://api.willhaben.at/restapi/v2/atverz/2000128544",
        "selected": false,
        "relative_path": "/atverz/2000128544",
        "service_name": "iad"
      },
      {
        "id": "seoSelfLink",
        "description": "Self reference",
        "uri": "https://api.willhaben.at/restapi/v2/atverz/immobilien/d/mietwohnungen/wien/wien-1210-floridsdorf/gemeindewohnung-30-m-ab-sofort-abzugeben-nur-mit-vormerkschein-1-person-2000128544/",
        "selected": false,
        "relative_path": "/atverz/immobilien/d/mietwohnungen/wien/wien-1210-floridsdorf/gemeindewohnung-30-m-ab-sofort-abzugeben-nur-mit-vormerkschein-1-person-2000128544/",
        "service_name": "iad"
      },
      {
        "id": "adDetailLink",
        "description": "Self reference to advert via ad detail component",
        "uri": "https://publicapi.willhaben.at/atdetail/v1/2000128544",
        "selected": false,
        "relative_path": "/2000128544",
        "service_name": "addetail"
      },
      {
        "id": "removeAdFromFolder",
        "description": "Remove ad from any folder",
        "uri": "https://api.willhaben.at/restapi/v2/userfolders/remove/2000128544",
        "selected": false,
        "relative_path": "/userfolders/remove/2000128544",
        "service_name": "iad"
      },
      {
        "id": "getFolderSaveLinks",
        "description": "Get contextlinks to save the ad in the users folders",
        "uri": "https://api.willhaben.at/restapi/v2/userfolders/links/2000128544",
        "selected": false,
        "relative_path": "/userfolders/links/2000128544",
        "service_name": "iad"
      },
      {
        "id": "iadShareLink",
        "description": "Share link in iAd",
        "uri": "https://www.willhaben.at/iad/object?adId=2000128544",
        "selected": false,
        "relative_path": "/iad/object?adId=2000128544",
        "service_name": "web_url"
      }
    ]
  },
  "advertiser_info": {
    "label": "Gewerblicher Anbieter",
    "icon_s_v_g": null,
    "icon_p_n_g": null,
    "icon_type": "NONE"
  },
  "upselling_organisation_logo": null,
  "teaser_attributes": [
    {
      "prefix": null,
      "value": "30",
      "postfix": "m²"
    },
    {
      "prefix": null,
      "value": "1",
      "postfix": "Zimmer"
    },
    {
      "prefix": null,
      "value": "",
      "postfix": "Balkon"
    }
  ],
  "from_url": "https://www.willhaben.at/iad/immobilien/mietwohnungen/mietwohnung-angebote?sfId=928d562c-74aa-445c-9db4-f4be9d6ce8e8&isNavigation=true&NO_OF_ROOMS_BUCKET=1X1&NO_OF_ROOMS_BUCKET=2X2&page=2&rows=30"
}, // ... Many other property details
] 
```

#### Output Fields Explained

**Field Definitions and Usage:**

**ID** (string): Unique identifier for the property listing

- *Purpose*: Primary key for database storage, deduplication, and tracking listings over time
- *Example*: "862345791"
- *Use case*: Track when listings are removed or modified

**Vertical ID** (string): Category identifier indicating the property type section

- *Purpose*: Classifies the listing within willhaben's taxonomy (real estate vertical)
- *Example*: "REAL_ESTATE"
- *Use case*: Filter and segment data by major categories

**Ad Type ID** (string): Specific advertisement type classification

- *Purpose*: Distinguishes between rental, sale, commercial, or other listing types
- *Example*: "APARTMENT_RENT", "HOUSE_SALE", "COMMERCIAL_RENT"
- *Use case*: Separate rental market analysis from sales market data

**Product ID** (string): Internal product classification code

- *Purpose*: Further categorization within ad types for granular filtering
- *Example*: "WOHNUNG", "HAUS", "GEWERBE"
- *Use case*: Build specific property type datasets

**Advert Status** (string): Current listing status indicator

- *Purpose*: Identifies if the property is active, reserved, or sold/rented
- *Possible values*: "ACTIVE", "RESERVED", "CLOSED"
- *Use case*: Filter for only available properties or track market velocity

**Description** (string): Full property description text

- *Purpose*: Contains detailed information about the property, amenities, location details, and special features
- *Format*: Multi-paragraph text, may include German language content
- *Use case*: Natural language processing, keyword extraction, sentiment analysis, or feature identification

**Attributes** (object): Structured property characteristics

- *Purpose*: Contains all structured data fields like price, size, rooms, location, etc.
- *Typical fields*:
  - Price/rent amount and currency
  - Living space (square meters)
  - Number of rooms/bedrooms
  - Address details (street, postal code, district)
  - Property age/year built
  - Floor level
  - Energy efficiency rating
  - Available from date
  - Additional costs (heating, utilities)
- *Use case*: Comparative analysis, filtering, price per square meter calculations, mapping

**Advert Image List** (array): Collection of property photos

- *Purpose*: URLs to all images associated with the listing
- *Format*: Array of image URL strings, typically multiple resolutions available
- *Use case*: Visual property galleries, image analysis, thumbnail generation, or ML-based property feature recognition

**Self Link** (string): Direct URL to the property listing page

- *Purpose*: Deep link to the original listing for verification or user navigation
- *Format*: Full willhaben.at URL
- *Use case*: Create clickable references, verify scraped data, or provide source attribution

**Context Link List** (array): Related navigation and search links

- *Purpose*: Contains URLs for related searches, similar properties, or category pages
- *Use case*: Discover related listings, understand property context, or expand search scope

**Advertiser Info** (object): Property advertiser/agent details

- *Purpose*: Information about who posted the listing
- *Typical fields*:
  - Name (individual or agency)
  - Contact information
  - Account type (private, agent, developer)
  - Advertiser ID
- *Use case*: Identify leading agencies, contact property owners, analyze market participants, detect professional vs. private sellers

**Upselling Organisation Logo** (string): Company/agency logo URL

- *Purpose*: Visual branding element for professional advertisers
- *Format*: Image URL
- *Use case*: Recognize established agencies, verify advertiser legitimacy

**Teaser Attributes** (object): Highlighted property features

- *Purpose*: Key selling points emphasized in the listing preview
- *Example fields*: "Balcony", "Parking included", "Pet-friendly", "Recently renovated"
- *Use case*: Quick filtering for specific amenities, feature frequency analysis

### How to Use the Willhaben.at Property Scraper

#### Step-by-Step Guide

1. **Identify Target Properties**: Visit willhaben.at and use the search interface to find properties matching your criteria. Apply filters for location, property type, price range, and room count.

2. **Extract Search URLs**: Copy the URL from your browser's address bar for each search result page you want to scrape. For comprehensive data collection, include multiple page URLs (page=1, page=2, etc.).

3. **Configure Input Parameters**: Create your JSON input with the collected URLs. Set `max_items_per_url` based on how many properties per page you need. Enable proxy settings to prevent blocking.

4. **Run the Scraper**: Execute the scraper with your configuration. The tool will process each URL sequentially, extracting all specified property listings.

5. **Process Output Data**: The scraper returns structured JSON data. Export to CSV for spreadsheet analysis, load into a database for querying, or use directly in your application via API.

#### Best Practices

**URL Selection**: Start with specific filtered searches rather than broad categories to get more relevant data. Use willhaben's advanced filters before generating URLs.

**Proxy Configuration**: Always use residential proxies (apifyProxyCountry: "AT" recommended for Austrian properties) to maintain access and avoid rate limiting.

**Batch Processing**: When scraping multiple pages, use `ignore_url_failures: true` to prevent one failed page from stopping the entire job.

**Respectful Scraping**: Set reasonable `max_items_per_url` limits and avoid overwhelming the server. Schedule large scraping jobs during off-peak hours.

**Data Freshness**: Real estate listings change frequently. Schedule regular scraping intervals (daily or weekly) to maintain current data.

#### Common Issues and Solutions

**Problem**: Scraper returns empty results

- **Solution**: Verify URLs are current and publicly accessible. Check if proxy configuration is correct. Ensure URLs include full pagination parameters.

**Problem**: Some listings missing images

- **Solution**: Some properties may not have images uploaded yet. Check the "Advert Image List" field for null/empty values and handle accordingly.

**Problem**: Incomplete attribute data

- **Solution**: Not all listings have complete information. Private sellers often provide less structured data than professional agencies. Implement null checking in your data processing pipeline.

**Problem**: Rate limiting or blocking

- **Solution**: Enable residential proxies, reduce `max_items_per_url`, add delays between requests, or rotate proxy countries.

### Benefits and Real-World Applications

#### Time and Resource Efficiency

Manual property research on willhaben.at involves clicking through hundreds of listings, copying information, and organizing data in spreadsheets—a process that can take days or weeks for comprehensive market analysis. The Willhaben.at Property Scraper automates this entirely, collecting thousands of listings in hours with consistent data structure and zero manual effort.

#### Practical Business Applications

**Market Intelligence**: Real estate agencies can monitor competitor pricing strategies, identify market gaps, and adjust their own listings to remain competitive based on real-time market data.

**Investment Analysis**: Property investors can analyze ROI opportunities by comparing rental yields across districts, tracking price-per-square-meter trends, and identifying underpriced properties that represent value investments.

**Automated Alerts**: PropTech platforms can build notification systems that alert users when properties matching specific criteria (price drops, new listings in preferred areas, specific amenity combinations) become available.

**Price Prediction Models**: Data scientists can use historical scraped data to build machine learning models that predict property values based on attributes, location, market conditions, and seasonal trends.

**Portfolio Management**: Property management companies can track their own listings' performance relative to market averages, optimize pricing strategies, and measure market share in specific regions.

#### Competitive Advantage

Access to comprehensive, structured real estate data provides strategic advantages in Austria's competitive property market. While competitors rely on manual research and partial data, automated scraping enables data-driven decisions, faster market response, and identifying opportunities before they become widely known.

### Conclusion

The Willhaben.at Property Scraper transforms Austria's most valuable real estate marketplace into a structured, queryable database. By automating the extraction of comprehensive property data—from basic attributes to advertiser information and image galleries—this tool empowers real estate professionals, investors, researchers, and technology companies to make informed decisions based on complete market intelligence.

Whether you're analyzing rental markets in Vienna, tracking commercial property trends across Austria, or building innovative PropTech solutions, this scraper provides the foundational data infrastructure for success. Start leveraging Austria's premier real estate data source today to gain competitive insights and drive better business outcomes.

## Related Actors

- [**Bizbuysell.com Property Details Scraper**](https://apify.com/ecomscrape/willhaben-property-details-scraper): A specialized data extraction tool engineered to harvest detailed property information from willhaben's property marketplace.

## Your feedback

We are always working to improve Actors' performance. So, if you have any technical feedback about willhaben.at Property Search Scraper or simply found a bug, please create an issue on the Actor's Issues tab in Apify Console.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the property list page urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `max_items_per_url` (type: `integer`):

Limit the number of items per URL you want to scrape

## `max_retries_per_url` (type: `integer`):

Limit the number of retries for each URL if the scrape is detected as a bot or the page fails to load

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to load after the maximum number of retries is reached.

## `proxy` (type: `object`):

Select proxies to be used by your scraper.

## Actor input object example

```json
{
  "urls": [
    "https://www.willhaben.at/iad/immobilien/mietwohnungen/mietwohnung-angebote?sfId=928d562c-74aa-445c-9db4-f4be9d6ce8e8&isNavigation=true&NO_OF_ROOMS_BUCKET=1X1&NO_OF_ROOMS_BUCKET=2X2&page=2&rows=30"
  ],
  "max_items_per_url": 20,
  "max_retries_per_url": 2,
  "ignore_url_failures": true,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.willhaben.at/iad/immobilien/mietwohnungen/mietwohnung-angebote?sfId=928d562c-74aa-445c-9db4-f4be9d6ce8e8&isNavigation=true&NO_OF_ROOMS_BUCKET=1X1&NO_OF_ROOMS_BUCKET=2X2&page=2&rows=30"
    ],
    "max_items_per_url": 20,
    "max_retries_per_url": 2,
    "ignore_url_failures": true,
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ecomscrape/willhaben-property-search-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://www.willhaben.at/iad/immobilien/mietwohnungen/mietwohnung-angebote?sfId=928d562c-74aa-445c-9db4-f4be9d6ce8e8&isNavigation=true&NO_OF_ROOMS_BUCKET=1X1&NO_OF_ROOMS_BUCKET=2X2&page=2&rows=30"],
    "max_items_per_url": 20,
    "max_retries_per_url": 2,
    "ignore_url_failures": True,
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ecomscrape/willhaben-property-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.willhaben.at/iad/immobilien/mietwohnungen/mietwohnung-angebote?sfId=928d562c-74aa-445c-9db4-f4be9d6ce8e8&isNavigation=true&NO_OF_ROOMS_BUCKET=1X1&NO_OF_ROOMS_BUCKET=2X2&page=2&rows=30"
  ],
  "max_items_per_url": 20,
  "max_retries_per_url": 2,
  "ignore_url_failures": true,
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ecomscrape/willhaben-property-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ecomscrape/willhaben-property-search-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/MqjNY4riw041RR5Vx/builds/jxuc5NaYupy9OnUQg/openapi.json
