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.

46,956Awarded Contracts
30,133Suppliers
1,829Buyer Organisations
4,162Awards with a CSO Winner

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.

FileGrainRowsColumns
findatender-awards.csvOne row per awarded contract (ocid × award_id)46,956107
findatender-award-suppliers.csvOne row per winning organisation per award (ocid × award_id × supplier_id)72,15521
findatender-column-manifest.csvOne row per released column: file, position, name, internal source column, class, missingness and distinct values1288

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

FieldDescriptionTypeCoverage
ocidOpen Contracting process id — one per procurement processText100%
award_idAward id within the processText100%
award_notice_urlSource 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 linkText100%
award_notice_url_sourceWhich notice object supplied award_notice_url: award, contract or tenderText100%
tender_notice_urlThe process's tender-stage notice page on Find a Tender, where one was publishedText25.9%
tender_statusTender status ("active"/"complete")Text100%
release_dateDate the compiled OCDS release was producedDate100%

Route to award and process structure

FieldDescriptionTypeCoverage
related_process_ocidsocids of related processes (for a call-off, the parent framework), ';'-joinedText2.1%
related_process_relationshipsRelationship type(s) to the related processes, ';'-joined; 'framework' marks the call-off linkText2.1%
procurement_methodOCDS method class (open / selective / limited / direct; NA on most below-threshold-unknown rows)Text89.1%
procurement_method_detailsThe 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 NAText100%
technique_frameworkThe process establishes or uses a framework agreement (FALSE where the source omits the flag)Boolean100%
technique_dynamic_marketSame 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 rightBoolean100%
framework_establishmentModel indicator ≡ technique_framework: the award sets a framework up (its value is a ceiling, not spend)Boolean100%
framework_calloffAward is a call-off under a parent framework, identified structurally via relatedProcessesBoolean100%
n_lotsNumber of lots on the tenderNumeric100%
award_related_lotsLot id(s) this award covers (';'-joined). Also the unit key for the roll-up de-duplication: ocid × this raw stringText100%

Text and sector (CPV)

FieldDescriptionTypeCoverage
tender_titleTender title (one per process)Text100%
tender_descriptionTender description text, one per process; near-universal coverageText100%
cpvone main CPV per award, award-level preferred (full 8-digit code; complete)Text100%
cpv_sourceWhich home supplied cpv ("award"/"tender")Text100%
cpv_divisionFirst two digits of cpvText100%
award_cpv_allCPV code(s) from awards[].items[] (direct-award / below-threshold records)Text100%
goods_contractTRUE = CPV division 03–44 or 48 (a contract FOR goods); FALSE = works (45) / services (49–98)Boolean100%

VCSE/SME suitability and reservation (tender-stage declarations)

FieldDescriptionTypeCoverage
has_suitability_objectAny lot carries the suitability checkbox object (NA when the notice types never collect it — missing is NOT false)Boolean100%
any_lot_sme_suitableBuyer marked any lot suitable for SMEs / VCSEs (NA when no suitability object)Boolean23.3%
any_lot_vcse_suitableBuyer marked any lot suitable for SMEs / VCSEs (NA when no suitability object)Boolean23.3%
reserved_participationReservation codes: smeVcse (below-threshold SME/VCSE reservation), shelteredWorkshop (s.32), publicServiceMissionOrganization (s.33 public-service mutuals)Text0.6%
reserved_location_schemeGeographic reservation (GB-ONS gazetteer; K02000001 = UK-wide, i.e. no restriction)Text1.6%
reserved_location_codesGeographic reservation (GB-ONS gazetteer; K02000001 = UK-wide, i.e. no restriction)Text1.6%
reserved_location_descGeographic reservation (GB-ONS gazetteer; K02000001 = UK-wide, i.e. no restriction)Text0.3%

Buyer

FieldDescriptionTypeCoverage
buyer_org_idBuyer organisation id: notice-level buyer ids that share a registry identifier are merged into one organisationText100%
buyer_nameBuyer name as published on the notice; filled from the buyer lookup's canonical name where the notice published noneText100%
buyer_postcodeBuyer postcode as publishedText100%
buyer_regionBuyer region as publishedText100%
buyer_nationEngland / Scotland / Wales / Northern Ireland / Unknown — the England filter variable (kept as a variable at prep; England-only is an analysis-stage rule)Text100%
buyer_typeProgramme funder-type typology: UK Government / Local Government / NHS / Education Institution / Police, Fire and Rescue / CSO / Private Sector / OtherText100%
buyer_type_detailFiner buyer type within buyer_typeText100%
buyer_lg_subtypeLocal-government subtype (county, district, London borough, unitary, combined authority, town or parish council); blank for other buyersText42.2%
buyer_lg_ons_codeONS code of the local authority, where identifiedText40.1%
buyer_in_spineThe buyer matches the TCSS Organisation RegisterBoolean100%
buyer_spine_uidThe buyer's register uid, where it matchesText11.5%

