Certvas
Product · AF-TENDER

African public procurement

Helps market-entry teams and DFI analysts read public-spending flows in Zambia, South Africa and Nigeria (federal) by normalizing procurement data across publishers so they can size demand and identify suppliers before competitors do.

Tender, award and party records built directly on the Open Contracting Data Standard (OCDS) — with supplier, buyer and monthly roll-ups, and natural-person parties stripped from every published table.

Proof: 277,821 tenders · 2,253 distinct buyer names · 42,854 awards · organizations only (natural persons structurally excluded) · release dates served as of 2026-10-08: Zambia 2024-02-07 to 2026-06-11, South Africa 2024-06-13 to 2026-10-07, Nigeria (federal) 2021-05-03 to 2026-08-21 · live metrics /v1/quality-metrics/af-tender · 4 provenance guarantees

Use-case menu

What buyers do with AF-TENDER.

Demand sizing

A strategy team totals category spend by country before market entry. Output: CSV + report. Value: a defensible TAM in an afternoon.

Supplier & buyer intelligence

Rank counterparties from award and roll-up tables — who wins, who buys, at what cadence. Output: API / Parquet. Value: counterparty maps without manual collation.

Public-spend tracking

Monitor category and buyer flows as tenders publish — reallocation patterns surface in the monthly roll-ups. Output: API / MCP. Value: early reads on spending shifts.

What’s inside

Tenders, awards, parties — and the analytics on top.

Tenders

One row per ocid — title, status, category, value and buyer, sourced from the official OCDS release feed.

Awards & parties

Award values and the organizations behind them. Party records are classified; natural persons are excluded from publication.

Analytics

Pre-built supplier, buyer and monthly roll-ups so you can rank counterparties and track spend over time without rebuilding the joins.

Schema

Data dictionary (core tender table).

FieldTypeDescription
ocidstringOpen Contracting ID — globally unique process identifier.
countrystringISO country code of the procuring jurisdiction.
titlestringTender title as published.
statusenumTender status from the OCDS release.
categorystringProcurement category (goods / works / services).
value_amountnumberTender value exactly as published — NOT normalised. SA eTenders (S007) sends 0 on every release rather than omitting the field, so a 0 here means 'not disclosed', not 'no value'. The roll-up tables apply that reading: they sum only positive amounts and report NULL where a group discloses none.
value_currencystringISO currency of the value, as published; may be stated even where no amount is. In the roll-up tables this column reports 'MIXED' when a group spans more than one currency, and the group's total is NULL — values are never summed across currencies and no FX conversion is applied.
release_datedateOCDS release date.
namestringParty name exactly as published, in gold_tender_party_published. MAY BE EMPTY: three of 3,831 parties in the SA eTenders feed (S007) carry a party_id and a role but no name, and that is reproduced rather than filled or dropped. An invented name would be fabrication and a dropped row would silently lose an otherwise complete award record, so the blank is carried as the fact it is. Natural persons are excluded from this table entirely — a blank name is a publisher omission, not a suppression.
buyer_namestringProcuring entity (organization only).
source_refstringReference back to the OCDS release package.
license_classstringLicense Register code (OCDS feed is openly licensed).
value_checkstringHow far to trust an award's value_amount. Five flags, on which nothing is removed: shared_contract_value, two or more different suppliers on the tender carry this identical value, usually a panel contract's ceiling repeated per supplier (equal lots also match), so it is left out of every award total; over_10x_tender, more than ten times its own tender's published value; large_share_of_total, 5% or more of all award value in its country and currency; no_tender_value, the tender published no value to compare; consistent_with_tender, otherwise. Ten times is a flag, not proof: many tender values are unit prices. withheld: value_amount is NULL because Certvas withheld it by a recorded decision on the publisher's own record (pipelines/tenders/award_value_withheld.yml); the award, supplier and dates remain. NULL when the award has no value.
value_withheldbooleangold_tender only: true when the tender's value_amount is NULL because Certvas withheld it by a recorded decision on the publisher's own record (pipelines/tenders/award_value_withheld.yml, withheld_tender_values). The tender, its buyer and its dates remain.
dataco_idstringCertvas ID of the listed issuer (gold_issuer_award, gold_entity_served); joins AF-FUND's dataco_id.
match_methodstringHow an award's supplier was linked to the issuer: via_lei (the supplier resolves to the issuer's GLEIF-verified LEI), strict_name (the same legal name in the same country), or both joined by '+'. A supplier matching two issuers is not linked.
leistringISO 17442 Legal Entity Identifier, where GLEIF confirms one for the issuer; NULL for an issuer with no GLEIF record (common on the smaller African exchanges).
legal_namestringThe issuer's legal name (GLEIF's where it has an LEI, else the listing's).
entity_typestringcompany, fund, gov_body or other. Sole proprietors are never carried.
jurisdictionstringJurisdiction of registration, ISO 3166 (e.g. ZA, NG, KE-30).
entity_statusstringRegistration status as GLEIF reports it (ACTIVE / INACTIVE); NULL for seed issuers.
registry_idsstringJSON object of home-registry identifiers from GLEIF ({authority: id}); NULL when none.

Party tables carry a party_type classification (organization / natural_person / unknown). Only organization parties reach the published product — enforced in the model layer, not by convention.

Try before you buy

Validate the OCDS lineage yourself.

Like every Certvas product, AF-TENDER ships with its dictionary, a provenance annex and a measured metrics file. The free sample lets you validate the OCDS lineage and the natural-person exclusion for yourself.

Machine-readable data contract: af-tender.yaml (Data Contract Specification 1.1.0) — the schema, licence terms and release quality floors, generated from the registers that gate every build.