Czech municipalities in numbers: 786 indicators for every municipality, 2000–2025
786 Czech Statistical Office (ČSÚ) indicators for every municipality since 2000: population, schools, doctors, businesses, unemployment, budgets and censuses. One table with official municipality codes, plus 36 key figures for each municipality.
One-time payment, final price for a personal licence, switch to business at checkout · data as of 22 July 2026


How much work it saves
Merging 26 annual files of MOS (Městská a obecní statistika, the ČSÚ town and municipal statistics; 36.9 million rows of bare codes), attaching the code list of 800 indicators with methodology and coverage over time, turning 179,134 confidential values into NULL with a flag, leaving out 237,804 placeholder zeros from the first release for 2025, and giving 6,272 municipalities, dissolved ones included, their district, ORP (municipality with extended powers) and region for every year.
Measured on our own build
- Lines of code and tests
- 908
- AI agent tokens
- 22m
- AI agent run time
- 40 mins
Tokens and time cover the first working version of the code, written with Claude Opus 5.5. Not counted: researching sources and licences, quality checks and later fixes.
- Free sample: all tables cut down to the Kutná Hora area, in CSV and Parquet. Download the sample
- Data as of
- 22 July 2026
- Rows
- 37m
- Tables
- 6
- Formats
- PostgreSQL, Parquet, CSV, JSON
- Source licence
- CC BY 4.0 (ČSÚ, ČÚZK)
What’s inside
All 786 MOS indicators for all municipalities of the Czech Republic in 2000–2025, in one long table with municipality codes from RÚIAN, the Czech register of addresses, buildings, parcels and territorial units: population, education, healthcare, economic entities, unemployment, municipal finances, land types, the 1991–2021 censuses and more. A code list of indicators with methodology, municipalities with their affiliation year by year, and a wide table of key indicators.
| Table | Rows |
|---|---|
okruhy17 statistical domains of MOS with counts of indicators and values | 17 |
ukazatelecode list of indicators: name, domain, unit, source, methodology, periodicity, years in the data | 800 |
obceall municipalities that occur in MOS (dissolved ones too), last known state, coordinates | 6,272 |
obce_rokymunicipality × year as MOS reports it, with its district, ORP and region in that year | 162,597 |
hodnotyall values in long format: municipality × year × indicator | 36,624,946 |
obce_prehledone row per present-day municipality, 36 key indicators from the latest available year | 6,258 |
Municipalities are in the boundaries valid in the given year; nothing is recalculated to today’s municipalities. The year 2025 is so far the first ČSÚ release (without education, healthcare and unemployment).
Downloads
Every format contains the same data. Download only the one you need; verify its integrity with the SHA256SUMS file.
| Format | Files | Size |
|---|---|---|
| PostgreSQLschema.sql with types, keys, indexes and comments, and import.sh, which loads the data from CSV | 2 | 18 kB |
| ParquetOne file per table (zstd). DuckDB, Polars and pandas read it without an import. | 6 | 61 MB |
| CSVUTF-8, comma-separated, with a header; large tables as .csv.gz | 6 | 153 MB |
| JSONAn array of objects; large tables as JSON Lines (.jsonl.gz) | 6 | 195 MB |
Code example
More examples for SQL, DuckDB, Python and Node.js are in the README.md inside the bundle.
-- vývoj nezaměstnanosti a počtu obyvatel v Jihlavě
SELECT h.rok, u.nazev, h.hodnota, u.jednotka
FROM obce_v_cislech.hodnoty h JOIN obce_v_cislech.ukazatele u USING (ukazatel_kod)
WHERE h.obec_kod = 586846 AND h.ukazatel_kod IN ('110900', '500020')
ORDER BY h.ukazatel_kod, h.rok;-- vlastní široký panel: obec × rok × vybrané ukazatele
PIVOT (SELECT obec_kod, rok, ukazatel_kod, hodnota FROM 'parquet/hodnoty.parquet'
WHERE ukazatel_kod IN ('110900', '110200', '110300', '160100'))
ON ukazatel_kod USING max(hodnota) GROUP BY obec_kod, rok ORDER BY obec_kod, rok;-- dokončené byty na 1000 obyvatel podle krajů v historických hranicích
SELECT r.rok, r.kraj, round(1000 * sum(b.hodnota) / sum(o.hodnota), 2) AS byty_na_1000
FROM obce_v_cislech.hodnoty b
JOIN obce_v_cislech.hodnoty o ON o.obec_kod = b.obec_kod AND o.rok = b.rok AND o.ukazatel_kod = '110900'
JOIN obce_v_cislech.obce_roky r ON r.obec_kod = b.obec_kod AND r.rok = b.rok
WHERE b.ukazatel_kod = '121800' AND b.rok BETWEEN 2015 AND 2024
GROUP BY 1, 2 ORDER BY 1, 2;Source and licence
- Sources
- ČSÚ: Databáze MOS, open data (product 330271)
- ČSÚ: Databáze MOS, documentation
- ČSÚ: MOS files (mos_data_RRRR.csv, mos_ukaz.csv, mos_uzemi.csv, mos_okruhy.csv)
- NKOD: record of the Databáze MOS dataset
- ČSÚ: code lists of territorial units (iSMS), via the csu-ciselniky dataset
- ČÚZK: RÚIAN (status and definition points of municipalities)
- Processed by
- czechdatasets.com. The data is modified and is not an official output of the authority; the required attribution is in LICENCE.txt.
Joins with
Datasets share RÚIAN codes and IČO, so one JOIN connects them.


Population of municipalities 2000–2026
Population of every Czech municipality as of 1 January 2026 and every 1 January since 2000, by sex and age group. Plus regions, districts, ORP areas and city districts, all with national (RÚIAN) codes.


ČSÚ code lists
List of Czech municipalities, regions, districts and ORP areas with their official codes, plus CZ-NACE, CZ-ISCO, CZ-CPA, CZ-NUTS, legal forms and countries with ISO codes. All versions merged into validity intervals.


RÚIAN with history
Complete RÚIAN data: Czech parcels, buildings, addresses, streets and territorial units for the whole country. The current state and every version since August 2015, month by month.
More datasets
- Address geocoder and autocomplete
- Address risks
- Companies and organisations (RES)
- Job vacancies
- Data boxes
- Medicinal products (SÚKL)
- Medicine shortages and availability
- Pharmacies with opening hours and GPS
- Healthcare facilities (NRPZS)
- Schools and school facilities
- Election results 1996–2026
- Wages by region and industry
- Free bundle
Municipalities in numbers 2000–2025 for 290 CZK.
One-time payment, download right after paying, no account and no subscription. Updates to the dataset are included in the price. All 15 paid datasets together cost 2,490 CZK, 3,510 CZK less than buying them one by one.