# ILOSTAT Labour Statistics Intelligence (`wakey7dev/ilostat-sdmx-normalizer`) Actor

Fetch and normalize global labour statistics from the ILO ILOSTAT SDMX API. Covers 1,200+ indicators across 200+ countries — unemployment, employment, wages, working hours, labour force participation, child labour, and more. Data goes back to 1991. No API key required.

- **URL**: https://apify.com/wakey7dev/ilostat-sdmx-normalizer.md
- **Developed by:** [Chris Wakefield](https://apify.com/wakey7dev) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

![Chris The Dev](https://raw.githubusercontent.com/chriswakefield87/appstore-screenshot-translator/main/assets/actor-banner.png)

## ILOSTAT Labour Statistics Intelligence

Fetch and normalize global labour statistics from the **ILO ILOSTAT SDMX API**. Covers **1,200+ indicators** across **200+ countries** — unemployment, employment, wages, working hours, labour force participation, child labour, and more. Data goes back to **1991**.

**No API key required.** 100% public data from the International Labour Organization.

### What You Get

- **Unemployment rates** — total, by sex, age, education, household type
- **Employment statistics** — by sector, status, occupation
- **Labour force participation** — demographic breakdowns
- **Wages and compensation** — minimum wages, hourly earnings
- **Working time** — hours worked, part-time rates
- **Child labour** — prevalence by age and sector
- **Youth employment** — NEET rates, school-to-work transitions
- **Gender equality** — pay gaps, participation rates
- **Informal economy** — informal employment, social protection
- **Occupational safety** — injury and fatality rates

### Features

✅ **1,200+ dataflows** — complete ILOSTAT catalogue\
✅ **200+ countries** — global coverage with ISO3 codes\
✅ **Time series** — historical data from 1991 to present\
✅ **SDMX-JSON decoding** — normalized flat records, no index notation\
✅ **Country name mapping** — ISO3 → full country names\
✅ **Category tagging** — automatic classification (unemployment, employment, wages, etc.)\
✅ **Human-readable output** — formatted summary tables in run logs\
✅ **Machine-readable stats** — JSON stats for dashboards and workflows\
✅ **Multi-dataflow support** — fetch multiple indicators in one run\
✅ **Flexible filtering** — by country, time period, observation count

### Input

| Field | Type | Description | Example |
|---|---|---|---|
| `mode` | select | `listDataflows` or `getData` | `getData` |
| `dataflowId` | string | ILOSTAT dataflow ID (one per line for multiple) | `DF_EMP_TEMP_SEX_AGE_NB` |
| `countries` | string | ISO3 codes, comma-separated (empty = all) | `USA,GBR,DEU` |
| `startPeriod` | string | Start year/period (e.g. 2015, 2020-Q1) | `2020` |
| `endPeriod` | string | End year/period | `2023` |
| `lastNObservations` | integer | Last N observations per series (overrides start/end) | `5` |
| `maxResults` | integer | Max records to return (0 = unlimited) | `500` |

#### Example Input

```json
{
  "mode": "getData",
  "dataflowId": "DF_EMP_TEMP_SEX_AGE_NB",
  "countries": "USA,GBR,DEU,JPN",
  "startPeriod": "2020",
  "endPeriod": "2023",
  "maxResults": 100
}
```

### Output

Each record contains:

```json
{
  "dataflowId": "DF_EMP_TEMP_SEX_AGE_NB",
  "category": "employment",
  "refArea": "USA",
  "countryName": "United States",
  "timePeriod": "2022",
  "measure": "EMP_TEMP",
  "obsValue": 158.7,
  "obsStatus": "A",
  "unit": "THOUSANDS",
  "sex": "_T",
  "age": "Y_GE15"
}
```

### Available Dataflows

Use `mode: listDataflows` to browse all 1,200+ indicators. Common dataflows:

| Dataflow ID | Description |
|---|---|
| `DF_EMP_TEMP_SEX_AGE_NB` | Temporary employment by sex and age |
| `DF_XRU_XRU_RDB_SEX_AGE_RT` | Unemployment rate by sex and age |
| `DF_LFU_LFPA_SEX_AGE_RT` | Labour force participation rate |
| `DF_HOW_HOW_SEX_AGE_NB` | Hours worked by sex and age |
| `DF_WPI_WPI_SEX_OCC_NB` | Wage indicators by occupation |
| `DF_CLD_CLD_SEX_AGE_RT` | Child labour prevalence |
| `DF_YEM_YEM_SEX_AGE_RT` | Youth employment indicators |
| `DF_GED_GED_SEX_AGE_RT` | Gender equality indicators |

### Use Cases

- **HR & Recruiting** — benchmark labour market conditions by country
- **Economic Research** — track unemployment, wages, participation trends
- **Policy Analysis** — compare labour indicators across regions
- **Investment Research** — assess labour market health for market entry
- **Academic Research** — access authoritative ILO data for studies
- **Dashboards** — feed normalized data into analytics platforms

### Data Source

Data sourced from the **International Labour Organization (ILO)** ILOSTAT database via the official SDMX REST API. All data is publicly available under the ILO's open data terms.

**Citation:** "Data source: ILO ILOSTAT (sdmx.ilo.org)"

### Pricing

**$2.00 per 1,000 records** — includes SDMX-JSON decoding, country normalization, and category tagging.

### Support

For issues or questions, open an issue on the actor's repository or contact the developer.

***

**Built by Chris The Dev** — serverless scrapers for global open data.

# Actor input Schema

## `mode` (type: `string`):

Choose 'List Available Dataflows' to browse all 1,200+ indicators, or 'Get Indicator Data' to fetch observations.

## `dataflowId` (type: `string`):

ILOSTAT dataflow identifier (e.g. DF\_EMP\_TEMP\_SEX\_AGE\_NB, DF\_XRU\_XRU\_RDB\_SEX\_AGE\_RT). Use 'List Available Dataflows' mode to find IDs. For multiple, enter one per line.

## `countries` (type: `string`):

ISO3 country codes to filter (e.g. USA, GBR, DEU). Leave empty for all countries. Comma-separated or one per line.

## `startPeriod` (type: `string`):

Start year or period (e.g. 2015, 2020-Q1). Leave empty for earliest available.

## `endPeriod` (type: `string`):

End year or period (e.g. 2023, 2024-Q2). Leave empty for latest available.

## `lastNObservations` (type: `integer`):

Return only the last N observations per series. Overrides start/end period if set.

## `maxResults` (type: `integer`):

Maximum number of normalized records to return. 0 = unlimited.

## Actor input object example

```json
{
  "mode": "getData",
  "dataflowId": "DF_EMP_TEMP_SEX_AGE_NB",
  "countries": "",
  "startPeriod": "",
  "endPeriod": "",
  "lastNObservations": 0,
  "maxResults": 500
}
```

# Actor output Schema

## `results` (type: `string`):

Normalized observation records in JSON format.

## `summary` (type: `string`):

Human-readable formatted summary of the run results.

## `stats` (type: `string`):

Machine-readable run statistics.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("wakey7dev/ilostat-sdmx-normalizer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("wakey7dev/ilostat-sdmx-normalizer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call wakey7dev/ilostat-sdmx-normalizer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,wakey7dev/ilostat-sdmx-normalizer"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/mOXyiuB1SQ5BbLvKn/builds/cqKdEwzIDQl4nXkiU/openapi.json
