Council payments, in one schema.
English councils publish every payment over £500 as spreadsheets, each in its own layout. Search them together by council, supplier, date and amount, see totals by supplier, council and month, and trace every line back to the file it came from.
curl -s "https://api.olympus.new-odyssey.com/v1/uk-council-spending/transactions?council=$COUNCIL_CODE&supplier_name=$SUPPLIER&date_from=2026-04-01&limit=50" \
-H "X-API-Key: $OLYMPUS_API_KEY"{
"data": [{
"transaction_id": "ukspend:…",
"council_code": "…",
"payment_date": "…",
"amount": "…",
"supplier": {
"name": "…", "normalised_name": "…", "supplier_key": "…",
"redacted": false, "company_number": "…", "charity_number": null
},
"department": "…", "expense_type": "…", "description": "…",
"file_period": { "start": "…", "end": "…", "outside_period": false },
"provenance": { "source_url": "…", "source_version": "…", … }
}],
"meta": {
"datasets": [ … ],
"notices": [{ "code": "as_published", "message": "…" }],
"pagination": { "limit": 50, "has_more": true, "next_cursor": "…" }
}
}As published, nothing invented.
Amounts, dates and names are what each council publishes. Councils differ in their threshold (over £500, over £250 or all spend), in whether amounts include VAT and in which date they give. Every response says so in meta.notices, and each file's column mapping is returned with it.
Suppliers are grouped by a normalised name, which is not identity: a supplier is linked to a company only through a Companies House number the council publishes. Redacted payees stay redacted. GET /v1/uk-council-spending/coverage lists the councils, files and months loaded.
Transactions, suppliers, councils, coverage.
Transactions page newest first with a cursor. Supplier and council summaries add totals by month, council and expense type, and the shared identifier blocks for council areas and numbered suppliers.
| Endpoint | What it returns |
|---|---|
| GET/v1/uk-council-spending/transactions | Search payments |
| GET/v1/uk-council-spending/suppliers | Find suppliers and their totals |
| GET/v1/uk-council-spending/suppliers/{supplier_key} | Supplier summary |
| GET/v1/uk-council-spending/councils/{council_code} | Council summary |
| GET/v1/uk-council-spending/coverage | Councils served, their files and months |
Every council, the same fields.
Each council's headers are mapped onto the common fields; the mapping used for every file is part of the council summary, so you can check it against the original.
| Field | Meaning |
|---|---|
| council_code | The paying council, by its ONS GSS code, checked against the ONS names-and-codes lists. |
| payment_date, amount | As the council publishes them. Amounts are decimal strings in pounds; credits are negative. |
| supplier.name | The payee as published. |
| supplier.normalised_name | A documented grouping form of the name (LIMITED as LTD, & as AND, punctuation removed). |
| supplier.company_number | Only when the council's file publishes a Companies House number, validated. |
| supplier.redacted | The council redacted the payee, usually an individual. No name or number is given. |
| department, service, expense_type, description | The council's own classification, as published. |
| file_period, provenance | The file the line came from, its stated period and when this version was published. |
Limits
Published files only
Files are found through catalogue APIs (data.gov.uk and councils' own open data portals), never by reading web pages. A month a council has not published, or published only as PDF, is listed as missing.
No categorisation added
Departments and expense types are the council's own. There is no common spending category, VAT adjustment or reconciliation to the council's accounts.
Not included
Purchase card files, contracts and tenders, grants registers, and councils outside England until they are added to coverage.