API reference

Every endpoint, its parameters and the fields it returns, generated from the API's own OpenAPI document. Examples use plumbers (5315) and Leeds.

Labour market information for the UK, built entirely from open data: what occupations pay, how many people work in them, and what the work involves.

Start here. Resolve a job title to an occupation with /v1/occupations/search?q=…, then use its four-digit SOC 2020 code with the other endpoints.

Authentication. Send your key in the X-API-Key header. The /v1/meta endpoints are open.

Before showing any figure, check presentable. Survey estimates vary in reliability; a figure marked unreliable should not be shown as a number. Read coverage, which says what a figure counts and when - pay counts employee jobs, employment counts people including the self-employed. A figure ONS withholds is null, never zero.

Attribution. The data is free to reuse, but its licences require you to credit it wherever you show it. For pay, employment and occupations: "Source: Office for National Statistics licensed under the Open Government Licence v.3.0". For skills: "This service uses the ESCO classification of the European Commission". Each response's provenance names the exact release.

This service uses the ESCO classification of the European Commission.

Errors use RFC 9457 problem details.

Find an occupation

List occupations

GET/v1/occupations

All 412 SOC 2020 unit groups with their place in the hierarchy and how many job titles the ONS coding index classifies to each.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations"

Response array of OccupationSummary

Show the 7 fields
  • soc2020string

    Four-digit SOC 2020 unit group code.

  • titlestring

    Its title.

  • majorGroupstring or null

    One-digit major group.

  • majorTitlestring or null

    Major group title.

  • subMajorGroupstring or null

    Two-digit sub-major group.

  • subMajorTitlestring or null

    Sub-major group title.

  • titleCountinteger

    Job titles the ONS coding index classifies to it.

Errors

  • 401The key is missing, unknown or revoked.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get an occupation

GET/v1/occupations/{soc}

The unit group's title, its place in the SOC 2020 hierarchy, its ISCO-08 mapping, a sample of the job titles classified to it, and in about the ONS description of the work and its typical tasks.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code, e.g. 5315.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315"

Response OccupationProfile

Show the 12 fields
  • soc2020string

    Four-digit unit group code, e.g. "5315".

  • titlestring

    Official unit group title.

  • minorGroupstring or null

    Three-digit minor group code.

  • minorTitlestring or null

    Minor group title.

  • subMajorGroupstring or null

    Two-digit sub-major group code.

  • subMajorTitlestring or null

    Sub-major group title.

  • majorGroupstring or null

    One-digit major group code.

  • majorTitlestring or null

    Major group title.

  • isco08string or null

    The international ISCO-08 group this maps to, used to join skills data.

  • titleCountinteger

    How many job titles in the ONS coding index map to this unit group.

  • examplesarray of string

    A sample of those job titles, default titles first.

  • aboutOccupationAbout or null

    What the job involves, in ONS's words. Null until SOC 2020 Volume 1 has been ingested.

    3 fields in about
    • descriptionstring

      What people in the occupation do.

    • tasksarray of string

      Typical tasks. Each continues "Job holders in this occupation..." so starts in lower case, e.g. "examines drawings and specifications to determine layout of system".

    • provenanceProvenance

      Where the description came from.

      6 fields in provenance
      • sourcestring

        Name of the upstream dataset.

      • publisherstring

        Organisation that publishes it.

      • licencestring

        Licence the data is reused under. Most require attribution; see the attribution guide.

      • editionstring

        The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

      • publisheddate-time or null

        When this service began serving that release.

      • urlstring

        The publisher's page for the dataset.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Find occupations matching a job title

GET/v1/occupations/search

Resolves free text - "plumber", "plumbers mate", even a misspelling - to SOC 2020 unit groups, using the 32,000 job titles in the ONS coding index. Results are ranked occupations, not ranked synonyms: each unit group appears once, with the job title that matched it best. An exact match always ranks first. The index already separates similar-sounding jobs that are classified differently, such as a plumber (5315, a skilled trade) and a plumber's mate (9129, an elementary occupation).

Parameters

  • qstring, queryRequired

    The job title to look up.

  • limitinteger, query

    Maximum results, 1-50. Default 10.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/search?q=plumber"

Response array of OccupationMatch

Show the 6 fields
  • soc2020string

    Four-digit SOC 2020 unit group code. Use it with every other endpoint.

  • titlestring

    The unit group's official title.

  • matchedTitlestring

    The job title from the ONS coding index that matched the query.

  • qualifierstring or null

    Context that distinguishes this title from an identical one classified elsewhere, e.g. "coal mine: below ground". Null when none.

  • confidencenumber

    1.0 for an exact match; otherwise a similarity score between 0 and 1.

  • matchTypestring

    "exact" or "fuzzy".

Errors

  • 400A parameter is invalid; the detail lists the valid values.
  • 401The key is missing, unknown or revoked.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get every job title classified to an occupation

GET/v1/occupations/{soc}/titles

The ONS coding index's job titles for the unit group, in natural word order, with the qualifier that some carry - "Engineer" in one industry codes differently from "Engineer" in another. For building search over job titles; /search does the matching for you.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/titles"

Response array of OccupationTitle

Show the 2 fields
  • titlestring

    The title in natural word order, e.g. "Plumber's mate".

  • qualifierstring or null

    Industry or context that decides the code for an otherwise ambiguous title, if any.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Pay

Get pay for an occupation

GET/v1/occupations/{soc}/pay

The full pay distribution - median, mean and percentiles - for one occupation, area, year and breakdown, from the ONS Annual Survey of Hours and Earnings. Defaults to gross annual pay for all employees in the UK in the latest year.

Check presentable before showing a figure, and pass on coverage: ASHE counts employee jobs only, so it says nothing about self-employed people in the occupation. Figures are provisional until ONS revises them the following spring. Any figure ONS withholds is null, never zero.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

  • measurestring, query

    Pay measure. Default annual_pay_gross.

    One of weekly_pay_gross, weekly_pay_excl_overtime, basic_pay_incl_other, overtime_pay, hourly_pay_gross, hourly_pay_excl_overtime, annual_pay_gross, annual_pay_incentive, hours_paid_total, hours_paid_basic, hours_paid_overtime

  • sexstring, query

    all, male or female. Default all.

    One of all, male, female

  • patternstring, query

    all, fulltime or parttime. Default all.

    One of all, fulltime, parttime

  • yearinteger, query

    Reference year. Default the latest published.

  • editionuuid, query

    Pin an exact release by its id from /v1/meta/editions, e.g. to keep figures stable through an academic year. Overrides year.

  • areastring, query

    uk (default), an English region, wales or scotland.

    One of uk, wales, scotland, north-east, north-west, yorkshire-and-the-humber, east-midlands, west-midlands, east-of-england, london, south-east, south-west

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/pay"

Response PayResponse

