Netherlands Rental Listings avatar

Netherlands Rental Listings

Pricing

from $0.93 / 1,000 listing rows

Go to Apify Store
Netherlands Rental Listings

Netherlands Rental Listings

Netherlands rental listings from Kamernet, HousingAnywhere, and 11 anti-squat agency sites in one deduplicated list, with municipal registration status, hide reasons with the matched sentence, and new since last run tracking.

Pricing

from $0.93 / 1,000 listing rows

Rating

0.0

(0)

Developer

Mamba Labs

Mamba Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Features

Limited permissions

Share

Give a Dutch city, a province, or the whole Netherlands. The actor searches Kamernet, HousingAnywhere, and 11 Dutch anti-squat (antikraak) agency sites, merges them into one list without repeats, and returns one row per listing: rent, size, type, availability, municipal registration status with the listing's own sentence as proof, hide reasons with the matched sentence, and first seen and last seen for your search. You pay per listing returned, plus per detail page read and per message drafted when you turn those on. Mamba Labs pays the platform costs of the run.

It does not cover Pararius, Huurwoningen, Funda, or Gapph.

Features

  • One list from Kamernet, HousingAnywhere, and 11 anti-squat agencies, with repeats removed by listing id and, across sources, by the same street, rent, and size.
  • Search a city with a radius (Kamernet), a province (every city Kamernet lists in it), or the whole country.
  • Kamernet's own 12 search filters (internet, private bathroom, kitchen, or toilet, pets, smoking, number of people, tenant gender and age, maximum roommates, roommate gender, landlord type), plus filters on rent, size, rooms, furnishing, registration, and move in date.
  • Registration status for municipal registration (inschrijving): yes or no only when the listing text says so, with the sentence in registration_quote.
  • Hide rules reported, never applied in silence: every match comes back in hide_reasons with its sentence. Turn on an exclude switch and the listing comes back as a free hidden_listing row instead of a charged row.
  • New since last run: with trackChanges on, a named key-value store in your own Apify account keeps first seen and last seen for this search, so later runs mark is_new and stale (first seen 10 or more days ago).
  • Optional detail pages: full text, house rules, deposit, landlord type, and the text based rules.
  • Optional landlord message drafts written by your own OpenAI, Anthropic, Gemini, or Groq key from the applicant facts you give.

How the data is read

Every page is a public page that a logged out visitor can open. Requests go over plain HTTP through the Apify proxy default pool (datacenter addresses), with the user agent MambaLabs-DutchRentalListings/0.1. There is no browser, no residential address, no login, no captcha handling, and no call to another developer's actor.

  • Kamernet: the search pages' embedded page data, 17 listings a page.
  • HousingAnywhere: the search pages' embedded page data, 23 listings a page, on the paths its robots.txt allows.
  • Anti-squat agencies: each agency's own listings page: Alvast, De Kabath Vastgoedbeheer, De Vastgoedbeschermer, Livable, Maximus Vastgoedbeheer, Monoma, OAK Management, Oranje Steengoed Beheer, Totalus Beheer, 24/7 Vastgoedbeheer, and VPS.

The actor reads robots.txt on every host first and obeys it. A robots.txt that cannot be read blocks that host for the run. It waits 3 seconds between requests to one host, and on a rate limit answer (HTTP 429) it waits 6 seconds, tries twice more, and then leaves that page out.

Kamernet's and HousingAnywhere's terms of use restrict automated collection. You are responsible for how you use the data.

The model key for drafts is yours. It goes only to the provider you pick, and the actor stores no key of any kind.

Input

FieldTypeDefaultWhat it does
locationstringA 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.
radiusKmstring10Kamernet 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.
sourcesarraykamernet,housinganywhere,antisquat_agencieskamernet, housinganywhere, antisquat_agencies (11 Dutch anti-squat agency sites). Default: all three.
propertyTypesarrayKeep only these: room, studio, apartment, house, anti-squat, student-residence, other. Empty keeps all.
maxResultsstring50Listings to return as charged rows. Default 50.
maxRentstringDrop listings above this rent. A listing with no rent stays.
minSizestringDrop listings smaller than this. A listing with no size stays.
minRoomsstringDrop listings with fewer rooms. Kamernet states rooms only on the detail page, so this works there with includeDetails on.
furnishedarrayKeep only these: furnished, unfurnished, uncarpeted. A listing that does not say stays.
registrationOnlystringfalsetrue: keep only listings whose text or listed field says municipal registration is possible (registration_status yes, listed_yes, or flag). Text needs includeDetails on.
availableBystringYYYY-MM-DD. Drop listings available only after this day. A listing with no date stays.
hasInternetstringfalseKamernet's own filter, sent with the search.
privateBathroomstringfalseKamernet's own filter.
privateKitchenstringfalseKamernet's own filter.
privateToiletstringfalseKamernet's own filter.
petsAllowedstringfalseKamernet's own filter.
smokingAllowedstringfalseKamernet's own filter.
numberOfPeoplestringKamernet's own filter: 1 to 5 tenants.
tenantGenderstringKamernet's own filter: male or female.
tenantAgestringKamernet's own filter: your age in years, 16 to 99.
roommatesMaxstringKamernet's own filter: none, up_to_4, or up_to_8.
roommateGendersarrayKamernet's own filter: male, female, mixed.
landlordTypesarrayKamernet's own filter: private, agent.
includeDetailsstringfalsetrue: 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.
includeLandlordNamestringfalsetrue: add the landlord's display name. Off by default, because on Kamernet most landlords are private people.
blockedLandlordIdsarrayLandlord account IDs (landlord_id) whose listings are returned as free hidden_listing rows instead of charged rows.
excludeGenderOnlystringfalsetrue: 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.
excludeLanguageOnlystringfalsetrue: a listing whose text limits it to Dutch or Polish speakers becomes a free hidden_listing row.
excludeStudentOnlystringfalsetrue: a listing whose text limits it to students becomes a free hidden_listing row.
excludeShortStaystringfalsetrue: a listing whose text or listed maximum stay is under 3 months becomes a free hidden_listing row.
trackChangesstringtruetrue (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.
draftMessagesstringfalsetrue: 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.
llmProviderstringopenaiopenai (default), anthropic, gemini, or groq. Used only with draftMessages.
llmApiKeystringYour own key for the provider above. It goes only to that provider, is never stored or logged, and is never sent to the model.
llmModelstringA 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.
applicantProfilestringFacts 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.
maxDraftsstring20Most messages to draft in one run. Default 20.
max_charge_usdstringOptional. The run stops before a charge that would pass this amount. Free rows are always returned.

Output

FieldTypeWhat it holds
row_typestringOne of: listing, hidden_listing, source_status, run_summary. run_summary is the one free row written when the input is refused.
listing_idstringSource and the source's own id, for example kamernet:2417298. Stable across runs.
sourcestringkamernet, housinganywhere, or the anti-squat agency's slug, such as alvast.
source_idstringThe id the source uses; for an agency, the listing page address.
titlestringThe listing title, when the source gives one.
property_typestringroom, studio, apartment, house, anti-squat, student-residence, or other.
citystringCity as the source states it.
streetstringStreet name as the source states it.
neighborhoodstringNeighborhood, HousingAnywhere only.
rent_eurnumberMonthly rent the source lists. Kamernet lists the total including service costs.
utilities_includedbooleantrue or false when the source states it, null when it does not.
additional_costsstringCosts on top of rent, from the detail page: service costs, internet, agency fee, or the bills HousingAnywhere includes.
deposit_eurnumberDeposit from the Kamernet detail page.
surface_m2numberFloor area in square meters.
roomsnumberNumber of rooms. Kamernet gives it on the detail page only.
furnishedstringFurnished, Unfurnished, or Uncarpeted.
available_fromstringFirst day available, YYYY-MM-DD.
available_untilstringLast day of a fixed term, YYYY-MM-DD.
minimum_stay_monthsnumberHousingAnywhere's minimum stay.
maximum_stay_monthsnumberHousingAnywhere's maximum stay.
is_student_housebooleanThe source's own student house flag (Kamernet) or co-living flag (HousingAnywhere).
registration_allowedbooleanThe source's own registration field. On Kamernet this is a hidden flag that the listing page does not show, and it was empty on 24 of 24 detail pages checked on 2026-11-09. On HousingAnywhere it is shown on the listing.
registration_statusstringMunicipal registration (inschrijving): yes or no from the listing text, listed_yes or listed_no from HousingAnywhere's field, flag or unconfirmed from Kamernet's hidden flag with no text, or null when nothing says.
registration_quotestringThe listing's own sentence behind a yes or no.
hide_reasonsarrayEvery hide rule the listing matched, each as {reason, quote} with the matched sentence: blocked landlord, maximum applications reached, international student room, gender only, language only, business use only, no internationals, 2 or more tenants required, short stay, students only, no registration.
excluded_byarrayOn a hidden_listing row, the exclude switches that removed it from the charged rows.
student_evidenceobject{kind, label, quote}: kind restrict means the text limits the place to students; kind house means it is a student house without a restriction.
antisquat_signalstringtyped when the source types the listing anti-squat, text when only its text says so.
suitable_genderstringmale, female, or any, from the detail page.
suitable_age_minnumberFrom the detail page.
suitable_age_maxnumberFrom the detail page.
suitable_for_personsnumberNumber of tenants the landlord accepts, from the detail page.
roommate_countnumberNumber of roommates, Kamernet detail page.
pets_allowedbooleanFrom the detail page.
smoking_allowedbooleanFrom the detail page.
internet_includedbooleanFrom the detail page.
private_bathroombooleanKamernet detail page.
private_kitchenbooleanKamernet detail page.
landlord_typestringPrivate owner, Roommate, Real estate agent, Rental company, or Other.
landlord_idstringThe source's account id for the landlord, for your blockedLandlordIds list.
landlord_namestringOnly when includeLandlordName is true. Off by default: on Kamernet most landlords are private people.
posted_datestringWhen Kamernet published the advert, YYYY-MM-DD.
expiredbooleantrue when the detail page says the listing is gone.
detail_readbooleantrue when the listing's detail page was read and charged. null when includeDetails is off.
body_textstringThe listing description, up to 5,000 characters. On a search only run an agency row carries its index card text and portal rows carry none.
urlstringThe listing page.
image_urlstringFirst photo.
also_listed_onarrayListing IDs on other sources with the same street, rent, and size. Those copies are not returned as rows.
first_seenstringWhen a run of this same search first returned the listing, UTC. Needs trackChanges.
last_seenstringThis run, UTC.
is_newbooleantrue when no earlier run of this same search returned the listing. Every listing is new on the first run.
stalebooleantrue when the listing was first seen 10 or more days ago.
message_draftstringA first message to the landlord written by your own model from your applicantProfile. Read it before you send it.
draft_errorstringWhy no draft was written for this listing, when drafting was on.
pages_readintegerOn a source_status row, pages this source answered.
listings_foundintegerOn a source_status row, listings this source returned before your filters.
search_locationstringThe location the run searched.
row_statusstringok, or why this row carries no data: no_results, no_change, partial, blocked, or error.
error_reasonstringWhy the row is not ok. A refused input reads input_invalid: followed by what to fix.
billable_events_jsonstringWhat this row was billed as, for example {"listing-row":1}. {} means free.
scraped_atstringWhen the row was written, UTC.

Each run also writes one free source_status row per source, with pages read, listings found, and any error, and a RUN_SUMMARY record in the run's key-value store.

Pricing

Pay per event. Hidden listings, source status rows, failed drafts, and a refused input are free.

EventFree planBronzeSilverGold
listing-row, one listing$0.0011$0.001045$0.00099$0.000935
detail-page, one detail page read, with includeDetails on$0.002$0.0019$0.0018$0.0017
message-draft, one message drafted on your own key, with draftMessages on$0.003$0.00285$0.0027$0.00255
apify-actor-start, once per run (one per GB of memory; the default 256 MB is one)$0.012$0.012$0.012$0.012

Per 1,000 rows of listing-row: $1.10 on the free plan, $0.94 on Gold.

Free plan cap: 1.50 USD of evaluation a month, about 1364 rows. Any paid Apify plan removes the cap, and it resets on the 1st. The run stops before a charge that passes your maximum charge per run in Apify or your max_charge_usd input.

Mamba Labs pays the platform costs of your run, Apify proxy traffic included.

Your model provider bills drafts on your own key separately.

Usage examples

Rooms in Utrecht under 800 EUR, Kamernet and HousingAnywhere only:

{ "location": "Utrecht", "sources": ["kamernet", "housinganywhere"], "propertyTypes": ["room"], "maxRent": "800", "maxResults": "50" }

New anti-squat places in Noord-Holland since your last run of the same search:

{ "location": "province:noord-holland", "sources": ["antisquat_agencies", "kamernet"], "propertyTypes": ["anti-squat"], "trackChanges": "true" }

Studios in Amsterdam with detail pages, registration possible, and drafts on your own key:

{ "location": "Amsterdam", "propertyTypes": ["studio"], "includeDetails": "true", "registrationOnly": "true", "draftMessages": "true", "llmProvider": "openai", "llmApiKey": "YOUR_KEY", "applicantProfile": "{\"name\": \"Sam\", \"work\": \"software engineer\"}" }

Clay. Number and on or off inputs are text fields, which is what Clay sends. A list input takes a JSON list, so put the column inside a one item list.

MCP. The Mamba Labs MCP server @mambalabsdev/mcp-dutch-rental-listings exposes this actor to Claude and other MCP clients.

Error handling

CaseWhat you get
Missing or unreadable inputOne free row, row_type run_summary, error_reason starting input_invalid: with what to fix. The run ends successfully and charges nothing but the run start
draftMessages on with no llmApiKeyThe same free input_invalid: row, and the run ends as failed with that message
A source or agency site fails, blocks, or rate limitsIts source_status row says so, free. The other sources still return rows
A detail page cannot be readThe listing row comes back with row_status partial and the reason, charged as a listing only
A draft fails at your providerThe listing row comes back with draft_error; the draft is not charged
The run is close to its timeoutThe actor stops starting new work 90 seconds before the timeout and delivers what it has

Limitations

  • Not covered: Pararius, Huurwoningen, and Funda. Their pages refuse plain requests behind bot protection, and this actor does not get past bot protection.
  • HousingAnywhere has no country page and no radius. A country search walks its 20 largest Dutch cities, and a province search walks every city Kamernet lists in that province.
  • Agency rows are filtered by the city the agency states. A city search with a radius does not add nearby towns for agencies. Agency listings without a stated city appear only in a country search.
  • Kamernet's registration_allowed is a hidden field that its listing page does not show; it was empty on 24 of 24 detail pages checked on 2026-11-09. registration_status yes or no needs the listing text, so it needs includeDetails on Kamernet and HousingAnywhere.
  • The text rules are phrase lists in English and Dutch. They can miss a restriction written in other words, and they ignore a phrase negated in its own clause. Read the quote before you act on it.
  • On the first run of a search every listing is is_new. A different location, radius, source set, type set, or Kamernet filter is a different search with its own store.
  • Filters on a value the listing does not state keep the listing.
  • Gapph was left out: its pages list places, but the listing cards could not be read on 2026-11-09.

Mamba Labs actor suite

ActorActor ID
Account Hiring WatchgRAZA5WBi1r6L0gy7
Agent Accessibility AuditoranxbRv0lKrpQ1pnua
Agent to Brokerage ResolverePRRGLxOGyaVHO4dI
AI Answer Visibility TrackerRJZvzKniYK4nswcMg
AI Tooling DetectorEwkHhmqiuJgRoVEbE
Amazon Product, Price, and Stock TrackerMtJPZoyjJ3IeqTFyo
API Deprecation and Breaking Change MonitorpHsbS3xXUK8Jqutz5
App Store and Google Play Review MonitorMaCMEhGrbchxQZ92G
B2B Reddit Conversation MonitorSoDryzzsjmY3SsiyG
Bluesky Brand Presence MappereLpxzP4IuXznlFVND
Brand Sponsor FinderPPgK6xrgOmvL7Nrys
Bulk WHOIS and RDAP Domain Age LookupMTrkG5FLU6SjqLdJY
Career Change Signal EnginevX2Yga1a6wGaXaP14
Company Careers Page Jobs, 17 ATS BoardsizP0rfIgf5YaRZfIh
Company Change Event FeedoX44rS0fkEJ3rXLWe
Company Discovery List Builderjch0HdaZnpbMqlcGS
Company Firmographic EnricherYlUtLWjfPpqykmB8g
Company Funding RecordOFS4Mt1gyYNtGfUbE
Company Headcount EstimatoraHC4GROnNt6kfZe5r
Company Identity Resolverlr8fTRAmZCBZmuwwh
Company Role Email, Phone and Address Finder4mMncKaJykiq94grz
Company Social Presence Mapper4k6CCemkgBDz18m2h
Competitor Price, Stock, and Changelog MonitoryxdgCbUQ4PYQWwRNU
Contact Classifier0lGSeYJmniXhGANnO
Contractor License Search, CA, TX, WA, OR, LAWBYK3CPI2kdeq4bP1
CRM Contact Job Change CheckerL8UbEmMJC1XYPSZOb
Domain Deliverability Checker0tVgxI7A6o9jMlxmc
Domain to LinkedIn URL Resolver3HtnSaqPHOg1Qg5gx
Ecommerce Platform Profiler5G2NeYjBbQTjaTn9L
Ecommerce Store DiscoveryPeHu4sLyFvQHXUUrX
Email List Verifier, Bring Your Own KeyCzVJ4NlaCKk80xpgE
Event Presence IndexWLhMy8fMDgsxdYxv5
Expert Witness Finder, US and AustraliaLIpwlgfE3LaQBaXd4
Funding and Press Signal ScannerFS13X6dhQVgX3XOM6
GDPR Cookie Banner and Consent CheckerTrKyOS0KBoGC35nbr
GitHub Followers and Following ExportSGNxDmFb9v3tRDaFI
GitHub Organization Signal ScannerahF8RRpv5mzPao5CN
Google Ads Transparency Center Scraper by Domain1eOwxhBVxzvOXAm4s
Google Trends ScraperOeDzaACKmBYJXzHZk
GTM Hiring Signal ScraperD7O1SA2EqwHGsGr1P
GTM Signals AggregatorxKdRfnfFNkdMpFuNs
Healthcare Provider NPI EnricherMrgbHzcpDq3mOv9Df
ICP Fit ScorerW161DT8W4kW55dMFh
Influencer Change Monitord2VVgahNL6UmcLkhg
Influencer Lead List BuilderKnmByszcv135yM30G
Influencer Profile ScraperEqEnklDVMIcB1V499
Influencer Search Across TikTok, Instagram and YouTubetpkedmloIIWtXx6sg
Influencer Talent Agency LookupzCuX4Mgyg6JvXgGzd
Instagram Facebook Brand Presence MapperHXh65I0JBjPsunbY8
Integration and Marketplace Presence MapperV0guNuvM85Q61f2gj
Job Board Keyword Signal Scanner4DvqpvhMR74NLcDDY
Job Posting MonitorQCfICD9kOPiOdj5iI
Journalist and Media List BuildermAfizsZC8qRoR0ecS
Launch Directory List BuildercRq3bmvEZxZtioQ7U
Lead File Import CheckerRwlGVXTf46LqZdUgt
Legal Entity ResolverKHFyPCDIx7CyqULYm
Link in Bio Scraper and Newsletter DetectorOorucdheTIgu7RFzK
LinkedIn Company Page MapperzOPm6A9JEhUGcIdFW
LinkedIn Jobs FeedSH6N0d8cz46BhCC8B
LinkedIn Post TrackeroiGLNPuaf5BRaz9K5
Local Business Lead BuilderqMN97aoHhsAS5bznV
Local Rank and Map Pack Trackergv0kyHGDIg8XscclB
Lookalike Companies from Seed Domainse2O426WBAbLLQL4Z2
Manufacturer and Supplier FinderQcsdmd0lUfPzVkonh
MCP Server Change and Health MonitorIeqjWF9U0BdDQFY08
Media URL TranscriberSyfr7Ya3EsHgWfrB6
Meta Ad Library Ads by Company, Graph APIJ1GWlSXfSGU3u8Wng
Mobile Phone Waterfall6OOgPktf7RIa5XCOP
New Hire FindercKuc38p4nYHNF3IW8
Newly Registered Companies, UK, Norway, Finland, Franceg2WfZhWvCtc57g2Jo
News and Media Mention Monitorgol1PPUKrsIk4QLBd
Newsletter Sponsor TrackerqSwpqxD1TiPZpLQHv
Open Tender and RFP FinderkPTGz6t6TFoUUyfaO
Outbound Stack Detectorv43UJC8r7qW7cBSTG
Page Finder and ExtractorTpurgcOZbVnknlaiC
Partner and Member Directory ExtractorZX0XJPPUvnFJxeC1a
People Finder & Email VerifierLEgloG7tWgQl4o6TD
Person LinkedIn URL ResolverssuyPV8LnEsL8qbnb
Person Social Footprint MapperjfQXa2zW9FHCJot9K
Personal Email to Company ResolverAefT5Ye6YNPFQwJBf
Pinterest Brand Presence Mapperd1HvjZfKhgvWsoEwn
Podcast Guest and Host Findero2MGSvgbSLeeXOsIo
Product Hunt Daily Launches with Maker DomainsO4VX63drWK9Y9x641
Prospect Engineq9rT6v64nUJdPexOQ
Public Feature Board and Roadmap MonitorrcHF5gj5r2Vqnry35
Publishing Frequency TrackerTbLwaUUATdYb6wp4N
Recent Funding Rounds FeedKueVp9MOz7iOoAgDp
Reddit Brand Presence MapperpKQZmDaT70SEb54bZ
Reddit Search and Thread Scraper4Gsth5cP2Xt9V2xDN
Reporting Window FinderuINxR7a1IW8qUTRUX
Research Topic Institutions and AuthorsOH8ANqt7bCKbo72Gk
Sequencer Event PollerS6s8Rjd61tGdrMRk4
Sequencer Lead Push0Jv27VeWM5tSZQs9x
Shopify App Store and Chrome Web Store ListingsgaY0BzkLyN77mD3wI
Site Crawler for Links and TableslLLJ6JxZ4XqN8ULz0
Substack Newsletter and Posts ScraperUEFsdwiPLmPNVy9xd
Team Page People Extractorj8a9zX0k4mNbvDbWK
Tech Stack Signal Detectorqyd7nNyqFPelQViBx
Threads Posts by Keyword, Exact Match2OT8K8RiEEWtaj2MW
TikTok Brand Presence Mapperfco8FvoJcSafbeyd1
Trustpilot Reputation Enricher3lIqfCt61j4hqE1xz
US and UK Contract Award Winners by CompanyzhEtllASykOcx9hJ8
US Import Records Buyer FinderVIMafpKF5ggOw0COU
VC and Accelerator Portfolio List BuilderchH8hrfuoqqolW06m
Website Accessibility Checker, WCAG 2.2 AAP3jBj3FRghKEhX52z
Website Phrase and Business Model ClassifierCBuZ9k7sRwBeiKiCS
Website Traffic Rank EstimatorGnOFUzlNVIoXgeJjH
Work Email WaterfallOT6xqTFThC0Rjf7Zj
Workplace Program DetectorLi6pPDhqbdzFz3h7G
X Brand Presence MapperoLOgadhHUkNAyDA3w
YouTube Channel from Company Domain6hSpD3kd2s2IQ4VSs
Zillow Listing DetailsyG4zM0Enfsw2NefJ1

Built by Mamba Labs.