# EU and NL Economic Indicators (`vizellie/eu-economic-indicators`) Actor

HICP inflation, unemployment, GDP growth, labour cost and minimum wages for EU countries from Eurostat, plus Dutch figures from CBS. One row per indicator, country and period. $0.002 per figure.

- **URL**: https://apify.com/vizellie/eu-economic-indicators.md
- **Developed by:** [Vi Zellie](https://apify.com/vizellie) (community)
- **Categories:** Business, Developer tools, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 indicator observations

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## EU and NL Economic Indicators

Pull inflation, unemployment, labour cost, GDP growth and minimum wages for EU countries, plus the Dutch CPI, unemployment rate, GDP and contractual wages. Each figure comes back as one row: indicator, country, period, value, unit and source.

Not legal or investment advice; general information only.

### Who it is for

Analysts, finance teams and operators who want a small, repeatable table of headline figures for a dashboard, a board pack or a monthly check.

### What you get

- HICP annual inflation, the unemployment rate, labour cost, real GDP growth and the monthly minimum wage.
- Dutch CPI inflation, the Dutch unemployment rate (ages 15 to 75), Dutch GDP growth and the change in contractual wages.
- One row per indicator, country and period. The unit and the source are on the row.
- A country list, a start and end period, and a frequency. Native frequency keeps each series as it is published.
- EU and euro area totals when you ask for `EU` or `EA`.
- A clear note in the run summary when a source does not respond. Figures from the source that did respond are still saved.

These are national headline totals. The Dutch unemployment row is the seasonally adjusted rate for ages 15 to 75, not a breakdown by age or sex. HICP and the Dutch CPI are different indexes. The source field tells you which one you have.

### Tutorial

1. Leave **Indicators** on HICP and unemployment, or add GDP, labour cost, the minimum wage, or the Dutch series.
2. Set **Countries** to the markets you follow, for example `NL` and `DE`. Leave the list empty for all 27 member states. Add `EU` or `EA` for the totals. Greece is `GR`.
3. Leave **Frequency** on native. Choose monthly or quarterly only when you want to drop series that are published on another rhythm. Skipped series are named in the summary.
4. Leave **Start period** and **End period** empty to keep the latest periods (**Latest periods**, default 3). The form starts at 1. Or set a range, such as `2025-01` to `2026-09`, or `2025-Q1` to `2026-Q2`.
5. Run the Actor. The dataset has one row per figure. The `OUTPUT` record says how many rows were saved and whether anything was skipped or unavailable.
6. Schedule a task if you want this on the first working day of the month. Rows that were not saved are not charged.

A default run, HICP and unemployment for all member states and 3 periods, is 162 rows. See Pricing.

### Example input

```json
{
  "indicators": ["hicp", "unemployment", "cpiNl", "unemploymentNl"],
  "countries": ["NL"],
  "startPeriod": "2026-01",
  "endPeriod": "2026-09",
  "maxRows": 200
}
```

### Example output

```json
{
  "indicator": "hicp",
  "indicatorName": "HICP annual inflation",
  "country": "NL",
  "countryName": "Netherlands",
  "period": "2026-09",
  "frequency": "M",
  "value": 3,
  "unit": "percent",
  "unitDetail": "Annual rate of change, all items",
  "adjustment": "none",
  "source": "Eurostat"
}
```

```json
{
  "indicator": "unemploymentNl",
  "indicatorName": "Dutch unemployment rate",
  "country": "NL",
  "countryName": "Netherlands",
  "period": "2026-09",
  "frequency": "M",
  "value": 4,
  "unit": "percent",
  "unitDetail": "Unemployment rate, ages 15 to 75",
  "adjustment": "seasonally adjusted",
  "source": "CBS"
}
```

Periods look like `2026-09` for a month, `2026-Q2` for a quarter and `2026-S2` for a half year. A `flag` of `provisional` means the publisher still marks that figure as preliminary. Missing periods are left out. They are not filled in.

### Pricing

You pay a small fee when the run starts, then a fee for each observation that is saved. One observation is one indicator, one country and one period.

| What | Price |
|---|---|
| Run start | $0.00005 |
| Observation | $0.002 |

Skipped series, missing periods, and rows past **Max rows** are not charged. If a source does not respond, you are not charged for figures it did not save.

**Examples**

- The defaults, HICP and unemployment, all 27 member states, 3 months: 162 × $0.002 = **$0.324**, plus the $0.00005 start fee.
- The form, HICP and unemployment, two countries, 1 month: 4 × $0.002 = **$0.008**, plus the $0.00005 start fee.
- Netherlands, HICP, unemployment, Dutch CPI and Dutch unemployment, 12 months: 48 × $0.002 = **$0.096**, plus the start fee.
- One country, 8 quarters of GDP: 8 × $0.002 = **$0.016**, plus the start fee.
- A run that hits the default cap of 500 rows: 500 × $0.002 = **$1.00**, plus the start fee.
- A run that saves nothing: **$0.00005**.

Use **Max rows** and Apify's maximum cost per run to cap a single run. The pricing tab on the store is the price you are charged if it ever differs.

### Scheduling and integrations

Save a task and schedule it monthly. Keep the same countries and indicators so each file has the same shape. The dataset can go to Google Sheets, Slack, email, Make or Zapier, or you can read it from the Apify API. The rows are small enough to pass to an AI agent over MCP.

### No personal data

This Actor does not collect personal data.

- It reads published national totals only. It does not request age, sex or regional splits, and it does not request person-level records.
- Raw responses are not stored.
- Country names in the dataset come from a fixed list, not from free text in the response.
- Logs and error text do not include the address that was called.

### FAQ

**Why do the EU unemployment rate and the Dutch one differ?**
They are different measures. The EU row is the harmonised rate. The Dutch row is the national rate for ages 15 to 75. Both can sit in the same dataset. Use the source field.

**What is HICP, next to the Dutch CPI?**
HICP is the EU consumer price measure, as an annual rate of change. The Dutch CPI is the national consumer price index, also as an annual change. They are not the same index.

**Why is a series missing?**
It may be published on another frequency. A monthly request skips quarterly GDP and says so in the summary. A country with no statutory minimum wage has no minimum wage row. A source that does not respond is named in the summary, and the other series are still saved.

**Where do the figures come from?**
EU series are published by Eurostat. Dutch series are published by Statistics Netherlands (CBS). This Actor is not affiliated with either institution. Figures can be revised. A provisional flag is kept when the publisher sets one.

### Next additions

- Government deficit, retail trade and industrial production, in the same row shape.
- A tick box for the EU and euro area totals, next to the country list.
- A comparison with the previous run, so a schedule can flag a move in inflation or unemployment.
- Annual figures beside the monthly and quarterly headlines.

### Feedback

Missing a series or a country? Open an issue on the Actor's Issues tab.

# Actor input Schema

## `indicators` (type: `array`):

Headline series to read. Dutch series are national totals for the Netherlands. Leave the defaults for HICP inflation and the unemployment rate.

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

EU member state codes, for example NL, DE and FR. Leave empty for all 27. Greece is GR. Add EU for the European Union total and EA for the euro area. Dutch series run only when NL is included, or when the list is empty.

## `frequency` (type: `string`):

Native keeps each series at the frequency it is published. A series that does not match is skipped and named in the run summary.

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

First period to keep, inclusive. Use 2026-01 for a month, 2026-Q1 for a quarter, 2026-S1 for a half year, or 2026 for a year. Leave empty to take the latest periods instead.

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

Last period to keep, inclusive. Same shapes as the start period. An end in the future is brought back to the current period.

## `lastPeriods` (type: `integer`):

How many newest periods to keep per country and indicator, when start and end are empty. From 1 to 120. Default 3.

## `maxRows` (type: `integer`):

Most rows saved in one run, from 1 to 5000. The newest periods are kept. Default 500.

## Actor input object example

```json
{
  "indicators": [
    "hicp",
    "unemployment"
  ],
  "countries": [
    "NL",
    "DE"
  ],
  "frequency": "native",
  "startPeriod": "2026-01",
  "endPeriod": "2026-09",
  "lastPeriods": 1,
  "maxRows": 10
}
```

# Actor output Schema

## `observations` (type: `string`):

One row per indicator, country and period, with the unit and the source.

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

The OUTPUT record in the default key-value store.

# 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 = {
    "indicators": [
        "hicp",
        "unemployment"
    ],
    "countries": [
        "NL",
        "DE"
    ],
    "lastPeriods": 1,
    "maxRows": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("vizellie/eu-economic-indicators").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 = {
    "indicators": [
        "hicp",
        "unemployment",
    ],
    "countries": [
        "NL",
        "DE",
    ],
    "lastPeriods": 1,
    "maxRows": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("vizellie/eu-economic-indicators").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 '{
  "indicators": [
    "hicp",
    "unemployment"
  ],
  "countries": [
    "NL",
    "DE"
  ],
  "lastPeriods": 1,
  "maxRows": 10
}' |
apify call vizellie/eu-economic-indicators --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vizellie/eu-economic-indicators"
        }
    }
}
```

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/x8Q6M4BTKkQe6MDyf/builds/YAun8Tz0s8x7p27uZ/openapi.json