Show the 18 fields
  • soc2020string

    Four-digit SOC 2020 unit group code.

  • titlestring

    Unit group title.

  • areaAreaSummary

    The area the figure covers.

    3 fields in area
    • codestring

      GSS code, e.g. "E12000007".

    • slugstring

      The name to pass as ?area=, e.g. "london".

    • namestring

      Display name, e.g. "London".

  • yearinteger

    Reference year.

  • referencePeriodstring

    Exactly what period the figure describes, which depends on the measure.

  • provisionalboolean

    True until ONS publishes its revised figures the following spring.

  • measurestring

    Which pay measure, e.g. "annual_pay_gross".

  • unitstring

    Unit of every figure in the response, e.g. "gbp_per_year".

  • sexstring

    "all", "male" or "female".

  • workPatternstring

    "all", "fulltime" or "parttime".

  • meannumber or null

    Mean pay. Pulled upwards by a small number of high earners; prefer the median.

  • distributionPayDistribution

    Median and percentiles.

    11 fields in distribution
    • p10number or null

      10th percentile: 10% of jobs pay less than this.

    • p20number or null

      20th percentile.

    • p25number or null

      25th percentile (lower quartile).

    • p30number or null

      30th percentile.

    • p40number or null

      40th percentile.

    • mediannumber or null

      Median - the typical figure, and ONS's preferred average.

    • p60number or null

      60th percentile.

    • p70number or null

      70th percentile.

    • p75number or null

      75th percentile (upper quartile).

    • p80number or null

      80th percentile.

    • p90number or null

      90th percentile. Often withheld for high-paying occupations.

  • employeeJobsThousandsnumber or null

    Indicative number of employee jobs, in thousands. ONS warns these are not accurate estimates.

  • percentChangenumber or null

    Change in the median on the previous year, in percent.

  • qualitystring

    Reliability band of the median: precise, reasonable, acceptable or unreliable.

  • presentableboolean

    False when the figure should not be shown to users as a number.

  • coverageCoverage

    What the figure counts and when.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where the figure came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 400A parameter is invalid; the detail lists the valid values.
  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get pay for an occupation over time

GET/v1/occupations/{soc}/pay/series

Median and mean pay for every published year, oldest first. Each point says whether it is provisional - mark those on a chart, because ONS will still revise them. Withheld years are included with null values, so a gap in a chart can be shown as a gap.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

  • measurestring, query

    Pay measure. Default annual_pay_gross.

    One of weekly_pay_gross, weekly_pay_excl_overtime, basic_pay_incl_other, overtime_pay, hourly_pay_gross, hourly_pay_excl_overtime, annual_pay_gross, annual_pay_incentive, hours_paid_total, hours_paid_basic, hours_paid_overtime

  • sexstring, query

    all, male or female. Default all.

    One of all, male, female

  • patternstring, query

    all, fulltime or parttime. Default all.

    One of all, fulltime, parttime

  • areastring, query

    uk (default), an English region, wales or scotland.

    One of uk, wales, scotland, north-east, north-west, yorkshire-and-the-humber, east-midlands, west-midlands, east-of-england, london, south-east, south-west

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/pay/series"

Response PaySeriesResponse

Show the 9 fields
  • soc2020string

    Four-digit SOC 2020 unit group code.

  • titlestring

    Unit group title.

  • areaAreaSummary

    The area the series covers.

    3 fields in area
    • codestring

      GSS code, e.g. "E12000007".

    • slugstring

      The name to pass as ?area=, e.g. "london".

    • namestring

      Display name, e.g. "London".

  • measurestring

    Which pay measure.

  • unitstring

    Unit of every figure.

  • sexstring

    "all", "male" or "female".

  • workPatternstring

    "all", "fulltime" or "parttime".

  • coverageCoverage

    What the figures count. Each point carries its own reference period.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • pointsarray of PaySeriesPoint

    One point per published year, oldest first.

    7 fields in points
    • yearinteger

      Reference year.

    • referencePeriodstring

      Exactly what period this point describes.

    • provisionalboolean

      True when ONS will still revise this year. Mark it as such on a chart.

    • mediannumber or null

      Median pay. Null where withheld.

    • meannumber or null

      Mean pay. Null where withheld.

    • employeeJobsThousandsnumber or null

      Indicative employee jobs, in thousands.

    • qualitystring

      Reliability band of the median.

Errors

  • 400A parameter is invalid; the detail lists the valid values.
  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Compare pay for an occupation across regions

GET/v1/occupations/{soc}/pay/regions

Median pay in each English region, Wales and Scotland, with the UK figure for the same year and each region's difference from it. Regions are by workplace - where the job is, not where the employee lives. Regions ONS withholds are still listed, with a null median, so a map can show "not published" rather than leave a hole. Northern Ireland is not published at this level. Regional pay covers annual, weekly and hourly gross pay.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

  • measurestring, query

    annual_pay_gross (default), weekly_pay_gross or hourly_pay_gross.

    One of annual_pay_gross, weekly_pay_gross, hourly_pay_gross

  • sexstring, query

    all, male or female. Default all.

    One of all, male, female

  • patternstring, query

    all, fulltime or parttime. Default all.

    One of all, fulltime, parttime

  • yearinteger, query

    Reference year. Default the latest published.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/pay/regions"

Response RegionalPayResponse

Show the 13 fields
  • soc2020string

    Four-digit SOC 2020 unit group code.

  • titlestring

    Unit group title.

  • yearinteger

    Reference year.

  • referencePeriodstring

    Exactly what period the figures describe.

  • provisionalboolean

    True until ONS publishes revised figures.

  • measurestring

    Which pay measure.

  • unitstring

    Unit of every figure.

  • sexstring

    "all", "male" or "female".

  • workPatternstring

    "all", "fulltime" or "parttime".

  • ukUkPayFigure or null

    The UK figure for comparison. Null if unavailable.

    2 fields in uk
    • mediannumber or null

      UK median for the same occupation, year and breakdown.

    • qualitystring

      Its reliability band.

  • regionsarray of RegionalPayFigure

    Every region, highest median first; withheld regions last.

    6 fields in regions
    • areaAreaSummary

      The region.

      3 fields in area
      • codestring

        GSS code, e.g. "E12000007".

      • slugstring

        The name to pass as ?area=, e.g. "london".

      • namestring

        Display name, e.g. "London".

    • mediannumber or null

      Median pay. Null where ONS withholds it; the region is still listed.

    • meannumber or null

      Mean pay. Null where withheld.

    • qualitystring

      Reliability band of the median.

    • presentableboolean

      False when the figure should not be shown as a number.

    • relativeToUkPercentnumber or null

      How far the median sits above (+) or below (-) the UK median. Null unless both figures can be shown.

  • coverageCoverage

    What the figures count and when.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where the figures came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 400A parameter is invalid; the detail lists the valid values.
  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

People and demand

Get sponsored work visas for an occupation

GET/v1/occupations/{soc}/visas

How many people were granted visas to come to the UK to work in the occupation, from the Home Office's quarterly immigration statistics: every quarter since Q4 2024, and the latest four quarters broken down by visa route, nationality and the sponsor's industry, with the occupation's rank among all occupations.

A measure of how far employers recruit from abroad for the occupation, not of how many vacancies it has.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/visas"

Response VisaResponse

Show the 6 fields
  • soc2020string

    The occupation.

  • titlestring

    Its title.

  • latestYearVisaYear

    The latest four quarters, with breakdowns.

    9 fields in latestYear
    • fromstring

      First quarter, e.g. "2025 Q3".

    • tostring

      Last quarter, e.g. "2026 Q2".

    • applicationsinteger

      Applications in the period.

    • grantsinteger

      Grants in the period.

    • rankinteger or null

      The occupation's rank by grants among all occupations in the period, 1 being the most. Null when it had none.

    • occupationsRankedinteger

      How many occupations had at least one grant in the period.

    • routesarray of VisaShare

      Grants by visa route, largest first.

      3 fields in routes
      • namestring

        The route, nationality or industry.

      • grantsinteger

        Grants in the period.

      • percentnumber

        Share of the occupation's grants in the period.

    • nationalitiesarray of VisaShare

      The ten nationalities granted most, largest first.

      3 fields in nationalities
      • namestring

        The route, nationality or industry.

      • grantsinteger

        Grants in the period.

      • percentnumber

        Share of the occupation's grants in the period.

    • industriesarray of VisaShare

      The five industries sponsors gave most, largest first. Self-assigned by sponsors.

      3 fields in industries
      • namestring

        The route, nationality or industry.

      • grantsinteger

        Grants in the period.

      • percentnumber

        Share of the occupation's grants in the period.

  • quartersarray of VisaQuarter

    Every quarter since Q4 2024, the first coded to four-digit occupations, oldest first. Quarters with no visas are zero.

    6 fields in quarters
    • periodstring

      "2026 Q2".

    • yearinteger

      Calendar year.

    • quarterinteger

      Calendar quarter, 1 to 4.

    • applicationsinteger

      Applications made in the quarter.

    • grantsinteger

      Visas granted in the quarter, possibly for applications made earlier.

    • provisionalboolean

      True when the Home Office has said it will revise the quarter.

  • coverageCoverage

    What the figures count.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where they came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get whether an occupation is in demand

