# Willhaben Vienna Real Estate Listings (`zinin/willhaben-vienna`) Actor

Pull live apartment rental and sale listings straight from Willhaben.at — Austria's biggest classifieds portal — for Vienna. No login, no browser, no proxies. Unofficial, independent tool — not affiliated with, endorsed by, or sponsored by Willhaben.

- **URL**: https://apify.com/zinin/willhaben-vienna.md
- **Developed by:** [Tim Zinin](https://apify.com/zinin) (community)
- **Categories:** Real estate
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 1,000 listing founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Willhaben Vienna Real Estate Listings

Pull live apartment rental and sale listings straight from Willhaben.at —
Austria's biggest classifieds portal — for Vienna. No login, no API key, no
browser needed on your side.

### What you get

- Title, price (EUR), rooms, floor area, district/street text, coordinates, a
  short description, up to 5 preview photos and the direct listing URL for
  every ad found.
- Filter by rent (`mietwohnungen`) or sale (`eigentumswohnung`).
- Runs on Apify: schedule it, monitor it, call it from the API, export to
  JSON/CSV/Excel or push straight into your own pipeline.

### How to run it

1. Click **Try for free** — no card needed on the free plan.
2. Pick **Deal type** (rent or sale) — **City** defaults to `wien` (Vienna).
3. Hit **Start** and pull the results from the dataset (UI, API or webhook).

### Pricing

Pay-per-event: **$0.005 per run start + $0.002 per result**. No monthly seat, no minimum. 100 listings found cost about $0.21 (the one-time start fee plus 100 result rows). Rows where the source returned nothing (an unrecognized city, or a query with zero matching listings) are returned for transparency but are **never** charged for.

### Input

| Field | Required | What it does |
|---|---|---|
| `deal_type` | yes | `mietwohnungen` for rentals or `eigentumswohnung` for apartments for sale. |
| `city` | yes | Willhaben city/region URL slug. Only `wien` (Vienna) is verified to work reliably — see Limitations. |
| `max_items` | no | Total row cap for this run (default 100). |
| `max_pages` | no | How many result pages to walk, 30 listings per page (default 3). |

```json
{
    "deal_type": "mietwohnungen",
    "city": "wien",
    "max_items": 5,
    "max_pages": 1
}
```

### Output

Real row from a local verification run (2026-07-30):

```json
{
    "found": true,
    "url": "https://www.willhaben.at/iad/immobilien/d/mietwohnungen/wien/wien-1220-donaustadt/freiheit-mieten-pioniere-sein-dein-neuer-ort-dein-neues-zuhause-am-hausfeld-top-33-1516598431/",
    "title": "FREIHEIT MIETEN, PIONIERE SEIN. Dein neuer Ort, dein neues Zuhause am Hausfeld! (Top 33)",
    "price": 1144.18,
    "currency": "EUR",
    "deal_type": "rent",
    "property_type": "Wohnung",
    "rooms": 2,
    "area_sqm": 51,
    "location": "Wien, 22. Bezirk, Donaustadt",
    "lat": 48.23089198,
    "lng": 16.47927772,
    "posted_date": "2026-07-30T08:59:03Z",
    "description": "Bist Du bereit, als Pionier das Obere Hausfeld zu erobern? Hier, am Hausfeld, direkt an der neuen U2, verschmelzen die Vorzüge der Metropole mit der Weite des Umlands zu einem einzigartigen Lebensgefühl...",
    "images": [
        "https://cache.willhaben.at/mmo/1/151/659/8431_741170553.jpg",
        "https://cache.willhaben.at/mmo/1/151/659/8431_-1458965307.jpg",
        "https://cache.willhaben.at/mmo/1/151/659/8431_-588301439.jpg",
        "https://cache.willhaben.at/mmo/1/151/659/8431_1681851251.jpg",
        "https://cache.willhaben.at/mmo/1/151/659/8431_24030570.jpg"
    ],
    "source_portal": "willhaben-vienna",
    "scraped_at": "2026-07-30T07:16:39.368Z"
}
```

| Field | Meaning |
|---|---|
| `found` | `true` for a real listing row, `false` for a not-found/error row. |
| `price` | Listing price in EUR as a number (rent: monthly; sale: asking price). |
| `property_type` | Raw label as willhaben shows it (German), e.g. `"Wohnung"` (apartment). |
| `rooms` / `area_sqm` | `null` when the listing doesn't state them. |
| `location` | District/area text as shown on the listing, e.g. `"Wien, 22. Bezirk, Donaustadt"`. |
| `lat` / `lng` | Coordinates as given by the listing; `null` when not published. |
| `posted_date` | Full ISO-8601 timestamp with year, as willhaben provides it. |
| `images` | Up to 5 preview photos from the listing's gallery. |

A not-found row looks like:

```json
{
    "found": false,
    "note": "willhaben.at does not recognize \"not-a-real-city-9999\" as a valid city for deal type \"mietwohnungen\" (the page itself reports is404) — treated as zero results, not an error.",
    "scraped_at": "2026-07-30T07:20:00.000Z"
}
```

### Other tools we built

#### Related tools

Related tools for adjacent workflows in real estate listings and monitoring.

| Actor | What it does |
|---|---|
| [Imovirtual Portugal Real Estate Listings](https://apify.com/zinin/imovirtual-lisbon) | Pair it in the real estate listings and monitoring workflow: Pull live apartment and house listings straight from Imovirtual.com — Portugal's biggest real-estate... |
| [Krisha.kz Kazakhstan Real Estate Listings](https://apify.com/zinin/krisha-kz) | Pair it in the real estate listings and monitoring workflow: Pull live apartment and house listings straight from Krisha.kz — Kazakhstan's biggest real-estate... |
| [Otodom Poland Real Estate Listings](https://apify.com/zinin/otodom-warsaw) | Pair it in the real estate listings and monitoring workflow: Pull live apartment and house listings straight from Otodom.pl — Poland's biggest real-estate classifieds... |
| [Storia Romania Real Estate Listings](https://apify.com/zinin/storia-bucharest) | Pair it in the real estate listings and monitoring workflow: Pull live apartment and house listings straight from Storia.ro — Romania's biggest real-estate classifieds... |
| [Rightmove UK Property Listings (London and beyond)](https://apify.com/zinin/rightmove-london) | Pair it in the real estate listings and monitoring workflow: Pull live for-sale and to-rent property listings straight from Rightmove.co.uk — the UK's biggest property... |

### FAQ / Limitations

**Does this need a Willhaben account or API key?** No — it reads the same
public search pages a visitor sees, no login.

**Does it work for cities other than Vienna?** Not guaranteed. Willhaben
structures some regions' URLs differently — a real Austrian city like Graz
404s under this same path shape. `city` defaults to `wien`, which is verified
to work; other slugs are untested.

**What this is NOT.** This does not fetch the seller's phone number or the
full listing-detail page (only what the search-results feed already includes
— title, price, rooms, area, location, coordinates, description, up to 5
photos). It does not guarantee every listing on Willhaben is returned;
pagination stops at `max_pages` / `max_items`.

Found a bug or need a custom variant (a different Austrian city, extra
fields)? Open an issue on the Actor page.

# Actor input Schema

## `deal_type` (type: `string`):

"mietwohnungen" for apartment rentals, "eigentumswohnung" for apartments for sale.

## `city` (type: `string`):

Willhaben city/region URL slug. Only "wien" (Vienna) is verified to work reliably with this Actor's path shape — other slugs may 404 even for real Austrian cities (willhaben structures some regions' URLs differently).

## `max_items` (type: `integer`):

Maximum number of listing rows to return in this run.

## `max_pages` (type: `integer`):

How many result pages to walk before stopping (30 listings per page).

## Actor input object example

```json
{
  "deal_type": "mietwohnungen",
  "city": "wien",
  "max_items": 5,
  "max_pages": 1
}
```

# Actor output Schema

## `results` (type: `string`):

API URL for the default dataset items produced by this run.

# 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 = {
    "deal_type": "mietwohnungen",
    "city": "wien",
    "max_items": 5,
    "max_pages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("zinin/willhaben-vienna").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 = {
    "deal_type": "mietwohnungen",
    "city": "wien",
    "max_items": 5,
    "max_pages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("zinin/willhaben-vienna").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "deal_type": "mietwohnungen",
  "city": "wien",
  "max_items": 5,
  "max_pages": 1
}' |
apify call zinin/willhaben-vienna --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=zinin/willhaben-vienna",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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