# Scraper for Pararius — Dutch Rental Property Listings & Prices (`logiover/pararius-rental-listings-scraper`) Actor

Scrape Pararius rental listings by Dutch city. Extract rent prices, sizes, rooms, furnishing, postal codes and real-estate agents in bulk. No API key, no login.

- **URL**: https://apify.com/logiover/pararius-rental-listings-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (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.39 / 1,000 results

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/actors/running/actors-in-store.md#pay-per-event

## 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

## Pararius Rental Listings Scraper — Dutch Housing Market Data in Bulk

Scrape rental listings from Pararius, the Netherlands' leading rental platform, by city and property type. Export rent prices, sizes, rooms, furnishing, neighborhoods and agent contacts as CSV, JSON, Excel or via API. No API key, no login, no browser needed.

### What does Pararius Rental Listings Scraper do?

Pararius Rental Listings Scraper is a keyless data extraction engine for Pararius.com, the largest rental housing portal in the Netherlands. You choose one or more city slugs (e.g. `amsterdam`, `rotterdam`, `utrecht`) and a property segment (apartments, houses, studios, anti-squat or short-stay), and the Actor walks Pararius's `/page-{n}` pagination, downloads each listing overview page through residential UNBLOCKER proxies (Pararius hard-blocks datacenter IPs with HTTP 403), and parses every listing card — title, rent, surface area, room count, furnishing, postal code, neighborhood and the real-estate agent behind the listing — into clean dataset rows. Listings are deduplicated by their platform UUID, so multi-city runs never double-count a property.

### Who is it for?

- **Relocation professionals** helping clients find housing in Dutch cities.
- **Rental market analysts** tracking rent levels, availability and stock by city and neighborhood.
- **Real-estate agents and verhuurders** monitoring competing listings and rival agents.
- **Data journalists and researchers** studying the Dutch housing crisis with hard numbers.
- **Proptech / iBuyer teams** building price models for the Dutch rental market.

### Use cases

- Snapshot all apartments for rent in Amsterdam, Rotterdam, Utrecht and Den Haag in one run.
- Compare average rent per m² between neighborhoods within a city.
- Build a time series of rental stock and asking prices by scheduling daily runs.
- Generate leads: every row carries the listing agent's name and profile URL.
- Track short-stay and anti-squat segments for flexible-housing products.

### Why use Pararius Rental Listings Scraper?

- **Keyless** — no Pararius account, no API key, no cookies. Enter cities and run.
- **19 data fields per listing** — price, size, rooms, furnishing, postal code, neighborhood, agent and more.
- **Bulk by design** — multiple cities per run, thousands of unique listings per run.
- **Smart pagination & dedup** — follows /page-{n} until a city is exhausted, dedups by listing UUID.
- **Block-resistant** — UNBLOCKER residential proxies by default, session rotation on 403, backoff on 429.
- **Export anywhere** — CSV, JSON, JSONL, Excel, Google Sheets, webhooks; pay only for results delivered.

### What data can you extract?

Every result row contains the following fields:

| Field | Type | Description |
|---|---|---|
| `listingId` | string | Short Pararius listing ID (first block of the UUID) |
| `listingUuid` | string | Full Pararius listing UUID |
| `title` | string | Listing title, e.g. "Flat Haarlemmerweg" |
| `url` | string | Full URL of the listing detail page |
| `price` | number | Asking rent as a number (typically per calendar month) |
| `priceString` | string | Raw price text as shown on Pararius, e.g. "€2,800 pcm" |
| `rentalPeriod` | string | Rental period: `pcm`, `pw`, `per night` or `on request` |
| `surfaceArea` | number | Living surface in m² |
| `numberOfRooms` | number | Number of rooms |
| `interior` | string | Furnishing: e.g. `Upholstered`, `Furnished`, `Bare` |
| `postalCode` | string | Dutch postal code, e.g. `1014 BL` |
| `city` | string | City slug you searched for |
| `neighborhood` | string | Neighborhood / district name |
| `agentName` | string | Real-estate agent (verhuurder) publishing the listing |
| `agentUrl` | string | Pararius profile URL of the agent |
| `imageUrl` | string | Main listing photo URL |
| `propertyType` | string | Segment searched: apartments, houses, studio-apartments, anti-squat or short-stay |
| `featured` | boolean | Whether the listing is a paid/highlighted placement |
| `searchUrl` | string | The search page URL the listing was found on |
| `scrapedAt` | string | ISO timestamp of when the row was collected |

