[NewSearch millions of jobs from your AI agent with MCP→](/blog/jobspipe-mcp-server)

[All posts](/blog)

![](/listly/card-field.png)

ReferenceISCO

Reference·Aug 1, 2026·7 min read

# ISCO-08: the occupation codes behind global labour market data

An ISCO-08 code is a four-digit identifier from the ILO's International Standard Classification of Occupations - the occupation axis behind ILOSTAT, Eurostat and ESCO. How the four-level hierarchy works, the codes for common tech roles, where data scientist and DevOps actually land, how ISCO maps to SOC and O\*NET, and how to filter half a million live job postings by ISCO code.

![Dvir Atias](/authors/dvir-atias.jpg)

Dvir Atias

Founder, JobsPipe

An ISCO-08 code is a four-digit identifier from the International Standard Classification of Occupations, the ILO’s system for grouping every job in the world economy by the work it involves. It is the occupation key of international labour data the way [SOC](/blog/soc-codes) is the key of US labour data: ILOSTAT series, Eurostat’s labour force survey, most national statistical offices outside the US and the EU’s ESCO taxonomy are all published against it. If you want to compare software-developer demand in Germany, India and Brazil in one query, ISCO-08 is the axis that makes the comparison possible.

This page covers how the four-level hierarchy works, the codes for the roles people actually look up, how ISCO-08 relates to SOC, O\*NET and ESCO, and how to filter live job postings by ISCO code instead of classifying messy titles yourself.

## How the hierarchy works

ISCO-08 is the 2008 revision, still current, and the structure is positional: every digit you add narrows the group. Ten major groups take the first digit, 43 sub-major groups take two digits, 130 minor groups take three, and the four-digit unit groups are the leaves - 433 of them covering the civilian economy, plus three more for the armed forces.

So `2512` reads: Professionals (`2`), ICT professionals (`25`), software and applications developers and analysts (`251`), Software Developers (`2512`). Truncating a code generalises it, which turns out to be exactly what you want from a query filter - more on that below.

The major groups are ordered roughly by skill level, which is why the top of the code space feels white-collar: Professionals sit at skill level 4, Technicians at level 3, most of groups 4 through 8 at level 2, and Elementary Occupations at level 1.

| Code | Major group |
| --- | --- |
| 1 | Managers |
| 2 | Professionals |
| 3 | Technicians and Associate Professionals |
| 4 | Clerical Support Workers |
| 5 | Service and Sales Workers |
| 6 | Skilled Agricultural, Forestry and Fishery Workers |
| 7 | Craft and Related Trades Workers |
| 8 | Plant and Machine Operators and Assemblers |
| 9 | Elementary Occupations |
| 0 | Armed Forces Occupations |

## ISCO-08 codes for common tech roles

| Role | Unit group | Official title |
| --- | --- | --- |
| Software engineer / developer | 2512 | Software Developers |
| Systems / business analyst | 2511 | Systems Analysts |
| Web developer | 2513 | Web and Multimedia Developers |
| Database administrator | 2521 | Database Designers and Administrators |
| Systems administrator | 2522 | Systems Administrators |
| Network engineer | 2523 | Computer Network Professionals |
| Security specialist | 2529 | Database and Network Professionals NEC |
| Engineering / IT manager | 1330 | ICT Service Managers |
| IT support | 3512 | ICT User Support Technicians |
| Graphic / multimedia designer | 2166 | Graphic and Multimedia Designers |

Two things stand out. First, a taxonomy frozen in 2008 has no unit group for data scientist, DevOps engineer, SRE or ML engineer - the mappings people actually use are `2511` or `2120` (Mathematicians, Actuaries and Statisticians) for data scientists, and `2512` or `2522` for DevOps, depending on where the role leans. Second, any code ending in 9 is a “not elsewhere classified” bucket - that is where cybersecurity lives (`2529`), and NEC buckets are always worth checking before concluding a role has no code.

## ISCO vs SOC vs O\*NET vs ESCO

The four systems get conflated constantly, and the relationships are simple: [SOC](/blog/soc-codes) is the US federal classification - 867 detailed occupations in a six-digit format, revised on its own schedule, and the key for every BLS wage series. [O\*NET](/blog/onet-api) is not a competing taxonomy at all - it is a database of rich occupation profiles keyed to SOC codes. ESCO is the EU’s taxonomy of roughly 3,000 occupations with a large [skills layer](/blog/skills-taxonomy), and every ESCO occupation maps to an ISCO-08 unit group, so ESCO is best read as a fine-grained extension of ISCO rather than an alternative to it.

