GovData APIgovdata.de ↗
Access Germany's Federal Open Data Portal via API. Search datasets, retrieve metadata, list organizations, categories, and High Value Datasets (HVD) from govdata.de.
What is the GovData API?
The GovData.de API provides access to Germany's Federal Open Data Portal across 8 endpoints, covering dataset search, full metadata retrieval, organization listings, thematic categories, and EU High Value Dataset (HVD) filtering. The search_datasets endpoint supports CKAN-style filter queries (fq), sorting, and pagination, returning fields like resources, tags, groups, and organization per result. Dataset counts, modification dates, and download URLs are all included in responses.
curl -X GET 'https://api.parse.bot/scraper/2c0ef76c-989b-4f84-b110-6d73c92b57f6/search_datasets?sort=metadata_modified+desc&limit=5&query=Bev%C3%B6lkerung&offset=0&filters=groups%3Asoci' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace govdata-de-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: GovData SDK — German Federal Open Data Portal."""
from parse_apis.govdata_de__german_open_data_portal__api import GovData, Sort, DatasetNotFound
govdata = GovData()
# Portal statistics — lightweight dashboard call
stats = govdata.portalstatisticses.get()
print(f"Portal has {stats.total_datasets} datasets, {stats.hvd_datasets} HVD datasets")
# Search datasets with a keyword and facet filter
for dataset in govdata.datasets.search(query="Bevölkerung", filters="groups:soci", limit=3):
print(dataset.name, dataset.title, dataset.metadata_modified)
# Fetch a single dataset by slug, then inspect its resources
try:
full = govdata.datasets.get(name="000-einwohner")
print(full.title, full.num_resources)
for res in full.resources:
print(f" {res.format}: {res.description}")
except DatasetNotFound as exc:
print(f"Dataset not found: {exc}")
# List all thematic categories with their dataset counts
for cat in govdata.categories.list(limit=5):
print(cat.name, cat.display_name, cat.package_count)
# List organizations
for org in govdata.organizations.list(limit=3):
print(org.name, org.title, org.package_count)
# Recently updated datasets — sorted by modification date descending
first_recent = govdata.datasets.recently_updated(limit=1).first()
if first_recent:
print(first_recent.name, first_recent.metadata_modified)
print("exercised: datasets.search / datasets.get / datasets.recently_updated / categories.list / organizations.list / portalstatisticses.get")
Full-text search over the portal's dataset catalog. Supports CKAN filter queries (fq), sorting, and offset-based pagination. Returns matching datasets with full metadata including organization, resources, tags, and groups.
| Param | Type | Description |
|---|---|---|
| sort | string | Sort field and direction, e.g. 'metadata_modified desc', 'title asc'. |
| limit | integer | Number of results to return per page. |
| query | string | Full-text search query (CKAN q parameter). Matches title, description, and tags. |
| offset | integer | Starting index for pagination. |
| filters | string | CKAN filter query (fq parameter) for faceted filtering, e.g. 'groups:soci' or 'organization:statistisches-bundesamt'. |
{
"type": "object",
"fields": {
"count": "integer total number of matching datasets",
"results": "array of dataset objects with id, name, title, notes, organization, resources, tags, groups, metadata_modified"
},
"sample": {
"data": {
"count": 5187,
"results": [
{
"id": "f03338a0-e98c-40e2-91df-1c684c3afd0d",
"name": "bevolkerung-deutschland-stichtag-altersjahre-nationalitat-geschlecht-familienstand-2",
"tags": [
{
"id": "bc495ad4-3c6d-4847-8a46-be7bdd03e1cc",
"name": "1-jährige",
"display_name": "1-jährige"
}
],
"notes": "Bevölkerung: Deutschland",
"title": "Bevölkerung: Deutschland, Stichtag, Altersjahre, Nationalität, Geschlecht, Familienstand",
"groups": [
{
"id": "soci",
"name": "soci",
"display_name": "Bevölkerung und Gesellschaft",
"package_count": 22976
}
],
"num_tags": 106,
"resources": [
{
"id": "c04a92ae-8e45-44f3-91b9-833e665ee88b",
"url": "https://genesis.destatis.de/genesisWS/downloads/00/tables/12411-0008_00.csv",
"name": null,
"format": "CSV",
"description": "Bevölkerung"
}
],
"organization": {
"id": "a9c59aac-5fc1-47d2-a94e-b1070e8a5fc8",
"name": "statistisches-bundesamt",
"title": "Statistisches Bundesamt",
"display_name": "Statistisches Bundesamt",
"package_count": 0
},
"num_resources": 2,
"metadata_created": "2026-06-09T21:24:20.889782",
"metadata_modified": "2026-06-09T21:24:20.889787"
}
]
},
"status": "success"
}
}About the GovData API
Dataset Search and Retrieval
The search_datasets endpoint accepts a free-text query parameter matched against titles, descriptions, and tags, along with a filters parameter for CKAN faceted queries (e.g. organization:statistisches-bundesamt or groups:soci). Results include count, plus an array of dataset objects each carrying id, name, title, notes, organization, resources, tags, groups, and metadata_modified. The sort parameter accepts expressions like metadata_modified desc or title asc, and offset/limit handle pagination.
For a single dataset, get_dataset accepts either a slug name (e.g. 000-einwohner) or a UUID and returns the complete record: the resources array includes each resource's format, url, and description, making it straightforward to locate download links across CSV, JSON, XML, and other formats.
Browsing Organizations and Categories
list_organizations returns paginated organization objects with id, name, display_name, title, and package_count, sorted alphabetically. This covers the full range of federal and state agencies publishing on the portal. list_categories returns all thematic groups — approximately 13 fixed topics — each with a package_count, requiring no pagination. list_datasets returns a paginated array of dataset slug strings under items, useful for iterating the full catalog and feeding slugs into get_dataset.
High Value Datasets and Portal Statistics
search_hvd_datasets filters on the EU HVD category facet defined by Implementing Regulation 2023/138, returning count and a full dataset array sorted by most recent modification. get_site_statistics is a lightweight call returning just two integers: total_datasets and hvd_datasets, suitable for dashboards or change-detection checks. get_recently_updated_datasets returns datasets ordered by metadata_modified descending, accepting a limit parameter — useful for polling for new or changed entries without running a full search.
The GovData API is a managed, monitored endpoint for govdata.de — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when govdata.de changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official govdata.de API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor newly published German government datasets by polling
get_recently_updated_datasetsfor changes inmetadata_modified. - Build a catalog explorer that maps all ~13 thematic categories via
list_categoriesand shows dataset counts per topic. - Identify EU High Value Datasets published on the portal using
search_hvd_datasetsfiltered by HVD category. - Automate download pipelines by retrieving
resources[].urlandresources[].formatfromget_datasetfor specific slugs. - Dashboard portal health with
get_site_statisticsto tracktotal_datasetsandhvd_datasetsover time. - Discover all datasets from a specific federal agency by passing an
organization:filter tosearch_datasets. - Enumerate the full catalog by paginating
list_datasetsand fetching complete metadata for each slug viaget_dataset.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does govdata.de have an official developer API?+
What does `get_dataset` return that `search_datasets` does not?+
get_dataset returns the complete record for a single dataset, including the full extras array (additional metadata fields), complete resources detail with download URLs per format, and full organization object. search_datasets returns the same core fields but may truncate some extras fields depending on dataset complexity.Can I filter `search_datasets` by file format, such as only CSV resources?+
filters (fq) parameter supports CKAN facets including res_format:CSV. Passing filters: 'res_format:CSV' restricts results to datasets that have at least one CSV resource. The resources array in each result still lists all formats for the matching dataset.Does the API return the actual dataset content or file downloads?+
url field from each object in the resources array to download files directly from the source. If you need content ingestion, you can fork this API on Parse and add an endpoint that fetches a specific resource URL.Are dataset licenses or terms of use exposed in the response?+
search_datasets or get_dataset. Some datasets surface license metadata inside the extras array returned by get_dataset. The API does not currently include a dedicated license filter. You can fork it on Parse and revise to expose or filter on license extras fields.