Notices and dates

FieldDescriptionTypeCoverage
first_notice_typeNotice type of the first notice of the process (UK1 to UK7 codes)Text100%
first_notice_publishedPublication date of the first notice of the processDate100%
award_dateThe award date to use: the award object's date, else the contract signature date, else the notice publication date, else the release dateDate100%
award_date_sourceWhich date supplied award_date: award, signed, notice or releaseText100%
award_date_rawThe date on the award object itself, blank where the object carries noneDate30.2%
award_notice_publishedEarliest publication date of an award notice (UK5/UK6) for the awardDate31.2%
date_signedContract signature date, where publishedDate88.1%
notice_date_publishedPublication date of the contract details notice (UK7), where one existsDate88.1%

Contract record linkage

FieldDescriptionTypeCoverage
contract_idId of the linked contract details record (UK7), where one existsText88.5%
contract_statusStatus of the linked contract details record; blank where none has been publishedText88.5%
contract_cancelledThe linked contract record is cancelledBoolean100%
contract_terminatedThe linked contract record is terminatedBoolean100%

Values

FieldDescriptionTypeCoverage
value_gbpThe 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 flagsNumeric99.4%
value_non_gbpThe resolved value is in a currency other than pounds sterling (value_gbp is then blank)Boolean100%
value_zero_reportedTRUE when a value IS reported and equals 0 — buyer chose not to state; treated as missingBoolean100%
value_repeat_groupSame buyer + title + value + signing date appears on >1 row (multi-award processes stamping one process total, framework establishments) — de-duplicate before any sumBoolean100%
value_equal_splitTRUE 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 NABoolean100%
value_contract_sharedTRUE 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 NABoolean100%
value_contract_award_conflictThe award object and its linked contract object both publish a value and the two disagree; reported, not reconciledBoolean100%
value_sourceWhich object supplied the value: contract, or award where the contract value is shared across awards of the processText100%
tender_value_amountThe buyer's estimated total value for the whole process, net, as published (a published zero is blanked)Numeric21.7%
tender_value_amount_grossThe buyer's estimated total value for the whole process, gross, as publishedNumeric25.7%
tender_value_currencyCurrency of the process estimateText26.1%
lot_value_amountsEstimated value of each of the award's lots, ';'-joined in award_related_lots order, as publishedText21.4%
lot_value_amount_totalSum of the related lots' estimated values (net), only where every related lot carries oneNumeric21.0%
lot_value_amount_gross_totalSum of the related lots' estimated values (gross), only where every related lot carries oneNumeric25.1%
lot_value_currencyCurrency of the related lots' estimated valuesText25.8%
n_related_lots_valuedHow many of the award's related lots carry an estimated valueNumeric100%
estimate_zero_reportedTRUE 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 NABoolean100%

Periods and durations

FieldDescriptionTypeCoverage
contract_period_startContract start date on the award objectDate31.2%
contract_period_endContract end date on the award objectDate31.2%
contract_period_max_extentLatest possible end date including extension options, on the award objectDate15.1%
contract_period_start_cContract start date on the contract details recordDate88.1%
contract_period_end_cContract end date on the contract details recordDate88.1%
contract_period_max_extent_cLatest possible end date including extension options, on the contract details recordDate19.7%
period_startContract start date to use (contract record preferred, start and end taken from the same object)Date100%
period_endContract end date to use (same object as period_start)Date100%
period_sourceWhich object supplied the period: contract or awardText100%
duration_daysperiod_end minus period_start, in daysNumeric100%
duration_max_daysDuration to the latest possible end including extension options, in daysNumeric24.7%
duration_placeholderThe period is zero days long and starts on the signing date: a form date entered in both period fieldsBoolean100%
duration_over_10yThe period exceeds ten yearsBoolean100%

Threshold position

FieldDescriptionTypeCoverage
above_thresholdThe award is above the Act's threshold, as published (contract record preferred, award object fallback)Boolean100%
above_threshold_sourceWhich object supplied above_threshold: contract or awardText100%

