CBS StatLine (Netherlands) API
Free Statistics Netherlands API with no key: query StatLine tables with OData, filtering and paging server-side with $top, $filter and $select. Tested example included.
Endpoint tested and returned HTTP 200 on 2026-08-21
What is the CBS StatLine (Netherlands) API?
CBS, Statistics Netherlands, publishes its StatLine tables through a free OData API with no key. Each table has a code such as 83625NED, and its `TypedDataSet` endpoint returns typed rows that can be filtered, projected and paged entirely server-side using standard OData query options.
Using OData instead of a bespoke query language is a real advantage: `$top`, `$skip`, `$filter`, `$select` and `$orderby` all behave the way they do in any OData client, and existing tooling in .NET, Python and JavaScript works without a custom adapter. Each table exposes several endpoints — `TypedDataSet` for values with proper types, `UntypedDataSet` for raw codes, plus `TableInfos` and one endpoint per dimension holding the code-to-label mappings.
The catch is that dimension values are codes with significant whitespace. A region arrives as `"NL01 "` — padded to a fixed width — and a period as `"1995JJ00"`, where `JJ` marks an annual figure and the trailing digits identify the sub-period. Trim before comparing, and join against the dimension endpoints to turn those codes into names. Table codes ending `NED` are Dutch-language; the `ENG` variants carry English labels for a subset of tables.
Quick facts
- Base URL
https://opendata.cbs.nl/ODataApi/odata- Authentication
- No API key or registration. The newer OData v4 service at datasets.cbs.nl is also open and offers the same tables in a different shape.
- Rate limit
- No published limit. Use `$top` and `$filter` rather than pulling whole tables.
- Pricing
- Free. CBS data may be reused, including commercially, with attribution to Statistics Netherlands.
- CORS
- Enabled — callable directly from browser JavaScript
- Official docs
- Read the docs
How to use the CBS StatLine (Netherlands) API
Every request below was executed against the live API on 2026-08-21, and the response shown is the real body it returned — not an illustration.
1. Fetch a row from a CBS StatLine table
GET https://opendata.cbs.nl/ODataApi/odata/83625NED/TypedDataSet?$top=1&$format=json
curl 'https://opendata.cbs.nl/ODataApi/odata/83625NED/TypedDataSet?$top=1&$format=json'const res = await fetch("https://opendata.cbs.nl/ODataApi/odata/83625NED/TypedDataSet?$top=1&$format=json");
if (!res.ok) throw new Error(`Request failed: ${res.status}`);
const data = await res.json();
console.log(data);import requests
res = requests.get("https://opendata.cbs.nl/ODataApi/odata/83625NED/TypedDataSet?$top=1&$format=json", timeout=20)
res.raise_for_status()
print(res.json()){
"odata.metadata": "https://opendata.cbs.nl/ODataApi/OData/83625NED/$metadata#Cbs.OData.WebAPI.TypedDataSet",
"value": [
{
"ID": 0,
"RegioS": "NL01 ",
"Perioden": "1995JJ00",
"GemiddeldeVerkoopprijs_1": 93750
}
]
}Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
{table} | path | Required | StatLine table code, for example `83625NED` for average house sale prices. 83625NED |
$top | query | Optional | Rows to return. 1 |
$skip | query | Optional | Rows to skip, for pagination. 100 |
$filter | query | Optional | OData filter expression over dimension codes. Perioden eq '2023JJ00' |
$select | query | Optional | Columns to return. RegioS,Perioden,GemiddeldeVerkoopprijs_1 |
$format | query | Optional | `json` for JSON output; the service otherwise negotiates. json |
Response fields
odata.metadatastring- URI of the table's metadata document, useful for discovering column names and types.
valuearray- The data rows.
value[].IDinteger- Row index within the table. Not a business key — it shifts when the table is republished.
value[].RegioSstring- Region code, space-padded to a fixed width such as `"NL01 "`. Trim before comparing.
value[].Periodenstring- Period code such as `1995JJ00`; `JJ` marks an annual value, `KW` a quarter, `MM` a month.
value[].<Measure>_nnumber- Measure columns are suffixed with a numeric index, for example `GemiddeldeVerkoopprijs_1`.
What you can build with the CBS StatLine (Netherlands) API
- Chart Dutch house prices, population or employment over time
- Filter a StatLine table to one region without downloading it whole
- Reuse existing OData tooling against official statistics
- Join dimension codes to labels for a readable statistics browser
Common errors and how to fix them
Filter matches nothing
Dimension codes are space-padded.
Fix: Compare against the exact padded value, or use `startswith()` in the filter rather than equality.
404 on the table code
Wrong code, or the table has been withdrawn.
Fix: Check the code in StatLine; `NED` suffixes are Dutch tables, `ENG` are the English-labelled subset.
Columns are unreadable codes
Dimension values are codes, not labels.
Fix: Fetch the dimension endpoints, such as `/RegioS`, and join on the code to get names.
Row IDs shift between runs
`ID` is a positional index, not a key.
Fix: Build your own key from the dimension columns instead of persisting `ID`.
CBS StatLine (Netherlands) API — frequently asked questions
Is the CBS open data API free?
Yes, no key and no registration. Statistics Netherlands publishes all StatLine tables openly, and reuse including commercial use is allowed with attribution.
How do I find a table code?
Browse StatLine on the CBS website; the code appears in the table's URL and metadata — for example 83625NED for average house sale prices. Codes ending NED are Dutch, ENG are the English-labelled tables.
What does 1995JJ00 mean?
It is a CBS period code: the year followed by a type marker and sub-period. `JJ` indicates an annual figure, `KW` a quarter and `MM` a month, so `1995JJ00` is the whole of 1995.
Should I use the v3 or v4 API?
The v3 ODataApi documented here is stable and covers every StatLine table. The newer v4 service at datasets.cbs.nl offers the same data in a different shape; pick one and stay on it, since the response structures differ.
Tools that pair with this API
JSON to CSV Converter
Convert a JSON array of objects to CSV online. Automatic column headers from the union of all keys, delimiter choice and proper quoting — all in-browser.
CSV Viewer & Table
View CSV as a clean HTML table online. Live search filter, row and column counts, delimiter and header options — all processed locally in your browser.
JSON Path Finder
Evaluate a dot/bracket path against your JSON and list every leaf path for discovery. Free online JSON path finder that runs 100% in your browser.
CBS StatLine (Netherlands) is an independent third-party service and is not affiliated with ByteTools or ByteVancer. Details on this page were verified on 2026-08-21; always check the official documentation before relying on this API in production, as terms and limits can change.