Netherlands Rental Listings MCP Server
Supports OpenAI as an LLM provider for drafting first messages to landlords when message drafting is enabled, using a user-supplied API key and optional model selection.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Netherlands Rental Listings MCP ServerFind rooms in Utrecht under €800 a month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Netherlands Rental Listings MCP Server
An MCP server for the Mamba Labs Netherlands Rental Listings actor on Apify. One deduplicated list of Dutch rentals, with registration status.
What's Inside
Related MCP server: BoligWatch MCP Server
What it does
Give a Dutch city, province, or the whole country. The actor reads Kamernet, HousingAnywhere, and 11 anti-squat agency sites over plain HTTP, merges them into one list without repeats, and returns rent, size, type, registration status with the proving sentence, hide reasons, and first seen and last seen per listing. It does not cover Pararius, Huurwoningen, Funda, or Gapph.
All of the work runs on Apify. This package is a thin client that starts the actor run, waits for it, and hands back the dataset rows.
Quick start
You need Node.js 18 or newer and an Apify account with an API token.
Add this to your Claude Desktop config (claude_desktop_config.json), Cursor, or any MCP client:
{
"mcpServers": {
"mamba-dutch-rental-listings": {
"command": "npx",
"args": [
"-y",
"@mambalabsdev/mcp-dutch-rental-listings"
],
"env": {
"APIFY_TOKEN": "your-apify-token"
}
}
}
}Restart the client. The search_dutch_rental_listings tool appears.
Prerequisites
Node.js 18 or newer.
An Apify API token from console.apify.com/account/integrations, set as
APIFY_TOKEN. The server lists its tool without a token; a call needs one.
Example prompts
"Find rooms in Utrecht under 800 euros a month."
"List new anti-squat places in Noord-Holland since my last search."
"Show Amsterdam studios where municipal registration is possible."
Tool
search_dutch_rental_listings. One tool. Example arguments:
{
"location": "Utrecht",
"sources": [
"kamernet",
"housinganywhere"
],
"maxResults": 20
}Inputs
Every buyer facing input of the actor. Omitted inputs take the actor's own defaults.
Input | Type | Required | Description |
| string | no | A Dutch city (Kamernet's 212 cities, such as Utrecht or Den Haag), a province as province:noord-holland, or netherlands for the whole country. A bare name that is both a city and a province (Utrecht, Groningen) is the city. |
| number | no | Kamernet only: also search this far around the city. 0, 1, 2, 5, 10 (default), or 20; other values round up. HousingAnywhere and the agencies search the city itself. |
| array | no | kamernet, housinganywhere, antisquat_agencies (11 Dutch anti-squat agency sites). Default: all three. |
| array | no | Keep only these: room, studio, apartment, house, anti-squat, student-residence, other. Empty keeps all. |
| number | no | Listings to return as charged rows. Default 50. |
| number | no | Drop listings above this rent. A listing with no rent stays. |
| number | no | Drop listings smaller than this. A listing with no size stays. |
| number | no | Drop listings with fewer rooms. Kamernet states rooms only on the detail page, so this works there with includeDetails on. |
| array | no | Keep only these: furnished, unfurnished, uncarpeted. A listing that does not say stays. |
| boolean | no | true: keep only listings whose text or listed field says municipal registration is possible (registration_status yes, listed_yes, or flag). Text needs includeDetails on. |
| string | no | YYYY-MM-DD. Drop listings available only after this day. A listing with no date stays. |
| string | no | Kamernet's own filter, sent with the search. |
| string | no | Kamernet's own filter. |
| string | no | Kamernet's own filter. |
| string | no | Kamernet's own filter. |
| string | no | Kamernet's own filter. |
| string | no | Kamernet's own filter. |
| string | no | Kamernet's own filter: 1 to 5 tenants. |
| string | no | Kamernet's own filter: male or female. |
| number | no | Kamernet's own filter: your age in years, 16 to 99. |
| string | no | Kamernet's own filter: none, up_to_4, or up_to_8. |
| array | no | Kamernet's own filter: male, female, mixed. |
| array | no | Kamernet's own filter: private, agent. |
| boolean | no | true: read each returned listing's detail page for the full text, house rules, landlord type, deposit, and the text based registration and hide rules. Charged per page read. Default false. |
| string | no | true: add the landlord's display name. Off by default, because on Kamernet most landlords are private people. |
| array | no | Landlord account IDs (landlord_id) whose listings are returned as free hidden_listing rows instead of charged rows. |
| boolean | no | true: a listing whose text limits it to one gender becomes a free hidden_listing row with the matched sentence. false: it is returned with the reason in hide_reasons. |
| boolean | no | true: a listing whose text limits it to Dutch or Polish speakers becomes a free hidden_listing row. |
| boolean | no | true: a listing whose text limits it to students becomes a free hidden_listing row. |
| boolean | no | true: a listing whose text or listed maximum stay is under 3 months becomes a free hidden_listing row. |
| boolean | no | true (default): keep first seen and last seen for this search in a named key-value store in your own Apify account, so later runs mark new and stale listings. |
| boolean | no | true: write a first message to each landlord with your own model key and applicantProfile. Turns on includeDetails. Needs llmApiKey; without one the run fails with a plain error. |
| string | no | openai (default), anthropic, gemini, or groq. Used only with draftMessages. |
| string | no | Your own key for the provider above. It goes only to that provider, is never stored or logged, and is never sent to the model. |
| string | no | A model name from your provider. Empty uses gpt-4o-mini, claude-haiku-4-5-20251001, gemini-2.5-flash, or llama-3.3-70b-versatile. |
| string | no | Facts about you for the drafts, as JSON such as {"name": "Sam", "age": 29, "work": "software engineer", "move_in": "2026-12-01", "contact": "sam@example.com"} or plain lines. The model restates only these facts. |
| number | no | Most messages to draft in one run. Default 20. |
| string | no | Optional. The run stops before a charge that would pass this amount. Free rows are always returned. |
Pricing
Pay per event on Apify, billed to your Apify account. Prices in USD.
Event | Free plan | Bronze | Silver | Gold |
| $0.0011 | $0.001045 | $0.00099 | $0.000935 |
| $0.002 | $0.0019 | $0.0018 | $0.0017 |
| $0.003 | $0.00285 | $0.0027 | $0.00255 |
| $0.012 | $0.012 | $0.012 | $0.012 |
Hidden listings, source status rows, failed drafts, and refused input are free. Mamba Labs pays the platform costs of the run. Mamba Labs pays the platform costs of the run, Apify proxy traffic included.
Full actor documentation
apify.com/mambalabs/dutch-rental-listings
License
MIT. See LICENSE.
Available Tools
1 toolsearch_dutch_rental_listingsSearch Netherlands rental listingsRead-onlyIdempotent
Search Kamernet, HousingAnywhere, and 11 Dutch anti-squat agency sites for one city, province, or the whole Netherlands. Returns one deduplicated list with rent, size, type, municipal registration status with the proving sentence, hide reasons, and new since last run flags. Detail pages and landlord message drafts on your own model key are optional. Pararius, Huurwoningen, Funda, and Gapph are not covered. Pay per event on Apify.
| Name | Required | Description | Default |
|---|---|---|---|
| maxRent | No | Drop listings above this rent. A listing with no rent stays. | |
| minSize | No | Drop listings smaller than this. A listing with no size stays. | |
| sources | No | kamernet, housinganywhere, antisquat_agencies (11 Dutch anti-squat agency sites). Default: all three. | |
| llmModel | No | A model name from your provider. Empty uses gpt-4o-mini, claude-haiku-4-5-20251001, gemini-2.5-flash, or llama-3.3-70b-versatile. | |
| location | No | A Dutch city (Kamernet's 212 cities, such as Utrecht or Den Haag), a province as province:noord-holland, or netherlands for the whole country. A bare name that is both a city and a province (Utrecht, Groningen) is the city. | |
| minRooms | No | Drop listings with fewer rooms. Kamernet states rooms only on the detail page, so this works there with includeDetails on. | |
| radiusKm | No | Kamernet only: also search this far around the city. 0, 1, 2, 5, 10 (default), or 20; other values round up. HousingAnywhere and the agencies search the city itself. | |
| furnished | No | Keep only these: furnished, unfurnished, uncarpeted. A listing that does not say stays. | |
| llmApiKey | No | Your own key for the provider above. It goes only to that provider, is never stored or logged, and is never sent to the model. | |
| maxDrafts | No | Most messages to draft in one run. Default 20. | |
| tenantAge | No | Kamernet's own filter: your age in years, 16 to 99. | |
| maxResults | No | Listings to return as charged rows. Default 50. | |
| availableBy | No | YYYY-MM-DD. Drop listings available only after this day. A listing with no date stays. | |
| hasInternet | No | Kamernet's own filter, sent with the search. | |
| llmProvider | No | openai (default), anthropic, gemini, or groq. Used only with draftMessages. | |
| petsAllowed | No | Kamernet's own filter. | |
| roommatesMax | No | Kamernet's own filter: none, up_to_4, or up_to_8. | |
| tenantGender | No | Kamernet's own filter: male or female. | |
| trackChanges | No | true (default): keep first seen and last seen for this search in a named key-value store in your own Apify account, so later runs mark new and stale listings. | |
| draftMessages | No | true: write a first message to each landlord with your own model key and applicantProfile. Turns on includeDetails. Needs llmApiKey; without one the run fails with a plain error. | |
| landlordTypes | No | Kamernet's own filter: private, agent. | |
| privateToilet | No | Kamernet's own filter. | |
| propertyTypes | No | Keep only these: room, studio, apartment, house, anti-squat, student-residence, other. Empty keeps all. | |
| includeDetails | No | true: read each returned listing's detail page for the full text, house rules, landlord type, deposit, and the text based registration and hide rules. Charged per page read. Default false. | |
| max_charge_usd | No | Optional. The run stops before a charge that would pass this amount. Free rows are always returned. | |
| numberOfPeople | No | Kamernet's own filter: 1 to 5 tenants. | |
| privateKitchen | No | Kamernet's own filter. | |
| smokingAllowed | No | Kamernet's own filter. | |
| privateBathroom | No | Kamernet's own filter. | |
| roommateGenders | No | Kamernet's own filter: male, female, mixed. | |
| applicantProfile | No | Facts about you for the drafts, as JSON such as {"name": "Sam", "age": 29, "work": "software engineer", "move_in": "2026-12-01", "contact": "sam@example.com"} or plain lines. The model restates only these facts. | |
| excludeShortStay | No | true: a listing whose text or listed maximum stay is under 3 months becomes a free hidden_listing row. | |
| registrationOnly | No | true: keep only listings whose text or listed field says municipal registration is possible (registration_status yes, listed_yes, or flag). Text needs includeDetails on. | |
| excludeGenderOnly | No | true: a listing whose text limits it to one gender becomes a free hidden_listing row with the matched sentence. false: it is returned with the reason in hide_reasons. | |
| blockedLandlordIds | No | Landlord account IDs (landlord_id) whose listings are returned as free hidden_listing rows instead of charged rows. | |
| excludeStudentOnly | No | true: a listing whose text limits it to students becomes a free hidden_listing row. | |
| excludeLanguageOnly | No | true: a listing whose text limits it to Dutch or Polish speakers becomes a free hidden_listing row. | |
| includeLandlordName | No | true: add the landlord's display name. Off by default, because on Kamernet most landlords are private people. |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v1.0.0- First observed
search_dutch_rental_listings
Related MCP Connectors
Dutch rental and for-sale listings, CBS area figures and Huisly's housing guides, read-only.
Hemnet MCP server for ChatGPT, Claude and any AI agent: search listings, get sold prices, list saved homes, save search and follow home value in your own Hemnet account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Hemnet yourself; Cotlet does not store your password and you need no Hemnet API key. About the official Hemnet API: Hemnet has no public or developer API for buyers or owners (checked 11 Oct 2026). Its own AI access is the Hemnet app inside ChatGPT, which runs only in ChatGPT and gives your agent or scripts no way to read your saved homes or saved searches. Setup and FAQ: https://cotlet.dev/integrations/hemnet-api-mcp-server
Real estate agency CRM: listings, clients, leads and viewings from your AI assistant (OAuth).
Find, rank, and compare student rooms from UniAffitti public listings.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables access to Idealista API for searching and retrieving property listings across Spain, Portugal, and Italy. Supports various property types including homes, apartments, garages, commercial properties, offices, and land with detailed filtering options.143MIT
- AlicenseNot gradedqualityDmaintenanceMonitors boligportal.dk for new rental listings in Denmark. Provides tools to search, filter, and track apartment listings via natural language.1MIT
- AlicenseAqualityBmaintenanceEnables AI agents to search and monitor Dutch and Belgian classifieds (Marktplaats and 2dehands) for listings, seller profiles, and categories.848 PyPI4MIT
- AlicenseAqualityDmaintenanceEnables AI agents to search Dutch housing listings on Kamernet.nl, retrieve full listing details, and optionally reply to landlords; designed for personal use in finding rooms, studios, and apartments.31MIT