# UK council spending over £500, explained

> What spending over £500 do English councils have to publish, and how can I search it?

Under the Local Government Transparency Code 2015, local authorities in England "must publish details of each individual item of expenditure that exceeds £500", at least quarterly, with the date, the department, the beneficiary, the purpose, the amount, irrecoverable VAT and the merchant category. Each council publishes its own CSV or spreadsheet files in its own layout. The Olympus UK Council Spending API loads the files of the councils it covers into one schema, so you can search payments by council, supplier, date and amount, and `GET /v1/uk-council-spending/coverage` tells you exactly which councils, files and months are loaded.

## What the Transparency Code requires

The Local Government Transparency Code 2015, published by the UK government, applies to local authorities in England. Part 2 sets out what they must publish. For spending, paragraph 28 says: "Local authorities must publish details of each individual item of expenditure that exceeds £500." Paragraph 29 lists what must be published for each item:

- the date the expenditure was incurred
- the local authority department which incurred it
- the beneficiary
- a summary of the purpose of the expenditure
- the amount
- Value Added Tax that cannot be recovered
- the merchant category (for example computers, software)

The data must be "published quarterly thereafter and on each occasion not later than 1 month after the quarter to which the data and information is applicable" (paragraph 27). The Code also recommends going further: publishing monthly, or as soon as the data is available, and publishing transactions over £250 rather than £500 (paragraph 58). So some councils publish monthly, and some publish every payment over £250 or all spend.

Personal data is governed by data protection law: the Code tells authorities to make sure publication complies with it, while noting that naming suppliers, including sole traders, is not automatically prohibited. In practice councils redact many payments to individuals; these appear as "REDACTED", "Redacted Personal Data" or a blank name.

## What the files look like

There is no single national file. Each council lists its files in its own open data catalogue or on data.gov.uk, usually one file per month or quarter, with its own column names, date formats and conventions. Typical columns are a payment or posting date, a department or service, the supplier name, an expense type, a description, the amount and sometimes a Companies House or charity number.

The API maps each file onto one schema and keeps everything as published:

| Field | What it holds |
| --- | --- |
| `council_code` | The council's ONS GSS code, checked against the ONS lists at every load |
| `payment_date`, `amount` | As published; `amount` is a decimal string in pounds (`"1234.50"`), negative for credits |
| `supplier.name` | The supplier name as published |
| `supplier.normalised_name`, `supplier_key` | A normalised form for grouping spellings (not an identity) |
| `supplier.company_number` | Only when the council publishes a Companies House number |
| `supplier.redacted` | True when the council redacted the payee; no name is inferred |
| `department`, `service`, `expense_type`, `description` | The council's own categories |
| `file_period` | The period of the file the line came from; `outside_period` flags lines dated outside it |
| `provenance` | The source file URL, its period and name, and its checksum |

## Search payments

Start from coverage, then filter transactions by council, supplier, payment date and amount:

Coverage: councils, files and months:

```sh
curl -s "https://api.olympus.new-odyssey.com/v1/uk-council-spending/coverage" \
  -H "X-API-Key: $OLYMPUS_API_KEY"
```

Payments of £10,000 or more by one council since April 2026:

```sh
curl -s "https://api.olympus.new-odyssey.com/v1/uk-council-spending/transactions?council=$COUNCIL_CODE&amount_min=10000&date_from=2026-04-01&limit=50" \
  -H "X-API-Key: $OLYMPUS_API_KEY"
```

Every council's payments to a supplier, by name prefix:

```sh
curl -s -G "https://api.olympus.new-odyssey.com/v1/uk-council-spending/transactions" \
  --data-urlencode "supplier_name=$SUPPLIER" \
  -H "X-API-Key: $OLYMPUS_API_KEY"
```

`$COUNCIL_CODE` is a GSS code from coverage (for example `E08000035`) and `$SUPPLIER` the start of a supplier's name (at least three letters or digits). Results are newest first; pass `meta.pagination.next_cursor` back as `cursor`, with the same filters, for the next page. A cursor belongs to the release it was issued under, so start again after the data is republished. `GET /v1/uk-council-spending/suppliers` and `GET /v1/uk-council-spending/councils/{council_code}` return totals by supplier, council, month and expense type.

council_spending.py:

