Skip to content
czechdatasets

Czech job vacancies with employer IČO and daily history

Some 37 thousand postings and 100 thousand vacancies from the Czech Labour Office in one table: occupation (CZ-ISCO), wage range, hours, shifts, required education, the employer’s company ID (IČO) and the workplace with address point code and GPS. Plus a daily history the state does not keep: when each posting was open.

Free sample

One-time payment, final price for a personal licence, switch to business at checkout · data as of 10 November 2026

An island with a builder’s yard: a half-built brick wall with scaffolding and a ladder, a wheelbarrow, a workbench and, by the door, pegs with work jackets and hard hatsAn island with a builder’s yard: a half-built brick wall with scaffolding and a ladder, a wheelbarrow, a workbench and, by the door, pegs with work jackets and hard hats

How much work it saves

Saving the export of MPSV, the Czech ministry of labour, every day, parsing 186 MB of nested JSON, expanding 13 code lists into text and checking address point codes against RÚIAN, the Czech register of addresses, buildings, parcels and territorial units (95% of the establishment addresses of legal entities have GPS). Then separating legal entities from natural persons with the help of RES, the register of economic entities of the Czech Statistical Office (ČSÚ), and assembling the history of postings from the snapshots. Contact persons, e-mails, phone numbers and free text are not in the dataset, and neither are postings by natural persons (only their summary counts).

Measured on our own build

Lines of code and tests
2,088
AI agent tokens
22m
AI agent run time
62 mins

Tokens and time cover the first working version of the code, written with Claude Fable 5.2. 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
10 November 2026
Rows
186,364
Tables
10
Formats
PostgreSQL, Parquet, CSV, JSON
Source licence
Free use (NKOD); RES and RÚIAN CC BY 4.0

What’s inside

Job vacancies from the register of the Labour Office of the Czech Republic, posted by employers that are legal entities: occupation by CZ-ISCO, wage range, working hours, shift pattern, required education, the employer’s IČO and the workplace with a RÚIAN address point code and coordinates. Plus a daily history of postings, which the source does not keep, and summary counts for the whole source. No contact persons and no free text; postings by employers who are natural persons are not in the dataset.

TableRows
volna_mistaJob vacancies from the latest snapshot: one row = one posting (it may offer several vacancies)36,836
volna_mista_okresyDistricts of the place of work: every posting with a known district has at least one row; a posting given as a list of districts has one row per district66,819
volna_mista_jazykyRequired language skills (row = posting × language)2,463
volna_mista_dovednostiRequired skills from the MPSV code list, e.g. a driving licence or a welder’s certificate (row = posting × skill)7,207
volna_mista_vyhodyBenefits offered, from the MPSV code list (row = posting × benefit)17,413
zamestnavateleEmployers that are legal entities verified in RES and had a posting in any snapshot. No natural persons here16,250
volna_mista_historieHistory of postings from all daily snapshots: one row = one posting, the first and the last snapshot in which it was seen, and key attributes from its last occurrence37,225
snimkyDaily snapshots of the source that the dataset is built from: counts of postings and vacancies in the source, in the dataset and left out (postings by natural persons and by unverified employers are not in the dataset), additions and removals2
snimky_okresyCounts of postings and vacancies by district in each snapshot: in the source, in the dataset and left out (natural persons and unverified employers together)154
cz_iscoThe CZ-ISCO classification of occupations from the MPSV code list, all five levels with a link to the parent code1,995

The register contains only the vacancies that employers have reported to the Labour Office; it is not the whole labour market. The history starts on 9 November 2026 and grows every day.

Downloads

Every format contains the same data. Download only the one you need; verify its integrity with the SHA256SUMS file.

FormatFilesSize
PostgreSQLschema.sql with types, keys, indexes and comments, and import.sh, which loads the data from CSV225 kB
ParquetOne file per table (zstd). DuckDB, Polars and pandas read it without an import.103.2 MB
CSVUTF-8, comma-separated, with a header; large tables as .csv.gz1012 MB
JSONAn array of objects; large tables as JSON Lines (.jsonl.gz)1027 MB

Code example

More examples for SQL, DuckDB, Python and Node.js are in the README.md inside the bundle.

Who is hiring the most people right nowPostgreSQL
-- kdo teď nabírá nejvíc lidí
SELECT ico, nazev, pravni_forma, pocet_nabidek, pocet_mist
FROM volna_mista.zamestnavatele
ORDER BY pocet_mist DESC LIMIT 20;
Median wage by occupation in a districtPostgreSQL
-- medián nabízené měsíční mzdy podle profese v okrese Brno-město (3702)
SELECT v.profese_kod, v.profese, count(*) AS nabidek, sum(v.pocet_mist) AS mist,
       percentile_cont(0.5) WITHIN GROUP (ORDER BY v.mzda_od) AS median_mzda_od
FROM volna_mista.volna_mista v
JOIN volna_mista.volna_mista_okresy o USING (id)
WHERE o.okres_kod = 3702 AND v.typ_mzdy_kod = 'mesic' AND v.mzda_od >= 5000
GROUP BY 1, 2 HAVING count(*) >= 5
ORDER BY median_mzda_od DESC;
Industries that are hiring (with the Companies dataset)PostgreSQL
-- se sadou firmy: v jakých oborech (CZ-NACE) se nabírá v Jihomoravském kraji
SELECT f.nace_hlavni, count(DISTINCT v.ico) AS firem, sum(v.pocet_mist) AS mist
FROM volna_mista.volna_mista v
JOIN firmy.firmy f USING (ico)
WHERE v.kraj_kod = 116
GROUP BY 1 ORDER BY mist DESC LIMIT 15;

Job vacancies with history for 490 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.