# Eurostat Inflation HICP: Monthly Country Rates (`thatmike1/eu-eurostat-hicp`) Actor

Export official all-items annual HICP rates from current prc_hicp_minr, with geo/month identities, source flags and explicit missing-month diagnostics.

- **URL**: https://apify.com/thatmike1/eu-eurostat-hicp.md
- **Developed by:** [Michal Pšenčík](https://apify.com/thatmike1) (community)
- **Categories:** Business, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00005 / actor start

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/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

## Eurostat Inflation HICP: Monthly Country Rates

Export the official all-items annual HICP inflation rate for EU countries, one dataset row per country and month, straight from Eurostat's current `prc_hicp_minr` dataset (HICP, ECOICOP ver. 2). Each row holds the annual rate of change in percent exactly as Eurostat publishes it, the source status flag, and the exact source URL with the SHA-256 of its response. It is meant for comparison dashboards and cost trackers that refresh the latest months after each release, without maintaining JSON-stat decoding or the 2026 dataset migration yourself.

This is a narrow export of one published series: all-items (`coicop18=TOTAL`), annual rate of change (`unit=RCH_A`), monthly. It does not compute inflation, rebase indices, cover component baskets, aggregates such as the euro area, forecasts or release calendars, and it is not financial advice. It does not reconstruct what Eurostat published at an earlier date: a revised month comes back with its current number. This actor is independent of Eurostat and not endorsed by it.

### Input

```json
{
    "geoCodes": ["DE", "FR"],
    "startMonth": "2026-07",
    "endMonth": "2026-09",
    "maxItems": 1200
}
```

- `geoCodes`: 1 to 10 EU member-state codes as Eurostat writes them: BE, BG, CZ, DK, DE, EE, IE, EL (Greece, not GR), ES, FR, HR, IT, CY, LV, LT, LU, HU, MT, NL, AT, PL, PT, RO, SI, SK, FI, SE. Surrounding spaces are trimmed and letters uppercased; duplicates collapse to the first occurrence and are fetched and billed once. Default `["DE", "FR"]`. Aggregates and other aliases are refused.
- `endMonth`: last month, `YYYY-MM`, no later than the current UTC month. Default: the previous UTC calendar month.
- `startMonth`: first month, `YYYY-MM`, 1996-01 or later. Default: two months before `endMonth` (never before 1996-01). The range may span at most 120 months.
- `maxItems`: stop after this many rows are stored, 1 to 1200. Default 1200, enough for ten countries over 120 months.

The defaults are resolved once, from the UTC date at the start of the run, and recorded in `SUMMARY`. Unknown fields, `null`, wrong types, impossible months, a reversed range and out-of-range values fail the run before any source request, with the reason in `SUMMARY`.

### Output

One row per country and month that has a number, countries in input order, months ascending:

```json
{
    "schemaVersion": 1,
    "recordId": "eurostat:prc_hicp_minr:M:RCH_A:TOTAL:DE:2026-07",
    "deliveryId": "b5f8680326188afb60fac3b8ef60889c44233f574f95e29193ddf700c14e4555",
    "observedAt": "2026-10-22T21:36:11.262Z",
    "contentHash": "c1f9586293b865edcd9de3a806cae82732bee75f8db1c5e52b27dc8321c06715",
    "provenance": [
        {
            "url": "https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/prc_hicp_minr?lang=EN&freq=M&unit=RCH_A&coicop18=TOTAL&geo=DE&sinceTimePeriod=2026-07&untilTimePeriod=2026-09",
            "sha256": "a2d0ae766f24a5c573c6a4c6030fa7b84b2f62a33d3803483a976d96ef6fe6de"
        }
    ],
    "dataset": "prc_hicp_minr",
    "frequency": "M",
    "unit": "RCH_A",
    "coicop18": "TOTAL",
    "geo": "DE",
    "geoLabel": "Germany",
    "month": "2026-07",
    "annualRatePercent": 2.8,
    "statusFlag": null
}
```

- `annualRatePercent` is the source's annual rate of change in percent, as a number, with no rounding or recalculation. It is not an index level and not a month-on-month rate. Zero and negative rates are real values.
- `statusFlag` is Eurostat's status code for that observation, kept verbatim (for example `e`, estimated; codes can have several letters). `null` means the source supplied no flag; it does not prove the value is final.
- `geoLabel` is the country name Eurostat returned.
- `recordId` is stable across runs for the same country and month. `contentHash` is the SHA-256 of the source fields (keys sorted, compact JSON), so a corrected value or flag changes it and an unchanged repeat keeps it. `deliveryId` identifies this run's delivery of the row. `observedAt` is when the source response finished.

A month with no published number (not yet released, or never compiled) gets no row: it is listed in `SUMMARY` as missing, never as a zero rate. A country whose response does not have exactly the expected dimensions, codes and types gets no rows at all, and the reason goes to `SUMMARY`.

Export the dataset as JSON, CSV or Excel from the run's Storage tab or the API.

### Run summary (free)

Every run writes a `SUMMARY` record to its key-value store, also on failure: run status (`complete`, `partial`, `failed` or `capped`), the resolved input, request, byte and row counts, and one outcome per country (`delivered`, `empty`, `missing`, `error` or `not_attempted`) with an error code, HTTP status and warnings. `empty` means Eurostat returned no number for the requested months; `missing` means the country is not in the response at all. Months without a number are listed in a `missing_months` warning. Eurostat's dataset update time is kept in a `source_updated` warning with its original offset; it is a dataset timestamp, not the release time of any one month. When a cap stops the run, `firstUndeliveredKey` names the first country (or `country:month`) left undelivered, so you can rerun from there.

### Pricing

Pay per event **plus platform usage**: besides the two events below, you pay the Apify platform usage of your own run (compute, storage and data transfer) at your plan's rates.

- **$0.00005** per Actor start (one start unit at the default 256 MB).
- **$0.0005** per country-month row stored in the dataset, including unchanged repeats.

The run is small: at 256 MB it stops its own work after 300 seconds, so compute is at most about 0.021 compute units, and a default run finishes in a few seconds. The default run (two countries, three months) stores up to 6 rows: $0.00305 in events. Ten rows cost $0.00505, a hundred $0.05005, the 1200-row maximum $0.60005. Missing months, empty or failed countries and the `SUMMARY` record are free; a run that delivers no rows costs only the start fee. Every run fetches fresh data and bills its rows again, even when nothing changed. There are no change alerts and no saved state between runs.

### Limits and behaviour

- One anonymous HTTPS GET per country to `https://ec.europa.eu/eurostat/api/dissemination/statistics/1.0/data/prc_hicp_minr` with a fixed query; no key, login, cookies, browser or proxy. Requests are sequential with at least 1.2 seconds between them. The actor never uses the discontinued `prc_hicp_manr` dataset or the old `CP00` code, and never follows Eurostat's asynchronous-download links.
- Timeouts, connection resets and 5xx responses are retried twice (2 s, then 5 s, or longer if the source asks with `Retry-After`, up to 60 s). A 403, 429, challenge page or HTML instead of JSON stops all further requests for the run without retry. Two countries in a row failing after retries also stop the run.
- Per run: 100 HTTP attempts, 4 MiB per response, 16 MiB of responses in total, 300 seconds of work.
- No paging, history archive, revision tracking or saved state between runs. Rows already stored stay valid when a later country fails; the summary then says `partial`.
- The default window asks for the three months before the current one. A month Eurostat has not yet released for a country is simply missing, so early in a month the default run may return two months per country instead of three.

### Support

Open an issue on the Actor's Issues tab. Source documentation: [Eurostat API statistics guide](https://ec.europa.eu/eurostat/web/user-guides/data-browser/api-data-access/api-detailed-guidelines/api-statistics), [HICP information](https://ec.europa.eu/eurostat/web/hicp/information-data) and the [JSON-stat format](https://json-stat.org/format/).

# Actor input Schema

## `geoCodes` (type: `array`):

1 to 10 EU member-state codes as Eurostat writes them: BE, BG, CZ, DK, DE, EE, IE, EL (Greece), ES, FR, HR, IT, CY, LV, LT, LU, HU, MT, NL, AT, PL, PT, RO, SI, SK, FI, SE. Spaces are trimmed and letters uppercased; duplicates are fetched and billed once. Aggregates such as EU27_2020 or EA are not accepted.

## `startMonth` (type: `string`):

First month to include, 1996-01 or later. Leave empty for two months before the last month.

## `endMonth` (type: `string`):

Last month to include, no later than the current UTC month. Leave empty for the previous UTC calendar month. The range may span at most 120 months.

## `maxItems` (type: `integer`):

Stop after this many country-month rows are stored (each one is a billed dataset item). Ten countries over 120 months is 1200 rows, the maximum.

## Actor input object example

```json
{
  "geoCodes": [
    "DE",
    "FR"
  ],
  "maxItems": 1200
}
```

# Actor output Schema

## `rows` (type: `string`):

No description

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

No description

# 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 = {
    "geoCodes": [
        "DE",
        "FR"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("thatmike1/eu-eurostat-hicp").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 = { "geoCodes": [
        "DE",
        "FR",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("thatmike1/eu-eurostat-hicp").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 '{
  "geoCodes": [
    "DE",
    "FR"
  ]
}' |
apify call thatmike1/eu-eurostat-hicp --silent --output-dataset

```

## MCP server setup

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

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/77ZLi0o5z6id8KWYO/builds/aofJkDFlB4aXCy9Ho/openapi.json
