# EEA Industrial Emissions & Facility Intelligence (`afkdigital/newapi54-eea-industrial-emissions-facility-intelligence`) Actor

Official EEA E-PRTR facility releases in kg/year. Filter country, main sector, pollutant, year and quantity; separate air/water/land rows, exact facility IDs and reported parent companies. Verified v16 snapshot, 2007–2024. JSON/CSV for Clay and n8n.

- **URL**: https://apify.com/afkdigital/newapi54-eea-industrial-emissions-facility-intelligence.md
- **Developed by:** [AFK Digital](https://apify.com/afkdigital) (community)
- **Categories:** Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$7.50 / 1,000 successful unique emission records

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

## EEA Industrial Emissions & Facility Intelligence

Get European **E-PRTR facility pollutant releases**, with official facility identifiers, reported parent-company names when available, main activity, country, city, year and release medium. Export JSON or CSV for Clay, n8n and other data workflows.

**Verified data edition:** EEA Industrial Reporting **v16**, published **20 February 2026**, covering **2007–2024**. This Actor uses an indexed, pinned snapshot of the official open Access download. It is not a live reporting-year-2026 feed. The EEA catalogue was checked on 30 October 2026; v16 was the newest available edition. A new edition requires a verified snapshot/build refresh.

### What one result means

One result is one unique **country + facility INSPIRE ID + reporting year + pollutant code + release medium** record. AIR, WATER and LAND remain separate. Different pollutants, including CO2 and CO2 excluding biomass, remain separate. Quantities are the source's **kg/year** totals for that specific pollutant and medium. Accidental releases are already included in the total; this Actor does not add them again.

This product covers E-PRTR releases. It does not provide EU ETS verified emissions, allowances, carbon trading, or LCP installation-part emissions. Source reporting thresholds and incomplete country/year coverage apply. Missing records do not prove zero emissions, compliance, inactivity, or absence of a facility.

### Inputs

| Input | Meaning |
|---|---|
| countryCode | Optional exact EEA country code, such as DE, FR, GR or GB. Blank includes all. |
| industrySector | Optional main E-PRTR sector code 1–9, or an exact sector name from the list below. |
| pollutant | Optional exact source pollutant code, or case-insensitive name substring. |
| reportingYear | Integer 2007–2024. Omitted means 2024. No fallback to an earlier year. |
| minReleaseKg | Minimum kg/year for an individual result; default 0. |
| maxResults | Integer 1–10,000; default 25. |
| releaseMedium | Optional AIR, WATER or LAND. Blank returns separate rows for all media. |
| maxChargeUsd | Additional record-event spending cap; default USD 1.00. Rounded down to whole records. |

Example:

```json
{
  "countryCode": "DE",
  "industrySector": "1",
  "pollutant": "NOX",
  "reportingYear": 2024,
  "minReleaseKg": 10000,
  "maxResults": 25,
  "maxChargeUsd": 1
}
```

Supported country codes: AT, BE, BG, CH, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GR, HR, HU, IE, IS, IT, LT, LU, LV, MT, NL, NO, PL, PT, RO, RS, SE, SI, SK.

Main sectors: 1 Energy sector; 2 Production and processing of metals; 3 Mineral industry; 4 Chemical industry; 5 Waste and wastewater management; 6 Paper and wood production and processing; 7 Intensive livestock production and aquaculture; 8 Animal and vegetable products from the food and beverage sector; 9 Other activities.

### Output fields and identity rules

| Field | Official mapping / meaning |
|---|---|
| facility_inspire_id | 2f_PollutantRelease.Facility_INSPIRE_ID; exact facility identity, never site or installation ID. |
| facility_name | 2_ProductionFacility.nameOfFeature, exact facility dimension join. |
| parent_company_name | 2_ProductionFacility.parentCompanyName; blank, placeholder or confidential means null. Never inferred. |
| country_code | 0b_DataCollectionMetadata_EPRTR_LCP.countryCode via exact fileId; year and country consistency checked. |
| city | 2_ProductionFacility.city; withheld address means null. |
| main_activity_sector | E-PRTR sector 1–9 derived from the published mainActivityCode, with official sector labels. |
| pollutant_name / pollutant_code | 2f_PollutantRelease.pollutantName / pollutantCode. |
| total_release_kg | 2f_PollutantRelease.totalPollutantQuantityKg; annual kg, no pollutant/medium aggregation. |
| reporting_year | 2f_PollutantRelease.reportingYear, validated against its submission metadata. |
| release_medium | 2f_PollutantRelease.medium: AIR, WATER or LAND. |
| reporting_unit_type | production_facility. |
| source_url / source_data_url | Official edition DOI and download location. |
| fetched_at | Time this result was delivered from the snapshot, UTC. |
| source_fetched_at | Time the official source download completed, UTC. |
| administrative_reporting_year | Submission year associated with the official shared facility dimension. |
| annual_details_match | Whether exact facility ID + release year exists in 2a_ProductionFacilityDetails. |

Additional fields include record_key, main_activity_code, main_activity_sector_code, release_unit, administrative_join, source_table, source_version, source_published_at, license and attribution.

**Administrative attributes are snapshot attributes, not annual ownership history.** The source has one shared facility dimension per INSPIRE ID. Its submission year is disclosed separately; names and ownership are not presented as verified annual changes. Missing dimension joins leave administrative fields null. No fuzzy matching or site/installation substitution is performed.

Source-quality handling: the pinned snapshot contains **629,583 valid unique release records**, including **3,319 LAND records**. Six keys with contradictory source quantities are quarantined entirely. Eighty-one missing, invalid or confidential source rows are excluded. The run's SOURCE_MANIFEST and OUTPUT records disclose counts and edition details.

### Pricing and limits

**Pay per event: USD 0.0075 per successfully saved unique emission record (USD 7.50 per 1,000).**

Event name: emission-record. One event is charged only after one valid, unique output record is saved to the default Dataset. No start fee. Duplicates, quarantined/confidential/invalid rows, empty searches and failed writes are not charged. Dedupe scope is one run, including its restarts; separate new runs are separate deliveries. Platform spending limits and maxChargeUsd apply together with maxResults. Standard-run platform usage is included in this event price.

The Actor queries its indexed snapshot with keyset pagination, caps output at 10,000 rows and stops its work after about 230 seconds (platform timeout 300 seconds). Restarted runs read existing Dataset keys before writing. Apify SDK handles storage/API retries and timeouts; the source acquisition tool separately uses bounded HTTP retries and validates the official source hash. No browser, login scraping, proxy or user API key is required.

### JSON / CSV integration

Start the Actor using the Apify API or the n8n Apify node. After completion, read the default Dataset:

```text
GET https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=json&clean=true
GET https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=csv&clean=true
```

Use your Apify connection or Authorization header where required. Poll the run until it finishes before importing CSV into Clay or mapping JSON records into n8n. Dataset GET supports offset and limit for downstream pagination. The Output tab links to JSON, CSV and the run summary.

### Source, licence and attribution

Source: [European Environment Agency (EEA), Industrial Reporting v16](https://doi.org/10.2909/657ac3cb-affa-4295-a4a9-27b4f539adab), published 20 February 2026.

Access: official catalogue-linked public download, Industrial_dataset_v_16_2026_02_16.accdb. Direct DiscoData access returned HTTP 403 from the build host, so this edition uses the official open file.

Data licence: [Creative Commons Attribution 4.0 International](https://creativecommons.org/licenses/by/4.0/). Copyright holder: European Environment Agency. Reuse, including commercial reuse, is permitted under its attribution terms. Retain credit, the licence link, the edition/source link and a notice of changes when redistributing.

Suggested attribution: “European Environment Agency (EEA), Industrial Reporting v16 (2026), CC BY 4.0. Filtered, field-normalised and indexed by AFK MESH; invalid/confidential and conflicting records excluded.” This Actor is independent of EEA and is not endorsed by it.

Data completeness varies by country and year. Historical E-PRTR identifiers include EEA's own historical mapping; the Actor preserves those official IDs. The source metadata describes country reporting gaps and hidden records. No suppressed information is reconstructed.

### Reproducibility

Project version: 0.1.1. Python Apify SDK: 4.2.0. See data/manifest.json for raw-download and SQLite SHA-256 values, coverage and transformation counts. tools/fetch_source.py fetches only fixed official EEA resources, tools/prepare_snapshot.py prepares the dataset, and tests/ verifies semantics and delivery limits.

# Actor input Schema

## `countryCode` (type: `string`):

Optional exact two-letter EEA country code, e.g. DE, FR or GB. Blank includes all countries.

## `industrySector` (type: `string`):

Optional sector code 1–9 or exact sector name. This is the main facility activity, not an installation sector.

## `pollutant` (type: `string`):

Optional exact pollutant code or case-insensitive substring of its name. CO2 and CO2 excluding biomass remain different records.

## `reportingYear` (type: `integer`):

Optional year, 2007–2024. When omitted, uses 2024, the latest year in verified EEA v16. No fallback to older data.

## `minReleaseKg` (type: `number`):

Minimum kg/year for the individual pollutant and individual medium.

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

Up to 10,000 successful unique emissions records per run.

## `releaseMedium` (type: `string`):

Optional release medium. AIR, WATER and LAND remain separate output records; blank includes all media.

## `maxChargeUsd` (type: `number`):

Additional input budget for record events, rounded down to whole USD 0.0075 records. The platform maximum charge is also honored.

## Actor input object example

```json
{
  "minReleaseKg": 0,
  "maxResults": 25,
  "releaseMedium": "",
  "maxChargeUsd": 1
}
```

# Actor output Schema

## `records` (type: `string`):

No description

## `csv` (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 = {
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("afkdigital/newapi54-eea-industrial-emissions-facility-intelligence").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 = { "maxResults": 25 }

# Run the Actor and wait for it to finish
run = client.actor("afkdigital/newapi54-eea-industrial-emissions-facility-intelligence").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 '{
  "maxResults": 25
}' |
apify call afkdigital/newapi54-eea-industrial-emissions-facility-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,afkdigital/newapi54-eea-industrial-emissions-facility-intelligence"
        }
    }
}
```

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/k16m1etK0AIpBNjp5/builds/xtXFCTK6JAlGJc7ah/openapi.json