Winners and the civil society outcome

FieldDescriptionTypeCoverage
n_suppliersNumber 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 panelsNumeric100%
n_cso_suppliersWinners that are register-confirmed civil society organisations (UK rows)Numeric100%
n_noncso_suppliersWinners with a usable identifier not found in the register (UK rows)Numeric100%
n_unresolved_suppliersWinners with no usable identifier and no name match (UK rows)Numeric100%
n_nonuk_suppliersWinners 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_suppliersNumeric100%
any_cso_supplierAt least one winner is a register-confirmed civil society organisation: the outcome variableBoolean100%
all_cso_suppliersEvery UK winner is a CSO (≥1 UK winner on every award after step 9)Boolean100%
any_vcse_declared≥1 winner self-declares VCSE (parties[].details.vcse); three-valued — missing stays NA. Self-declaration is a measured signal, NEVER the classifierBoolean>99.9%
any_sme_declared≥1 winner resolves as SME (OCP rule at (ocid, supplier_id): any sme tag wins, else large; three-valued)Boolean100%
winner_supplier_idsWho 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.Text99.9%
winner_supplier_namesThe 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 NAText99.9%
winner_spine_uidsSpine uid of every CSO winner (UK rows), ';'-joined; NA when no winner is a CSO. Joins to the TCSS Organisation RegisterText8.9%

Bid statistics (published by rule on competed above-threshold awards)

FieldDescriptionTypeCoverage
bids_finalStageBidsNumber of final-stage bids, as published (competed above-threshold awards)Numeric20.8%
bids_smeFinalStageBidsFinal-stage bids from SMEs, as publishedNumeric20.9%
bids_vcseFinalStageBidsFinal-stage bids from voluntary, community and social enterprises, as publishedNumeric21.2%

Named bidders (published only above £5 million)

FieldDescriptionTypeCoverage
has_bidder_detailsRelease carries named bidders; all counts below are NA (not 0) when FALSEBoolean100%
n_bidders_identifiedDistinct bidder organisations identified in the published bidder listNumeric6.0%
n_cso_bidders_identifiedNamed bidders that are register-confirmed civil society organisationsNumeric6.0%
n_noncso_bidders_identifiedNamed bidders with a usable identifier not found in the registerNumeric6.0%
any_cso_bidder_identifiedAt least one named bidder is a civil society organisationBoolean6.0%
n_joint_bidsJoint (multi-organisation) bidsNumeric6.0%

Supplier file (findatender-award-suppliers.csv)

Keys and release metadata

FieldDescriptionTypeCoverage
ocidOpen Contracting process id — one per procurement processText100%
award_idAward id within the processText100%

Keys and identity as published

FieldDescriptionTypeCoverage
supplier_nameSupplier name as publishedText100%
identifier_schemeScheme of the primary registry identifier as published (GB-COH, GB-CHC, GB-PPON and so on)Text74.2%
identifier_idPrimary registry identifier as publishedText74.3%
additional_identifiersFurther 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)Text36.7%
supplier_postcodeSupplier postcode as publishedText100%
supplier_regionSupplier region as publishedText100%
supplier_countrySupplier country as publishedText100%
supplier_ukPublished supplier_country is "United Kingdom". FALSE rows keep their id but carry no CSO verdictBoolean100%
supplier_scaleSelf-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 blankText100%
supplier_vcseSelf-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 NABoolean100%
supplier_withheldIdentity withheld under s.94 — no stable id possibleBoolean100%

Civil society identification

FieldDescriptionTypeCoverage
cso_statusThe civil society verdict: CSO, non-CSO or unresolved; blank on suppliers outside the UKText99.2%
spine_uidThe organisation's uid in the TCSS Organisation Register, on civil society rows; the key for linking to the project's other datasetsText7.7%
spine_nameRegistered name of the matched organisationText7.7%
spine_cso_typeOrganisation type from the register (Charity, CIC, Co-operative/Mutual, Other CSO)Text7.7%
spine_cso_subtypeFiner organisation type from the registerText7.7%
spine_is_cicThe matched organisation is a community interest companyBoolean7.7%

Stable ids and SME status

FieldDescriptionTypeCoverage
supplier_idStable surrogate key, one per organisation: civil society rows grouped by register uid, others by their published identifiers or name; blank where the identity was withheldText99.8%
supplier_sme_resolvedScale resolved within (ocid, supplier_id) — any sme tag wins, else largeBoolean100%

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.

