The cleanest way to work with UK procurement data is to treat each procurement process as the anchor, then join buyers, suppliers, dates, and contract details back to that process. The attached guidance says the main sheet is the starting point for buyer and procedure analysis, with child sheets linked by `main_ocid` and nested sheets joined with their parent ID fields[1][2].
For award data specifically, the contracts extract says it covers published contract awards from 1 April 2017 onward and includes the buyer, awarded suppliers, contract value, and duration. It also notes the dataset is still incomplete and is updated quarterly[3][4][5].
Start with the buyer or procedure record in the main sheet, then carry that process forward through the rest of the model using `main_ocid`. That gives you a stable anchor for dashboard filters, pipeline reporting, and cross-sheet joins[6][7].
The guide recommends joining `contracts` to `awardssuppliers` on `mainocid` and `contracts.awardID = awardssuppliers.awardsid`, then linking suppliers to `parties` to inspect fields such as `details_scale` for SME analysis[8].
A key limitation is that some below-threshold contracts do not have declared supplier identifiers, so SME matching is not always complete. The source also warns that a single contract can have multiple suppliers, so you should aggregate back to one contract row before calculating contract-level metrics[9][10].
Use the date that matches the question. The guide says the main-sheet `date` is the latest update date for the procedure, `contracts.dateSigned` is best for contract trends over time, and the first notice publication date can be used as a start date when needed[11].
For award-level reporting, the contracts extract explicitly includes contract value and duration, which makes it suitable for spend and term analysis[12]. The guide also points to contract value as the basis for indicators such as total contract value awarded by procurement method, excluding framework agreements[13].
| Field or join | Use case | Why it matters |
|---|---|---|
| `main_ocid`[18][19] | Anchor buyer and procedure records across sheets | Keeps one procurement process connected through the full dataset |
| `contracts.awardID = awards_suppliers.awards_id`[20] | Link award records to supplier records | Lets you attach supplier names and attributes to contract awards |
| `parties.details_scale`[21] | SME identification | Supports SME tagging where supplier detail is available |
| `date` in the main sheet[22] | Latest update date for the procedure | Best for current-state reporting and refresh logic |
| `contracts.dateSigned`[23] | Contract trend analysis over time | Best date for signed-award timelines |
| Contract value[24][25] | Spend analysis and value by method | Used for award value reporting and method breakdowns |
| Contract duration[26] | Term and expiry analysis | Supports deadline, renewal, and pipeline views |
| Declared supplier identifiers[27] | Supplier attribution | May be missing for some below-threshold contracts |
If you need one practical rule, it is this: anchor on the procurement process, join suppliers through award tables, pick the date that matches the question, and aggregate to contract level before calculating metrics[40][41][42][43]. That approach fits both dashboarding and proposal work, while staying within the limitations of the published UK data[44][45].
Get more accurate answers with Super Pandi, upload files, personalized discovery feed, save searches and contribute to the PandiPedia.
Let's look at alternatives: