BYTETOOLS

PDOK Locatieserver API

Free official Dutch geocoding API with no key: search addresses, streets, postcodes and place names from the BAG, with RD and WGS84 coordinates. Tested example included.

No API key requiredCORS enabledHTTPSFree tier

Endpoint tested and returned HTTP 200 on 21 Aug 2026

What is the PDOK Locatieserver API?

PDOK Locatieserver is the Dutch government's free, key-free geocoding service. It searches addresses, streets, postcodes, neighbourhoods and place names drawn from the BAG and NWB registers, returning both WGS84 and Rijksdriehoek coordinates for each match.

Locatieserver is a thin, well-behaved front end over Solr, and knowing that explains most of its quirks. Responses arrive wrapped in a `response` object with `numFound`, `start` and `docs`, exactly as Solr emits them, and the `score` on each document is a Lucene relevance score rather than a normalised confidence — comparable within one query, meaningless between two.

The dual coordinate output is the part worth planning around. Every document carries `centroide_ll` in WGS84 and `centroide_rd` in the Rijksdriehoek projection, both as WKT `POINT(x y)` strings rather than numbers. Dutch surveying, planning and utility systems overwhelmingly speak RD, so having both in one response saves a reprojection step — but you will have to parse the WKT yourself, and the `type` field tells you whether you matched an address, a street, a neighbourhood or a whole municipality.

Quick facts

Base URL
https://api.pdok.nl/bzk/locatieserver/search/v3_1
Authentication
No API key or registration. PDOK publishes Dutch open government geodata for free reuse, including commercial reuse.
Rate limit
No published per-IP quota, but PDOK applies fair-use throttling and asks bulk consumers to use its download services.
Pricing
Free.
CORS
Enabled — callable directly from browser JavaScript
Official docs
Read the docs

How to use the PDOK Locatieserver API

Every request below was executed against the live API on 21 Aug 2026, and the response shown is the real body it returned — not an illustration.

1. Geocode a Dutch address with the free search endpoint

GET https://api.pdok.nl/bzk/locatieserver/search/v3_1/free?q=Dam%201%20Amsterdam&rows=1

curl
curl 'https://api.pdok.nl/bzk/locatieserver/search/v3_1/free?q=Dam%201%20Amsterdam&rows=1'
JavaScript (fetch)
const res = await fetch("https://api.pdok.nl/bzk/locatieserver/search/v3_1/free?q=Dam%201%20Amsterdam&rows=1");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);
Python (requests)
import requests

res = requests.get("https://api.pdok.nl/bzk/locatieserver/search/v3_1/free?q=Dam%201%20Amsterdam&rows=1", timeout=20)
res.raise_for_status()
print(res.json())
Response — HTTP 200
{
  "response": {
    "numFound": 943446,
    "start": 0,
    "maxScore": 12.354595,
    "numFoundExact": true,
    "docs": [
      {
        "bron": "BAG/NWB",
        "woonplaatscode": "3594",
        "type": "weg",
        "woonplaatsnaam": "Amsterdam",
        "nwb_id": "031209",
        "openbareruimtetype": "Weg",
        "gemeentecode": "0363",
        "rdf_seealso": "http://bag.basisregistraties.overheid.nl/bag/id/openbare-ruimte/0363300000003186",
        "weergavenaam": "Dam, Amsterdam",
        "straatnaam_verkort": "Dam",
        "id": "weg-ab6df5babb15e466f3699b5d2c22e110",
        "gemeentenaam": "Amsterdam",
        "identificatie": "0363300000003186",
        "openbareruimte_id": "0363300000003186",
        "provinciecode": "PV27",
        "provincienaam": "Noord-Holland",
        "centroide_ll": "POINT(4.89304433 52.37297089)",
        "provincieafkorting": "NH",
        "centroide_rd": "POINT(121347.914 487347.519)",
        "straatnaam": "Dam",
        "score": 12.354595
      }
    ]
  }
}

Parameters

ParameterTypeRequiredDescription
qqueryRequiredThe search text: address, street, postcode, place or neighbourhood. Dam 1 Amsterdam
rowsqueryOptionalHow many documents to return. Defaults to 10. 1
startqueryOptionalOffset for paging through `numFound` results. 10
fqqueryOptionalSolr filter query. `fq=type:adres` restricts results to addresses only. type:adres
flqueryOptionalComma-separated field list, to trim the response to what you use. id,weergavenaam,centroide_ll
(suggest)pathOptional`/suggest?q=` is the autocomplete sibling of `/free`, returning ranked short suggestions.
(lookup)pathOptional`/lookup?id=` fetches one document by the id a suggest call returned.

