# Eurostat Statistics API — EU Inflation (HICP) & Trade Data (`westerly_breaker/eurostat-statistics`) Actor

Get EU inflation (HICP/CPI, with computed YoY and 12-month moving average) and EU import/export trade statistics from Eurostat's public API as clean JSON. No key needed.

- **URL**: https://apify.com/westerly\_breaker/eurostat-statistics.md
- **Developed by:** [Daniel Posztos](https://apify.com/westerly_breaker) (community)
- **Categories:** AI, Agents, Automation
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Eurostat Statistics API — EU inflation (HICP) & trade data as JSON

**SEO title:** Eurostat Statistics API — EU inflation (HICP) & trade data as JSON
**SEO description:** Get EU inflation (HICP/CPI) with computed year-over-year change and 12-month moving average, or EU import/export trade statistics, straight from Eurostat's public dissemination API as clean JSON. No API key needed — built for research, market analysis, and AI agents.

One actor, two Eurostat datasets, both wrapped in a clean, agent-friendly JSON schema instead of Eurostat's own JSON-stat 2.0 dimension-index format and cell-limited query API:

1. **`hicp`** — Harmonised Index of Consumer Prices (inflation), with **`yoy_pct`** (year-over-year % change) and **`ma12_pct`** (12-month moving average of that) computed automatically. Eurostat's own API does not provide either field — this is the actor's whole value-add.
2. **`comext`** — EU international trade in goods (import/export value and quantity, by product/reporter/partner country/period), from the dedicated Comext dissemination endpoint.

No scraping, no anti-bot risk, no login — both datasets are queried from Eurostat's public, unauthenticated dissemination API over HTTPS.

### Why this exists

Eurostat's own API is powerful but awkward to use directly:
- Responses are JSON-stat 2.0: values keyed by a flat row-major index, categories as separate code→position maps — not directly usable without a decoder.
- The Comext (trade) endpoint enforces a hard 5,000,000-row extraction limit per query and 413s with `EXTRACTION_TOO_BIG` if you ask for too much at once.
- Computing inflation's year-over-year change or a moving average yourself means manually fetching extra months of history and aligning them — tedious and easy to get subtly wrong (e.g. off-by-one month, or silently treating a missing value as zero).

This actor does all of that once, correctly, so the output is analysis-ready JSON.

### Input

| Field | Type | Default | Used by | Description |
|---|---|---|---|---|
| `dataset` | string | `"hicp"` | both | `"hicp"` (inflation) or `"comext"` (EU trade). |
| `countries` | array of strings | `["HU", "DE"]` | hicp | Eurostat geo codes. Note: Eurostat uses `"EL"` for Greece and `"UK"` for the United Kingdom (not `"GR"`/`"GB"`). |
| `coicop_codes` | array of strings | `["CP00"]` | hicp | Consumption category. `"CP00"` = all-items (headline). Others: `"CP01"` (food), `"NRG"` (energy), `"SERV"` (services), `"TOT_X_NRG_FOOD"` (core, ex. energy & food). |
| `hs_codes` | array of strings | `["870323"]` | comext | Product codes: 2 (HS chapter), 4 (HS heading), 6 (HS subheading), or 8 (full CN8) digits. |
| `reporter_countries` | array of strings | `["HU"]` | comext | EU/EFTA declarant countries. Note: Comext uses `"GB"`/`"GR"` (not `"UK"`/`"EL"`) — the opposite convention from the `hicp` field above; this is Eurostat's own inconsistency between the two APIs, not this actor's. |
| `partner_countries` | array of strings | `["DE"]` | comext | Trade partner countries (ISO-3166-1 alpha-2), or `"WORLD"` for all partners combined. |
| `flow` | string | `"import"` | comext | `"import"` or `"export"`. |
| `period_from` / `period_to` | string (`"YYYY-MM"`) | `"2025-01"` / `"2025-12"` | both | Inclusive period range, max 120 months (10 years) per run. For `hicp`, Eurostat data 23 months before `period_from` is fetched automatically in the background (see "How yoy_pct/ma12_pct are computed" below) — only rows inside `[period_from, period_to]` are ever returned. |

Fields not relevant to the selected `dataset` are simply ignored (logged as informational, never an error) — you can leave them at their defaults.

#### Worked example — input (HICP)

```json
{
  "dataset": "hicp",
  "countries": ["HU", "DE"],
  "coicop_codes": ["CP00"],
  "period_from": "2024-11",
  "period_to": "2025-12"
}
````

#### Worked example — output (HICP, real data, 4 of 28 rows)

```json
[
  { "dataset": "hicp", "country": "HU", "coicop": "CP00", "period": "2025-01", "index_value": 171.85, "yoy_pct": 5.6758, "ma12_pct": 3.8804 },
  { "dataset": "hicp", "country": "HU", "coicop": "CP00", "period": "2025-11", "index_value": 174.66, "yoy_pct": 3.7050, "ma12_pct": 4.5746 },
  { "dataset": "hicp", "country": "DE", "coicop": "CP00", "period": "2025-01", "index_value": 129.9,  "yoy_pct": 2.7690, "ma12_pct": 2.4645 },
  { "dataset": "hicp", "country": "DE", "coicop": "CP00", "period": "2025-11", "index_value": 132.6,  "yoy_pct": 2.5522, "ma12_pct": 2.3333 }
]
```

The most recent requested month (`2025-12` in this example) came back with every field `null` — Eurostat hadn't published that month for either country yet at fetch time. This is expected, not a bug: see "Known limitations" below.

#### Worked example — input (Comext)

```json
{
  "dataset": "comext",
  "hs_codes": ["870323", "870324"],
  "reporter_countries": ["HU"],
  "partner_countries": ["DE"],
  "flow": "import",
  "period_from": "2024-07",
  "period_to": "2024-12"
}
```

#### Worked example — output (Comext, real data, 4 of 12 rows)

```json
[
  { "dataset": "comext", "hs_code": "870323", "reporter": "HU", "partner": "DE", "period": "2024-07", "flow": "import", "value_eur": 2387357.0, "quantity_kg": 94358.0 },
  { "dataset": "comext", "hs_code": "870323", "reporter": "HU", "partner": "DE", "period": "2024-11", "flow": "import", "value_eur": 6831941.0, "quantity_kg": 349791.0 },
  { "dataset": "comext", "hs_code": "870323", "reporter": "HU", "partner": "DE", "period": "2024-12", "flow": "import", "value_eur": null, "quantity_kg": null },
  { "dataset": "comext", "hs_code": "870324", "reporter": "HU", "partner": "DE", "period": "2024-07", "flow": "import", "value_eur": 2719538.0, "quantity_kg": 50327.0 }
]
```

Again, `2024-12` (the newest requested month) is `null` for both HS codes — not yet published for this reporter/partner/product at fetch time, consistently represented as a null row rather than a missing one (see below).

### Output schema

#### `hicp` rows

| Field | Type | Notes |
|---|---|---|
| `dataset` | string | `"hicp"` |
| `country` | string | Eurostat geo code |
| `coicop` | string | Consumption category code |
| `period` | string | `"YYYY-MM"` |
| `index_value` | float or `null` | Raw HICP index, base 2015=100, as published by Eurostat |
| `yoy_pct` | float or `null` | **Computed.** `(index_value / index_value 12 months earlier - 1) × 100` |
| `ma12_pct` | float or `null` | **Computed.** Average of `yoy_pct` over this period and the 11 preceding ones |

#### `comext` rows

| Field | Type | Notes |
|---|---|---|
| `dataset` | string | `"comext"` |
| `hs_code` | string | Product code as given in `hs_codes` |
| `reporter` | string | Reporter (declarant) country |
| `partner` | string | Partner country, or `"WORLD"` |
| `period` | string | `"YYYY-MM"` |
| `flow` | string | `"import"` or `"export"` |
| `value_eur` | float or `null` | Trade value in euros |
| `quantity_kg` | float or `null` | Trade quantity in kilograms (converted from Eurostat's native 100kg unit) |

Both modules guarantee **exactly one row per requested combination** (country×coicop×period for hicp; reporter×partner×hs\_code×period for comext) — a period Eurostat hasn't published data for yet comes back as a row with `null` fields, it never simply disappears from the output. This makes the row count fully predictable ahead of time (and therefore the cost, too — see Pricing).

### How `yoy_pct` / `ma12_pct` are computed

- `yoy_pct` for period *t* needs the index value at *t* and at *t − 12 months*.
- `ma12_pct` for period *t* is the average of `yoy_pct` at *t, t−1, ..., t−11* — which in turn each need an index value 12 months before THEM, i.e. as far back as *t − 23 months*.
- So the actor automatically fetches 23 months of Eurostat data before your requested `period_from` in the background — you never have to think about this, and only rows inside `[period_from, period_to]` are ever returned.
- If any needed index value is missing (unpublished, withdrawn, or simply older than the country's series start), the computed field is `null` — it is never fabricated, and a partial/incomplete 12-month window for `ma12_pct` is treated as fully missing (strict: all 12 trailing `yoy_pct` values must be present) rather than silently averaging fewer than 12.

### Pricing (pay-per-event)

| Event | Price | When it's charged |
|---|---|---|
| `data-row` | $0.002 | Once per output row |
| `dataset-query` | $0.05 | **Once per run**, right after the first upstream Eurostat chunk fetch succeeds. Never charged if every upstream fetch in the run fails. |

Plus Apify's own `apify-actor-start` synthetic event (first 5 seconds of compute free, platform-managed).

**Examples:**

- HICP: 2 countries × 1 COICOP × 12 months = 24 rows → `24 × $0.002 + $0.05 = $0.098`.
- Comext: 1 reporter × 1 partner × 1 HS code × 6 months = 6 rows → `6 × $0.002 + $0.05 = $0.062`.

If a run's cost would exceed the `Max total charge USD` you set for it, the actor stops producing further rows at exactly that point — every delivered row was paid for, and nothing paid-for is ever dropped. It never crashes and never produces unbilled/"free" rows past the limit.

### Error messages

- **No input at all:** explains the minimal valid input for each dataset.
- **Unknown `dataset`:** *"'dataset' must be one of \['comext', 'hicp'], got '...'."*
- **Unknown `countries` code (hicp):** lists all 45 valid Eurostat geo codes and calls out the `"EL"`/`"UK"` naming quirk.
- **Unknown `reporter_countries` / `partner_countries` code (comext):** lists all valid codes and calls out that Comext uses `"GB"`/`"GR"` (opposite of the hicp module's `"UK"`/`"EL"`).
- **Malformed `coicop_codes`:** Eurostat's full COICOP nomenclature has 468 entries, too many to hardcode as a strict allowlist — this actor validates the code *shape* (letters/digits/underscore, starting with a letter) rather than membership. A well-formed but nonexistent COICOP code is not a validation error; it comes back as a row with `index_value`/`yoy_pct`/`ma12_pct` all `null` (see "Known limitations").
- **Malformed `hs_codes`:** must be digits only, 2/4/6/8 characters.
- **Bad `period_from`/`period_to` format, `period_from` after `period_to`, or span over 120 months:** all rejected with the exact rule and an example fix.
- **0 rows with otherwise valid input:** the run still succeeds, but the log carries an explicit `WARNING: 0 results produced despite valid input (...)` line and the run's status message says so — never a silent "nothing happened." In practice, because both modules guarantee one row per requested combination (see above), this only happens when every single upstream chunk fetch failed (e.g. Eurostat is unreachable) — Eurostat genuinely having no data for a period/country/product still produces `null`-valued rows, not zero rows.

### Known limitations (documented, not hidden)

- **HICP index base year is fixed to `unit=I15` (2015=100).** Eurostat periodically rebases (I05, I96 were also observed live); if/when a newer base becomes the primary one, this actor will need an update — verified 2026-07-06 that I15 is still current.
- **COICOP codes are shape-validated, not membership-validated** (see Error messages) — a typo'd-but-well-formed code silently yields all-null rows rather than a hard error. Common valid codes are listed in the input field description.
- **Comext's 5,000,000-row extraction cap** is worked around by chunking every fetch to one (reporter country × calendar year) pair, which stays far under the cap for any realistic `hs_codes`/`partner_countries` combination. In the extraordinarily unlikely case a single chunk is still rejected as too big, that one chunk is skipped with a loud log warning (not a crash) — narrowing `hs_codes`/`partner_countries` or the period range is the fix.
- **Eurostat's two APIs disagree on a few country codes** (`"EL"`/`"UK"` for HICP vs. `"GB"`/`"GR"` for Comext) — this is Eurostat's own inconsistency between the general Statistics API and the Comext API, called out explicitly in both the input schema and validation error messages so it's never a silent surprise.
- **A requested period newer than what Eurostat has actually published for a given series is emitted as a null row, not omitted** — Eurostat's own JSON-stat response simply drops that month from its time dimension entirely rather than returning an explicit null cell for it; this actor re-inserts the expected row with null fields so the row count is always predictable from the input alone.

### Data sources (public, no API key, no scraping)

- Eurostat Statistics API (JSON-stat 2.0): `https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/prc_hicp_midx`
- Eurostat Comext dissemination API (JSON-stat 2.0): `https://ec.europa.eu/eurostat/api/comext/dissemination/statistics/1.0/data/DS-045409`

Both are the same public, unauthenticated endpoints Eurostat's own web tools call — no login, no key, no ToS-risk scraping.

# Actor input Schema

## `dataset` (type: `string`):

Which Eurostat dataset to query. "hicp" = inflation / consumer prices (Harmonised Index of Consumer Prices), with computed 'yoy\_pct' and 'ma12\_pct' fields Eurostat doesn't provide directly. "comext" = EU international trade in goods (import/export value and quantity by product/country/period). Defaults to "hicp".

## `countries` (type: `array`):

hicp only. Eurostat geo codes to fetch inflation for, e.g. "HU", "DE", "EA20" (euro area), "EU27\_2020". Note: Eurostat uses "EL" for Greece and "UK" for the United Kingdom, not "GR"/"GB". Defaults to \["HU", "DE"].

## `coicop_codes` (type: `array`):

hicp only. Which consumption category/categories to fetch, using Eurostat's COICOP classification. "CP00" = all-items HICP (headline inflation, the default). Other common codes: "CP01" (food & non-alcoholic beverages), "NRG" (energy), "SERV" (services), "TOT\_X\_NRG\_FOOD" (core inflation, excl. energy & food). Defaults to \["CP00"].

## `hs_codes` (type: `array`):

comext only. Product codes to fetch trade data for: 2-digit HS chapter (e.g. "87"), 4-digit HS heading ("8703"), 6-digit HS subheading ("870323"), or 8-digit full CN8 code. Defaults to \["870323"] (cars with 1.5-3.0L spark-ignition engines, a Comext worked example).

## `reporter_countries` (type: `array`):

comext only. The EU/EFTA country/ies reporting the trade flow (the "declarant"). Uses plain ISO codes, e.g. "GB"/"GR" for the UK/Greece (different from the HICP module's "UK"/"EL" convention — this is Eurostat's own inconsistency, not this actor's). Defaults to \["HU"].

## `partner_countries` (type: `array`):

comext only. The trade partner country/ies (where goods came from/went to). ISO-3166-1 alpha-2 codes (e.g. "DE", "US", "CN"), or "WORLD" for all partners combined. Defaults to \["DE"].

## `flow` (type: `string`):

comext only. Whether to fetch imports into the reporter country, or exports from it. Defaults to "import".

## `period_from` (type: `string`):

Start of the period to fetch, as "YYYY-MM" (e.g. "2025-01"). Used by both datasets. For hicp, Eurostat data 23 months before this is fetched automatically in the background to compute 'yoy\_pct'/'ma12\_pct' for every requested period — only rows within \[period\_from, period\_to] are returned.

## `period_to` (type: `string`):

End of the period to fetch, as "YYYY-MM" (e.g. "2025-12"). Used by both datasets. Must not be before 'period\_from'; the range is capped at 120 months (10 years) per run.

## Actor input object example

```json
{
  "dataset": "hicp",
  "countries": [
    "HU",
    "DE"
  ],
  "coicop_codes": [
    "CP00"
  ],
  "hs_codes": [
    "870323"
  ],
  "reporter_countries": [
    "HU"
  ],
  "partner_countries": [
    "DE"
  ],
  "flow": "import",
  "period_from": "2025-01",
  "period_to": "2025-12"
}
```

# Actor output Schema

## `items` (type: `string`):

HICP (inflation) or Comext (trade) rows, depending on the 'dataset' input, stored in the run's default dataset.

# 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 = {
    "dataset": "hicp",
    "countries": [
        "HU",
        "DE"
    ],
    "coicop_codes": [
        "CP00"
    ],
    "hs_codes": [
        "870323"
    ],
    "reporter_countries": [
        "HU"
    ],
    "partner_countries": [
        "DE"
    ],
    "flow": "import",
    "period_from": "2025-01",
    "period_to": "2025-12"
};

// Run the Actor and wait for it to finish
const run = await client.actor("westerly_breaker/eurostat-statistics").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 = {
    "dataset": "hicp",
    "countries": [
        "HU",
        "DE",
    ],
    "coicop_codes": ["CP00"],
    "hs_codes": ["870323"],
    "reporter_countries": ["HU"],
    "partner_countries": ["DE"],
    "flow": "import",
    "period_from": "2025-01",
    "period_to": "2025-12",
}

# Run the Actor and wait for it to finish
run = client.actor("westerly_breaker/eurostat-statistics").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "dataset": "hicp",
  "countries": [
    "HU",
    "DE"
  ],
  "coicop_codes": [
    "CP00"
  ],
  "hs_codes": [
    "870323"
  ],
  "reporter_countries": [
    "HU"
  ],
  "partner_countries": [
    "DE"
  ],
  "flow": "import",
  "period_from": "2025-01",
  "period_to": "2025-12"
}' |
apify call westerly_breaker/eurostat-statistics --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=westerly_breaker/eurostat-statistics",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Eurostat Statistics API — EU Inflation (HICP) & Trade Data",
        "description": "Get EU inflation (HICP/CPI, with computed YoY and 12-month moving average) and EU import/export trade statistics from Eurostat's public API as clean JSON. No key needed.",
        "version": "0.1",
        "x-build-id": "6g3hBrnaDjpwlzPFA"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/westerly_breaker~eurostat-statistics/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-westerly_breaker-eurostat-statistics",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/westerly_breaker~eurostat-statistics/runs": {
            "post": {
                "operationId": "runs-sync-westerly_breaker-eurostat-statistics",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/westerly_breaker~eurostat-statistics/run-sync": {
            "post": {
                "operationId": "run-sync-westerly_breaker-eurostat-statistics",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "dataset": {
                        "title": "Dataset",
                        "enum": [
                            "hicp",
                            "comext"
                        ],
                        "type": "string",
                        "description": "Which Eurostat dataset to query. \"hicp\" = inflation / consumer prices (Harmonised Index of Consumer Prices), with computed 'yoy_pct' and 'ma12_pct' fields Eurostat doesn't provide directly. \"comext\" = EU international trade in goods (import/export value and quantity by product/country/period). Defaults to \"hicp\".",
                        "default": "hicp"
                    },
                    "countries": {
                        "title": "Countries (HICP)",
                        "type": "array",
                        "description": "hicp only. Eurostat geo codes to fetch inflation for, e.g. \"HU\", \"DE\", \"EA20\" (euro area), \"EU27_2020\". Note: Eurostat uses \"EL\" for Greece and \"UK\" for the United Kingdom, not \"GR\"/\"GB\". Defaults to [\"HU\", \"DE\"].",
                        "items": {
                            "type": "string"
                        }
                    },
                    "coicop_codes": {
                        "title": "COICOP codes (HICP)",
                        "type": "array",
                        "description": "hicp only. Which consumption category/categories to fetch, using Eurostat's COICOP classification. \"CP00\" = all-items HICP (headline inflation, the default). Other common codes: \"CP01\" (food & non-alcoholic beverages), \"NRG\" (energy), \"SERV\" (services), \"TOT_X_NRG_FOOD\" (core inflation, excl. energy & food). Defaults to [\"CP00\"].",
                        "items": {
                            "type": "string"
                        }
                    },
                    "hs_codes": {
                        "title": "Product / HS codes (Comext)",
                        "type": "array",
                        "description": "comext only. Product codes to fetch trade data for: 2-digit HS chapter (e.g. \"87\"), 4-digit HS heading (\"8703\"), 6-digit HS subheading (\"870323\"), or 8-digit full CN8 code. Defaults to [\"870323\"] (cars with 1.5-3.0L spark-ignition engines, a Comext worked example).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "reporter_countries": {
                        "title": "Reporter countries (Comext)",
                        "type": "array",
                        "description": "comext only. The EU/EFTA country/ies reporting the trade flow (the \"declarant\"). Uses plain ISO codes, e.g. \"GB\"/\"GR\" for the UK/Greece (different from the HICP module's \"UK\"/\"EL\" convention — this is Eurostat's own inconsistency, not this actor's). Defaults to [\"HU\"].",
                        "items": {
                            "type": "string"
                        }
                    },
                    "partner_countries": {
                        "title": "Partner countries (Comext)",
                        "type": "array",
                        "description": "comext only. The trade partner country/ies (where goods came from/went to). ISO-3166-1 alpha-2 codes (e.g. \"DE\", \"US\", \"CN\"), or \"WORLD\" for all partners combined. Defaults to [\"DE\"].",
                        "items": {
                            "type": "string"
                        }
                    },
                    "flow": {
                        "title": "Trade flow (Comext)",
                        "enum": [
                            "import",
                            "export"
                        ],
                        "type": "string",
                        "description": "comext only. Whether to fetch imports into the reporter country, or exports from it. Defaults to \"import\".",
                        "default": "import"
                    },
                    "period_from": {
                        "title": "Period from",
                        "type": "string",
                        "description": "Start of the period to fetch, as \"YYYY-MM\" (e.g. \"2025-01\"). Used by both datasets. For hicp, Eurostat data 23 months before this is fetched automatically in the background to compute 'yoy_pct'/'ma12_pct' for every requested period — only rows within [period_from, period_to] are returned.",
                        "default": "2025-01"
                    },
                    "period_to": {
                        "title": "Period to",
                        "type": "string",
                        "description": "End of the period to fetch, as \"YYYY-MM\" (e.g. \"2025-12\"). Used by both datasets. Must not be before 'period_from'; the range is capped at 120 months (10 years) per run.",
                        "default": "2025-12"
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