```python
import os
import requests

API = "https://api.olympus.new-odyssey.com"
HEADERS = {"X-API-Key": os.environ["OLYMPUS_API_KEY"]}

# 1. Which councils and months are covered?
cov = requests.get(f"{API}/v1/uk-council-spending/coverage", headers=HEADERS, timeout=30)
cov.raise_for_status()
councils = [c for c in cov.json()["data"]["councils"] if c["status"] == "published"]
for c in councils:
    months = c["months_with_payments"]
    print(c["council_code"], c["council_name"], c["threshold_label"],
          f"{months[0]}..{months[-1]}" if months else "-", "missing:", c["months_missing"])

# 2. Payments of £10,000 or more by the first published council, newest first.
if not councils:
    raise SystemExit("no council is published yet")
code = councils[0]["council_code"]
params = {"council": code, "amount_min": "10000", "limit": 50}
while True:
    r = requests.get(f"{API}/v1/uk-council-spending/transactions", params=params, headers=HEADERS, timeout=60)
    r.raise_for_status()
    body = r.json()
    for t in body["data"]:
        payee = "(redacted)" if t["supplier"]["redacted"] else t["supplier"]["name"]
        print(t["payment_date"], t["amount"], payee, t["expense_type"])
    cursor = body["meta"]["pagination"]["next_cursor"]
    if not cursor:
        break
    params["cursor"] = cursor
```

## Our coverage, and how to read it

The first release, on 2026-10-21, covers 12 English councils, with files from October 2025 onwards. Coverage is reported per council:

| Field | Meaning |
| --- | --- |
| `status` | `published`, or `not_loaded` with a `reason` (`not_yet_published`, `not_enabled`) |
| `threshold_label` | What the council's catalogue says it publishes, for example `over £500`, `over £250` or all spend |
| `file_periods`, `payment_dates` | The earliest and latest file period and payment date loaded |
| `months_with_payments` | Months that have at least one payment line |
| `months_missing` | Months between the first and last with payments that have none: a month the council hasn't published, published only as PDF, or whose file didn't load |
| `files_loaded`, `files_skipped` | Catalogue files loaded, and those not loaded (PDF, XLS, before the load window, a duplicate period) |
| `licence` | The licence as the council's catalogue entry states it |

Check `months_missing` before you total spending over a period: a missing month is a gap in the data, not a month with no spending. Councils not listed in coverage are not covered at all.

## Why coverage is partial

- **There is no central feed.** Each council publishes on its own site or catalogue, so each one is added, checked and monitored separately.
- **Files must be machine-readable and listed.** Files are found only through catalogue APIs (data.gov.uk or the council's own CKAN-compatible portal). Councils that publish only web pages or PDFs, or whose catalogue entries stopped updating, can't be loaded reliably.
- **Files change shape.** A new column name or a file that fails to load blocks that council's update rather than publishing wrong data; a council that has never loaded successfully is left out and listed as `not_loaded`.
- **Publication is late or irregular.** The Code allows a month after each quarter, and some councils publish later than that or skip months.
- **England only.** The Code applies to English local authorities; Scotland, Wales and Northern Ireland are not covered.

## As published

- Thresholds, VAT treatment and the date given (payment, posting or certification) differ by council and are not adjusted.
- Supplier grouping is by normalised name, which is not identity. Only a Companies House number a council publishes links a supplier to a company.
- Purchase card transactions, contracts, tenders and grants registers are not included.

> Contains public sector information licensed under the Open Government Licence, as each council's catalogue entry states. Olympus is not affiliated with or endorsed by any council, the ONS or the UK government.

## Sources

- GOV.UK: [Local government transparency code 2015](https://www.gov.uk/government/publications/local-government-transparency-code-2015/local-government-transparency-code-2015)
- GOV.UK: [Local government transparency code 2015 (publication page)](https://www.gov.uk/government/publications/local-government-transparency-code-2015)
- data.gov.uk: [Find open data](https://www.data.gov.uk/)

## Related

- [UK Council Spending API](https://olympus.new-odyssey.com/apis/uk-council-spending)
- [UK Council Spending API reference](https://olympus.new-odyssey.com/docs/uk-council-spending)
- [Methodology: UK Council Spending](https://olympus.new-odyssey.com/methodology/uk-council-spending)
- [Coverage and known limits](https://olympus.new-odyssey.com/coverage#uk-council-spending)

---
Published 2026-10-21, updated 2026-10-21 by New Odyssey. Canonical: https://olympus.new-odyssey.com/guides/uk-council-spending-over-500