Official crosswalks exist - the BLS publishes a SOC-to-ISCO-08 table - but every crosswalk loses information, because the systems slice the economy differently. If your data needs to join against sources from more than one country, the practical answer is to standardise on ISCO-08 and crosswalk outward, not the reverse. It is the common denominator everyone else already maps to.

## Querying live postings by ISCO code

Official statistics keyed to ISCO-08 run months to years behind. Job postings are the live end of the same measurement, which is why every posting in the JobsPipe index carries an ISCO-08 unit group, alongside an ISIC industry division and a skills profile - [how the classification works](/blog/classified-job-postings-api) is its own post. The filter accepts exact unit groups:

```
curl -X POST https://api.jobspipe.dev/v1/jobs/search \
  -H "Authorization: Bearer $JOBSPIPE_API_KEY" \
  -d '{
    "occupation_code_or": ["2512"],
    "location_or": ["germany"]
  }'
```

And because the code space is a hierarchy, 1-3 digit codes work as prefixes: `occupation_code_or: ["25"]` returns every ICT professional - developers, DBAs, network engineers and the 2529 long tail in one filter, with no title keywords involved. The same codes drive the aggregate endpoints:

```
curl "https://api.jobspipe.dev/v1/insights/occupations?window_days=90" \
  -H "Authorization: Bearer $JOBSPIPE_API_KEY"

curl "https://api.jobspipe.dev/v1/insights/occupations/2512/skills/top" \
  -H "Authorization: Bearer $JOBSPIPE_API_KEY"
```

The first ranks every ISCO-08 occupation in the corpus by deduplicated active posting volume; the second returns the live skill profile of one unit group. The day the classification layer shipped, 47.7% of Software Developer (`2512`) postings in the trailing 90 days listed Python - the kind of number an official survey publishes eighteen months later, measured from half a million live postings instead.

## Practical traps

**Codes are strings, not integers.** The armed-forces groups (`0110`, `0210`, `0310`) start with a zero, and an integer cast silently corrupts them - the same trap as ISIC divisions 01-09. Keep them as text everywhere.

**Watch the revision.** Datasets older than roughly 2010 are usually keyed to ISCO-88, whose codes look identical and mean different things. Conversion tables exist, but never mix revisions in one time series without converting first.

**Do not classify titles by string match.** Real posting titles are messy, multilingual and full of brand nouns - “Ninja”, “Rockstar”, “Mitarbeiter Lager”. Matching them against 433 official labels directly produces junk. The approach that works is normalising titles first and classifying the unique normalised titles, which is what our [classification pipeline](/blog/classified-job-postings-api) does so you can filter by code and skip the whole problem.

**A null beats a guess.** Some titles genuinely cannot be placed. An honest pipeline leaves the code empty rather than inventing one - if a vendor claims 100% occupation coverage, ask what is hiding inside the NEC buckets.

## Where to go next

The official ISCO-08 structure and definitions are free from the ILO, and they are the right reference for the taxonomy itself. For the US view of the same problem, start with [SOC codes](/blog/soc-codes) and the [O\*NET API](/blog/onet-api). For what occupation data looks like when it is measured from live postings rather than surveys, the [labour market intelligence](/blog/labour-market-intelligence) overview covers the vendor landscape. And if you just want the codes on real postings today, the free tier includes 1,000 jobs a month - enough to pull the full occupation ranking and a few skill profiles every day.

Filter half a million live postings by ISCO-08 code - free API key in 30 seconds.

[

← Previous

TheirStack pricing: the full rate card, how credits burn, and the cheaper piece

](/blog/theirstack-pricing)[

Next →

Introducing the Labour Market Pulse: free monthly hiring and salary data from live postings

](/blog/labour-market-pulse)

---
Canonical URL: https://jobspipe.dev/blog/isco-08
Title: ISCO-08: the occupation codes behind global labour market data
Description: An ISCO-08 code is a four-digit identifier from the ILO's International Standard Classification of Occupations - the occupation axis behind ILOSTAT, Eurostat and ESCO. How the four-level hierarchy works, the codes for common tech roles, where data scientist and DevOps actually land, how ISCO maps to SOC and O*NET, and how to filter half a million live job postings by ISCO code.

---
AI agents: the full machine-readable index of this site is https://jobspipe.dev/llms.txt?src=md-twin - API quickstart, no-key sandbox (POST https://api.jobspipe.dev/v1/sandbox/jobs/search), MCP server, pricing. Free key: https://jobspipe.dev/signup