Found 21:04:12 Oudegracht 112-B, Utrecht €1,180 a month, 42 m², Funda Form sent 32 s later
A sample street: each lit window is a listing the agent found in this sample run. Addresses are made up.

Local agent for renting in the Netherlands

It watches Dutch rental sites and aims to write to the landlord within a minute of a new listing that matches your search. It reads the replies and answers the routine ones. Anything that needs a person comes to you. It is free and runs on your own computer.

Install Read the source

MIT licence. Node 22.12 or newer. No account, no server.

Live feed

What the agent did just now

Each line is one action: a site checked, a listing matched or skipped, a message sent, a reply read. The dashboard shows the same feed as it happens, and every message the agent wrote comes with its reason.

Agent, livenext check 0:42

  1. FoundFunda. , €1,180
  2. SentContact form on Funda, in Dutch, with your details
  3. SkippedKamernet. Biltstraat 30, 14 m², under your minimum
  4. FoundAgency site. , €1,050
  5. SentEmail to the agent, in Dutch
  6. ViewingOudegracht 112-B: Thursday 18:30 booked, inside your free hours
  7. FoundPararius. , €1,240
  8. Needs youVismarkt 9: the agent asks for three payslips

Sample run. Times and addresses are made up.

Frames this listing's window in the 3D street when Motion is on.

How it works

From listing to message

  1. Watch

    It checks the search pages of every site you enable, every 90 seconds for the fast ones, and notes anything it has not seen. The sites' own alert emails are a second way in.

    poll 90 s ± 20%, alert emails
  2. Match

    Each listing is checked against your rent, size, area and move-in date. The same home on three sites counts once. Likely scams are never contacted.

    rent ≤ €1,200, Utrecht, from 1 Nov
  3. Write

    A match gets a message in Dutch or English with your details, through the best free channel: a contact form, a platform message or an email to the agent.

    form, message or email
  4. Sort

    Replies are read and sorted. Routine questions are answered from your profile, and viewings inside your free hours are booked. Money, contracts and ID go to you.

    14 reply types, 1 inbox
Checked
214
Matched
38
Sent
31
Replies
7
Viewings
2

A sample day.

Reads listings from

  • Funda
  • Kamernet
  • Pararius
  • Huurwoningen
  • HousingAnywhere
  • Marktplaats
  • Vesteda
  • SSH
  • RoomMatch (DUWO)
  • Woonnet Haaglanden
  • Plaza
  • Huren in Holland Rijnland
  • Woonnet Rijnmond
  • Holland2Stay
  • MVGM
  • Stadswonen Rotterdam
  • WoningNet
  • Kamer.nl
  • Directwonen
  • Huurstunt
  • Rentola
  • Huurzone
  • Xior
  • 123Wonen
  • Rotsvast
  • NederWoon
  • Interhouse
  • Van der Linden
  • OGonline agency sites
  • Your own agency YAML

Sites whose terms forbid automated messages are read only, until you opt in for that site after reading the risk. Sites that charge to reply are read for discovery unless you have their plan. Not affiliated with any of them.

Action inbox

Only what needs a person

A landlord who proposes a time outside your free hours, asks for a payslip or sends a contract needs you. The agent answers or closes the rest, and logs what it did.

Each item says why it is there and what one key does. Identity documents are never sent without your click.

The dashboard in the light theme: the Action inbox with items that need a person, each with a drafted reply and buttons for its one-key actions, beside the live feed of what the agent did. The dashboard in the dark theme: the Action inbox with items that need a person, each with a drafted reply and buttons for its one-key actions, beside the live feed of what the agent did.