GET/v1/occupations/{soc}/demand

The occupation's level in the DfE / Skills England Occupations in Demand index - critical, elevated or not in high demand - and which of the five indicators behind it were signalling. previous is the year before, re-assessed on the same method, so the two can be compared.

Show uncertainty, imputation and capping where present: they are the publisher's own caveats on this occupation.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/demand"

Response DemandResponse

Show the 7 fields
  • soc2020string

    The occupation.

  • titlestring

    Its title.

  • latestDemandYear

    The latest assessment.

    8 fields in latest
    • yearinteger

      The assessment year.

    • levelstring

      "critical", "elevated" or "not_in_high_demand".

    • demandIndexnumber or null

      The average of the five indicators; higher is more demand. It ranks occupations but does not decide the level. Compare occupations within a year, not across years.

    • indicatorsarray of DemandIndicator

      Each indicator's signal.

      3 fields in indicators
      • indicatorstring

        visa_grants, online_job_adverts, wage_growth, wage_premium or hours_worked.

      • signalstring

        "critical", "elevated" or "none".

      • measuresstring

        What the indicator measures.

    • uncertaintystring or null

      The publisher's note on indicators whose data is uncertain, or null if none.

    • imputationstring or null

      The publisher's note on indicators filled in from the occupation's three-digit group for lack of data, or null if none.

    • cappingstring or null

      The publisher's note on indicators held at elevated because they were imputed, or null if none.

    • onImmigrationSalaryListboolean or null

      Whether the occupation was on the Immigration Salary List when assessed.

  • previousDemandYear or null

    The year before, re-assessed by the publisher on the same method, for comparison. Null if there is none.

    8 fields in previous
    • yearinteger

      The assessment year.

    • levelstring

      "critical", "elevated" or "not_in_high_demand".

    • demandIndexnumber or null

      The average of the five indicators; higher is more demand. It ranks occupations but does not decide the level. Compare occupations within a year, not across years.

    • indicatorsarray of DemandIndicator

      Each indicator's signal.

      3 fields in indicators
      • indicatorstring

        visa_grants, online_job_adverts, wage_growth, wage_premium or hours_worked.

      • signalstring

        "critical", "elevated" or "none".

      • measuresstring

        What the indicator measures.

    • uncertaintystring or null

      The publisher's note on indicators whose data is uncertain, or null if none.

    • imputationstring or null

      The publisher's note on indicators filled in from the occupation's three-digit group for lack of data, or null if none.

    • cappingstring or null

      The publisher's note on indicators held at elevated because they were imputed, or null if none.

    • onImmigrationSalaryListboolean or null

      Whether the occupation was on the Immigration Salary List when assessed.

  • definitionsstring

    What the levels mean and how they are decided.

  • coverageCoverage

    What the assessment covers.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where it came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get skill shortages for an occupation

GET/v1/occupations/{soc}/vacancies

How many vacancies employers had in the occupation, how many were hard to fill, and how many were hard to fill because applicants lacked the skills - the standard measure of a skill shortage. From the Employer Skills Survey.

The survey withholds figures based on fewer than 30 employers, which rules out most four-digit occupations. The response uses the finest level the survey published - the occupation itself where possible, otherwise its minor, sub-major or major group - and group and derivation say which. allOccupations gives the same measures for the whole economy for comparison.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

  • areastring, query

    uk (default) or a nation. The survey does not publish occupation figures for English regions.

    One of uk, england, wales, scotland, northern-ireland

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/vacancies"

Response VacancyResponse

Show the 11 fields
  • soc2020string

    The four-digit occupation asked about.

  • titlestring

    Its title.

  • groupVacancyGroup

    The group the figures are actually for: the finest level the survey published for this area.

    3 fields in group
    • codestring

      SOC 2020 code at that level.

    • titlestring

      Group title.

    • levelstring

      "unit group", "minor group", "sub-major group" or "major group".

  • areaAreaSummary

    The area.

    3 fields in area
    • codestring

      GSS code, e.g. "E12000007".

    • slugstring

      The name to pass as ?area=, e.g. "london".

    • namestring

      Display name, e.g. "London".

  • latestVacancyYear

    The latest survey year.

    8 fields in latest
    • yearinteger

      Survey year.

    • vacanciesinteger or null

      Vacancies at the time of the survey, nearest 100. Null when withheld.

    • hardToFillinteger or null

      Vacancies employers described as hard to fill, nearest 100.

    • skillShortageinteger or null

      Hard-to-fill vacancies where the reason was applicants lacking skills, qualifications or experience, nearest 100.

    • hardToFillPercentnumber or null

      Hard-to-fill vacancies as a percentage of all vacancies in the group.

    • skillShortagePercentnumber or null

      Skill-shortage vacancies as a percentage of all vacancies in the group. The usual headline measure of a shortage.

    • employersReportinginteger or null

      Employers in the survey with a vacancy in the group, the base for the figures. Null when confidential.

    • presentableboolean

      False when the survey withheld the figures for too small a sample.

  • previousVacancyYear or null

    The survey before, at the same level, for comparison. Null if there is none.

    8 fields in previous
    • yearinteger

      Survey year.

    • vacanciesinteger or null

      Vacancies at the time of the survey, nearest 100. Null when withheld.

    • hardToFillinteger or null

      Vacancies employers described as hard to fill, nearest 100.

    • skillShortageinteger or null

      Hard-to-fill vacancies where the reason was applicants lacking skills, qualifications or experience, nearest 100.

    • hardToFillPercentnumber or null

      Hard-to-fill vacancies as a percentage of all vacancies in the group.

    • skillShortagePercentnumber or null

      Skill-shortage vacancies as a percentage of all vacancies in the group. The usual headline measure of a shortage.

    • employersReportinginteger or null

      Employers in the survey with a vacancy in the group, the base for the figures. Null when confidential.

    • presentableboolean

      False when the survey withheld the figures for too small a sample.

  • allOccupationsVacancyYear

    The same measures across all occupations in the area and year, for context.

    8 fields in allOccupations
    • yearinteger

      Survey year.

    • vacanciesinteger or null

      Vacancies at the time of the survey, nearest 100. Null when withheld.

    • hardToFillinteger or null

      Vacancies employers described as hard to fill, nearest 100.

    • skillShortageinteger or null

      Hard-to-fill vacancies where the reason was applicants lacking skills, qualifications or experience, nearest 100.

    • hardToFillPercentnumber or null

      Hard-to-fill vacancies as a percentage of all vacancies in the group.

    • skillShortagePercentnumber or null

      Skill-shortage vacancies as a percentage of all vacancies in the group. The usual headline measure of a shortage.

    • employersReportinginteger or null

      Employers in the survey with a vacancy in the group, the base for the figures. Null when confidential.

    • presentableboolean

      False when the survey withheld the figures for too small a sample.

  • derivationstring

    Why the figures are at this level. Pass this on when it is not the unit group.

  • definitionsstring

    What hard-to-fill and skill-shortage vacancies mean.

  • coverageCoverage

    What the figures count and when.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where the figures came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 400A parameter is invalid; the detail lists the valid values.
  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get who works in an occupation

