Nomisweb APInomisweb.co.uk ↗
Access UK resident population estimates, qualification levels, and a full Nomis dataset catalogue via 3 structured API endpoints covering ONS labour market data.
What is the Nomisweb API?
This API exposes 3 endpoints drawing from Nomis (Official Labour Market Statistics), the ONS-backed platform for UK labour and population data. Use get_resident_population to retrieve mid-year population estimates by local authority and year, get_qualifications to pull Annual Population Survey qualification counts for residents aged 16–64, or list_datasets to browse the full Nomis catalogue of labour market and census datasets.
curl -X GET 'https://api.parse.bot/scraper/e7adfedd-b405-4182-9141-8fe60da3c355/get_resident_population?year=2023&area_name=Camden' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace nomisweb-co-uk-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.nomis_web_api_scraper import Nomis, PopulationEstimate, QualificationReport, Dataset
nomis = Nomis()
# List all available datasets in the Nomis catalogue
for dataset in nomis.datasets.list():
print(dataset.id, dataset.name)
# Retrieve resident population estimate for a specific area and year
estimate = nomis.populationestimates.get(area_name="Camden", year="2023")
print(estimate.area_name, estimate.geogcode, estimate.population_count, estimate.year)
# Retrieve qualification levels for an area
report = nomis.qualificationreports.get(area_name="Westminster", time_period="2023-12")
print(report.area_name, report.time_period)
for qual in report.qualifications:
print(qual.qualification_level, qual.count, qual.status)
Retrieve resident population estimates from ONS dataset NM_31_1 for a given local authority area and year. Returns a single observation with population count, ONS geography code, and data quality status. The underlying dataset covers mid-year population estimates for England and Wales local authorities.
| Param | Type | Description |
|---|---|---|
| year | string | Year for population estimates (e.g. 2023, 2022, 2021). |
| area_name | string | Name of the local authority area (e.g. Camden, Westminster, Islington, Hackney, Tower Hamlets). |
{
"type": "object",
"fields": {
"year": "integer, the year of the estimate",
"status": "string, data quality status (e.g. Normal Value)",
"geogcode": "string, ONS geography code (e.g. E09000007)",
"area_name": "string, name of the geographic area",
"population_count": "integer, resident population count"
},
"sample": {
"data": {
"year": 2023,
"status": "Normal Value",
"geogcode": "E09000007",
"area_name": "Camden",
"population_count": 217235
},
"status": "success"
}
}About the Nomisweb API
Endpoints and Response Data
The get_resident_population endpoint queries dataset NM_31_1 and returns a single observation per request, scoped by area_name (e.g. Camden, Westminster) and year. The response includes population_count, the ONS geogcode (e.g. E09000007), the area_name, the year, and a status field indicating data quality (e.g. "Normal Value"). Coverage spans mid-year population estimates for local authority areas in England and Wales.
Qualifications Data
The get_qualifications endpoint draws from NM_17_1 (Annual Population Survey) and returns counts broken down by RQF qualification level for people aged 16–64 in a given local authority. The time_period parameter accepts a YYYY-MM format string where the month is the survey end month (e.g. 2023-12 for Jan–Dec 2023). The response includes a qualifications array where each object carries qualification_level, count, and status. Some values may be suppressed for statistical disclosure reasons, in which case count returns as an empty string.
Dataset Catalogue
The list_datasets endpoint returns the full Nomis catalogue with no required inputs. Each item in the datasets array carries an id (e.g. NM_1_1) and a human-readable name. This is useful for discovering dataset identifiers covering unemployment, claimant counts, census tables, and more — identifiers that correspond to data accessible in the other endpoints.
The Nomisweb API is a managed, monitored endpoint for nomisweb.co.uk — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when nomisweb.co.uk changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official nomisweb.co.uk API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Mapping local authority population size over multiple years using
population_countandgeogcodefields. - Comparing RQF qualification attainment across London boroughs using
get_qualificationstime-series data. - Identifying the ONS geography code for a named area to cross-reference with other ONS or OS datasets.
- Building a dashboard that tracks mid-year population changes by supplying different
yearvalues toget_resident_population. - Auditing available Nomis datasets via
list_datasetsbefore deciding which NM_ identifiers to query programmatically. - Flagging suppressed qualification counts in statistical analyses by checking the
statusfield in the qualifications response. - Generating annual workforce skills reports for a specific local authority by combining population and qualification data.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Nomis have an official developer API?+
What does `get_qualifications` return when a value is statistically suppressed?+
count field in the relevant qualifications array object returns as an empty string rather than an integer. The status field accompanying that object indicates why the value is not reported.Which geographies are covered by `get_resident_population`?+
Can I retrieve claimant count or unemployment rate data through this API?+
list_datasets), but are not exposed as dedicated endpoints. You can fork this API on Parse and revise it to add an endpoint targeting the relevant NM_ dataset identifier.How current is the population data returned by `get_resident_population`?+
year available lags the current calendar year. Pass a specific year parameter to control which release year you retrieve.