CoolFace
Datasetpublic

egzakutacno/deunemployment-labour-market

DeUnemployment labour-market dataset Job-posting measures derived from our own crawl of employer career sites and applicant-tracking systems. One edition per month; the files are regenerated from the same full-corpus pass that produces the public report. Edition: September 2026 (as of 2026-09-24) License: CC BY 4.0 — use it commercially, credit us DOI: 10.5281/zenodo.22865284 (Zenodo; every edition is under the concept DOI 10.5281/zenodo.22865283) Cite as: DeUnemployment… See the full description on the dataset page: https://huggingface.co/datasets/egzakutacno/deunemployment-labour-market.

sourceHugging Facecc-by-4.0updated 2d agoView on Hugging Face
0likes36downloads
Dataset Card

DeUnemployment labour-market dataset

Job-posting measures derived from our own crawl of employer career sites and applicant-tracking systems. One edition per month; the files are regenerated from the same full-corpus pass that produces the public report.

  • —Edition: September 2026 (as of 2026-09-24)
  • —License: CC BY 4.0 — use it commercially, credit us
  • —DOI: 10.5281/zenodo.22865284 (Zenodo; every edition is under the concept DOI 10.5281/zenodo.22865283)
  • —Cite as: DeUnemployment, "State of Jobs — September 2026", https://deunemployment.com/report
  • —Homepage: https://deunemployment.com/dataset
  • —Interactive version: https://deunemployment.com/report · https://deunemployment.com/data
  • —Update cadence: monthly figures, rebuilt by our daily pipeline

What is in here

FileRowsGrainWhat it answers
postings_by_role.csv158one row per role familyOne row per role family we track, with the market where that role is advertised most.
postings_by_country.csv60one row per countryOne row per country with postings: volume, pay disclosure, remote share, listing age.
postings_by_platform.csv36one row per hiring platformOne row per hiring platform (ATS/source): volume and whether the source states a publication date.
listing_age.csv12one row per measure × segmentListing-age and ghost-signal measures in long format (measure, segment, value, n).
corpus_health.csv26one row per metricCorpus size, the internal consistency audit and measured URL liveness.
edition.json1edition recordMachine-readable edition record: counts, license, citation, file list, definitions.

How the data is collected

We crawl employer career sites and applicant-tracking systems directly (a posting is read where the employer serves it, not from an aggregator's copy). Each daily pass records, per posting: employer, title, location, the description body, the publication date the source itself reports, and the timestamps on which our crawler saw it served. The monthly edition freezes that crawl into a full-corpus pass: 6,564,432 postings measured, no sampling.

Two timestamps matter and they are different things:

  • —publication_date — what the source claims. 92.83% of postings carry one.
  • —last_seen — when our crawler last got the posting served. This is our own measurement and the one that cannot be copied from a feed.

Variables

postings_by_role.csv — role (slug of the role family), postings, locations_tracked, top_location, top_location_postings.

postings_by_country.csv — country_code (ISO 3166-1 alpha-2), country, postings, pct_pay_stated, pct_remote, pct_listed_over_30d, pct_listed_over_60d, pct_listed_over_90d, median_listing_age_days. median_listing_age_days is computed for the largest markets only and is blank elsewhere — we do not interpolate.

postings_by_platform.csv — platform, postings, postings_with_publication_date, pct_with_publication_date, pct_published_within_1d, pct_pay_stated, pct_listed_over_30d, pct_listed_over_60d, pct_listed_over_90d, median_listing_age_days.

listing_age.csv — long format: measure, segment, value, unit, n, definition. n is the number of postings the measure was computed over.

corpus_health.csv — long format: section (corpus | audit | liveness), metric, value, unit, n, definition.

Known issues and limitations

  1. 1."Still listed" is a listing age, not a job opening. Any measure built on the stated publication date describes how long an ad has been up. Whether the role is still open is a different question, measured separately by probing the employer URL (see corpus_health.csv, section = liveness).
  2. 2.Publication dates come from the source and are imperfect. 7.17% of postings state none; 0.03% state a date in the future; some state a date later than the day we first saw the posting served.
  3. 3.Coverage is employer career sites and ATS platforms, not the whole labour market. Boards that hide postings behind a login or an app are not counted.
  4. 4.Role families are a fixed taxonomy, so postings_by_role.csv has 158 rows and a large other share. It is not a free-text occupation classification.
  5. 5.Country assignment is parsed from the location string and the ad body. Remote postings may be assigned to no country; 82 countries have postings in this edition.
  6. 6.Pay figures are extracted from ad text, so pct_pay_stated measures what the ad discloses, not what the job pays. Currencies and periods vary and are not converted here.
  7. 7.Blocked probes are not dead links. A WAF returning 403/429 means unknown; it is reported separately from gone.
  8. 8.This is aggregate data. The per-posting corpus is not redistributed; the tables are counts and rates. Custom cuts on request.

Methodology, verification and provenance

  • —Methodology: https://deunemployment.com/about-data
  • —Data health (coverage, date sanity, liveness): https://deunemployment.com/data-health
  • —The same figures rendered for humans: https://deunemployment.com/report
  • —Machine-readable headline report: https://deunemployment.com/report/data.json

Every file here is regenerated by scripts/build_dataset.py inside the daily build, from report.json, cross_tabs.json, data_health.json, seo_counts.json and source_date_availability.json — the tables cannot drift from the site.

Contact

Corrections, method questions and custom cuts: https://deunemployment.com/contact