Public Listener API
Search and analyse how UK councils spend public money. The API serves individual supplier payments (typically £500 and over) compiled from the transparency data councils publish, plus awarded contract notices from the UK Contracts Finder.
Free to use. No API key required. Data is updated daily.
https://council-api.arrakis.house/api
What's inside#
| Dataset | What it is |
|---|---|
| Transactions | Individual council payments to suppliers: date, vendor, amount, category, purpose |
| Councils | The local authorities covered, with population and publishing details |
| Awarded contracts | Public contract awards: title, supplier, value, dates, SME/VCSE flags |
Coverage#
39 local authorities across Greater Manchester and London, including the GMCA. Spending data runs from April 2025 onward; how complete each council's record is varies with what that council has published — see the live Coverage page for the current per-council picture.
REST API
All endpoints are GET and return JSON. Councils are identified by their slug
(e.g. manchester, tower-hamlets) — get the full list from /councils.
Fiscal years follow the UK convention (April–March): fiscalYear=2025 means
April 2025 – March 2026.
Councils#
GET /councils
All covered councils with slug, display name, population and publishing details.
curl "https://council-api.arrakis.house/api/councils"
GET /councils/coverage
Per-council data coverage: date range and transaction count. This is what the Coverage page renders.
curl "https://council-api.arrakis.house/api/councils/coverage"
Transactions#
GET /transactions
The main listing. Filter and page through payments.
| Parameter | Type | Notes |
|---|---|---|
council | string | council slug |
fiscalYear | int | e.g. 2025 for FY 2025/26 |
vendorSearch | string | case-insensitive supplier match |
startDate / endDate | date | ISO dates, inclusive |
page / pageSize | int | defaults 1 / 50 |
curl "https://council-api.arrakis.house/api/transactions?council=manchester&fiscalYear=2025&pageSize=2"
{
"council": "Manchester City Council",
"totalCount": 95613,
"page": 1,
"pageSize": 2,
"totalPages": 47807,
"transactions": [
{
"id": 1550259,
"date": "2025-12-02T00:00:00",
"vendor": "Master Moves Ltd",
"amount": 1577.59,
"currency": "GBP",
"category": "Equipment",
"purpose": "Removal Services",
"councilName": "Manchester City Council"
}
]
}
GET /transactions/search
Quick vendor search, optionally scoped to a council.
curl "https://council-api.arrakis.house/api/transactions/search?vendor=Amazon&council=hackney"
GET /transactions/summary
Totals for one council: ?council=<slug>.
GET /transactions/fiscal-years
Which fiscal years have data, optionally per council.
GET /transactions/export
Same filters as /transactions, returns a CSV download.
curl -o spending.csv "https://council-api.arrakis.house/api/transactions/export?council=salford&fiscalYear=2025"
Awarded contracts#
GET /awardedcontracts
Search public contract awards.
| Parameter | Type | Notes |
|---|---|---|
search | string | matches title, description, supplier |
organisation | string | exact awarding body name |
minValue / maxValue | decimal | awarded value range (GBP) |
awardedFrom / awardedTo | date | award date range |
page / pageSize | int | defaults 1 / 50 |
curl "https://council-api.arrakis.house/api/awardedcontracts?search=housing&minValue=100000"
GET /awardedcontracts/organisations
The awarding bodies present in the data.
GET /awardedcontracts/stats
Headline statistics across the contracts dataset.
Data dictionary
Transaction fields#
| Field | Meaning |
|---|---|
date | Payment date as reported by the council |
vendor | Supplier / beneficiary name as published. Names are not normalised — the same company can appear under several spellings |
amount | Payment value in GBP. Usually net of VAT, but this varies by council's published format |
currency | Always GBP at present |
category | The council's own category label (e.g. service area, merchant category). Vocabulary differs per council |
purpose | Free-text description of what the payment was for, where the council publishes one |
councilName | The paying authority |
Things to know before analysing#
- Negative amounts are real — they are credits and refunds, not errors.
- Fiscal years run April–March.
fiscalYear=2025covers 1 April 2025 to 31 March 2026. A payment in January 2026 belongs to fiscal year 2025. - Thresholds vary. Most councils publish payments of £500 and over; some publish from £250. Absence of small payments is a publishing choice, not missing data.
- Categories are not comparable across councils. Each council uses its own labels; comparing categories between councils requires your own mapping.
- Occasional date outliers exist in source data (e.g. clearly wrong years on a handful of rows). They are preserved as published.
Contract fields#
| Field | Meaning |
|---|---|
title / description | The contract notice text |
awardedSupplier | Winning supplier |
awardedValue | Awarded value in GBP |
awardedDate / publishedDate | Award and publication dates |
organisation | The awarding public body |
awardedToSme / awardedToVcse | Whether the winner is a small/medium enterprise or a voluntary/community organisation |
cpvDescription | Procurement classification (CPV) description |
Fair use
- No authentication and no API key. Please be reasonable: the data changes once a day, so there is nothing to gain from polling faster.
- Bulk needs are better served by the CSV export endpoint than by paging through thousands of JSON requests.
- No SLA — this is an independent project. Endpoints may evolve; changes will be noted on this page.
- The underlying data is public sector transparency data published by the councils themselves. If you build something on this API, attribution to Public Listener is appreciated but not required.