Parking NL answers that for every public parking area in the Netherlands: the real price for your arrival time and duration, cheapest first, with the free spots, live garage spaces and the zones drawn on the map.

// the question
Parking signs and most parking maps give a rate per hour. The question a driver actually has is different: where can I park for 3 hours from 14:00 for the least money? The answer depends on pay hours, day caps, progressive tariffs, evening and day cards, holidays — and whether there's a free street ten minutes' walk away.
Parking NL does that maths for every option around you. Pick a time and a duration (30 minutes up to 8 hours), and you get a list sorted by the total price, with free spots first. It starts at your location, the map polygons are coloured by the price for your stay, and live garages show their free spaces.

// coverage
| count (10 Oct 2026) | |
|---|---|
| Public parking areas | 4,833 |
| Municipalities present | 301 of 342 (264 with tariffs) |
| Areas with a computable tariff | 3,956 (3,589 of them placed on the map) |
| Garages with live occupancy | 429 |
| Free spots from OpenStreetMap | 17,394 clusters |
| Zone shapes | 3,423 real polygons + 910 approximate (dashed); 500 without a shape |
The free spots come from OpenStreetMap parking tagged fee=no, minus private and customer-only parking, and minus 3,232 spots that sit inside a paid street zone. A free spot always links to its OSM object and says it's community-maintained: check the signs.


// where the data comes from
The tariff calculator is one pure function shared by the website, the API and the AI connector. It handles day and time frames, progressive and step pricing, day caps, optional products like day and evening cards (it picks the cheapest valid combination) and holidays. Fifteen tests pin it to real rules from Amsterdam, Rotterdam, Utrecht, Delft and Pijnacker.
// for ai assistants
The same engine is an MCP server at /mcp and a REST API with an OpenAPI spec, documented on /developers. Add it to Claude, ChatGPT, Cursor or Grok and ask in plain words. Each answer has the price for the stay, walking time, live free spaces, a data-quality flag, navigation links and a spoken_summary for voice and in-car use.
A real answer from the live API, for Monday 12 October, 3 hours from 14:00:
find_parking("Rijksmuseum Amsterdam", arrival 14:00, 180 min)
1. Garage Albert Cuyp €13.00 7 min walk live: 50 of 600 free
2. Garage Heinekenplein €13.80 9 min walk live: 150 free
3. Parking de Hoofdstad €14.40 6 min walk
all three: tariff_outdated = trueNote the last line: all three garages carry a tariff the operator last updated before 2024, and the answer says so instead of pretending. More on that below.

The app is free for drivers — no account, no ads. Developers get anonymous access (30 calls/min, 500/day per IP) or an API key; plans for higher volumes and data licences are on /pricing. It's early access and the prices are indicative.
// how accurate is it
I checked 10 locations against the official 2026 municipal tariff regulations. 7 came out exactly right for the checked stay — Rotterdam, Utrecht, Den Haag (including the steep progressive streets in the old centre), Delft street zones, a free P+R.
| miss | why |
|---|---|
| Delft Phoenixgarage and Zuidpoortgarage | The operator's RDW registration still carries 2021 rates, about 10–15% too low (€3.60 vs €4.00 for 1 h) |
| Amsterdam centre | Right hourly rate (€8.05), but RDW still lists pay hours 09–24 while the inner city is now paid 24/7, so night stays come out too cheap. RDW also has no geometry for Amsterdam's street tariff areas, so they can't be placed on the map |
The calculator reproduced every published rule exactly; every error came from input data that's out of date. So the app now flags it: of the 3,956 priced areas, 1,813 carry tariffs last changed before 2024. Those get a "tariff may be outdated" label, and where there's no usable price at all, it says "price unknown" rather than guessing.

// what's new · 11 oct 2026
The app has been redesigned around one question: what does it cost here? Most of the changes came out of four rounds of synthetic UX testing, and real people now test it in the live app with Verbatim. All screenshots below are from production.






The national open parking feeds now add 220 garages that only exist there, every Q-Park garage among them. They're on the map with location, operator and capacity. What they don't have is a usable price or live count. The live feeds for those 220 garages are restricted (HTTP 401), and Q-Park's website (which now also hosts APCOA) only allows personal, non-commercial reuse. So those garages honestly say "price unknown" instead of guessing. Open data can't fix that; access from the operators can, and I've drafted a data-partnership request. Across the other garages, 247 public live feeds work and 72 are stale.

RDW publishes zone shapes as one row per polygon part, and the old loader kept only the last part. 537 areas lost 1,764 parts; they're now merged. Each source has its own adapter with retries, every area gets quality flags and a confidence score, and there's a public coverage page. Data refreshes nightly at 05:30 (Amsterdam time) with safety checks: if RDW fails, or priced areas drop by more than 15%, nothing is uploaded.
// limits
// stack
TanStack Start on Cloudflare Workers, React 19, Tailwind 4. MapLibre GL with a Protomaps basemap — a Netherlands extract as PMTiles in R2, so no paid map tiles — and the zone polygons as PMTiles too. The data pipeline is Python, DuckDB and Shapely; a refresh from RDW to R2 takes about 30 seconds. Same no-tile-server trick as in map tiles without a tile server.
Try it at parking.davidbroza.dev — or read the project page →
Note: this article was written by an AI from my brief and the project's docs. Parking NL and every number here are real — the prose isn't hand-written.