mloda-plugin-govdata
German open government data as typed tables you can trust: found, downloaded, parsed, made comparable, and traceable to its source. A plugin for mloda: you name the columns, it does the rest.
Why
The data is open, but every team rewrites the same scripts:
- German CSV. Decimal commas, multi-row headers, and signs like
-and.that mean different things. - Changing borders. Göttingen and Osterode merged in 2016. The raw Destatis table shows three districts, and zeros for the years each one did not exist.
- Lost provenance. Which file, which license, which attribution: gone by the time the chart is done.
What's inside
| Sources | GovData.de, Destatis GENESIS (GENESIS-Online, Regionalstatistik), Bundeswahlleiterin election results, UBA air quality |
| Harmonization | district series on today's borders, NUTS codes for German region keys, typed years |
| Recipes | JSON files that pin the features, joins, source, license, and checksum of one result |
Install
pip install mloda-plugin-govdata
Quick start
No account needed for GovData:
from mloda.user import Feature, mloda
from mloda_plugin_govdata.feature_groups.govdata import StuttgartPopulationReader
slug = "einwohner-nach-altersgruppen-und-stadtbezirken"
result = mloda.run_all(
[Feature("Einwohner", options={StuttgartPopulationReader: slug})],
compute_frameworks=["PyArrowTable"],
)
Destatis, with a free GENESIS account:
from mloda_plugin_govdata.feature_groups.destatis import DestatisReader
result = mloda.run_all(
[Feature("value", options={DestatisReader: "12411-0010"})], # population by Land
compute_frameworks=["PyArrowTable"],
)
Göttingen on today's borders, with value__rebased (full example):
~key ~year ~value ~flag ~sources
03159 2013 322616.0 rebased [03152, 03156]
03159 2015 329538.0 rebased [03152, 03156]
03159 2016 327065.0 observed []
Demo
A marimo notebook walks through every source, the Göttingen series, and a join of population and eligible voters for all 16 Länder:
git clone https://github.com/mloda-ai/mloda-plugin-govdata.git
cd mloda-plugin-govdata
uv sync --all-extras
uv run marimo edit demos/govdata_demo.py
The Destatis chapters skip themselves without GENESIS credentials. A second notebook, demos/berlin_wahl_2026_demo.py, reads four Berlin elections with one set of reader options.
Docs
- Readers: every source, dataset search,
peek - Destatis options and credentials
- Harmonization
- Recipes
- Architecture and adding a reader
Status
Young but working, built during a Prototype Fund stage (June to November 2026). The API may still change; the release notes give a migration for every breaking change.
Funding
Funded by the German Federal Ministry of Research, Technology and Space (BMFTR) through the Prototype Fund, supported by the Open Knowledge Foundation Deutschland. Funding code: 16IS26S11.
Metadata
Release files for mloda-plugin-govdata 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mloda_plugin_govdata-0.4.0.tar.gz | 94.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mloda_plugin_govdata-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 205.1 kB
Release files / mloda_plugin_govdata-0.4.0.tar.gz
| Download URL | mloda_plugin_govdata-0.4.0.tar.gz |
|---|---|
| Size | 94.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7216f0d3a58c5ba2f162d59df3d9ba816ced77272aa8039ca5bc6b0a263b5d27
|
|
BLAKE2b-256 checksum How to use checksums |
6bf17e7e40a109af587a241cb204d0dd309ebdf89658285910bcfbe46799cde8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.22
|
Release files / mloda_plugin_govdata-0.4.0-py3-none-any.whl
| Download URL | mloda_plugin_govdata-0.4.0-py3-none-any.whl |
|---|---|
| Size | 110.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c8187367eb199e344d3ef19b20d543c7492b096b137dc60bf77cf4756e7020ee
|
|
BLAKE2b-256 checksum How to use checksums |
8ceb0932718c2e2409c7a6fb32790ca12da0c3084e4645710599d86fb9711859
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.10.22
|