Response fields

response.numFoundinteger
Total matches across the whole index, not the number returned. It is routinely in the hundreds of thousands for a loose query.
response.docsarray
The matched documents, one object per result.
weergavenaamstring
Display name of the match, for example "Dam, Amsterdam". This is the string to show a user.
typestring
What was matched: `adres`, `weg`, `postcode`, `woonplaats`, `gemeente` and so on. Check it before treating a hit as an address.
centroide_llstring
WGS84 position as WKT, `POINT(lon lat)` — longitude first, and a string rather than a number pair.
centroide_rdstring
The same point in Rijksdriehoek metres, the projection Dutch professional systems use.
gemeentenaam / provincienaamstring
Municipality and province the match falls in.
idstring
Document identifier, which is what `/lookup` takes.
scorefloat
Lucene relevance. Comparable between results of the same query only.

What you can build with the PDOK Locatieserver API

  • Geocode Dutch addresses to coordinates without a commercial provider
  • Add address and place autocomplete to a Dutch web form
  • Convert between WGS84 and Rijksdriehoek by reading both from one response
  • Resolve a postcode plus house number to an official BAG identifier
  • Enrich records with municipality and province for reporting

Common errors and how to fix them

Results are streets, not addresses

A loose query matches whatever ranks highest, which is often the street.

Fix: Add `fq=type:adres` to restrict to addresses, and inspect the `type` field before using a result as a building location.

Coordinates arrive as text

Not an error — `centroide_ll` is WKT, not a JSON array.

Fix: Parse the `POINT(x y)` string. Remember x is longitude and y is latitude, so a naive split gives you the pair in the opposite order to `lat, lon`.

numFound is enormous

It counts every document matching the analysed query, not the useful ones.

Fix: Ignore it as a quality signal. Use `rows` to bound the response and judge quality from `type` and `score` instead.

400 on a malformed fq

The filter query is passed through to Solr, which rejects bad syntax.

Fix: Use simple `field:value` filters. Escape colons and spaces inside values, or the parse fails.

PDOK Locatieserver API — frequently asked questions

Is PDOK Locatieserver free?

Yes, free with no key or account. It is Dutch open government geodata and reuse, including commercial reuse, is permitted.

What is the difference between the free, suggest and lookup endpoints?

`/free` is a general search returning full documents, `/suggest` is optimised for autocomplete and returns short ranked suggestions with ids, and `/lookup` retrieves the full document for one of those ids. The usual pattern is suggest while typing, then lookup on selection.

Why are the coordinates in a POINT() string?

Locatieserver stores geometry as WKT, so it hands it back that way. Both `centroide_ll` (WGS84) and `centroide_rd` (Rijksdriehoek) use the same format, and both list x before y — longitude before latitude in the WGS84 case.

Does it cover Belgium or German border towns?

No. Coverage is the Netherlands only, sourced from the BAG address register and the NWB road network. Cross-border searches return nothing.

Tools that pair with this API

Alternatives to PDOK Locatieserver API

If PDOK Locatieserver does not fit, these geolocation & ip apis cover similar ground. Every one was called before publishing, and each links to its own reference page with a working curl command and the response it returned.

APIWhat it doesAuthCORSLast verified
ipifyipify is a free, unlimited API that returns your public IP address as text, JSON or JSONP. No key, no rate limit, IPv4 and IPv6 endpoints. Live curl example.No keyYes19 Aug 2026
ip-api.comFree IP geolocation API returning country, city, coordinates, timezone and ISP for any IP. No key on the free tier, 45 requests per minute. Tested curl example.No keyYes19 Aug 2026
ipwho.isFree IP geolocation API with HTTPS and no API key. Returns country, city, coordinates, timezone, currency and connection data. 10,000 requests/month free.No keyYes19 Aug 2026
Nominatim (OpenStreetMap)Free OpenStreetMap geocoding API: convert addresses to coordinates and back. No API key, open data, 1 request per second. Tested curl example and usage policy.No keyNo19 Aug 2026
Photon (Komoot)Free Photon geocoding API with no key: fast OpenStreetMap-based search built for typeahead, with forward and reverse geocoding. Self-hostable. Tested.No keyNo20 Aug 2026
Postcodes.ioFree UK postcode API with no key: coordinates, council, constituency, ward and NHS area for any UK postcode, plus reverse and nearest lookups. Tested.No keyYes19 Aug 2026
All Geolocation & IP APIs

PDOK Locatieserver is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 21 Aug 2026; always check the official documentation before relying on this API in production, as terms and limits can change.