Who actually wins the contract.
For every country × category × month of African public procurement, how the awarded work was split across winning suppliers: the Herfindahl–Hirschman index by award value and by award count, the top supplier’s share, the effective number of competing suppliers, and the repeat-winner rate. A cell where one supplier takes most of the value month after month is the classic single-source pattern; a cell with many small winners is a genuinely contested market.
Grain: country × category × month · point-in-time (observed_at) · licence-clean OCDS (SA eTenders S007, Zambia ZPPA S043) · also via cv.signals.tender_award_concentration() and /v1/signals/certvas-tender-award-concentration-v1 · 4 provenance guarantees
Panel dictionary.
| Field | Type | Description |
|---|---|---|
country / category / month | string | The cell. category is the OCDS procurement category (goods, services, works) or unclassified; month is YYYY-MM. |
award_count / tender_count | integer | Awards in the cell, and the distinct tenders behind them (one tender split across several winners counts once). |
supplier_count | integer | Distinct winning suppliers. |
new_supplier_count | integer | Winners with no earlier win in the same country & category — new entrants. |
supplier_hhi | number | Herfindahl–Hirschman index of award counts, 0–10000 (same convention as the Procurement-Demand Signal). |
supplier_hhi_value | number | HHI of award value — the headline concentration read. Null when the cell discloses no value or mixes currencies. |
effective_supplier_count | number | 10000 / supplier_hhi — the numbers-equivalent: how many equally-sized suppliers this cell behaves like. |
top_supplier | string | The largest winner by value (by award count where no value is disclosed), named exactly as published. |
top_supplier_value_share_pct | number | Its share of the cell’s award value. Null when value is unusable (see caveats). |
top_supplier_award_share_pct | number | Its share of the cell’s award count — always available. |
repeat_winner_rate_pct | number | Share of awards won by suppliers that already won in a strictly earlier month of the same country & category — the incumbency read, past-only. |
total_award_value / currency | number / string | Nominal as-published award value, published only for single-currency cells. MIXED cells report the flag and a null value. |
value_disclosed_pct | number | Share of the cell’s awards carrying a positive value — read the value metrics against this. |
award_date_coverage_pct | number | Share of awards bucketed by a real award date rather than the tender’s release month (see below). |
thin_cell | boolean | true below 5 awards — mechanically concentrated, filter before reading a competition level. |
observed_at | date | Latest award observation in the cell — the point-in-time anchor. |
Honest coverage: the SA eTenders OCDS feed publishes no award date, so month falls back to the tender’s release month — award_date_coverage_pct reports that split per cell, and the signal switches to true award dates automatically as publishers carry them. Awards are backfilled long after release, so a cell becomes knowable at observed_at, not at month-end: backtest on observed_at <= as_of. Suppliers are grouped by their published name with no normalisation or entity resolution, so name variants of one legal entity count separately — every HHI here is a lower bound on real concentration. Values are nominal, unaudited and never summed across currencies. Concentration is an evidence-gathering screen, not a finding of wrongdoing: a concentrated cell can equally reflect a specialised market, a framework agreement or one large contract.