ocid
100.0%
value_gbp
99.4%
award_notice_url
100.0%
buyer_type
100.0%
procurement_method_details
100.0%
cpv
100.0%
period_start
100.0%
bids_finalStageBids
20.8%

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 nationAll awardsShareAwards with a CSO winnerCSO share within groupShare of CSO awards
England43,30192.2%3,7938.8%91.1%
Wales2,4665.3%29211.8%7.0%
Northern Ireland1,0792.3%757.0%1.8%
Scotland960.2%22.1%0.0%
Unknown140.0%00.0%0.0%

Who Buys: Buyer Type Distribution

Buyer typeAll awardsShareAwards with a CSO winnerCSO share within groupShare of CSO awards
Local Government19,81842.2%2,45212.4%58.9%
UK Government9,88521.1%7918.0%19.0%
NHS7,93516.9%4856.1%11.7%
CSO3,9348.4%1333.4%3.2%
Education Institution2,7885.9%1625.8%3.9%
Police, Fire and Rescue1,4163.0%1097.7%2.6%
Other1,0012.1%202.0%0.5%
Private Sector1790.4%105.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 awardAll awardsShareAwards with a CSO winnerCSO share within groupShare of CSO awards
Below threshold - without competition18,02438.4%1,81710.1%43.7%
Below threshold - limited competition8,38517.9%3093.7%7.4%
Open procedure6,25013.3%89214.3%21.4%
Below threshold - unknown5,11210.9%3446.7%8.3%
Below threshold - open competition4,4069.4%3969.0%9.5%
Direct award2,2904.9%2279.9%5.5%
Competitive flexible procedure1,6043.4%1308.1%3.1%
Below threshold - award under framework4871.0%163.3%0.4%
Award under framework3910.8%317.9%0.7%
Below threshold - by reference to dynamic market70.0%00.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 rowsShare of rowsDistinct suppliers
non-CSO65,90791.3%27,361
CSO5,5517.7%2,568
(non-UK, no verdict)5620.8%203
unresolved1350.2%12

Which Registers the Civil Society Winners Come From

PrefixSource registerCSO winner rowsDistinct organisationsShare of CSO winner rows
GB-CHCCharity Commission for England & Wales3,5751,57364.4%
GB-COHCompanies House1,54583227.8%
GB-MPRMutuals Public Register (FCA)273974.9%
GB-SCOffice of the Scottish Charity Regulator68281.2%
GB-NICCharity Commission for Northern Ireland48280.9%
GB-COOPCo-operatives UK42100.8%

Organisation Types among Civil Society Winners

Organisation type (spine_cso_type)CSO winner rowsDistinct organisations
Charity3,6791,625
Other935445
CIC622391
Co-operative / Mutual315107

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 monthAll awardsShareAwards with a CSO winnerCSO share within groupShare of CSO awards
2025-022000.4%168.0%0.4%
2025-031,7233.7%20812.1%5.0%
2025-041,7953.8%18210.1%4.4%
2025-051,7053.6%1307.6%3.1%
2025-062,0354.3%1346.6%3.2%
2025-072,6255.6%2579.8%6.2%
2025-082,3975.1%2279.5%5.5%
2025-093,3837.2%2828.3%6.8%
2025-103,0736.5%2377.7%5.7%
2025-112,7255.8%2248.2%5.4%
2025-123,0116.4%2428.0%5.8%
2026-013,0416.5%2377.8%5.7%
2026-023,4967.4%3078.8%7.4%
2026-034,73010.1%48310.2%11.6%
2026-043,1796.8%33310.5%8.0%
2026-052,5825.5%2017.8%4.8%
2026-063,0246.4%2528.3%6.1%
2026-072,2324.8%2109.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.

SignalAwards flaggedShare of all awards...of which register-matched CSO winnerCSO share among flaggedShare of all CSO awards captured
any_lot_vcse_suitable = TRUE (buyer marked a lot suitable for VCSEs)4,94810.5%1,14723.2%27.6%
any_vcse_declared = TRUE (a winner self-declared as VCSE)2,6335.6%1,75466.6%42.1%

What Civil Society Organisations Are Contracted For

