# data.europa.eu

Het Europese dataportaal haalt de catalogi van de EU-instellingen en van alle lidstaten op, ook de Nederlandse. Op 15 oktober 2026 stonden er 1.752.057 datasets uit 212 catalogi in, waarvan 30.119 uit Nederland. Zoeken kan via een API en via SPARQL.

- Uitgever: Publicatiebureau van de Europese Unie
- Gebied: Europa · Laagste detail: dataset (metadata)
- Periode: actueel · Ververst: dagelijks
- Toegang: Open · Licentie: CC0 1.0 (metadata); datasets onder hun eigen licentie
- Koppelsleutels: dataset-id, catalogus-id, landcode (nl)
- Status: ok (2026-10-15) · 30126 datasets uit Nederland
- URL: https://data.europa.eu

## Wat kun je ermee?
- **Hoe open is Nederland, vergeleken met de buren?.** Tel de datasets per land. Op 15 oktober 2026: Duitsland 850.606, Frankrijk 183.233, Nederland 30.119. Let op: dat zegt vooral hoe elk land zijn catalogus inricht, niet hoeveel data er echt is.
- **Welke Nederlandse data zijn 'hoogwaardig'?.** De EU wijst hoogwaardige datasets aan die gratis en via een API beschikbaar moeten zijn. Met het facet is_hvd vind je ze; voor Nederland waren dat er 451 (15 okt 2026).
- **Dezelfde dataset in andere landen.** Zoek op een onderwerp (bv. laadpalen of luchtkwaliteit) in alle landen tegelijk en zie welke steden of landen het wel en niet publiceren.
- **Licenties in kaart brengen.** Het facet license telt licenties. Van de Nederlandse datasets hadden er 9.111 CC BY 4.0, 5.946 CC0 en 664 'licentie onbekend' (15 okt 2026).

## Zo verwerk je het
1. **Bekijk de lijst van catalogi.** 212 catalogus-ids. De Nederlandse: dataportaal-van-de-nederlandse-overheid (data.overheid.nl), ngr-nl (Nationaal Georegister) en nsip-nl (Logius).
   `https://data.europa.eu/api/hub/search/catalogues`
2. **Zoek en tel met een POST.** Stuur een JSON-zoekvraag naar /api/hub/search/search. Met limit 0 krijg je alleen het aantal en de facetten (land, catalogus, formaat, licentie, hoogwaardig).
   `curl -X POST https://data.europa.eu/api/hub/search/search -H 'Content-Type: application/json' -d '{"filters":["dataset"],"limit":0,"facets":{"country":["nl"]}}'`
3. **Haal één dataset op.** Met het id krijg je titel (in alle EU-talen), beschrijving, uitgever, distributies met formaat en licentie.
   `https://data.europa.eu/api/hub/search/datasets/83957-cbs-vierkantstatistieken-100m`
4. **Tellen met SPARQL.** Het endpoint /sparql beantwoordt vragen over de hele catalogus als linked data (DCAT-AP). Stuur de vraag als POST.
   `curl -X POST https://data.europa.eu/sparql -H 'Accept: application/sparql-results+json' --data-urlencode 'query=PREFIX dcat: <http://www.w3.org/ns/dcat#> SELECT (COUNT(?d) AS ?n) WHERE { <http://data.europa.eu/88u/catalogue/dataportaal-van-de-nederlandse-overheid> dcat:dataset ?d }'`