Example output row:

```json
{
  "listingId": "f64308fe",
  "listingUuid": "f64308fe-00aa-5ac7-9d8d-ab6a26332e28",
  "title": "Flat Haarlemmerweg",
  "url": "https://www.pararius.com/apartment-for-rent/amsterdam/f64308fe/haarlemmerweg",
  "price": 2800,
  "priceString": "€2,800 pcm",
  "rentalPeriod": "pcm",
  "surfaceArea": 64,
  "numberOfRooms": 3,
  "interior": "Upholstered",
  "postalCode": "1014 BL",
  "city": "amsterdam",
  "neighborhood": "Sloterdijk-West",
  "agentName": "Hausing",
  "agentUrl": "https://www.pararius.com/real-estate-agents/amsterdam/hausing",
  "imageUrl": "https://casco-media-prod.global.ssl.fastly.net/listings/api/media/f64308fe/...",
  "propertyType": "apartments",
  "featured": true,
  "searchUrl": "https://www.pararius.com/apartments/amsterdam/",
  "scrapedAt": "2026-10-06T12:00:00.000Z"
}
```

### How to use

**Option A — scrape one or more cities (recommended):**

1. Open the Actor's input in Apify Console.
2. Add city slugs, e.g. `["amsterdam", "rotterdam", "utrecht"]`.
3. Pick a `propertyType` (default: apartments).
4. Optionally set `maxResults` and `maxPagesPerCity`.
5. Click **Start**; results stream into the dataset, then export as CSV, JSON or Excel.

Input example:

```json
{
  "cities": ["amsterdam", "rotterdam"],
  "propertyType": "apartments",
  "maxResults": 500
}
```

**Option B — segment sweep:**

1. Choose a niche segment like `short-stay` or `anti-squat` to cover flexible housing.
2. Pass all major cities: `["amsterdam", "rotterdam", "den-haag", "utrecht", "eindhoven", "groningen"]`.
3. Schedule weekly runs to track how the flexible-housing stock moves.

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `cities` | array of strings | `["amsterdam"]` | Required. Dutch city slugs (lowercase, hyphenated, as used in Pararius URLs). |
| `propertyType` | string | `apartments` | Segment: `apartments`, `houses`, `studio-apartments`, `anti-squat` or `short-stay`. |
| `maxResults` | integer | `10000` | Total cap on unique listings collected per run. |
| `maxPagesPerCity` | integer | `60` | Hard cap on listing pages fetched per city. |
| `proxyConfiguration` | object | Apify UNBLOCKER | Proxy settings; UNBLOCKER is required because Pararius blocks datacenter IPs with 403. |

Full input example:

```json
{
  "cities": ["amsterdam", "den-haag", "utrecht"],
  "propertyType": "houses",
  "maxResults": 2000,
  "maxPagesPerCity": 40,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["UNBLOCKER"]
  }
}
```

### Output example

One fully populated dataset item:

```json
{
  "listingId": "c523ddb0",
  "listingUuid": "c523ddb0-bc2b-5163-ab5e-34d5b0156ecf",
  "title": "Flat Borgerstraat",
  "url": "https://www.pararius.com/apartment-for-rent/amsterdam/c523ddb0/borgerstraat",
  "price": 2975,
  "priceString": "€2,975 pcm",
  "rentalPeriod": "pcm",
  "surfaceArea": 74,
  "numberOfRooms": 3,
  "interior": "Furnished",
  "postalCode": "1053 RG",
  "city": "amsterdam",
  "neighborhood": "Van Lennepbuurt",
  "agentName": "Hausing",
  "agentUrl": "https://www.pararius.com/real-estate-agents/amsterdam/hausing",
  "imageUrl": "https://casco-media-prod.global.ssl.fastly.net/listings/api/media/c523ddb0/...",
  "propertyType": "apartments",
  "featured": true,
  "searchUrl": "https://www.pararius.com/apartments/amsterdam/page-2",
  "scrapedAt": "2026-10-06T12:05:33.000Z"
}
```

### Tips for best results

- Use Pararius URL slugs for cities: `den-haag` (not "The Hague"), `eindhoven`, `groningen`.
- Run all big-4 cities (`amsterdam`, `rotterdam`, `den-haag`, `utrecht`) for a national picture.
- Compare `price` ÷ `surfaceArea` for rent-per-m² analytics per neighborhood.
- Use `propertyType: studio-apartments` for the entry-level rental segment.
- Listings churn fast; schedule daily or weekly runs to keep datasets current.
- `agentName` + `agentUrl` make this a lead-gen tool for B2B outreach to verhuurders.
- Combine cities and segments in separate scheduled runs for cleaner time series.
- `priceString` preserves the raw text when `price` is null (e.g. "Price on request").
- Keep `maxPagesPerCity` modest (20–40); most cities exhaust well before page 60.
- You only pay for rows delivered — use `maxResults` to control spend.

### Integrations

- **Google Sheets** — stream new listings into a sheet for team review.
- **Slack** — post new listings in a target neighborhood to a channel.
- **Zapier / Make** — trigger alerts when rent drops below a threshold.
- **Webhooks** — get an HTTP callback with the run result.
- **Schedules** — run daily to capture the fast-moving Dutch rental market.

### API usage

Run the Actor programmatically with the Apify API or client.

