BYTETOOLS

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.

No API key requiredCORS enabledHTTPSFree tier

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
curl 'https://opendata.cbs.nl/ODataApi/odata/83625NED/TypedDataSet?$top=1&$format=json'
JavaScript (fetch)
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);
Python (requests)
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())
Response — HTTP 200
{
  "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

ParameterTypeRequiredDescription
{table}pathRequiredStatLine table code, for example `83625NED` for average house sale prices. 83625NED
$topqueryOptionalRows to return. 1
$skipqueryOptionalRows to skip, for pagination. 100
$filterqueryOptionalOData filter expression over dimension codes. Perioden eq '2023JJ00'
$selectqueryOptionalColumns to return. RegioS,Perioden,GemiddeldeVerkoopprijs_1
$formatqueryOptional`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

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.