Procurement and contracts profile
How government contracts and bidding processes are described, from the request for bids to the signed contract.
Schemas: 5
Code lists: 6
Standards: schema.org, Open Contracting Data Standard
Award
The decision to give the contract to a supplier. Mirrors the OCDS award block. Suppliers are referenced, never named in free text: a supplier name as a string cannot be joined across contracts, and that is precisely how repeat awards to connected parties stay invisible.
Standards: Open Contracting Data Standard
| Field | Type | Definition | Required |
|---|---|---|---|
@type |
"Award" |
Always Award. |
Yes |
@id |
string |
This award's own dereferenceable identifier. | No |
awardId |
string |
Identifier for this award within the process. Contracts reference it. | Yes |
title |
string |
A short label for the award. | No |
description |
string |
A plain-language summary of what was awarded. | No |
status |
string |
termCode from the AwardStatus code list. |
Yes |
date |
string |
When the award was made. | No |
value |
Amount |
The Amount awarded. |
No |
supplier |
Reference[] |
References to Party entities. Required. | Yes |
contractPeriodStart |
string |
When the resulting contract is expected to begin. | No |
contractPeriodEnd |
string |
When the resulting contract is expected to end. | No |
document |
string[] |
Links to supporting documents, e.g. the award notice. | No |
Contract
The signed agreement resulting from an award, and what was actually paid under it. Mirrors the OCDS contract and implementation blocks. Keeping the contract value distinct from the award value, and both distinct from amounts actually transacted, is what lets an auditor see overruns.
Standards: Open Contracting Data Standard
| Field | Type | Definition | Required |
|---|---|---|---|
@type |
"Contract" |
Always Contract. |
Yes |
@id |
string |
This contract's own dereferenceable identifier. | No |
contractId |
string |
The buyer's own reference for this contract. | Yes |
awardId |
string |
The Award this contract implements. Must match an awardId in the same contracting process; the validator checks it. | Yes |
title |
string |
A short label for the contract. | No |
description |
string |
A plain-language summary of what the contract covers. | No |
status |
string |
termCode from the ContractStatus code list. |
Yes |
value |
Amount |
The Amount the contract is signed for. |
No |
dateSigned |
string |
When the contract was signed. | No |
periodStart |
string |
When the contract takes effect. | No |
periodEnd |
string |
When the contract ends. | No |
amountPaid |
Amount |
Total transacted to date under this contract. | No |
document |
string[] |
Links to supporting documents, e.g. the signed contract itself. | No |
ContractingProcess
One complete procurement, from planning through tender, award, and contract - the spine that OCDS calls a contracting process, identified by an ocid. Everything that happens hangs off this one identifier, which is what makes it possible to follow a single purchase from the budget line that funded it to the supplier that was paid. schema.org has no tender, procurement, bid, or solicitation concept; Demand and Offer are retail constructs carrying GTIN, SKU and warranty semantics that do not apply, so nothing is gained by forcing a tender into them.
Standards: Open Contracting Data Standard
| Field | Type | Definition | Required |
|---|---|---|---|
@id |
string |
This process's own dereferenceable identifier. | Yes |
@type |
"ContractingProcess" |
Always ContractingProcess. |
Yes |
ocid |
string |
Open Contracting ID: a globally unique identifier for this process, prefixed with a registered publisher prefix. The join key across publishers and the reason OCDS data is aggregatable at all. | Yes |
name |
string |
A short label for the process, e.g. what's being procured. | No |
description |
string |
A plain-language summary of the procurement. | No |
url |
string |
Where this process's canonical human-readable page lives. | No |
identifier |
Identifier[] |
Any scheme-qualified identifiers for this process beyond its @id. |
No |
buyer |
Reference |
The GovernmentOrganization paying. Required: a procurement with no accountable buyer cannot be audited. | Yes |
jurisdiction |
Reference |
The Jurisdiction the procurement is conducted in. |
No |
budgetLine |
Reference[] |
The BudgetLine(s) funding this process. The join to the budget profile, and the link that answers 'what did we actually buy with that appropriation'. | No |
tender |
Tender |
The Tender for this process - what was solicited, and how. |
No |
award |
Award[] |
The Award(s) made in this process. Usually one, but a process can split a contract across several suppliers. |
No |
contract |
Contract[] |
The Contract(s) signed as a result of this process. |
No |
party |
Reference[] |
References to the non-government Party entities involved. Government participants are reached through buyer and tender.procuringEntity instead, so a body is never duplicated as both an organization and a party. | No |
dateModified |
string |
When this record was last updated. | No |
language |
string |
The language this process's documents are in. | No |
sourceDataset |
string |
The Dataset this record was published as part of. |
No |
{
"@id": "https://example-city.gov/id/contracting-process/2025-pw-014",
"@type": "ContractingProcess",
"ocid": "ocds-example-2025-pw-014",
"name": "Street resurfacing programme, FY2026",
"buyer": {
"@id": "https://example-city.gov/id/organization/city-government",
"name": "Example City Government"
},
"jurisdiction": {
"@id": "https://example-city.gov/id/jurisdiction/example-city",
"name": "Example City"
},
"budgetLine": [
{
"@id": "https://example-city.gov/id/budget-line/fy2026/exp-street-maintenance",
"name": "Street maintenance programme"
}
],
"dateModified": "2025-09-01",
"party": [
{
"@id": "https://example-city.gov/id/party/northgate-paving",
"name": "Northgate Paving LLC"
},
{
"@id": "https://example-city.gov/id/party/valley-surfacing",
"name": "Valley Surfacing Co."
}
],
"tender": {
"@type": "Tender",
"tenderId": "PW-2025-014",
"title": "Street resurfacing, District 2 and District 4",
"description": "Mill and overlay of approximately 11 km of residential streets.",
"status": "complete",
"procurementMethod": "open",
"procurementMethodDetails": "Invitation for bids, sealed",
"mainProcurementCategory": "works",
"classification": [
{
"@type": "PropertyValue",
"propertyID": "cpv",
"value": "45233220",
"name": "Surface work for roads"
},
{
"@type": "PropertyValue",
"propertyID": "unspsc",
"value": "72141101",
"name": "Road paving"
}
],
"value": {
"@type": "MonetaryAmount",
"value": 3200000,
"currency": "USD"
},
"procuringEntity": {
"@id": "https://example-city.gov/id/organization/public-works",
"name": "Public Works Department"
},
"tenderPeriodStart": "2025-07-07",
"tenderPeriodEnd": "2025-08-04",
"enquiryPeriodEnd": "2025-07-21",
"numberOfTenderers": 2,
"submissionMethodDetails": "Sealed bids delivered to the City Clerk, opened publicly.",
"document": [
"https://example-city.gov/procurement/PW-2025-014/ifb.pdf"
]
},
"award": [
{
"@type": "Award",
"awardId": "PW-2025-014-A1",
"title": "Award to Northgate Paving LLC",
"status": "active",
"date": "2025-08-18",
"value": {
"@type": "MonetaryAmount",
"value": 3065000,
"currency": "USD"
},
"supplier": [
{
"@id": "https://example-city.gov/id/party/northgate-paving",
"name": "Northgate Paving LLC"
}
],
"contractPeriodStart": "2025-09-15",
"contractPeriodEnd": "2026-04-30",
"document": [
"https://example-city.gov/procurement/PW-2025-014/award.pdf"
]
}
],
"contract": [
{
"@type": "Contract",
"contractId": "PW-2025-014-C1",
"awardId": "PW-2025-014-A1",
"title": "Street resurfacing contract",
"status": "active",
"value": {
"@type": "MonetaryAmount",
"value": 3065000,
"currency": "USD"
},
"dateSigned": "2025-09-02",
"periodStart": "2025-09-15",
"periodEnd": "2026-04-30",
"amountPaid": {
"@type": "MonetaryAmount",
"value": 1150000,
"currency": "USD"
},
"document": [
"https://example-city.gov/procurement/PW-2025-014/contract.pdf"
]
}
]
}
Party
A non-government organization taking part in a contracting process - a tenderer, a supplier, a funder - with the roles it plays. Government participants are NOT duplicated here: the buyer and procuring entity are _core GovernmentOrganizations, referenced directly from the process, so one body never becomes two entities. A scheme-qualified identifier is required: a supplier known only by name cannot be joined across contracts or to a company register, and unjoinable supplier data is the main reason procurement transparency fails in practice.
Standards: Open Contracting Data Standard
| Field | Type | Definition | Required |
|---|---|---|---|
@id |
string |
This party's own dereferenceable identifier. | Yes |
@type |
"Organization" |
Always Organization, a real schema.org type - Party is schemaGov's name for this role, not a minted type schema.org needs to know about. |
Yes |
name |
string |
The party's legal or trading name. | Yes |
identifier |
Identifier[] |
At least one. Use an org-id.guide prefix for the national company register (org-id:GB-COH, org-id:US-EIN) or an LEI. This is the same pattern OCDS uses, so it crosswalks without transformation. | Yes |
role |
string[] |
termCode(s) from the PartyRole code list. |
Yes |
address |
object |
schema:PostalAddress for this party. | No |
contactPoint |
object |
How to reach this party. | No |
url |
string |
The party's own website, where one exists. | No |
{
"@id": "https://example-city.gov/id/party/alder-street-holdings",
"@type": "Organization",
"name": "Alder Street Holdings LLC",
"identifier": [
{
"@type": "PropertyValue",
"propertyID": "org-id:US-EIN",
"value": "88-2213470"
}
],
"role": [
"supplier"
]
}
Tender
The solicitation: what is being bought, how bids are invited, and on what timetable. Mirrors the OCDS tender block.
Standards: Open Contracting Data Standard
| Field | Type | Definition | Required |
|---|---|---|---|
@type |
"Tender" |
Always Tender. |
Yes |
@id |
string |
This tender's own dereferenceable identifier. | No |
tenderId |
string |
The buyer's own tender reference. | No |
title |
string |
A short label for what's being procured. | No |
description |
string |
A plain-language summary of what's being bought and how bids are invited. | No |
status |
string |
termCode from the TenderStatus code list. |
Yes |
procurementMethod |
string |
How bids were invited. Optional at Core conformance because real publishers omit it on some notices, but REQUIRED at Standard conformance: without it, the question of how much public spending was never competed is unanswerable. | No |
procurementMethodDetails |
string |
The publisher's own name for the procedure. | No |
procurementMethodRationale |
string |
Why this method was chosen. Expected whenever procurementMethod is 'direct' - a sole-source award without a stated reason is the single most common audit finding in public procurement. | No |
mainProcurementCategory |
string |
termCode from the ProcurementCategory code list. |
No |
classification |
Identifier[] |
What is being bought, as scheme-qualified codes: CPV in the EU, UNSPSC globally, NIGP in much of the US. Same propertyID/value pattern as every other identifier in this profile. | No |
value |
Amount |
Estimated value. | No |
procuringEntity |
Reference |
The GovernmentOrganization running the tender, where different from the process's own buyer. |
No |
tenderPeriodStart |
string |
When bids may first be submitted. | No |
tenderPeriodEnd |
string |
The submission deadline. | No |
enquiryPeriodEnd |
string |
The deadline for bidders to ask questions, where the process has one. | No |
numberOfTenderers |
integer |
How many bids were received. | No |
submissionMethodDetails |
string |
How and where to submit a bid, in the publisher's own words. | No |
document |
string[] |
Links to supporting documents, e.g. the tender notice or bid specification. | No |