Try the keysSample items. Nothing is sent.

  1. Needs youanswer within 2 h

    The agent for Vismarkt 9 asks for your last three payslips

    Vismarkt 9, Utrecht, €1,050, agency site

    Draft: "Thank you. My last three payslips are attached. I can view the flat any evening this week."

  2. Needs younew listing

    Pararius is read only for you, so this message waits for you to send it

    Twijnstraat 18, Utrecht, €1,240, Pararius

    Draft: "Goedenavond, ik ben op zoek naar een appartement in Utrecht vanaf 1 november."

  3. Needs youcontract

    A contract offer arrived. The deposit is three months of rent, above the legal limit of two

    Oudegracht 112-B, Utrecht, €1,180, Funda

    The agent never signs or pays. Read the flagged clauses before you answer.

Agent access

Ask Claude what is waiting

The agent runs an MCP server. Add it to Claude Code or Claude Desktop and Claude can read your inbox, search listings, draft replies and change a search. Tools that contact a real person say so in their description, and withdrawing every application needs an explicit confirmation.

The same actions are a REST API on 127.0.0.1 and a CLI where every command takes --json.

The 21 tools
  • status
  • search_listings
  • get_property
  • list_applications
  • list_tasks
  • resolve_task
  • list_conversations
  • get_conversation
  • draft_message
  • send_message
  • list_viewings
  • get_searches
  • update_search
  • get_profile
  • update_profile
  • pause
  • resume
  • source_health
  • test_source
  • stats
  • withdraw_all

youList what needs me today.

Tool call: list_tasks

claudeTwo things need you.

1. Vismarkt 9, Utrecht: the agent asks for your last three payslips. A reply is drafted and waits for your approval.

2. Twijnstraat 18, Utrecht: Pararius is read only for you, so the message is ready for you to send by hand.

$nlpf status

A text drawing of the street with two windows marked: the two tasks that need you.

running, 14 sources ok, next check in 42 s, 2 tasks open

A sample session in Claude Code. The tool call is real; the data is made up.

Claude Desktop config

{
  "mcpServers": {
    "nl-property-finder": { "command": "nlpf", "args": ["mcp"] }
  }
}

Claude Code: claude mcp add nl-property-finder -- nlpf mcp

Privacy

Your computer, your data

Listings, messages and documents stay on your disk.
One SQLite file and a documents folder under ~/.local/share/nl-property-finder. Delete the folder and they are gone.
Keys and passwords sit in one file only you can read.
secrets.env is created with mode 0600, never written to a log and never returned by the API. Site logins are browser profiles on your disk.
There is no telemetry.
Nothing is sent to the author, and there is no server to send it to. By default the dashboard and the API listen on 127.0.0.1 only.
What does leave your computer.
Requests to the sites you enable, the messages it sends for you, mail through the mailbox you give it, address lookups at PDOK, push titles if you set up ntfy or Telegram, and listing text sent to Claude only if you turn that on.

Cost

What it costs

What each part costs
PartCostNotes
The agent€0MIT licence. It runs on your computer.
Listing sites€0Your own free accounts where a site needs a login. A paid plan is a setting for people who already have one.
Mail€0A separate free mailbox for the agent, read over IMAP and sent over SMTP with an app password.
Phone alerts€0ntfy or Telegram, with buttons to approve or dismiss a task.
AI€0 without itOptional. With your own Anthropic API key you pay Anthropic per call, for the model you choose, up to a monthly token budget you set. Without a key, rules and templates do the same jobs. Using the MCP server from a Claude plan you already have costs nothing extra.
Hosting€0Nothing is hosted. This page is on GitHub Pages.

Contribute

Add a rental site in one file

A site is one adapter: a typed module with recorded fixtures, or for an ordinary estate agent, a YAML file with a URL and a few selectors. Copy an existing one, record its fixtures and open a pull request. Tests never touch a live site.

examples/agencies/example-makelaar.yaml
id: example-makelaar
name: Example Makelaardij
homepage: https://www.example-makelaar.nl
regions: [delft, rijswijk]
preset: realworks
list:
  url: https://www.example-makelaar.nl/aanbod/huur/
  item: ".object"
contact:
  kind: form
terms: unknown