# Global Real Estate New Listing Monitor (`mocha_tassel/global-listing-monitor`) Actor

Watches Rightmove, Idealista, Immowelt, willhaben and Kleinanzeigen and returns only new listings — with photos and webhook alerts. Built for scheduled worldwide monitoring.

- **URL**: https://apify.com/mocha\_tassel/global-listing-monitor.md
- **Developed by:** [Niko T.](https://apify.com/mocha_tassel) (community)
- **Categories:** Real estate, Automation
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 new listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## Global Real Estate New Listing Monitor

![global-listing-monitor](https://api.apify.com/v2/key-value-stores/yfnvtbimUC1yUnStx/records/global-listing-monitor.png?signature=1OWGaFf7wXn0RyCyHhrBz)

Watches **Rightmove**, **Idealista**, **Immowelt**, **willhaben** and **Kleinanzeigen** and returns **only listings that appeared since your last run**.

Same product idea as the DACH monitor — scheduled runs, webhook alerts, pay-per-event — expanded to UK and Idealista markets for a worldwide Apify Store audience. Every result includes a listing photo in the Output tab.

### Supported portals

| Portal | Country | Notes |
| --- | --- | --- |
| Rightmove | UK | Prefer a Search URL; residential proxies from GB |
| Idealista | ES / IT / PT | Search URL required; residential proxies from the target country |
| Immowelt | Germany | City name or Search URL |
| willhaben | Austria | Town / state or Search URL |
| Kleinanzeigen | Germany | Location slug + code, or Search URL |

### How to set it up

1. Pick a portal and paste a **Search URL** from the portal (filters included).
2. Run once to record the baseline (or turn off “Return everything on the first run” if you wire the webhook immediately).
3. Put the Actor on a daily / hourly schedule.

### Pricing

You pay a small fee per listing checked, plus a larger fee for each genuinely new listing returned. Quiet days stay cheap.

### Proxies

Property portals block data-centre IPs. The default uses Apify residential proxies from the matching country.

### Legal note

The Actor reads publicly accessible listing pages. It does not log in or bypass paywalls. You are responsible for how you use the results.

***

### Deutsch

Überwacht Portale in DE/AT/UK und Idealista und meldet nur **neu erschienene** Inserate — für Zeitpläne und Webhooks. Idealista braucht eine Such-URL; Rightmove ebenfalls empfohlen. Residential-Proxys sind Pflicht.

# Actor input Schema

## `portal` (type: `string`):

Which portal to watch. Rightmove and Idealista almost always need a Search URL plus residential proxies from the matching country.

## `searchUrl` (type: `string`):

Paste any search URL from the portal after you applied filters in the browser. Required for Idealista; strongly recommended for Rightmove.

## `location` (type: `string`):

For Rightmove: a UK place name (resolved via typeahead) or a locationIdentifier such as REGION^87490. For Immowelt/willhaben: a city name. Ignored when Search URL is set.

## `offerType` (type: `string`):

Whether to watch properties for sale or for rent.

## `estateType` (type: `string`):

Applies to Immowelt only.

## `category` (type: `string`):

Portal-specific category slug, for example eigentumswohnung or mietwohnung.

## `locationSlug` (type: `string`):

Kleinanzeigen URL slug for the area, copied from the portal search URL.

## `locationCode` (type: `string`):

Kleinanzeigen numeric location code, copied from the portal search URL.

## `maxItems` (type: `integer`):

How many listings the monitor scans each run. Higher is more thorough but slower and more expensive.

## `minPrice` (type: `integer`):

Ignore listings cheaper than this amount. Currency follows the portal.

## `maxPrice` (type: `integer`):

Ignore listings more expensive than this amount. Currency follows the portal.

## `minArea` (type: `integer`):

Ignore listings smaller than this living area in square metres.

## `maxArea` (type: `integer`):

Ignore listings larger than this living area in square metres.

## `minRooms` (type: `integer`):

Ignore listings with fewer rooms (or bedrooms on Rightmove).

## `onlyPrivate` (type: `boolean`):

When enabled, skip listings marketed by agencies.

## `webhookUrl` (type: `string`):

New listings are sent as a JSON POST to this address.

## `stateKey` (type: `string`):

Separate histories when watching several searches in parallel.

## `emitAllOnFirstRun` (type: `boolean`):

On a fresh monitor name, return the current stock so the dataset is not empty. Turn off if you only want later deltas.

## `proxyConfiguration` (type: `object`):

Portals block data-centre IPs. Default: Apify residential proxies from the matching country.

## Actor input object example

```json
{
  "portal": "rightmove",
  "searchUrl": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490",
  "location": "London",
  "offerType": "buy",
  "estateType": "apartment",
  "category": "eigentumswohnung",
  "maxItems": 200,
  "onlyPrivate": false,
  "stateKey": "default",
  "emitAllOnFirstRun": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

Listings that appeared since the previous run.

## `summary` (type: `string`):

How many listings were checked and how many were new.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("mocha_tassel/global-listing-monitor").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("mocha_tassel/global-listing-monitor").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 '{}' |
apify call mocha_tassel/global-listing-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mocha_tassel/global-listing-monitor"
        }
    }
}

```

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/FGVltQzCNSGIEA6p7/builds/V8dpochYu3GduKkC1/openapi.json