GET/v1/occupations/{soc}/workforce

The occupation's workforce by age band, by highest qualification and by industry, from the Annual Population Survey, with headline shares: aged under 25, aged 55 and over, and holding a degree.

Each figure carries a quality band. Show acceptable figures with a caution and never show unreliable ones, which ONS withheld.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/workforce"

Response WorkforceResponse

Show the 11 fields
  • soc2020string

    The occupation.

  • titlestring

    Its title.

  • peopleinteger

    People in employment in the occupation, summed over age bands.

  • agedUnder25Percentnumber or null

    Share aged 16 to 24. Null if any band in it is withheld.

  • aged55AndOverPercentnumber or null

    Share aged 55 and over, who will retire over the coming decade or so. Null if any band in it is withheld.

  • degreePercentnumber or null

    Share whose highest qualification is a degree or equivalent. Null if withheld.

  • ageBandsarray of WorkforceShare

    People by age band, youngest first.

    6 fields in ageBands
    • codestring

      The category's code: an age band number, a qualification number, or a SIC 2007 class like "43.22".

    • namestring

      What the category is.

    • peopleinteger or null

      People in employment in the occupation and category. Null when withheld for too small a sample.

    • percentnumber or null

      Share of the occupation's workforce. Null when withheld.

    • qualitystring

      "reasonable" (larger sample), "acceptable" (small sample: use with caution) or "unreliable" (withheld).

    • presentableboolean

      False when withheld.

  • qualificationsarray of WorkforceShare

    People by highest qualification held, in the release's order (highest first).

    6 fields in qualifications
    • codestring

      The category's code: an age band number, a qualification number, or a SIC 2007 class like "43.22".

    • namestring

      What the category is.

    • peopleinteger or null

      People in employment in the occupation and category. Null when withheld for too small a sample.

    • percentnumber or null

      Share of the occupation's workforce. Null when withheld.

    • qualitystring

      "reasonable" (larger sample), "acceptable" (small sample: use with caution) or "unreliable" (withheld).

    • presentableboolean

      False when withheld.

  • industriesarray of WorkforceShare

    The ten industries employing most of the occupation, largest first; withheld industries are left out.

    6 fields in industries
    • codestring

      The category's code: an age band number, a qualification number, or a SIC 2007 class like "43.22".

    • namestring

      What the category is.

    • peopleinteger or null

      People in employment in the occupation and category. Null when withheld for too small a sample.

    • percentnumber or null

      Share of the occupation's workforce. Null when withheld.

    • qualitystring

      "reasonable" (larger sample), "acceptable" (small sample: use with caution) or "unreliable" (withheld).

    • presentableboolean

      False when withheld.

  • coverageCoverage

    What the figures count and when.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where they came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get employment for an occupation

GET/v1/occupations/{soc}/employment

How many people work in the occupation, how that has changed year by year, and who they are - the shares who are women, part-time and self-employed - from the ONS Annual Population Survey.

Available for the UK and each nation only; the breakdown is UK-only and null for a nation. These figures count people, including the self-employed, so they differ from the job counts that accompany pay. notes flags when a large self-employed share means pay figures describe only part of the occupation - worth passing on to users.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

  • areastring, query

    uk (default), england, wales, scotland or northern-ireland.

    One of uk, england, wales, scotland, northern-ireland

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/employment"

Response EmploymentResponse

Show the 10 fields
  • soc2020string

    Four-digit SOC 2020 unit group code.

  • titlestring

    Unit group title.

  • areaAreaSummary

    The area.

    3 fields in area
    • codestring

      GSS code, e.g. "E12000007".

    • slugstring

      The name to pass as ?area=, e.g. "london".

    • namestring

      Display name, e.g. "London".

  • periodstring or null

    The most recent survey period, e.g. "Apr 2025-Mar 2026".

  • employmentEmploymentFigure or null

    The headline figure for that period.

    5 fields in employment
    • countinteger or null

      People in employment. Null where withheld.

    • confidenceIntervalinteger or null

      Half-width of the 95% confidence interval: the true figure is likely within this many people either side.

    • qualitystring

      Reliability band: precise, reasonable, acceptable or unreliable.

    • presentableboolean

      False when the figure should not be shown as a number.

    • shareOfAllEmploymentPercentnumber or null

      The occupation's share of everyone in employment in the area.

  • breakdownEmploymentBreakdown

    Shares by sex, working pattern and self-employment (UK only).

    3 fields in breakdown
    • femaleEmploymentShare or null

      Women in the occupation.

      4 fields in female
      • countinteger

        People in the group.

      • percentnumber

        The group as a percentage of everyone in the occupation.

      • qualitystring

        Reliability band. Shares often rest on small samples; check before showing.

      • presentableboolean

        False when the figure should not be shown as a number.

    • partTimeEmploymentShare or null

      People working part-time.

      4 fields in partTime
      • countinteger

        People in the group.

      • percentnumber

        The group as a percentage of everyone in the occupation.

      • qualitystring

        Reliability band. Shares often rest on small samples; check before showing.

      • presentableboolean

        False when the figure should not be shown as a number.

    • selfEmployedEmploymentShare or null

      Self-employed people. Pay figures do not cover this group.

      4 fields in selfEmployed
      • countinteger

        People in the group.

      • percentnumber

        The group as a percentage of everyone in the occupation.

      • qualitystring

        Reliability band. Shares often rest on small samples; check before showing.

      • presentableboolean

        False when the figure should not be shown as a number.

  • seriesarray of EmploymentSeriesPoint

    Calendar-year figures, oldest first.

    5 fields in series
    • yearinteger

      Calendar year.

    • periodstring

      The survey period, e.g. "Jan 2024-Dec 2024".

    • countinteger or null

      People in employment. Null where withheld.

    • confidenceIntervalinteger or null

      Half-width of the 95% confidence interval.

    • qualitystring

      Reliability band.

  • notesarray of string

    Caveats to pass on, e.g. when pay figures describe only part of the occupation.

  • coverageCoverage

    What the figures count and when.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where the figures came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 400A parameter is invalid; the detail lists the valid values.
  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get the employment outlook for an occupation

GET/v1/occupations/{soc}/projections

Whether the occupation's broad group is projected to grow or shrink to 2035, and how many job openings it is expected to have - from growth and from replacing people who retire or leave. Openings are usually large even for a shrinking group, which is often the more useful message.

From the Department for Education's projections (The Skills Imperative 2035). They exist only for SOC 2020 sub-major groups, each covering about sixteen occupations, so the figures are for the occupation's group and derivation says which. They are modelled trends, not forecasts; pass on accuracy. Figures for a group under 10,000 jobs in an area are null and marked not presentable: the publisher asks users not to publish them. Wherever the figures are shown, the publisher requires citation.

byQualification splits the outlook by the highest qualification workers hold, so you can say which levels the openings are for. These cells are smaller and so more often below the 10,000 threshold, particularly in regions.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

  • areastring, query

    uk (default), a nation, or an English region.

    One of uk, england, wales, scotland, northern-ireland, north-east, north-west, yorkshire-and-the-humber, east-midlands, west-midlands, east-of-england, london, south-east, south-west

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/projections"

Response ProjectionResponse