**cURL:**

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~pararius-rental-listings-scraper/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"cities":["amsterdam"],"propertyType":"apartments","maxResults":200}'
```

**Node.js:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('logiover~pararius-rental-listings-scraper').call({
    cities: ['amsterdam', 'rotterdam'],
    maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("logiover~pararius-rental-listings-scraper").call(run_input={
    "cities": ["amsterdam"],
    "maxResults": 200,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use with AI agents (MCP)

Connect this Actor to an MCP-capable AI agent for on-demand Dutch rental market research. Example prompt: *"Scrape Pararius apartments in Amsterdam and Rotterdam, then tell me the median rent per m² for 2-room furnished apartments, and list the 5 agents with the most listings."* The agent runs the Actor, reads the dataset and answers with live data.

### FAQ

#### Do I need a Pararius account or API key?

No. The Actor runs keyless — just city slugs.

#### How many listings can one run return?

Thousands. Amsterdam alone usually offers 600–900 active listings across ~25 pages; combine multiple cities and segments for volume.

#### Which Dutch cities are supported?

Any city Pararius covers — use the slug from the Pararius URL, e.g. `amsterdam`, `rotterdam`, `utrecht`, `den-haag`, `eindhoven`, `groningen`, `tilburg`, `almere`.

#### What is the difference between property types?

`apartments` (flats), `houses` (vrijstaand/rijwoning), `studio-apartments`, `anti-squat` (anti-kraak) and `short-stay` (temporary stays).

#### What does `pcm` mean?

Per calendar month — the standard Dutch rent quotation. `pw` means per week.

#### Why are some fields null?

Pararius itself omits data for some cards (e.g. no furnishing label, or "price on request"). Null means not published, not failure.

#### How fresh is the data?

Every row is scraped live at run time, with a `scrapedAt` timestamp for proof.

#### What format can I export?

CSV, JSON, JSONL, Excel, HTML table — plus direct API access to the dataset.

#### Is there deduplication if listings overlap?

Yes — every listing is deduplicated by Pararius UUID across the whole run.

#### Can I scrape detail pages too?

This Actor covers the listing overview (search pages). Detail-page enrichment can be built on top using the returned `url` field.

#### How often should I run it?

Daily for hot markets like Amsterdam; weekly is enough for smaller cities.

#### Is it legal?

See the legality section below — scraping publicly visible listing data is generally legal, but respect Pararius's terms and use the data responsibly.

### Is it legal?

This Actor extracts publicly visible rental listing data from Pararius.com search pages without logging in. Scraping publicly available data is generally considered legal, but you should review Pararius's Terms of Use, avoid overloading their infrastructure, and comply with GDPR when processing any personal data (e.g. agent names) — keep it to legitimate business interest and minimal necessary use. This Actor is not affiliated with, endorsed by, or sponsored by Pararius. All trademarks are the property of their respective owners.

### Related scrapers

- [Funda Scraper](https://apify.com/store?search=funda) — the other half of the Dutch housing market (sales-focused).
- [Daft.ie Scraper](https://apify.com/store?search=daft) — Irish rental market equivalent.
- [Idealista Scraper](https://apify.com/store?search=idealista) — Southern European rentals.
- Browse the full [logiover catalog](https://apify.com/logiover) for more real-estate and lead-generation actors.

# Changelog

This Actor's version history is a separate document: https://apify.com/logiover/pararius-rental-listings-scraper/changelog.md

# Actor input Schema

## `cities` (type: `array`):

List of Dutch city slugs to scrape, e.g. 'amsterdam', 'rotterdam', 'utrecht', 'den-haag', 'eindhoven', 'groningen'. Use the URL slug form (lowercase, hyphenated).

## `propertyType` (type: `string`):

Pararius listing segment to scrape: apartments, houses, studio-apartments, anti-squat or short-stay.

## `maxResults` (type: `integer`):

Total maximum number of unique rental listings to collect across all cities. The run stops early once this cap is reached.

## `maxPagesPerCity` (type: `integer`):

Hard cap on listing pages fetched per city (Pararius pagination uses /page-{n} URLs).

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

Proxy settings. Pararius returns HTTP 403 to datacenter IPs, so the default uses Apify UNBLOCKER residential proxies. Only change this if you know what you are doing.

## Actor input object example

```json
{
  "cities": [
    "amsterdam"
  ],
  "propertyType": "apartments",
  "maxResults": 100,
  "maxPagesPerCity": 60,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

## `listingId` (type: `string`):

No description

## `listingUuid` (type: `string`):

No description

## `title` (type: `string`):

No description

## `url` (type: `string`):

No description

## `price` (type: `string`):

No description

## `priceString` (type: `string`):

No description

## `rentalPeriod` (type: `string`):

No description

## `surfaceArea` (type: `string`):

No description

## `numberOfRooms` (type: `string`):

No description

## `interior` (type: `string`):

No description

## `postalCode` (type: `string`):

No description

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

No description

## `neighborhood` (type: `string`):

No description

## `agentName` (type: `string`):

No description

## `agentUrl` (type: `string`):

No description

## `imageUrl` (type: `string`):

No description

## `propertyType` (type: `string`):

No description

## `featured` (type: `string`):

No description

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

No description

## `scrapedAt` (type: `string`):

No description

# 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 = {
    "cities": [
        "amsterdam"
    ],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/pararius-rental-listings-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 = {
    "cities": ["amsterdam"],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/pararius-rental-listings-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 '{
  "cities": [
    "amsterdam"
  ],
  "maxResults": 100
}' |
apify call logiover/pararius-rental-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/pararius-rental-listings-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/p6VOa2BUVFeSG548W/builds/F4iPCyqYptKg9uZuL/openapi.json
