Find a Tender Records
A Guide to the Dataset
September 2026
1. Overview
This dataset provides award-level records of public contracts awarded under the Procurement Act 2023 and published on Find a Tender, the UK government's central digital platform for procurement notices, enriched with the project's classification of who won each contract. It was produced by the UK Third and Civil Society Sector Database project, which collects, processes and links public administrative data on civil society organisations throughout the UK.
The file covers awards to all suppliers. Civil society winners (registered charities, community interest companies, co-operatives and mutuals, and other nonprofit companies) are identified by matching the published registry identifier, and where none is published the supplier name and postcode, to the TCSS Organisation Register; a matched winner carries the organisation's spine_uid. Retaining every award is what makes it possible to measure civil society's share of the market, the procurement routes through which civil society organisations win contracts, and the competition they face.
The dataset contains 46,956 awarded contracts from 1,829 public buyer organisations, naming 30,133 distinct suppliers. 4,162 awards (8.9%) have at least one winner that is a register-confirmed civil society organisation; 2,568 such organisations appear. The awards are dated from 2025-02-24 (the day the Act commenced) to 2026-07-30, drawn from the Find a Tender bulk release of 2026-08-04.
Related dataset. The project's Contracts Finder Records cover awards published on Contracts Finder from 2015 under the Public Contracts Regulations 2015. This dataset begins where that regime ends: the Procurement Act 2023 commenced on 24 February 2025 and its notices are published on Find a Tender. The two platforms use different notice structures, identifiers and value conventions, so the two datasets should be analysed side by side rather than appended into one series.
2. What is Find a Tender?
Find a Tender is the platform on which UK contracting authorities publish the notices the Procurement Act 2023 requires: planning notices (UK1 to UK3), tender notices (UK4), award notices (UK5 and UK6), contract details notices (UK7) and, for below-threshold procurements, a shorter set of notices. Notices are published as Open Contracting Data Standard (OCDS) releases and compiled per procurement process (an ocid). A process may carry one award or many (one per lot, or one per supplier admitted to a framework), and each award may be linked to a contract details record that publishes the signed value, dates and period.
How the data were collected
The whole Find a Tender OCDS bulk release was downloaded on 2026-08-04 (197,638 compiled releases carrying 252,611 award objects). Every award object was extracted with its tender, lot, party, contract and bid-statistics context. Awards were then kept only where the process is governed by the Procurement Act 2023 and the award is concluded, and a further set of exclusions described in Appendix A2 removed dynamic-market admissions (membership of a supplier list rather than a contract), awards dated before the Act commenced, awards with no winner, duplicate cumulative records and awards whose winners are all outside the UK.
How the data were enriched
Three kinds of enrichment are added to the source records. First, each award's route to award, value, dates, period and threshold position are resolved from the award object and its linked contract object by stated rules, with the object that supplied each value recorded in a _source column and known hazards carried as flags rather than corrected. Second, each buyer is classified into a funder type (UK Government, Local Government, NHS and so on) and a nation, using the same typology as the project's other procurement datasets. Third, every winning supplier is matched to the TCSS Organisation Register (the Spine): by published identifier first, then by exact name and postcode, then through a reviewed name-and-postcode pipeline for the remainder. A matched supplier receives cso_status = CSO and its spine_uid; a supplier that publishes a usable identifier not found in the register is non-CSO; a supplier with neither is unresolved. Appendix A3 describes the tiers.
3. Dataset Contents
The dataset is supplied as two CSV files and a column manifest.
| File | Grain | Rows | Columns |
|---|---|---|---|
findatender-awards.csv | One row per awarded contract (ocid × award_id) | 46,956 | 107 |
findatender-award-suppliers.csv | One row per winning organisation per award (ocid × award_id × supplier_id) | 72,155 | 21 |
findatender-column-manifest.csv | One row per released column: file, position, name, internal source column, class, missingness and distinct values | 128 | 8 |
The awards file carries the winners inline (winner_supplier_ids, winner_supplier_names, winner_spine_uids and the verdict counts), so most analyses need only that file. The supplier file is for work at organisation grain: who the winners are, what identifiers they published, and the evidence behind each civil society verdict. Column names are lower snake case; where a value was resolved from more than one notice object, the bare name is the value to use and its _source companion says which object supplied it.
Values. value_gbp is the gross (VAT-inclusive) value as published, in pounds, blank where no usable value was published. It is not spend: framework establishments carry a ceiling for the whole arrangement, multi-award processes may stamp one process total on every award (value_repeat_group) or divide the estimate equally among the winners (value_equal_split), and buyers occasionally publish a zero or a mis-keyed figure. Filter or flag before any sum; Section 6 sets out the hazards.
Awards file (findatender-awards.csv)
Keys and release metadata
| Field | Description | Type | Coverage |
|---|---|---|---|
ocid | Open Contracting process id — one per procurement process | Text | 100% |
award_id | Award id within the process | Text | 100% |
award_notice_url | Source link: the public Find a Tender notice page for this award - the award object's link, else the linked contract object's UK7 notice link (contract_notice_url), else an award/contract-type (UK5-UK7) link on the tender object (tender_award_notice_url). award_notice_url_source = "award" / "contract" / "tender"; both NA where no home carries a notice link | Text | 100% |
award_notice_url_source | Which notice object supplied award_notice_url: award, contract or tender | Text | 100% |
tender_notice_url | The process's tender-stage notice page on Find a Tender, where one was published | Text | 25.9% |
tender_status | Tender status ("active"/"complete") | Text | 100% |
release_date | Date the compiled OCDS release was produced | Date | 100% |
Route to award and process structure
| Field | Description | Type | Coverage |
|---|---|---|---|
related_process_ocids | ocids of related processes (for a call-off, the parent framework), ';'-joined | Text | 2.1% |
related_process_relationships | Relationship type(s) to the related processes, ';'-joined; 'framework' marks the call-off link | Text | 2.1% |
procurement_method | OCDS method class (open / selective / limited / direct; NA on most below-threshold-unknown rows) | Text | 89.1% |
procurement_method_details | The route taxonomy (11 values): Open procedure, Competitive flexible procedure, Direct award, Award under framework, Dynamic market, and the below-threshold classes (open / limited / without competition / under framework / by reference to dynamic market / unknown). Never NA | Text | 100% |
technique_framework | The process establishes or uses a framework agreement (FALSE where the source omits the flag) | Boolean | 100% |
technique_dynamic_market | Same for dynamic markets (hasDynamicPurchasingSystem): the procurement used a dynamic market. Admissions to a market (a UK13 dynamic market notice in the process) are dropped as cascade step 2b; TRUE on a surviving row marks a contract awarded through a dynamic market, a route to award in its own right | Boolean | 100% |
framework_establishment | Model indicator ≡ technique_framework: the award sets a framework up (its value is a ceiling, not spend) | Boolean | 100% |
framework_calloff | Award is a call-off under a parent framework, identified structurally via relatedProcesses | Boolean | 100% |
n_lots | Number of lots on the tender | Numeric | 100% |
award_related_lots | Lot id(s) this award covers (';'-joined). Also the unit key for the roll-up de-duplication: ocid × this raw string | Text | 100% |
Text and sector (CPV)
| Field | Description | Type | Coverage |
|---|---|---|---|
tender_title | Tender title (one per process) | Text | 100% |
tender_description | Tender description text, one per process; near-universal coverage | Text | 100% |
cpv | one main CPV per award, award-level preferred (full 8-digit code; complete) | Text | 100% |
cpv_source | Which home supplied cpv ("award"/"tender") | Text | 100% |
cpv_division | First two digits of cpv | Text | 100% |
award_cpv_all | CPV code(s) from awards[].items[] (direct-award / below-threshold records) | Text | 100% |
goods_contract | TRUE = CPV division 03–44 or 48 (a contract FOR goods); FALSE = works (45) / services (49–98) | Boolean | 100% |
VCSE/SME suitability and reservation (tender-stage declarations)
| Field | Description | Type | Coverage |
|---|---|---|---|
has_suitability_object | Any lot carries the suitability checkbox object (NA when the notice types never collect it — missing is NOT false) | Boolean | 100% |
any_lot_sme_suitable | Buyer marked any lot suitable for SMEs / VCSEs (NA when no suitability object) | Boolean | 23.3% |
any_lot_vcse_suitable | Buyer marked any lot suitable for SMEs / VCSEs (NA when no suitability object) | Boolean | 23.3% |
reserved_participation | Reservation codes: smeVcse (below-threshold SME/VCSE reservation), shelteredWorkshop (s.32), publicServiceMissionOrganization (s.33 public-service mutuals) | Text | 0.6% |
reserved_location_scheme | Geographic reservation (GB-ONS gazetteer; K02000001 = UK-wide, i.e. no restriction) | Text | 1.6% |
reserved_location_codes | Geographic reservation (GB-ONS gazetteer; K02000001 = UK-wide, i.e. no restriction) | Text | 1.6% |
reserved_location_desc | Geographic reservation (GB-ONS gazetteer; K02000001 = UK-wide, i.e. no restriction) | Text | 0.3% |
Buyer
| Field | Description | Type | Coverage |
|---|---|---|---|
buyer_org_id | Buyer organisation id: notice-level buyer ids that share a registry identifier are merged into one organisation | Text | 100% |
buyer_name | Buyer name as published on the notice; filled from the buyer lookup's canonical name where the notice published none | Text | 100% |
buyer_postcode | Buyer postcode as published | Text | 100% |
buyer_region | Buyer region as published | Text | 100% |
buyer_nation | England / Scotland / Wales / Northern Ireland / Unknown — the England filter variable (kept as a variable at prep; England-only is an analysis-stage rule) | Text | 100% |
buyer_type | Programme funder-type typology: UK Government / Local Government / NHS / Education Institution / Police, Fire and Rescue / CSO / Private Sector / Other | Text | 100% |
buyer_type_detail | Finer buyer type within buyer_type | Text | 100% |
buyer_lg_subtype | Local-government subtype (county, district, London borough, unitary, combined authority, town or parish council); blank for other buyers | Text | 42.2% |
buyer_lg_ons_code | ONS code of the local authority, where identified | Text | 40.1% |
buyer_in_spine | The buyer matches the TCSS Organisation Register | Boolean | 100% |
buyer_spine_uid | The buyer's register uid, where it matches | Text | 11.5% |
Notices and dates
| Field | Description | Type | Coverage |
|---|---|---|---|
first_notice_type | Notice type of the first notice of the process (UK1 to UK7 codes) | Text | 100% |
first_notice_published | Publication date of the first notice of the process | Date | 100% |
award_date | The award date to use: the award object's date, else the contract signature date, else the notice publication date, else the release date | Date | 100% |
award_date_source | Which date supplied award_date: award, signed, notice or release | Text | 100% |
award_date_raw | The date on the award object itself, blank where the object carries none | Date | 30.2% |
award_notice_published | Earliest publication date of an award notice (UK5/UK6) for the award | Date | 31.2% |
date_signed | Contract signature date, where published | Date | 88.1% |
notice_date_published | Publication date of the contract details notice (UK7), where one exists | Date | 88.1% |
Contract record linkage
| Field | Description | Type | Coverage |
|---|---|---|---|
contract_id | Id of the linked contract details record (UK7), where one exists | Text | 88.5% |
contract_status | Status of the linked contract details record; blank where none has been published | Text | 88.5% |
contract_cancelled | The linked contract record is cancelled | Boolean | 100% |
contract_terminated | The linked contract record is terminated | Boolean | 100% |
Values
| Field | Description | Type | Coverage |
|---|---|---|---|
value_gbp | The analysis value: gross value iff resolved currency is GBP and not a reported zero; NA otherwise (no currency conversion). Strictly positive where present. Framework-ceiling interpretation stays in the separate flags | Numeric | 99.4% |
value_non_gbp | The resolved value is in a currency other than pounds sterling (value_gbp is then blank) | Boolean | 100% |
value_zero_reported | TRUE when a value IS reported and equals 0 — buyer chose not to state; treated as missing | Boolean | 100% |
value_repeat_group | Same buyer + title + value + signing date appears on >1 row (multi-award processes stamping one process total, framework establishments) — de-duplicate before any sum | Boolean | 100% |
value_equal_split | TRUE when the award's value is the process (or lot) estimate divided equally among the winners: all valued awards of the unit share one value, at least two awards, and n × value equals tender_value_amount (or lot_value_amount_total) within 0.5% on the published net figure. An accounting convenience, not the value of the individual contract; flagged, never altered. Logical, never NA; FALSE where value_gbp is NA | Boolean | 100% |
value_contract_shared | TRUE when the linked contract's value is carried by more than one award of the same process, so it cannot be specific to this award. Logical, never NA | Boolean | 100% |
value_contract_award_conflict | The award object and its linked contract object both publish a value and the two disagree; reported, not reconciled | Boolean | 100% |
value_source | Which object supplied the value: contract, or award where the contract value is shared across awards of the process | Text | 100% |
tender_value_amount | The buyer's estimated total value for the whole process, net, as published (a published zero is blanked) | Numeric | 21.7% |
tender_value_amount_gross | The buyer's estimated total value for the whole process, gross, as published | Numeric | 25.7% |
tender_value_currency | Currency of the process estimate | Text | 26.1% |
lot_value_amounts | Estimated value of each of the award's lots, ';'-joined in award_related_lots order, as published | Text | 21.4% |
lot_value_amount_total | Sum of the related lots' estimated values (net), only where every related lot carries one | Numeric | 21.0% |
lot_value_amount_gross_total | Sum of the related lots' estimated values (gross), only where every related lot carries one | Numeric | 25.1% |
lot_value_currency | Currency of the related lots' estimated values | Text | 25.8% |
n_related_lots_valued | How many of the award's related lots carry an estimated value | Numeric | 100% |
estimate_zero_reported | TRUE when any of the four estimate columns above was published as exactly 0 — the buyer did not state an estimate; the zero is blanked in all four, exactly as value_zero_reported / value_gbp. Logical, never NA | Boolean | 100% |
Periods and durations
| Field | Description | Type | Coverage |
|---|---|---|---|
contract_period_start | Contract start date on the award object | Date | 31.2% |
contract_period_end | Contract end date on the award object | Date | 31.2% |
contract_period_max_extent | Latest possible end date including extension options, on the award object | Date | 15.1% |
contract_period_start_c | Contract start date on the contract details record | Date | 88.1% |
contract_period_end_c | Contract end date on the contract details record | Date | 88.1% |
contract_period_max_extent_c | Latest possible end date including extension options, on the contract details record | Date | 19.7% |
period_start | Contract start date to use (contract record preferred, start and end taken from the same object) | Date | 100% |
period_end | Contract end date to use (same object as period_start) | Date | 100% |
period_source | Which object supplied the period: contract or award | Text | 100% |
duration_days | period_end minus period_start, in days | Numeric | 100% |
duration_max_days | Duration to the latest possible end including extension options, in days | Numeric | 24.7% |
duration_placeholder | The period is zero days long and starts on the signing date: a form date entered in both period fields | Boolean | 100% |
duration_over_10y | The period exceeds ten years | Boolean | 100% |
Threshold position
| Field | Description | Type | Coverage |
|---|---|---|---|
above_threshold | The award is above the Act's threshold, as published (contract record preferred, award object fallback) | Boolean | 100% |
above_threshold_source | Which object supplied above_threshold: contract or award | Text | 100% |
Winners and the civil society outcome
| Field | Description | Type | Coverage |
|---|---|---|---|
n_suppliers | Number of winning organisations on the award after de-duplication: one row per organisation, each organisation credited once per lot. Equals the number of ids in winner_supplier_ids (withheld winners excepted); can reach hundreds on framework panels | Numeric | 100% |
n_cso_suppliers | Winners that are register-confirmed civil society organisations (UK rows) | Numeric | 100% |
n_noncso_suppliers | Winners with a usable identifier not found in the register (UK rows) | Numeric | 100% |
n_unresolved_suppliers | Winners with no usable identifier and no name match (UK rows) | Numeric | 100% |
n_nonuk_suppliers | Winners whose published country is not the United Kingdom (no verdict). n_cso_suppliers, n_noncso_suppliers, n_unresolved_suppliers and this column sum to n_suppliers | Numeric | 100% |
any_cso_supplier | At least one winner is a register-confirmed civil society organisation: the outcome variable | Boolean | 100% |
all_cso_suppliers | Every UK winner is a CSO (≥1 UK winner on every award after step 9) | Boolean | 100% |
any_vcse_declared | ≥1 winner self-declares VCSE (parties[].details.vcse); three-valued — missing stays NA. Self-declaration is a measured signal, NEVER the classifier | Boolean | >99.9% |
any_sme_declared | ≥1 winner resolves as SME (OCP rule at (ocid, supplier_id): any sme tag wins, else large; three-valued) | Boolean | 100% |
winner_supplier_ids | Who won, without a join: the supplier_id of every winner, ';'-joined where n_suppliers > 1 (one value on single-winner awards). supplier_id is the stable surrogate key of the supplier file and lookup; withheld suppliers (s.94) have no id and are omitted, so an award whose only winner is withheld is NA. | Text | 99.9% |
winner_supplier_names | The published name of every winner in winner_supplier_ids, in the same order, ' \| '-joined (published names contain ';'); built in the same step as the ids. A winner whose published name is blank (identified by identifier only) carries the token "(name not published)". NA iff the ids are NA | Text | 99.9% |
winner_spine_uids | Spine uid of every CSO winner (UK rows), ';'-joined; NA when no winner is a CSO. Joins to the TCSS Organisation Register | Text | 8.9% |
Bid statistics (published by rule on competed above-threshold awards)
| Field | Description | Type | Coverage |
|---|---|---|---|
bids_finalStageBids | Number of final-stage bids, as published (competed above-threshold awards) | Numeric | 20.8% |
bids_smeFinalStageBids | Final-stage bids from SMEs, as published | Numeric | 20.9% |
bids_vcseFinalStageBids | Final-stage bids from voluntary, community and social enterprises, as published | Numeric | 21.2% |
Named bidders (published only above £5 million)
| Field | Description | Type | Coverage |
|---|---|---|---|
has_bidder_details | Release carries named bidders; all counts below are NA (not 0) when FALSE | Boolean | 100% |
n_bidders_identified | Distinct bidder organisations identified in the published bidder list | Numeric | 6.0% |
n_cso_bidders_identified | Named bidders that are register-confirmed civil society organisations | Numeric | 6.0% |
n_noncso_bidders_identified | Named bidders with a usable identifier not found in the register | Numeric | 6.0% |
any_cso_bidder_identified | At least one named bidder is a civil society organisation | Boolean | 6.0% |
n_joint_bids | Joint (multi-organisation) bids | Numeric | 6.0% |
Supplier file (findatender-award-suppliers.csv)
Keys and release metadata
| Field | Description | Type | Coverage |
|---|---|---|---|
ocid | Open Contracting process id — one per procurement process | Text | 100% |
award_id | Award id within the process | Text | 100% |
Keys and identity as published
| Field | Description | Type | Coverage |
|---|---|---|---|
supplier_name | Supplier name as published | Text | 100% |
identifier_scheme | Scheme of the primary registry identifier as published (GB-COH, GB-CHC, GB-PPON and so on) | Text | 74.2% |
identifier_id | Primary registry identifier as published | Text | 74.3% |
additional_identifiers | Further registry identifiers as published, ';'-joined scheme:id pairs, including the identifiers of duplicate rows collapsed into this one (a row kept under its company number also carries the PPON the discarded row published) | Text | 36.7% |
supplier_postcode | Supplier postcode as published | Text | 100% |
supplier_region | Supplier region as published | Text | 100% |
supplier_country | Supplier country as published | Text | 100% |
supplier_uk | Published supplier_country is "United Kingdom". FALSE rows keep their id but carry no CSO verdict | Boolean | 100% |
supplier_scale | Self-declared scale on this row ("sme"/"large"; raw). On a row that absorbed collapsed duplicates the declarations are folded: any "sme" wins, else "large", else blank | Text | 100% |
supplier_vcse | Self-declared VCSE flag on this row (tier 0 — measured, never the classifier). On a row that absorbed collapsed duplicates: TRUE if any folded row declared TRUE, FALSE only if all declared FALSE, else NA | Boolean | 100% |
supplier_withheld | Identity withheld under s.94 — no stable id possible | Boolean | 100% |
Civil society identification
| Field | Description | Type | Coverage |
|---|---|---|---|
cso_status | The civil society verdict: CSO, non-CSO or unresolved; blank on suppliers outside the UK | Text | 99.2% |
spine_uid | The organisation's uid in the TCSS Organisation Register, on civil society rows; the key for linking to the project's other datasets | Text | 7.7% |
spine_name | Registered name of the matched organisation | Text | 7.7% |
spine_cso_type | Organisation type from the register (Charity, CIC, Co-operative/Mutual, Other CSO) | Text | 7.7% |
spine_cso_subtype | Finer organisation type from the register | Text | 7.7% |
spine_is_cic | The matched organisation is a community interest company | Boolean | 7.7% |
Stable ids and SME status
| Field | Description | Type | Coverage |
|---|---|---|---|
supplier_id | Stable surrogate key, one per organisation: civil society rows grouped by register uid, others by their published identifiers or name; blank where the identity was withheld | Text | 99.8% |
supplier_sme_resolved | Scale resolved within (ocid, supplier_id) — any sme tag wins, else large | Boolean | 100% |
4. Coverage & Completeness
Core Field Coverage
Keys, route, buyer type and the main CPV code are present on every award. A value is missing on 290 awards (0.6%) that published no usable figure. Bid statistics are published by rule only on competed above-threshold awards, so their coverage reflects the notice rules rather than data quality: 9,778 awards carry a final-stage bidder count and 2,800 carry a named bidder list.
Scope by Buyer Nation
The dataset is UK-wide. Scotland and, in part, Wales and Northern Ireland run their own procurement portals under devolved rules, so their buyers appear here only where a notice was published on Find a Tender under the Act. buyer_nation carries the nation; an England-only analysis filters on it.
| Buyer nation | All awards | Share | Awards with a CSO winner | CSO share within group | Share of CSO awards |
|---|---|---|---|---|---|
| England | 43,301 | 92.2% | 3,793 | 8.8% | 91.1% |
| Wales | 2,466 | 5.3% | 292 | 11.8% | 7.0% |
| Northern Ireland | 1,079 | 2.3% | 75 | 7.0% | 1.8% |
| Scotland | 96 | 0.2% | 2 | 2.1% | 0.0% |
| Unknown | 14 | 0.0% | 0 | 0.0% | 0.0% |
Who Buys: Buyer Type Distribution
| Buyer type | All awards | Share | Awards with a CSO winner | CSO share within group | Share of CSO awards |
|---|---|---|---|---|---|
| Local Government | 19,818 | 42.2% | 2,452 | 12.4% | 58.9% |
| UK Government | 9,885 | 21.1% | 791 | 8.0% | 19.0% |
| NHS | 7,935 | 16.9% | 485 | 6.1% | 11.7% |
| CSO | 3,934 | 8.4% | 133 | 3.4% | 3.2% |
| Education Institution | 2,788 | 5.9% | 162 | 5.8% | 3.9% |
| Police, Fire and Rescue | 1,416 | 3.0% | 109 | 7.7% | 2.6% |
| Other | 1,001 | 2.1% | 20 | 2.0% | 0.5% |
| Private Sector | 179 | 0.4% | 10 | 5.6% | 0.2% |
Routes to Award
procurement_method_details is the route taxonomy: the competitive procedures of the Act (open, competitive flexible), direct award, award under a framework, award through a dynamic market, and the below-threshold classes. The civil society share within each route is the first descriptive answer to the question of how civil society organisations win public contracts.
| Route to award | All awards | Share | Awards with a CSO winner | CSO share within group | Share of CSO awards |
|---|---|---|---|---|---|
| Below threshold - without competition | 18,024 | 38.4% | 1,817 | 10.1% | 43.7% |
| Below threshold - limited competition | 8,385 | 17.9% | 309 | 3.7% | 7.4% |
| Open procedure | 6,250 | 13.3% | 892 | 14.3% | 21.4% |
| Below threshold - unknown | 5,112 | 10.9% | 344 | 6.7% | 8.3% |
| Below threshold - open competition | 4,406 | 9.4% | 396 | 9.0% | 9.5% |
| Direct award | 2,290 | 4.9% | 227 | 9.9% | 5.5% |
| Competitive flexible procedure | 1,604 | 3.4% | 130 | 8.1% | 3.1% |
| Below threshold - award under framework | 487 | 1.0% | 16 | 3.3% | 0.4% |
| Award under framework | 391 | 0.8% | 31 | 7.9% | 0.7% |
| Below threshold - by reference to dynamic market | 7 | 0.0% | 0 | 0.0% | 0.0% |
Who Wins: Supplier Verdict Distribution
Verdicts are given on UK supplier rows only. A supplier whose published country is not the United Kingdom cannot be classified against a UK register and carries a blank verdict (562 rows on 264 awards, mostly large framework panels with overseas members).
| Verdict (cso_status) | Supplier rows | Share of rows | Distinct suppliers |
|---|---|---|---|
| non-CSO | 65,907 | 91.3% | 27,361 |
| CSO | 5,551 | 7.7% | 2,568 |
| (non-UK, no verdict) | 562 | 0.8% | 203 |
| unresolved | 135 | 0.2% | 12 |
Which Registers the Civil Society Winners Come From
| Prefix | Source register | CSO winner rows | Distinct organisations | Share of CSO winner rows |
|---|---|---|---|---|
| GB-CHC | Charity Commission for England & Wales | 3,575 | 1,573 | 64.4% |
| GB-COH | Companies House | 1,545 | 832 | 27.8% |
| GB-MPR | Mutuals Public Register (FCA) | 273 | 97 | 4.9% |
| GB-SC | Office of the Scottish Charity Regulator | 68 | 28 | 1.2% |
| GB-NIC | Charity Commission for Northern Ireland | 48 | 28 | 0.9% |
| GB-COOP | Co-operatives UK | 42 | 10 | 0.8% |
Organisation Types among Civil Society Winners
| Organisation type (spine_cso_type) | CSO winner rows | Distinct organisations |
|---|---|---|
| Charity | 3,679 | 1,625 |
| Other | 935 | 445 |
| CIC | 622 | 391 |
| Co-operative / Mutual | 315 | 107 |
Awards by Month
Counts are by the resolved award date (award_date). The first month is partial (the Act commenced on 24 February 2025) and the last month runs only to the bulk release date, so both should be read as incomplete.
| Award month | All awards | Share | Awards with a CSO winner | CSO share within group | Share of CSO awards |
|---|---|---|---|---|---|
| 2025-02 | 200 | 0.4% | 16 | 8.0% | 0.4% |
| 2025-03 | 1,723 | 3.7% | 208 | 12.1% | 5.0% |
| 2025-04 | 1,795 | 3.8% | 182 | 10.1% | 4.4% |
| 2025-05 | 1,705 | 3.6% | 130 | 7.6% | 3.1% |
| 2025-06 | 2,035 | 4.3% | 134 | 6.6% | 3.2% |
| 2025-07 | 2,625 | 5.6% | 257 | 9.8% | 6.2% |
| 2025-08 | 2,397 | 5.1% | 227 | 9.5% | 5.5% |
| 2025-09 | 3,383 | 7.2% | 282 | 8.3% | 6.8% |
| 2025-10 | 3,073 | 6.5% | 237 | 7.7% | 5.7% |
| 2025-11 | 2,725 | 5.8% | 224 | 8.2% | 5.4% |
| 2025-12 | 3,011 | 6.4% | 242 | 8.0% | 5.8% |
| 2026-01 | 3,041 | 6.5% | 237 | 7.8% | 5.7% |
| 2026-02 | 3,496 | 7.4% | 307 | 8.8% | 7.4% |
| 2026-03 | 4,730 | 10.1% | 483 | 10.2% | 11.6% |
| 2026-04 | 3,179 | 6.8% | 333 | 10.5% | 8.0% |
| 2026-05 | 2,582 | 5.5% | 201 | 7.8% | 4.8% |
| 2026-06 | 3,024 | 6.4% | 252 | 8.3% | 6.1% |
| 2026-07 | 2,232 | 4.8% | 210 | 9.4% | 5.0% |
Buyer Flags versus Register Match
The Act's notices carry two voluntary-sector signals: a tender-stage checkbox marking a lot as suitable for voluntary, community and social enterprises, and a supplier-level self-declaration of VCSE status. The table compares each with the register match. Neither is used to classify a winner; the register is the sole criterion.
| Signal | Awards flagged | Share of all awards | ...of which register-matched CSO winner | CSO share among flagged | Share of all CSO awards captured |
|---|---|---|---|---|---|
any_lot_vcse_suitable = TRUE (buyer marked a lot suitable for VCSEs) | 4,948 | 10.5% | 1,147 | 23.2% | 27.6% |
any_vcse_declared = TRUE (a winner self-declared as VCSE) | 2,633 | 5.6% | 1,754 | 66.6% | 42.1% |
What Civil Society Organisations Are Contracted For
| CPV division | Division title (main CPV code) | Awards to CSOs | Share of CSO awards |
|---|---|---|---|
| 85 | Health and social work services | 1,431 | 34.4% |
| 80 | Education and training services | 686 | 16.5% |
| 79 | Business services: law, marketing, consulting, recruitment, printing and security | 549 | 13.2% |
| 98 | Other community, social and personal services | 240 | 5.8% |
| 73 | Research and development services and related consultancy services | 204 | 4.9% |
| 75 | Administration, defence and social security services | 162 | 3.9% |
| 71 | Architectural, construction, engineering and inspection services | 112 | 2.7% |
| 72 | IT services: consulting, software development, Internet and support | 96 | 2.3% |
| 92 | Recreational, cultural and sporting services | 69 | 1.7% |
| 60 | Transport services (excluding waste transport) | 66 | 1.6% |
Largest Buyers from Civil Society
| Buyer | Buyer type | Awards to CSOs | Distinct CSOs |
|---|---|---|---|
| Bristol City Council | Local Government | 97 | 35 |
| UK Research and Innovation | UK Government | 90 | 52 |
| NHS England | NHS | 81 | 53 |
| Norfolk County Council | Local Government | 55 | 46 |
| Bath & North East Somerset Council | Local Government | 53 | 25 |
| Llywodraeth Cymru / Welsh Government | UK Government | 53 | 40 |
| Bournemouth, Christchurch and Poole Council | Local Government | 51 | 47 |
| Durham County Council | Local Government | 47 | 40 |
| Greater Manchester Combined Authority | Local Government | 46 | 36 |
| City of Bradford Metropolitan District Council | Local Government | 44 | 27 |
| Sheffield City Council | Local Government | 42 | 32 |
| Staffordshire County Council | Local Government | 42 | 18 |
| The North Yorkshire Council | Local Government | 37 | 25 |
| Middlesbrough Council | Local Government | 33 | 30 |
| Wirral Council | Local Government | 33 | 25 |
Contract Values
Values are entered by buyers and are highly skewed. The table excludes the 3,690 framework establishments, whose value is the ceiling of the arrangement rather than a contract; medians are more informative than totals even so.
| Awards with a value | 25th percentile | Median | 75th percentile | 90th percentile | Total (£bn) | |
|---|---|---|---|---|---|---|
| All awards (framework establishments excluded) | 43,059 | £36,900 | £72,360 | £181,622 | £720,000 | 74.6 |
| Awards with a CSO winner (same rule) | 3,732 | £45,000 | £96,608 | £289,642 | £1,072,170 | 3.7 |
Hazard Flags
Nothing in the value or duration columns is corrected. Each known hazard is carried as a logical flag, never blank, so a user can exclude or treat the affected rows.
| Flag | Awards flagged | Share of awards | What TRUE means |
|---|---|---|---|
value_zero_reported | 194 | 0.4% | A value was published and equals 0: the buyer chose not to state one; value_gbp is blank |
value_repeat_group | 3,066 | 6.5% | The same buyer, title, value and signing date appear on more than one award (one process total stamped on every award, or a framework ceiling); de-duplicate before any sum |
value_equal_split | 305 | 0.6% | The award's value is the process or lot estimate divided equally among the winners: an accounting convenience, not the contract price |
value_contract_shared | 2,366 | 5.0% | The linked contract's value is carried by more than one award of the same process, so it cannot be specific to this award |
value_contract_award_conflict | 1,114 | 2.4% | The award object and its linked contract object both publish a value and the two disagree; reported, not reconciled |
estimate_zero_reported | 306 | 0.7% | One of the four buyer-estimate columns was published as 0; the zero is blanked in all four |
duration_placeholder | 339 | 0.7% | The period is zero days long and starts on the signing date: a form date entered in both period fields |
duration_over_10y | 61 | 0.1% | The period exceeds ten years |
framework_establishment | 3,690 | 7.9% | The award sets up a framework agreement; its value is the ceiling of the arrangement, not spend |
framework_calloff | 922 | 2.0% | The award is a call-off under a parent framework, identified through the related-process link |
5. What Can You Learn?
Because the dataset retains every award and records the route, the competition and the value of each, it supports questions about civil society's place in the post-Act procurement market that award-only or civil-society-only sources cannot.
Research Questions
- Routes to award: through which procedures do civil society organisations win contracts, and how does the mix of open competition, competitive flexible procedure, direct award and framework call-off compare with the routes through which private suppliers win?
- Competition: on competed above-threshold awards, how many bidders did a civil society winner face, and how often was the field itself made up of civil society organisations (
bids_finalStageBids,bids_vcseFinalStageBids, and the named-bidder block where published)? - Market share: what share of awards, by number and by value, goes to civil society, and how does it vary by buyer type, nation, service category (CPV) and threshold position?
- Buyer practice: do buyers who mark lots as suitable for the voluntary sector, or who reserve procurements, in fact award to civil society organisations?
- Framework and dynamic-market participation: how present are civil society organisations on framework panels and dynamic markets, and how much of what they win arrives as call-offs?
- Cross-dataset linkage:
spine_uidlinks every civil society winner to the TCSS Organisation Register and the project's financial datasets, so contract income can be set against an organisation's size, age, location and accounts.
Tip: The awards file is enough for most questions. Join the supplier file on ocid and award_id when you need the identifiers a winner published, the evidence route behind its verdict, or the winners of multi-supplier awards as separate rows.
6. Limitations & Caveats
Scope and Regime
The dataset covers awards published on Find a Tender under the Procurement Act 2023 from 24 February 2025. Procurements that began under the Public Contracts Regulations 2015 and concluded after that date remain under the old regime and are not here; nor are awards published only on Contracts Finder, Public Contracts Scotland, Sell2Wales or eTendersNI. Below-threshold notices are included where published, but publication below the threshold is partial. Coverage of Scotland in particular is thin.
Awarded Values
value_gbp is the published gross value. Framework establishments (3,690 awards) carry the ceiling of the whole arrangement; call-offs (922) carry the call-off value where published. Where several awards of one process share a value the flag value_repeat_group is set, and where the shared value is the process estimate divided equally among the winners value_equal_split is set: such a value is an accounting convenience, not the value of the individual contract. A published zero is treated as unstated and blanked, and recorded in value_zero_reported. Values in other currencies are left in place and value_gbp is blank. A small number of published values are known data-entry errors and are left as published; band or winsorise rather than trusting the extremes.
One Award, One Row
Find a Tender publishes cumulative "roll-up" records on some processes, in which a later award notice restates the winners of an earlier one. These are de-duplicated so that each organisation's win in a lot is credited once; the columns rollup_suppliers_removed, duplicate_rows_collapsed and rollup_org_suppliers_removed record what was removed from each award. A process that awards the same lot to the same winner on two or three separate award objects is left as published.
Civil Society Identification
A winner is civil society only if it matches the TCSS Organisation Register; the buyer's VCSE flags are measured, never used to classify. Identifier matching is exact after normalisation, and a supplier that publishes an identifier is verdicted on that identifier alone, so an organisation registered under a different scheme from the one quoted on the notice can be released as non-CSO although its name and postcode appear in the register. The name route accepts an exact normalised name match with the published postcode as tie-break and does not reject a match to an organisation that has since left its register. Both choices favour recall and are documented in the project's rulings register; their effect is confined to a few dozen suppliers.
Suppliers outside the UK
A winner whose published country is not the United Kingdom carries no verdict. The test is the published country alone, and buyers occasionally mis-key it, so a handful of UK organisations carry a blank verdict for that reason.
Bid Statistics
Final-stage bidder counts are mandated only on competed above-threshold awards, and named bidder lists only above £5 million. Blanks elsewhere are by rule. Counts are joined at lot grain; where the lots of a process disagree the count is left blank and bid_stats_ambiguous_lot is set.
Buyer Classification
Buyers are typed by identifier lookup, register match, keyword rules and owner rulings in that order. Notice-level buyer ids that share identifiers are merged into buyer_org_id; a small number of buyers may still appear under more than one organisation id where a notice published no usable identifier.
What's NOT in the Data
- Planning and tender notices for processes that had not reached award by the release date
- Admissions to dynamic markets (membership of a supplier list, not a contract)
- Awards under the Public Contracts Regulations 2015, on Find a Tender or Contracts Finder
- Payments made under the contracts (see the project's Procurement Payments dataset)
- Unsuccessful bidders' identities, except where a named bidder list was published
- Supplier characteristics beyond the register match (link to the Organisation Register for these)
7. Citation & Licence
Licence: This dataset is licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0). You are free to share, adapt, and build upon this data for any purpose, provided you give appropriate credit. The underlying notices are published by HM Government on Find a Tender under the Open Government Licence v3.0.
Suggested Citation
McDonnell, D. et al. (2026). TCSS Find a Tender Records. UK Third and Civil Society Sector Database. Available at: https://uk-third-sector-database.github.io/data/. Licensed under CC BY 4.0.
If you would like to learn more about this dataset and how it can be applied to your project or research programme, please contact research@brawdata.com.
8. Changelog
| Version | Date | Changes |
|---|---|---|
| 1.0 | September 2026 | First public release: 46,956 awards and 72,155 winner rows from the Find a Tender bulk release of 2026-08-04, Procurement Act 2023 regime, UK-wide, awards dated from 24 February 2025. Civil society winners identified against the TCSS Organisation Register (Spine-only rule). Values, dates, periods and threshold position resolved by stated rules with source columns and hazard flags; roll-up records de-duplicated; dynamic-market admissions and all-non-UK awards excluded. |
A1. Pipeline Overview
The dataset is produced by a six-stage chain of scripts, run end to end from the bulk file; the chain is deterministic and reproduces the release files byte for byte. The code is in the rq4/data-preparation folder of the project repository.
| Stage | Script | Purpose |
|---|---|---|
| 0 | rq4-fts-00-download.sh, rq4-fts-01a-extract.py | Download the Find a Tender OCDS bulk release and extract every award object with its tender, lot, party, contract, bid-statistics and notice-link context into flat tables. |
| 1 | rq4-fts-01-prepare-awards.R | Sample construction steps 1 to 4b; value, date, period, CPV and threshold resolution with source columns and hazard flags; roll-up de-duplication; supplier identification tiers 0, 1 and 1b against the Organisation Register. |
| 2 | rq4-fts-01e-awards-final.R | Owner rulings applied; regime-boundary and route exclusions (steps 5 to 7); stable supplier ids, within-award duplicate collapse, organisation-grain roll-up and the non-UK rule (steps 8 and 9); the CSO outcome block. |
| 3 | rq4-fts-01i-buyer-typing.R | Buyer organisation ids, funder type, nation and local-government subtype. |
| 4 | rq4-fts-01l-bidders.R | Named-bidder block: bidder organisations identified, classified against the register and cross-checked against the winners. |
| 5 | rq4-fts-02-checks.R | Structure and consistency checks on the analysis files, halting on any failure. |
| 6 | rq4-fts-03-release-view.R, rq4-fts-03a-release-check.py | The public column selection and renames, the column manifest, and an independent check of the released CSVs written in a different language from the chain. |
A2. Sample Construction
Every exclusion is a stated rule, applied in order. The table is the exclusion cascade of the release build, from the award objects in the bulk file to the released awards.
| Step | Rows remaining | Excluded |
|---|---|---|
| All award rows extracted | 252,611 | |
| 1. keep UKPGA legal basis | 59,353 | 193,258 |
| 2. keep concluded awards (status = active) | 50,353 | 9,000 |
| 2b. drop dynamic-market admissions (UK13 dynamic market notice in the process; ruling ae) | 50,112 | 241 |
| 3. drop resolved award date before 2024 (ruling a) | 50,022 | 90 |
| 4. drop zero-supplier awards (ruling b) | 49,724 | 298 |
| 4b. drop awards emptied by roll-up de-duplication (ruling w) | 49,711 | 13 |
| 5. drop resolved award date in 2024 (ruling i) | 49,482 | 229 |
| 6. drop awards with no route (ruling s) | 49,481 | 1 |
| 7. drop resolved award date before 24 February 2025 (ruling z) | 49,265 | 216 |
| 8. drop awards emptied by the organisation-grain roll-up pass (ruling ac) | 49,264 | 1 |
| 9. drop awards whose winners are all outside the UK by published country (ruling af) | 46,956 | 2,308 |
A3. Civil Society Identification
The TCSS Organisation Register (the Spine) is the only authority: a supplier is civil society if, and only if, it resolves to a register entry. Registered organisations whose register subtype is a dormant company or a property management company are excluded from the civil society sample. Identification proceeds in tiers, each applied only to the rows the previous tier left unresolved.
| Tier | Evidence | Rule |
|---|---|---|
| 0 | Self-declared VCSE flag (supplier_vcse) | Measured and released; never used to classify. |
| 1 | Published registry identifier (identifier_scheme, identifier_id, additional_identifiers) | Each identifier is normalised (upper case, spaces removed; company numbers padded to eight digits; charity numbers with leading zeros stripped; Northern Ireland prefixes and padding rewritten to the register's form) and looked up directly and through the register's alias map (for example a company number that stands for a charity). A hit gives CSO and the spine_uid; a usable identifier with no hit gives non-CSO; an identifier only in a scheme the register does not hold leaves the row unresolved. |
| 1b | Twins and exact names | A verdict propagates to a row that publishes the same identifier elsewhere in the data; an exact normalised name match to the register is accepted with the published postcode as tie-break. Names that carry conflicting identifier verdicts go to review and propagate nothing. |
| 2 | Name and postcode pipeline | The remaining rows pass through a reviewed name-and-postcode matching pipeline; a civil society verdict is kept only where a register entry stands behind it, and mismatched names were reviewed and ruled individually. |
| rulings | Owner adjudications | Individual cases ruled on review (recorded in the project's rulings register) override the tiers; a ruling may carry a uid_override. |
Buyers are classified in the same spirit: a buyer is civil society only on a register match; other types come from identifier lookups, keyword rules and rulings, and buyer_type_source records which route decided each buyer.
A4. Linking to Other TCSS Datasets
Civil society winners link to the rest of the UK Third and Civil Society Sector Database on spine_uid (the register's uid). The two files of this dataset join on ocid and award_id.
| Dataset | Join key | What it adds |
|---|---|---|
| Organisation Register | spine_uid = uid | Organisation name, postcode, registration and removal dates, source registers, SIC codes |
| Charity Financial Records | spine_uid | Annual income, expenditure and detailed financial breakdowns for registered charities |
| Nonprofit Financial Records | spine_uid | Companies House accounts data for nonprofit companies |
| Contracts Finder Records | spine_uid = uid (organisation grain only) | The same organisations' awards under the Public Contracts Regulations 2015 regime; no award-level key is shared between the platforms |
Example: Civil Society's Share of Awards by Route
import pandas as pd
aw = pd.read_csv("findatender-awards.csv", low_memory=False)
# The outcome: at least one winner is a register-confirmed civil society organisation
aw["cso"] = aw["any_cso_supplier"].astype(str).str.upper() == "TRUE"
# England only: filter on the nation variable, the release itself is UK-wide
eng = aw[aw["buyer_nation"] == "England"]
share = eng.groupby("procurement_method_details")["cso"].agg(["size", "mean"])
share["mean"] = (100 * share["mean"]).round(1)
print(share.sort_values("size", ascending=False))
Example: Linking Civil Society Winners to the Organisation Register
import pandas as pd
sup = pd.read_csv("findatender-award-suppliers.csv", low_memory=False)
spine = pd.read_csv("TSCS_spine.spine.csv", low_memory=False)
cso = sup[sup["cso_status"] == "CSO"]
merged = cso.merge(spine[["uid", "organisationname", "postcode", "dateregistered"]],
left_on="spine_uid", right_on="uid", how="left")
# Which registered organisations win the most contracts?
print(merged.groupby(["spine_uid", "organisationname"]).size()
.sort_values(ascending=False).head(10))
Tip: Sum value_gbp only after excluding framework establishments and de-duplicating value_repeat_group rows, and treat value_equal_split values as a share of a process estimate rather than a contract price.