CoolFace
Datasetpublic

diavgis/greek-public-procurement

Diavgis — Greek Public Procurement, cross-linked Greek public procurement is published across three official systems that do not talk to each other: Διαύγεια (administrative acts), ΚΗΜΔΗΣ (the procurement registry) and EU TED. A tender found in one cannot be followed to its award, its contract or its payment in another. This dataset is those three sources harvested, normalised and cross-linked into contract lifecycles. This is a snapshot, not a live feed. Taken 2026-08-16… See the full description on the dataset page: https://huggingface.co/datasets/diavgis/greek-public-procurement.

sourceHugging Facecc-by-4.0updated 19d agoView on Hugging Face
0likes157downloads
Dataset Card

Diavgis — Greek Public Procurement, cross-linked

Greek public procurement is published across three official systems that do not talk to each other: Διαύγεια (administrative acts), ΚΗΜΔΗΣ (the procurement registry) and EU TED. A tender found in one cannot be followed to its award, its contract or its payment in another. This dataset is those three sources harvested, normalised and cross-linked into contract lifecycles.

This is a snapshot, not a live feed. Taken 2026-08-16, covering acts issued 2026-03-01 → 2026-08-16. For current data use diavgis.gr or the free API — please don't re-crawl the site.

Files

filerowswhat it is
acts.parquet923,503one row per procurement act
entities.parquet59,290buyers and suppliers, resolved by ΑΦΜ
chains.parquet438,693which acts belong to the same lifecycle
act_cpv.parquet806,392every CPV code attached to an act, with its label
act_suppliers.parquet551,252co-awardees (framework agreements, batch payments)

2,779,130 rows in 72 MB, Apache Parquet (zstd) — readable with pandas, polars, DuckDB, Spark or the viewer above.

By source: ΚΗΜΔΗΣ 467,879 · Διαύγεια 450,628 · TED 4,996. By stage: award 282,589 · payment 264,845 · contract 162,768 · tender 135,353 · request 77,948.

Columns

  • id — ΑΔΑ for Διαύγεια, kimdis:<ΑΔΑΜ> for ΚΗΜΔΗΣ, ted:<id> for TED
  • kindrequest · tender · award · contract · payment
  • buyer_afm, supplier_afm — Greek tax IDs, join to entities.parquet
  • amount_net, amount_gross, currencyread the note below before summing
  • spend_repr1 when the amount is real spend rather than an estimate. Filter on it before summing: TED carries multi-year framework budgets that inflate totals badly
  • cpv_primary, nuts, eu_funded
  • cancelled, revoked, superseded — lifecycle state at the source
  • redacted1 when the counterparty is a private individual (see Privacy)

chains.parquet carries chain_id, act_id, role, confidence (0–1) and method — how the link was made. Filter on confidence if you need only high-certainty links.

Identifiers are strings, not numbers. A Greek ΑΦΜ can begin with 0; casting it to an integer silently corrupts it.

⚠ Amounts are VAT-inclusive more often than not

ΚΗΜΔΗΣ publishes net and gross separately, and both are carried here faithfully. Διαύγεια publishes one number and does not say which it is. Measured across 2,732 lifecycles that contain both a ΚΗΜΔΗΣ and a Διαύγεια act, ~82% of Διαύγεια amounts turn out to include VAT and nothing in the record tells you which.

  • For a consistent total use coalesce(amount_gross, amount_net) — a gross basis is the only one every source can support. That is what diavgis.gr publishes.
  • Do not test Διαύγεια amounts against the Ν.4412 thresholds (€30,000 and €60,000, both net of VAT). A €48,387 net procurement stored as its €60,000 gross reads as sitting exactly on the ceiling. Filter source = 'kimdis' for threshold work. TED values are net per Directive 2014/24/EU Art. 5(1).

Coverage over this window: TED ~98.9%, Διαύγεια ~95.9%, ΚΗΜΔΗΣ ~80.9% — treat counts as a large sample, not a census. A few records carry source typos with absurd amounts, so cap outliers if you rank anything.

Archived rows: what the archive does not keep

To keep the live database inside its size limit, payment acts are moved to a compact archive 90 days after they are harvested. Archived rows stay in acts.parquet — same schema, same row counts — but the archive keeps only part of each record, so some columns come back empty because the value is no longer kept, not because it was empty at publication. Nothing in the file itself can tell you this, which is why it is written here.

Of the 31 columns, 15 are not stored in the archive. Four of them carry real information that is genuinely lost:

columnwhat is lostfilled on live payments
region_inferredwhether nuts was published by the source (0), inferred from the buyer's registered seat (1), or could not be filled (2). On archived rows, regional analysis cannot separate published from inferred.100%
revokedsource revocation state100%
quality_flagsper-record validation flags5.6%
reconcile_flagscross-source reconciliation flags1.6%

Six more are kept or reconstructed from something the archive still guarantees: ada, source and currency follow from the record's own identifier; cancelled and superseded are always 0, because an act carrying either state is never archived; and amount_net holds the archived amount, with amount_gross always empty — the archiver refuses any act that has a gross figure, so a single amount column stays unambiguous.

The remaining columns are empty on archived rows and on live payment rows, for the ordinary reason that payments never carried them: adam, buyer_name, deadline, eu_funded, contract_budget_net, cancellation_ada, source_updated_at, amount_check and prev_ref — all measured at 0% on a sample of 5,000 live payments. esidis_id is the one borderline case: 0 of all 3,295 ΚΗΜΔΗΣ payments and 3 of 5,000 Διαύγεια payments (0.06%) carry it, so archiving it away loses almost nothing — but not literally nothing.

No rows are archived in this snapshot. This note describes what changes in later releases.

Privacy

Greek transparency law publishes payments to natural persons alongside payments to companies. This release does not reproduce that. 78,323 acts are marked `redacted = 1`: the counterparty is a private individual and supplier_afm is empty. entities.parquet and act_suppliers.parquet exclude them as well, so a left join will miss a handful of ΑΦΜs by design.

The redacted acts themselves are kept — the amount, buyer, date and CPV are legitimate public spending facts. Please do not attempt to re-identify redacted counterparties from other sources.

Licence and attribution

CC-BY 4.0. Attribute as: Diavgis — Greek public procurement dataset, https://diavgis.gr

The underlying data is the open data of Διαύγεια, ΚΗΜΔΗΣ and EU TED. This release is the harvested, normalised and cross-linked derivative.

Live access

  • Search and browse — <https://diavgis.gr>
  • REST API and documentation — <https://diavgis.gr/docs/en>
  • OCDS 1.1 feed, free and keyless (includes tender.procurementMethod) — <https://api.diavgis.gr/ocds>
  • Methodology and per-record provenance — <https://diavgis.gr/about>

Diavgis is an independent private project. It is not the Greek government portal diavgeia.gov.gr, not ΚΗΜΔΗΣ or ΕΣΗΔΗΣ, and not owned, operated or endorsed by the Greek State. It aggregates and cross-links the open data those official sources publish.