All guides

Partner API

Labour market data

Skills not met: which skills applicants were turned down for and what successful hires had; nobody else has it.

Beside it, what people are training for, where skills gaps are forecast, the published evidence behind every figure, the sources and UK regions. Aggregate and non-personal, so the labour:read scope is granted at once on any key.

Skills not met

/v1/labour/skills-unmet ranks the skills adverts ask for by how often they are not met. Each row has the share of adverts asking for the skill and the level they usually ask, the residents below that level, the people turned down for it, and the share of hired against turned down applicants who had it at the level the role asked. A big positive difference_pct_points says the skill is part of why people get these jobs.

score is adverts_share_pct times people_below_share_pct divided by 100: of every 100 pairings of an advert and a person, about this many are an advert asking for the skill and a person who does not yet meet it. Filter by place, sector, soc, level, source and window (3, 6, 12 or 24 months), or pass skill and by to break one skill down by place, sector, SOC 2020, level or month.

Adverts are counted only from roles posted on the platform, employers' own applicant tracking system boards and Find an Apprenticeship. Listings from job boards and aggregators, and listings imported from them, are left out, because their terms do not allow vacancy counts to be passed on.

The skills most often not met in Oxford
curl -s "https://opportunityplatform.co.uk/api/v1/labour/skills-unmet?place=oxford&window=12" \
  -H "Authorization: Bearer $OP_API_KEY"

The endpoints

  • Endpoint
    GET /v1/labour/skills-unmet
    What it answers
    Which skills adverts ask for that people do not yet meet, ranked, with the people turned down for each and what hired applicants had. By place, sector, SOC 2020, level, source and month.
    Paged
    Yes, by rank
  • Endpoint
    GET /v1/labour/skills-gaps
    What it answers
    Where skills gaps are forecast, by occupation, with how many independent published sources agree.
    Paged
    No
  • Endpoint
    GET /v1/labour/course-demand
    What it answers
    What people are training for: apprenticeship starts, further education enrolments and Skills Bootcamps, with year on year change.
    Paged
    No
  • Endpoint
    GET /v1/labour/evidence
    What it answers
    The published evidence rows behind the figures, each with its source, licence, link and date.
    Paged
    Yes, newest first
  • Endpoint
    GET /v1/labour/sources
    What it answers
    Every source you can receive, with its licence, cadence and freshness.
    Paged
    No
  • Endpoint
    GET /v1/labour/regions
    What it answers
    UK regions by Travel to Work Area (the default), council, LSIP area or ITL region, with official ONS codes.
    Paged
    No

Course demand, skills gaps and evidence take country (ISO 3166-1 alpha-2, default GB); regions cover the United Kingdom. The full parameters and response schemas are in the API reference.

One response shape

Every labour response has the same four parts. data holds the figures. sources names where each figure came from, with its licence, link and the attribution_statement to show with it. attribution_notice is the rule below, in every response so it travels with the data. meta.as_of is the date the data describes, and meta.generated is when the response was built.

Apprenticeship starts in London
curl -s "https://opportunityplatform.co.uk/api/v1/labour/course-demand?region=E12000007&limit=1" \
  -H "Authorization: Bearer $OP_API_KEY"
Response (abridged)
{
  "data": [
    {
      "source_key": "dfe_apprenticeships",
      "metric": "apprenticeship_starts",
      "region_code": "E12000007",
      "subject_area": "Construction, Planning and the Built Environment",
      "period_end": "2026-07-31",
      "value": 3120,
      "year_on_year": { "previous_value": 2890, "change_pct": 8 }
    }
  ],
  "sources": [
    {
      "key": "dfe_apprenticeships",
      "publisher": "Department for Education",
      "licence": "Open Government Licence v3.0 (Crown copyright)",
      "attribution_statement": "Contains public sector information licensed under the Open Government Licence v3.0."
    }
  ],
  "attribution_notice": "If you show, republish or pass on any figure from this response, ...",
  "meta": { "as_of": "2026-07-31", "returned": 1, "limit": 1, "next_cursor": null }
}

Attribution: show it and pass it on

Wherever you show, republish or pass on a figure, show the attribution_statement of each source it came from, word for word. If you give the data to someone else, they take on the same rule. The statements are:

SourceStatement
Department for Education, Explore Education Statistics, Skills England (Open Government Licence v3.0)Contains public sector information licensed under the Open Government Licence v3.0.
US Bureau of Labor Statistics (public domain)Source: U.S. Bureau of Labor Statistics.
ONS geography (regions)Source: Office for National Statistics licensed under the Open Government Licence v3.0. Contains OS data © Crown copyright and database right.
Our own figures, such as skills not metSource: Opportunity Platform.

Small numbers and missing figures

Counts of people are never shown below 5: 1 to 4 is the string "<5", never 0 and never a number. Expect a string where you expect a number and handle it. A published statistic with no figure (the publisher suppressed it or did not publish it) is null. It is never a stand-in for zero.

sources_agreeing on skills gaps counts distinct published sources pointing to a gap for an occupation. A news headline is never counted.

Regions

/v1/labour/regions lists official ONS geographies under the Open Government Licence v3.0, searchable by name. Travel to Work Areas are the default because they are drawn from where people actually commute, so work is read across council lines the way people travel. Nothing about individual vacancies is returned.

Later

Built, and not open yet. Each waits on one thing:

DataWhy not yet
DemandDaily vacancy counts by occupation. Today they include job board listings whose terms do not let us pass vacancy counts on, so they wait until they are counted from sources we may share.
TrendsOccupations growing and shrinking. Built from the same vacancy counts as demand, so it waits for the same change.
OutlookThe skills gap outlook at 6 months to 5 years. It blends our vacancy counts with projections whose reuse terms are not yet confirmed.
ReachHow much live work each ward can get to. It counts every vacancy in reach, job board listings included, so it waits for the same change as demand.
SignalsLabour market news as our own summaries. We are confirming how publishers’ terms apply before summaries leave the platform.
PrioritiesWhat local skills improvement plans list as in demand. The plans are not licensed for redistribution, so we are settling how our summary and the citation can be offered.

To hear when one opens, get in touch.

Paging

/v1/labour/skills-unmet and /v1/labour/evidence page with meta.next_cursor, exactly as jobs do: send it back unchanged as cursor with the same filters. Skills not met pages by rank. The other endpoints return one bounded list, and their next_cursor is always null.

Questions

Which places can I ask for?
London boroughs by slug or name (southwark), and the other areas we serve (oxford, cherwell). An unknown place is a 400, so a typo is never mistaken for an empty result.
Which regions can I ask for?
GSS codes for English regions (E12000007 is London), nations (E92000001 is England) and districts, or a Local Skills Improvement Plan area slug. Omit region for national figures.
How are occupations coded?
SOC 2020 for UK data and ISCO-08 everywhere, mapped from SOC 2020 with the ONS crosswalk. Projections published at a broader level (2 digit SOC sub-major groups) are matched when you ask for a unit group inside them.
How fresh is it?
Each published source is checked on its cadence; see last_success_at and stale on /v1/labour/sources. Skills not met is computed on every call.
Labour market data | Opportunity Platform Developers