## Interessante koppelingen
- Komt alles uit data.overheid.nl ook in Europa aan? → [data-overheid](https://www.opendataindex.nl/bron/data-overheid.md) via dataset-id = name in data.overheid.nl (bv. 83957-cbs-vierkantstatistieken-100m). Vergelijk de aantallen. Op 15 oktober 2026 telde data.europa.eu 19.351 datasets uit data.overheid.nl, terwijl wij daar zelf 20.794 telden.

## Vergelijkbare bronnen
- [data-overheid](https://www.opendataindex.nl/bron/data-overheid.md): De Nederlandse bron zelf, met de eigenaar per dataset (authority) en meer Nederlandse velden.
- [Nationaal Georegister](https://www.nationaalgeoregister.nl): Alle Nederlandse geodata en kaartdiensten, met de diensten (WMS/WFS) die bij een dataset horen.

## Waar je op moet letten
- **Dubbel geteld.** data.overheid.nl haalt zelf ook het Nationaal Georegister op. Omdat data.europa.eu beide catalogi oogst, staan veel Nederlandse geodatasets er twee keer in. Tel dus niet gewoon op.
- **Alleen metadata.** Het portaal bewaart beschrijvingen en links, niet de data zelf. Een download gaat altijd naar de oorspronkelijke uitgever.
- **Vertaald door een machine.** Titels en beschrijvingen staan in alle EU-talen, maar de meeste vertalingen zijn automatisch (veld translation_meta). Zoek Nederlandse data in het Nederlands.
- **robots.txt verbiedt zoek-URL's.** robots.txt verbiedt /*search?* en /*?query=*. Dat raakt GET /api/hub/search/search?q=… en GET /sparql?query=…. De POST-varianten staan in de documentatie en vallen er niet onder.

## API (REST (JSON, POST-zoeken) en SPARQL)

- Basis: https://data.europa.eu/api/hub/search
- Toegang: Lezen en zoeken zonder sleutel. Schrijfacties in de OpenAPI (datasets aanmaken, wijzigen) vragen een sleutel en zijn voor catalogusbeheerders. (getest)
- Formaten: json, sparql-json
- Omvang: 30132 datasets met land nl (16 okt 2026); 213 catalogi in totaal (getest)
- Filteren: JSON-body met q (vrije tekst), filters (soort document) en facets (veld → lijst van waarden). Meer waarden binnen een facet = OF, facetten onderling = EN (facetOperator, facetGroupOperator).; facets, q, AND, OR

### Endpoints
- `POST /search`: Zoeken en tellen met een JSON-body: q, filters (dataset, catalogue …), facets (country, catalog, format, license, is_hvd …), page, sort. Antwoord: result.count, results en facetten met tellingen.
- `GET /datasets/{id}`: Eén dataset: titel en beschrijving in alle EU-talen, uitgever, catalogus, distributies (formaat, access_url, licentie), trefwoorden, kwaliteitsmetingen.
- `GET /catalogues`: Lijst van alle 213 catalogus-id's.
- `GET /catalogues/{id}`: Eén catalogus met titel, land, uitgever, homepage, aantal datasets (count) en modified. Nederland: dataportaal-van-de-nederlandse-overheid, ngr-nl, nsip-nl.
- `POST https://data.europa.eu/sparql`: SPARQL over de hele catalogus (DCAT-AP). Vraag als formulierveld query, antwoord met Accept: application/sparql-results+json.
- `GET /openapi.yaml`: De OpenAPI-beschrijving (ook scroll, feeds per dataset, vocabularies).

### Parameters
- `q`: Zoekterm (in de JSON-body). laadpalen + land nl gaf 13 datasets. (getest)
- `filters`: Soort document: ["dataset"], ["catalogue"], ook dataservice, datasetseries … (getest)
- `facets`: Filter op facetten: {"country":["nl"],"catalog":["ngr-nl"],"is_hvd":["true"],"format":["CSV"]}. Facetten in het antwoord o.a. country, catalog, publisher, format, license, categories, keywords, is_hvd, hvdCategory, scoring. (getest)
- `aggregationAllFields / aggregationFields`: Alleen de facetten die je noemt tellen: "aggregationAllFields": false, "aggregationFields": ["catalog","license"]. (getest)
- `aggregation`: false = geen facetten (veel kleiner antwoord). (getest)
- `includes`: Alleen deze velden per resultaat, bv. ["id","title.nl","modified","catalog.id"]: 1 kB i.p.v. 500 kB. (getest)
- `sort`: Lijst, niet tekst: ["modified+desc"]. Als tekst: 400 ValidationException. (getest)
- `page`: Paginanummer (vanaf 0). (uit de beschrijving)
- `limit`: Volgens de OpenAPI 0 tot 1.000 (meer of een tekst geeft 400), maar zie de notities: de POST gaf steeds 10 resultaten. (getest)
- `minDate, maxDate, dateType, bbox…, scroll, searchAfter`: Staan in de OpenAPI (datum- en kaartfilters, diep pagineren). minDate met dateType modified veranderde de telling bij ons niet: niet op vertrouwen zonder te controleren. (getest)

### Velden in het zoekantwoord (10)
`result.count` integer, `result.facets[].items[].id / count` lijst, `results[].id` tekst, `results[].title` object, `results[].catalog.id` tekst, `results[].publisher.resource` url, `results[].distributions[]` lijst, `results[].is_hvd` boolean, `results[].translation_meta` object, `results[].modified` datum

### Limieten en valkuilen
- Geen sleutel en geen gedocumenteerde aanvraaglimiet. Een antwoord met alle facetten is groot (600 kB voor limit 0): zet aggregation op false of noem aggregationFields. (getest)
- Klein houden: includes ["id"] plus aggregationFields maakt een telling met twee facetten 5 kB in plaats van 500 kB. (getest)
- robots.txt verbiedt /*search?* en /*?query=*, dus GET /api/hub/search/search?q=… en GET /sparql?query=…. Gebruik de POST-varianten uit de documentatie; /datasets/{id} en /catalogues mogen met GET. (getest)
- In de POST-body gaf limit 0, 1 en 50 steeds 10 resultaten terug (16 okt 2026); page werkt wel. Tellen en facetten kloppen; voor grote lijsten SPARQL of de bron zelf gebruiken. (getest)
- Dubbel: data.overheid.nl oogst zelf het NGR, en data.europa.eu oogst beide. NL telde 30.132 datasets: data.overheid.nl 19.363, ngr-nl 9.333, nsip-nl 1.436. Niet zomaar optellen. (getest)
- Licenties komen als URI: http://creativecommons.org/licenses/by/4.0/deed.nl (9.117 NL-datasets), CC0 (5.954), Public Domain Mark (4.000), licentieonbekend (665). (getest)
- Alleen metadata: downloads gaan naar de oorspronkelijke uitgever (access_url). (getest)
- SPARQL telt dcat:dataset per catalogus snel (ngr-nl: 9.330 in 0,1 s), iets anders dan het zoekfacet (9.333). (getest)

### Voorbeeld
```
https://data.europa.eu/api/hub/search/search
```

## Zo haal je het op

### curl
```bash
curl -X POST https://data.europa.eu/api/hub/search/search -H 'Content-Type: application/json' -d '{"filters":["dataset"],"limit":0,"facets":{"country":["nl"]}}'
```

### python
```python
import requests

r = requests.post("https://data.europa.eu/api/hub/search/search", json={
    "filters": ["dataset"], "limit": 0, "facets": {"country": ["nl"]}}).json()["result"]
print(r["count"], "datasets uit Nederland")
for f in r["facets"]:
    if f["id"] == "catalog":
        for c in f["items"]:
            print(c["id"], c["count"])
```


## Voorbeelden met echte cijfers (2)

Per voorbeeld de bevinding, de peildatum en de aanroep die precies deze cijfers ophaalt.

- **Nederlandse datasets op data.europa.eu per thema: het meest milieu (4.271 datasets), dan economie en financiën en vervoer** (oktober 2026). Tabel hub/search. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/data-europa-nl-themas)
  - `https://data.europa.eu/api/hub/search/search`
- **Datasets op data.europa.eu per land: het meest Duitsland (850.095 datasets), dan Frankrijk en Oostenrijk** (oktober 2026). Tabel hub/search. [Voorbeeld](https://www.opendataindex.nl/voorbeeld/data-europa-per-land)
  - `https://data.europa.eu/api/hub/search/search`