CPV divisionDivision title (main CPV code)Awards to CSOsShare of CSO awards
85Health and social work services1,43134.4%
80Education and training services68616.5%
79Business services: law, marketing, consulting, recruitment, printing and security54913.2%
98Other community, social and personal services2405.8%
73Research and development services and related consultancy services2044.9%
75Administration, defence and social security services1623.9%
71Architectural, construction, engineering and inspection services1122.7%
72IT services: consulting, software development, Internet and support962.3%
92Recreational, cultural and sporting services691.7%
60Transport services (excluding waste transport)661.6%

Largest Buyers from Civil Society

BuyerBuyer typeAwards to CSOsDistinct CSOs
Bristol City CouncilLocal Government9735
UK Research and InnovationUK Government9052
NHS EnglandNHS8153
Norfolk County CouncilLocal Government5546
Bath & North East Somerset CouncilLocal Government5325
Llywodraeth Cymru / Welsh GovernmentUK Government5340
Bournemouth, Christchurch and Poole CouncilLocal Government5147
Durham County CouncilLocal Government4740
Greater Manchester Combined AuthorityLocal Government4636
City of Bradford Metropolitan District CouncilLocal Government4427
Sheffield City CouncilLocal Government4232
Staffordshire County CouncilLocal Government4218
The North Yorkshire CouncilLocal Government3725
Middlesbrough CouncilLocal Government3330
Wirral CouncilLocal Government3325

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 value25th percentileMedian75th percentile90th percentileTotal (£bn)
All awards (framework establishments excluded)43,059£36,900£72,360£181,622£720,00074.6
Awards with a CSO winner (same rule)3,732£45,000£96,608£289,642£1,072,1703.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.

FlagAwards flaggedShare of awardsWhat TRUE means
value_zero_reported1940.4%A value was published and equals 0: the buyer chose not to state one; value_gbp is blank
value_repeat_group3,0666.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_split3050.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_shared2,3665.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_conflict1,1142.4%The award object and its linked contract object both publish a value and the two disagree; reported, not reconciled
estimate_zero_reported3060.7%One of the four buyer-estimate columns was published as 0; the zero is blanked in all four
duration_placeholder3390.7%The period is zero days long and starts on the signing date: a form date entered in both period fields
duration_over_10y610.1%The period exceeds ten years
framework_establishment3,6907.9%The award sets up a framework agreement; its value is the ceiling of the arrangement, not spend
framework_calloff9222.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_uid links 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

VersionDateChanges
1.0September 2026First 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.

StageScriptPurpose
0rq4-fts-00-download.sh, rq4-fts-01a-extract.pyDownload 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.
1rq4-fts-01-prepare-awards.RSample 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.
2rq4-fts-01e-awards-final.ROwner 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.
3rq4-fts-01i-buyer-typing.RBuyer organisation ids, funder type, nation and local-government subtype.
4rq4-fts-01l-bidders.RNamed-bidder block: bidder organisations identified, classified against the register and cross-checked against the winners.
5rq4-fts-02-checks.RStructure and consistency checks on the analysis files, halting on any failure.
6rq4-fts-03-release-view.R, rq4-fts-03a-release-check.pyThe 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.

StepRows remainingExcluded
All award rows extracted252,611
1. keep UKPGA legal basis59,353193,258
2. keep concluded awards (status = active)50,3539,000
2b. drop dynamic-market admissions (UK13 dynamic market notice in the process; ruling ae)50,112241
3. drop resolved award date before 2024 (ruling a)50,02290
4. drop zero-supplier awards (ruling b)49,724298
4b. drop awards emptied by roll-up de-duplication (ruling w)49,71113
5. drop resolved award date in 2024 (ruling i)49,482229
6. drop awards with no route (ruling s)49,4811
7. drop resolved award date before 24 February 2025 (ruling z)49,265216
8. drop awards emptied by the organisation-grain roll-up pass (ruling ac)49,2641
9. drop awards whose winners are all outside the UK by published country (ruling af)46,9562,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.

TierEvidenceRule
0Self-declared VCSE flag (supplier_vcse)Measured and released; never used to classify.
1Published 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.
1bTwins and exact namesA 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.
2Name and postcode pipelineThe 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.
rulingsOwner adjudicationsIndividual 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.

DatasetJoin keyWhat it adds
Organisation Registerspine_uid = uidOrganisation name, postcode, registration and removal dates, source registers, SIC codes
Charity Financial Recordsspine_uidAnnual income, expenditure and detailed financial breakdowns for registered charities
Nonprofit Financial Recordsspine_uidCompanies House accounts data for nonprofit companies
Contracts Finder Recordsspine_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.