Show the 12 fields
  • soc2020string

    The four-digit occupation asked about.

  • titlestring

    Its title.

  • groupProjectionGroup

    The sub-major group the figures are actually for.

    3 fields in group
    • codestring

      Two-digit SOC 2020 sub-major group code, e.g. "53".

    • titlestring

      Sub-major group title.

    • unitGroupsinteger

      How many four-digit occupations the group contains. The projection covers them all together.

  • areaAreaSummary

    The area.

    3 fields in area
    • codestring

      GSS code, e.g. "E12000007".

    • slugstring

      The name to pass as ?area=, e.g. "london".

    • namestring

      Display name, e.g. "London".

  • outlookProjectionOutlook

    Change and job openings over the projection period.

    10 fields in outlook
    • baseYearinteger

      Start of the period (2020).

    • targetYearinteger

      End of the period (2035).

    • employmentBaseinteger or null

      Jobs at the start, nearest 1,000.

    • employmentTargetinteger or null

      Jobs at the end, nearest 1,000.

    • netChangeinteger or null

      Target minus base, nearest 1,000. Negative for a shrinking group.

    • netChangePercentnumber or null

      Net change as a percentage of the base.

    • directionstring

      "growing", "declining", or "little change" where the net change is under 1,000.

    • replacementDemandinteger or null

      Openings from people leaving the workforce - retirement, family, mortality - over the period, nearest 1,000.

    • totalRequirementinteger or null

      Net change plus replacement demand: all the new workers needed over the period. Usually positive even for a shrinking group.

    • presentableboolean

      False when the group is below 10,000 jobs in this area. The figures are then null: the publisher asks users not to publish them.

  • seriesarray of ProjectionPoint

    Employment year by year, 2010-2035.

    4 fields in series
    • yearinteger

      Year.

    • employmentinteger or null

      Jobs in the group, rounded to the nearest 1,000 as the publisher advises. Null below 10,000, which the publisher asks users not to publish.

    • projectedboolean

      False up to 2020 (the modellers' historical estimates); true from 2021, including years that have since passed.

    • presentableboolean

      False below 10,000, the publisher's minimum for publishing a figure.

  • byQualificationarray of QualificationOutlook

    The outlook split by the highest qualification workers hold, highest level first. Shows which qualifications the openings are for.

    10 fields in byQualification
    • qualificationstring

      Key: rqf8 down to rqf1, or none.

    • rqfinteger or null

      Level on the Regulated Qualifications Framework; null for no qualification.

    • labelstring

      What the level means, e.g. "First degree".

    • employmentBaseinteger or null

      Jobs held by people at this level at the start, nearest 1,000.

    • employmentTargetinteger or null

      At the end, nearest 1,000.

    • netChangeinteger or null

      Target minus base, nearest 1,000. Often negative for lower levels as qualification levels rise across the workforce.

    • replacementDemandinteger or null

      Openings from people at this level leaving, nearest 1,000.

    • totalRequirementinteger or null

      New workers needed at this level, nearest 1,000. Can be negative where a level is being displaced faster than people leave.

    • sharePercentnumber or null

      This level's share of the group's total requirement. Null when the total is not positive.

    • presentableboolean

      False when employment at this level is under 10,000 in this area. The figures are then null: the publisher asks users not to publish them.

  • derivationstring

    How the figures relate to the occupation asked about. Pass this on.

  • accuracystring

    How accurate projections like these have proved, from the publisher's own assessment.

  • coverageCoverage

    What the figures count and when.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • citationstring

    The citation the publisher requires wherever these figures are shown.

  • provenanceProvenance

    Where the figures came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 400A parameter is invalid; the detail lists the valid values.
  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Job adverts

Get new online job adverts for an occupation

GET/v1/occupations/{soc}/job-adverts

How many new job adverts appeared online for the occupation each month since January 2017, from ONS's labour demand volumes, with the latest twelve months totalled, compared with the twelve before, and ranked against every other occupation.

ONS has suppressed some recent months after source problems; those are null and left out of totals, and monthsSuppressed says how many. Show notices alongside any recent figures.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

  • areastring, query

    uk (default), a nation, or an English region.

    One of uk, wales, scotland, north-east, north-west, yorkshire-and-the-humber, east-midlands, west-midlands, east-of-england, london, south-east, south-west

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/job-adverts"

Response JobAdvertResponse

Show the 8 fields
  • soc2020string

    The occupation.

  • titlestring

    Its title.

  • areaAreaSummary

    The area.

    3 fields in area
    • codestring

      GSS code, e.g. "E12000007".

    • slugstring

      The name to pass as ?area=, e.g. "london".

    • namestring

      Display name, e.g. "London".

  • latestYearJobAdvertYear

    The latest twelve months, with change and rank.

    8 fields in latestYear
    • fromstring

      First month, "2025-09".

    • tostring

      Last month, "2026-08".

    • advertsinteger

      New adverts over the months ONS published. Lower than the true total when any month is suppressed.

    • monthsSuppressedinteger

      Months in the period ONS suppressed, which adverts leaves out.

    • averagePerMonthnumber or null

      Average new adverts per published month. Compare occupations on this rather than adverts, since ONS suppresses different months for different occupations.

    • changePercentnumber or null

      Change on the twelve months before, comparing only months published in both periods. Null if there are none.

    • rankinteger

      The occupation's rank by averagePerMonth among all occupations in the area, 1 being the most.

    • occupationsRankedinteger

      Occupations ranked.

  • monthsarray of JobAdvertMonth

    Every month since January 2017, oldest first.

    2 fields in months
    • monthstring

      "2026-08".

    • advertsinteger or null

      Adverts that first appeared online in the month. Null where ONS suppressed the month for quality.

  • noticesarray of JobAdvertNoticeItem

    ONS's data quality notices for this release. Show them alongside recent months.

    2 fields in notices
    • headingstring

      e.g. "Data issue - March 2026".

    • textstring

      What ONS said.

  • coverageCoverage

    What the figures count.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where they came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 400A parameter is invalid; the detail lists the valid values.
  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get where an occupation's jobs are advertised

GET/v1/occupations/{soc}/job-adverts/local

Every local area with new online job adverts for the occupation over the latest four quarters, most first. perThousand is the occupation's share of all adverts in the area, and concentration compares it with the UK: above 1 means the occupation is more in evidence there than nationally.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/job-adverts/local"

Response LocalAdvertAreasResponse

Show the 6 fields
  • soc2020string

    The occupation.

  • titlestring

    Its title.

  • areasarray of LocalAdvertArea

    Every area with adverts for it, most first.

    3 fields in areas
    • rankinteger

      1 for the highest average adverts per published quarter.

    • areaLocalArea

      The area.

      4 fields in area
      • codestring

        GSS code, April 2023 boundaries; London has the region's code.

      • slugstring

        The name to pass as {area}, e.g. "leeds".

      • namestring

        Display name.

      • regionstring

        The English region or nation it is in.

    • latestYearLocalAdvertYear

      Its adverts over the latest four quarters.

      7 fields in latestYear
      • fromstring

        First quarter, "2025 Q3".

      • tostring

        Last quarter, "2026 Q2".

      • advertsinteger

        New adverts over the quarters ONS published. Lower than the true total when any quarter is suppressed.

      • quartersSuppressedinteger

        Quarters ONS suppressed, which adverts leaves out.

      • averagePerQuarternumber or null

        Average new adverts per published quarter. Rankings use this, since ONS suppresses different quarters for different occupations and areas.

      • perThousandnumber or null

        The occupation's adverts per 1,000 of all adverts in the area, over quarters published for both. Null if there are none.

      • concentrationnumber or null

        How much more common the occupation's adverts are here than across the UK: 2 means twice the national share. Null if it cannot be compared.

  • noticesarray of JobAdvertNoticeItem

    ONS's data quality notices for this release.

    2 fields in notices
    • headingstring

      e.g. "Data issue - March 2026".

    • textstring

      What ONS said.

  • coverageCoverage

    What the figures count.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where they came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get an occupation's job adverts in a local area

GET/v1/occupations/{soc}/job-adverts/local/{area}

New online job adverts for the occupation in the area each quarter for the last three years, the latest four quarters totalled and compared with the four before, and the occupation's rank among all occupations advertised there.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

  • areastring, in the pathRequired

    A local authority's GSS code or slug, e.g. "leeds". See /v1/local-areas.

    One of uk, wales, scotland, north-east, north-west, yorkshire-and-the-humber, east-midlands, west-midlands, east-of-england, london, south-east, south-west

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/job-adverts/local/leeds"

Response LocalAdvertResponse

Show the 11 fields
  • soc2020string

    The occupation.

  • titlestring

    Its title.

  • areaLocalArea

    The area.

    4 fields in area
    • codestring

      GSS code, April 2023 boundaries; London has the region's code.

    • slugstring

      The name to pass as {area}, e.g. "leeds".

    • namestring

      Display name.

    • regionstring

      The English region or nation it is in.

  • latestYearLocalAdvertYear

    The latest four quarters.

    7 fields in latestYear
    • fromstring

      First quarter, "2025 Q3".

    • tostring

      Last quarter, "2026 Q2".

    • advertsinteger

      New adverts over the quarters ONS published. Lower than the true total when any quarter is suppressed.

    • quartersSuppressedinteger

      Quarters ONS suppressed, which adverts leaves out.

    • averagePerQuarternumber or null

      Average new adverts per published quarter. Rankings use this, since ONS suppresses different quarters for different occupations and areas.

    • perThousandnumber or null

      The occupation's adverts per 1,000 of all adverts in the area, over quarters published for both. Null if there are none.

    • concentrationnumber or null

      How much more common the occupation's adverts are here than across the UK: 2 means twice the national share. Null if it cannot be compared.

  • changePercentnumber or null

    Change on the four quarters before, over quarters published in both. Null if there are none.

  • rankinteger

    The occupation's rank by average adverts per published quarter among all occupations in the area, 1 being the most.

  • occupationsRankedinteger

    Occupations with adverts in the area.

  • quartersarray of AdvertQuarter

    The last twelve quarters, oldest first.

    2 fields in quarters
    • quarterstring

      "2026 Q2".

    • advertsinteger or null

      New adverts. Null where ONS suppressed the quarter.

  • noticesarray of JobAdvertNoticeItem

    ONS's data quality notices for this release.

    2 fields in notices
    • headingstring

      e.g. "Data issue - March 2026".

    • textstring

      What ONS said.

  • coverageCoverage

    What the figures count.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where they came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Routes in and the work

Get the skills an occupation involves

GET/v1/occupations/{soc}/skills

Skills and knowledge from ESCO, the European Commission's classification, joined to the SOC unit group through its ISCO-08 code. Skills are pooled across every related ESCO occupation and ranked by how many of them list each one, so the top of the list is what the work broadly involves.

These are related occupations rather than exact equivalents - several UK unit groups can share one ISCO-08 group. The derivation field says how the match was made; pass that on when presenting the results.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

  • relationstring, query

    essential or optional to filter; omit for both.

    One of essential, optional

  • limitinteger, query

    Maximum skills, 1-200. Default 40.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/skills"

Response SkillsResponse

Show the 8 fields
  • soc2020string

    Four-digit SOC 2020 unit group code.

  • titlestring

    Unit group title.

  • isco08string

    The ISCO-08 group used to join ESCO.

  • relatedOccupationCountinteger

    How many ESCO occupations sit under that group.

  • relatedOccupationsarray of RelatedOccupation

    Up to 25 of them.

    3 fields in relatedOccupations
    • titlestring

      ESCO occupation title.

    • descriptionstring or null

      ESCO's description of the role.

    • uristring

      Stable ESCO identifier.

  • skillsarray of SkillSummary

    Skills and knowledge, most widely shared first.

    4 fields in skills
    • skillTitlestring

      ESCO's name for it.

    • typestring

      "skill" (something done) or "knowledge" (something understood).

    • sharedByinteger

      How many of the related ESCO occupations list it. Higher means more central to the work.

    • essentialboolean

      True if at least one related occupation marks it essential rather than optional.

  • derivationstring

    How the match was made. These are related occupations, not exact equivalents; say so when presenting them.

  • provenanceProvenance

    Where the data came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 400A parameter is invalid; the detail lists the valid values.
  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get the interests and abilities an occupation suits

GET/v1/occupations/{soc}/work-profile

The career interest profile (Holland's six RIASEC types) and the abilities the work calls on, for matching people to occupations. No UK source publishes these, so they come from the US O*NET database.

ONET describes American occupations. They are reached through ISCO-08 and the official ESCO to ONET crosswalk, which usually links a UK occupation to several US ones; the profile is their weighted average. basedOn lists them - show it, so users can judge the match - and derivation explains it. Wherever the profile is shown, O*NET's licence requires the attribution text.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/work-profile"

Response WorkProfileResponse

Show the 9 fields
  • soc2020string

    The four-digit occupation asked about.

  • titlestring

    Its title.

  • hollandCodestring

    The three highest interest types' letters, highest first, e.g. "RCI".

  • interestsarray of InterestScore

    All six interest types, highest first.

    4 fields in interests
    • typestring

      Realistic, Investigative, Artistic, Social, Enterprising or Conventional.

    • letterstring

      The type's initial, as used in Holland codes.

    • scorenumber

      How strongly the work suits this interest, 1 (not at all) to 7 (extremely). A weighted average across the matched US occupations.

    • meaningstring

      What the interest type means, in plain words.

  • abilitiesarray of AbilityScore

    Abilities by importance, most important first.

    2 fields in abilities
    • abilitystring

      O*NET ability name, e.g. "Manual Dexterity".

    • importancenumber

      How important it is to the work, 1 (not important) to 5 (extremely). A weighted average.

  • basedOnarray of WorkProfileSource

    The US occupations averaged, largest weight first. Show these if you show the profile, so users can judge the match.

    3 fields in basedOn
    • codestring

      O*NET-SOC code.

    • titlestring

      US occupation title.

    • weightPercentnumber

      Its share of the average.

  • derivationstring

    How the US data reaches a UK occupation. Pass this on.

  • attributionstring

    The credit O*NET's licence requires wherever this information is shown.

  • provenanceProvenance

    Where the data came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get how to become one

GET/v1/occupations/{soc}/how-to-become

The routes into the occupation as the National Careers Service describes them: university, college, apprenticeship, working your way up, volunteering, applying directly - each with its entry requirements - and what you will need, such as background checks or a licence.

The careers service writes profiles per job, not per SOC unit group, so an occupation can have several (plumbers: plumber, heating engineer and others) or none. Each is matched to a unit group through the ONS coding index by its title or an alternative title; match says which.

Show attribution wherever this text is used.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/how-to-become"

Response HowToBecomeResponse

Show the 5 fields
  • soc2020string

    The unit group.

  • titlestring

    Its title.

  • profilesarray of JobProfileRoutes

    The job profiles matched to it, those matched by their own title first.

    11 fields in profiles
    • slugstring

      The profile's address, "plumber".

    • titlestring

      The job, e.g. "Plumber".

    • alternativeTitlesarray of string

      Other names for it.

    • summarystring or null

      One-line description.

    • matchstring

      How the profile was matched to this unit group: "title" or "alternative title".

    • routesIntrostring or null

      The profile's opening line on routes in.

    • routesListedarray of string

      The ways in it lists, e.g. "an apprenticeship".

    • routesarray of EntryRoute

      Each way in, in the profile's order.

      3 fields in routes
      • kindstring

        "university", "college", "apprenticeship", "work", "volunteering", "direct_application", "other_routes" or "more_information".

      • headingstring

        The profile's own heading for it.

      • blocksarray of RouteBlock

        Its content.

        2 fields in blocks
        • headingstring or null

          e.g. "Entry requirements"; null for the text before any subheading.

        • partsarray of RoutePart

          Paragraphs and lists in page order.

          2 fields in parts
          • textstring or null

            A paragraph.

          • itemsarray of string or null

            A list's items.

    • requirementsarray of string

      What you will need, e.g. "pass enhanced background checks".

    • requirementNotesarray of string

      Further notes on requirements.

    • urlstring

      The profile on the National Careers Service.

  • attributionstring

    The attribution to show wherever this text is used.

  • provenanceProvenance

    Where it came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get apprenticeships and technical qualifications into an occupation

GET/v1/occupations/{soc}/apprenticeships

The occupations on Skills England's occupational maps that sit behind the SOC unit group, each with its apprenticeship standards, T Levels and other technical qualifications. A unit group usually has several: plumbers (5315) cover gas engineering operatives, heating engineers, plumbing and domestic heating technicians and more.

match says whether Skills England codes the occupation to this unit group (primary) or mainly to another, partly to this one (partial). Retired and withdrawn apprenticeships are left out unless includeInactive=true.

Skills England's terms require its logo and the attribution statement wherever this data is shown.

Parameters

  • socstring, in the pathRequired

    Four-digit SOC 2020 unit group code.

  • includeInactiveboolean, query

    Include retired and withdrawn apprenticeships. Default false.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/occupations/5315/apprenticeships"

Response ApprenticeshipsResponse

Show the 8 fields
  • soc2020string

    The SOC unit group.

  • titlestring

    Its title.

  • apprenticeshipsAvailableinteger

    Apprenticeships approved for delivery across the primary-match occupations.

  • lowestApprenticeshipLevelinteger or null

    The lowest level of those, i.e. the earliest entry point. Null if none.

  • tLevelsinteger

    T Levels across the primary-match occupations.

  • occupationsarray of SkillsEnglandOccupationItem

    Skills England occupations behind the unit group: primary matches first, then partial.

    12 fields in occupations
    • codestring

      Skills England's code, "OCC0155".

    • namestring

      Its name, e.g. "Gas engineering operative".

    • matchstring

      "primary" when Skills England codes it to this SOC unit group; "partial" when it is coded elsewhere but partly to this one.

    • levelinteger or null

      The occupation's level, 2 to 7.

    • statusstring

      e.g. "Approved occupation", "Occupational standard in development".

    • overviewstring or null

      One-sentence description.

    • routestring

      The occupational route, e.g. "Construction and the built environment".

    • pathwaystring or null

      The pathway within the route.

    • technicalLevelstring or null

      "Technical", "Higher technical" or "Professional".

    • typicalJobTitlesarray of string

      Job titles Skills England lists for it.

    • productsarray of TechnicalProduct

      Its apprenticeships and qualifications, lowest level first.

      7 fields in products
      • codestring

        Skills England's product code: "ST0155" for an apprenticeship standard, "TL0002e" for a T Level.

      • namestring

        Its name.

      • typestring

        "apprenticeship", "foundation_apprenticeship", "apprenticeship_unit", "t_level", "higher_technical_qualification" or "technical_qualification".

      • levelinteger or null

        Qualification level, 2 to 7.

      • statusstring or null

        e.g. "Approved for delivery", "Retired". Null where Skills England gives none, as for T Levels.

      • careerStarterboolean

        Whether it is marked as a career starter apprenticeship for young people.

      • detailStandardDetail or null

        For an apprenticeship standard, how long it takes and what it leads to. Null for other products.

        7 fields in detail
        • durationMonthsinteger or null

          Typical time to complete, in months.

        • entryRequirementsstring or null

          What employers typically ask for, in Skills England's words. Usually null: most leave it to the employer.

        • regulatedBystring or null

          The statutory regulator you must register with to practise, e.g. "Nursing and Midwifery Council (NMC)". Null if the occupation is not regulated.

        • professionalRecognitionarray of string

          Professional bodies whose registration or membership completing it can lead to.

        • degreestring or null

          "integrated" when the apprenticeship includes a degree assessed together with it, "separate" when it includes a degree assessed apart, null otherwise.

        • qualificationsGainedarray of string

          Qualifications gained along the way.

        • versionstring

          The standard's version.

    • urlstring

      The occupation's page on the occupational maps.

  • attributionstring

    The attribution statement Skills England requires wherever this is shown, alongside its logo.

  • provenanceProvenance

    Where it came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Lists across occupations

List occupations by sponsored work visas granted

GET/v1/visas

Every occupation granted at least one sponsored work visa in the latest four quarters, most first.

Parameters

  • limitinteger, query

    How many to return, most first. Default 50, at most 412.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/visas"

Response VisaListResponse

Show the 5 fields
  • fromstring

    First quarter of the period.

  • tostring

    Last quarter of the period.

  • occupationsarray of VisaListItem

    Occupations with at least one grant, most first.

    5 fields in occupations
    • rankinteger

      1 for the most grants.

    • soc2020string

      The occupation.

    • titlestring

      Its title.

    • grantsinteger

      Grants over the latest four quarters.

    • applicationsinteger

      Applications over the latest four quarters.

  • coverageCoverage

    What the figures count.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where they came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

List occupations by demand level

GET/v1/demand

Every assessed occupation at the given level in the latest year, highest demand index first. Without level, the occupations in critical and elevated demand.

Parameters

  • levelstring, query

    critical, elevated or not_in_high_demand.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/demand"

Response DemandListResponse

Show the 4 fields
  • yearinteger

    The assessment year.

  • occupationsarray of DemandListItem

    The occupations, highest demand index first.

    6 fields in occupations
    • soc2020string

      The occupation.

    • titlestring

      Its title.

    • levelstring

      "critical", "elevated" or "not_in_high_demand".

    • demandIndexnumber or null

      The composite score; the list is ordered by it, highest first.

    • indicatorsInDemandinteger

      How many of the five indicators were elevated or critical.

    • workersinteger or null

      People employed in the occupation, as used by the publisher.

  • definitionsstring

    What the levels mean.

  • provenanceProvenance

    Where it came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 400A parameter is invalid; the detail lists the valid values.
  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

List occupations by new online job adverts

GET/v1/job-adverts

Occupations ranked by new online job adverts over the latest twelve months in the area, most first, with the change on the year before.

Parameters

  • areastring, query

    uk (default), a nation, or an English region.

    One of uk, wales, scotland, north-east, north-west, yorkshire-and-the-humber, east-midlands, west-midlands, east-of-england, london, south-east, south-west

  • limitinteger, query

    How many to return. Default 50, at most 412.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/job-adverts"

Response JobAdvertListResponse

Show the 7 fields
  • areaAreaSummary

    The area.

    3 fields in area
    • codestring

      GSS code, e.g. "E12000007".

    • slugstring

      The name to pass as ?area=, e.g. "london".

    • namestring

      Display name, e.g. "London".

  • fromstring

    First month of the period.

  • tostring

    Last month of the period.

  • occupationsarray of JobAdvertListItem

    Occupations, most adverts first.

    6 fields in occupations
    • rankinteger

      1 for the highest average adverts per published month.

    • soc2020string

      The occupation.

    • titlestring

      Its title.

    • advertsinteger

      New adverts over the latest twelve months, leaving out suppressed months.

    • averagePerMonthnumber or null

      Average new adverts per published month; the list is ordered by it.

    • changePercentnumber or null

      Change on the twelve months before, over months published in both.

  • noticesarray of JobAdvertNoticeItem

    ONS's data quality notices for this release.

    2 fields in notices
    • headingstring

      e.g. "Data issue - March 2026".

    • textstring

      What ONS said.

  • coverageCoverage

    What the figures count.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where they came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 400A parameter is invalid; the detail lists the valid values.
  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Local areas

List local areas

GET/v1/local-areas

The local authorities job adverts are published for, with the slug to pass as {area}. London is one area: ONS does not split it by borough.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/local-areas"

Response array of LocalArea

Show the 4 fields
  • codestring

    GSS code, April 2023 boundaries; London has the region's code.

  • slugstring

    The name to pass as {area}, e.g. "leeds".

  • namestring

    Display name.

  • regionstring

    The English region or nation it is in.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Get the occupations with most job adverts in a local area

GET/v1/local-areas/{area}/job-adverts

Occupations ranked by new online job adverts in the area over the latest four quarters, with the change on the four before.

Parameters

  • areastring, in the pathRequired

    A local authority's GSS code or slug, e.g. "leeds". See /v1/local-areas.

    One of uk, wales, scotland, north-east, north-west, yorkshire-and-the-humber, east-midlands, west-midlands, east-of-england, london, south-east, south-west

  • limitinteger, query

    How many occupations to return. Default 50, at most 412.

Example

curl -H "X-API-Key: $LMI_KEY" "$LMI_API/v1/local-areas/leeds/job-adverts"

Response AreaAdvertsResponse

Show the 6 fields
  • areaLocalArea

    The area.

    4 fields in area
    • codestring

      GSS code, April 2023 boundaries; London has the region's code.

    • slugstring

      The name to pass as {area}, e.g. "leeds".

    • namestring

      Display name.

    • regionstring

      The English region or nation it is in.

  • allOccupationsLocalAdvertYear

    All new adverts in the area over the latest four quarters, including those ONS could not code to an occupation.

    7 fields in allOccupations
    • fromstring

      First quarter, "2025 Q3".

    • tostring

      Last quarter, "2026 Q2".

    • advertsinteger

      New adverts over the quarters ONS published. Lower than the true total when any quarter is suppressed.

    • quartersSuppressedinteger

      Quarters ONS suppressed, which adverts leaves out.

    • averagePerQuarternumber or null

      Average new adverts per published quarter. Rankings use this, since ONS suppresses different quarters for different occupations and areas.

    • perThousandnumber or null

      The occupation's adverts per 1,000 of all adverts in the area, over quarters published for both. Null if there are none.

    • concentrationnumber or null

      How much more common the occupation's adverts are here than across the UK: 2 means twice the national share. Null if it cannot be compared.

  • occupationsarray of AreaAdvertOccupation

    Occupations, most adverts first.

    5 fields in occupations
    • rankinteger

      1 for the highest average adverts per published quarter.

    • soc2020string

      The occupation.

    • titlestring

      Its title.

    • latestYearLocalAdvertYear

      Its adverts in the area over the latest four quarters.

      7 fields in latestYear
      • fromstring

        First quarter, "2025 Q3".

      • tostring

        Last quarter, "2026 Q2".

      • advertsinteger

        New adverts over the quarters ONS published. Lower than the true total when any quarter is suppressed.

      • quartersSuppressedinteger

        Quarters ONS suppressed, which adverts leaves out.

      • averagePerQuarternumber or null

        Average new adverts per published quarter. Rankings use this, since ONS suppresses different quarters for different occupations and areas.

      • perThousandnumber or null

        The occupation's adverts per 1,000 of all adverts in the area, over quarters published for both. Null if there are none.

      • concentrationnumber or null

        How much more common the occupation's adverts are here than across the UK: 2 means twice the national share. Null if it cannot be compared.

    • changePercentnumber or null

      Change on the four quarters before, over quarters published in both.

  • noticesarray of JobAdvertNoticeItem

    ONS's data quality notices for this release.

    2 fields in notices
    • headingstring

      e.g. "Data issue - March 2026".

    • textstring

      What ONS said.

  • coverageCoverage

    What the figures count.

    4 fields in coverage
    • populationstring

      What is counted: "employee jobs" or "people in employment".

    • includesSelfEmployedboolean

      Whether self-employed people are included.

    • referencePeriodstring

      The period the figure describes, e.g. "tax year ending 5 April 2025".

    • notestring

      Caveats a consumer should be aware of when presenting the figure.

  • provenanceProvenance

    Where they came from.

    6 fields in provenance
    • sourcestring

      Name of the upstream dataset.

    • publisherstring

      Organisation that publishes it.

    • licencestring

      Licence the data is reused under. Most require attribution; see the attribution guide.

    • editionstring

      The release the figure was taken from, as the publisher labels it, e.g. "2025 provisional".

    • publisheddate-time or null

      When this service began serving that release.

    • urlstring

      The publisher's page for the dataset.

Errors

  • 401The key is missing, unknown or revoked.
  • 404No such occupation or area, or no figure for that combination.
  • 429Rate limit reached; wait for the seconds in Retry-After.

Metadata

Check data freshness

GET/v1/meta/ingestNo key needed

When each source was last checked for new releases, and any release currently held back because it failed validation - in which case the previous release is still being served. Never cached. No API key needed.

Example

curl "$LMI_API/v1/meta/ingest"

Response IngestStatusResponse

Show the 2 fields
  • sourcesarray of SourceFreshness

    Last check per source.

    3 fields in sources
    • sourceKeystring

      Which source.

    • lastRundate-time

      Most recent check.

    • lastSuccessdate-time or null

      Most recent check that did not fail.

  • quarantinedarray of QuarantinedEdition

    Releases currently held back.

    4 fields in quarantined
    • iduuid

      Edition id.

    • sourceKeystring

      Which source.

    • labelstring

      The publisher's name for the release.

    • detectedAtdate-time

      When it was seen.

Errors

  • 429Rate limit reached; wait for the seconds in Retry-After.

List data sources

GET/v1/meta/sourcesNo key needed

Every upstream dataset this service draws on, its publisher and licence, and the release currently served. No API key needed.

Example

curl "$LMI_API/v1/meta/sources"

Response array of SourceResponse

Show the 9 fields
  • keystring

    Identifier used by /v1/meta/editions?source=.

  • namestring

    Dataset name.

  • publisherstring

    Publishing organisation.

  • licencestring

    Licence the data is reused under.

  • urlstring

    Publisher's page for the dataset.

  • cadencestring or null

    How often the publisher releases it.

  • tierstring

    How the service tracks it: "api", "scrapeanddiff" or "detectonly".

  • currentEditionstring or null

    The release currently served. Null if none yet.

  • currentEditionPublisheddate-time or null

    When that release began being served.

Errors

  • 429Rate limit reached; wait for the seconds in Retry-After.

List releases

GET/v1/meta/editionsNo key needed

The history of every release ingested, newest first, including any held back by validation (quarantined) and any that published with a known issue (see checks). Pass a release's id as ?edition= to the pay endpoint to pin figures to it. No API key needed.

Parameters

  • sourcestring, query

    Limit to one source key, e.g. ashe_t14.

Example

curl "$LMI_API/v1/meta/editions"

Response array of EditionResponse

Show the 9 fields
  • iduuid

    Pass as ?edition= on the pay endpoint to pin figures to this release.

  • sourceKeystring

    Which source.

  • labelstring

    The publisher's name for the release.

  • seriesKeystring or null

    For pay, the reference year. Releases only replace others in the same series.

  • statusstring

    published, superseded, quarantined, or an in-progress state.

  • detectedAtdate-time

    When the release was first seen.

  • publishedAtdate-time or null

    When it began being served.

  • sourceUristring

    Where it was retrieved from.

  • checksarray of EditionCheck

    Checks that warned or failed. Empty for a clean release.

    3 fields in checks
    • rulestring

      Name of the check.

    • statusstring

      "warn" (published with a known issue) or "fail" (held back).

    • observedstring or null

      What the check found.

Errors

  • 429Rate limit reached; wait for the seconds in Retry-After.