EU Air Passenger Volumes by Country — Eurostat Aviation Data
Pricing
from $33.50 / 1,000 passenger flow records
EU Air Passenger Volumes by Country — Eurostat Aviation Data
Official Eurostat air passenger and flight volumes by country, traffic type and period — clean per-observation JSON for aviation demand and market-sizing models.
Pricing
from $33.50 / 1,000 passenger flow records
Rating
0.0
(0)
Developer
NexGen Signal
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
9 hours ago
Last modified
Categories
Share
Official source. No API key. Pay per record.
Who this is for and the decision it supports
Aviation analysts, airport and tourism-board planners, and travel-demand modellers who need official European air-passenger volumes without scraping Eurostat by hand.
One record answers: how many passengers/flights moved through a given country for a traffic type and period — a single input to a route-demand, capacity, or market-sizing model.
Sample output

Real rows from a live run of this actor (first 5 rows, selected columns).
One full record from the same run, exactly as delivered:
{"record_id": "A:FLIGHT:CAF_PAS:INTL:NSCHED:DE:2015","dataset_code": "avia_paoc","indicator": "Air passenger transport by reporting country (overall)","freq": "A","freq_label": "Annual","unit": "FLIGHT","unit_label": "Flight","tra_meas": "CAF_PAS","tra_meas_label": "Commercial passenger air flights","tra_cov": "INTL","tra_cov_label": "International transport","schedule": "NSCHED","schedule_label": "Non-scheduled","geo": "DE","geo_label": "Germany","time_period": "2015","value": 67893,"obs_status": null,"source": "Eurostat","source_dataset": "avia_paoc","licence": "Eurostat, CC BY 4.0. Reformatted from Eurostat JSON-stat; values unmodified. Third-party content and logos excluded. Commercial-barred geographies removed.","attribution": "Source: Eurostat (dataset avia_paoc)","caveat": "Passenger and flight measures are counts of carriage/on-board activity, not seat inventories or fares. Values are reproduced verbatim from Eurostat; read national vs. international coverage from the tra_cov code.","observed_at": "2026-09-25T17:19:45Z"}
What one record is
Each record is one Eurostat air-transport observation: country, traffic measure and coverage, schedule type, period, value and unit, with full provenance.
Your first run
Paste this input and run it:
{"geo": "DE","sinceTimePeriod": "2023","maxRecords": 10}
Set geo to a country and get clean per-observation JSON in seconds — no JSON-stat parsing, no Eurostat query builder. Here is a real record from that exact input:
{"record_id": "A:FLIGHT:CAF_PAS:INTL:NSCHED:DE:2023","dataset_code": "avia_paoc","indicator": "Air passenger transport by reporting country (overall)","freq": "A","freq_label": "Annual","unit": "FLIGHT","unit_label": "Flight","tra_meas": "CAF_PAS","tra_meas_label": "Commercial passenger air flights","tra_cov": "INTL","tra_cov_label": "International transport","schedule": "NSCHED"}
What the sample costs: $0.05 per record. The sample above delivers 10 records, so it costs at most $0.50.
Pulling in bulk
Raise Maximum records and widen the period to pull a country's full history, then repeat per country to build the EU panel. A buyer pulls 1,000-10,000 records to assemble a full country x traffic-type x period panel for trend analysis, forecasting, or benchmarking one country against the EU.
To expand from the sample: raise Maximum records, and widen any filters shown in the input. You are billed only for records actually delivered, so a sample stays cheap and a full pull is predictable.
When to run it again
Eurostat republishes avia_paoc as new periods land; re-run with a later sinceTimePeriod to append only the newest observations to a table you keep.
Update schedule: Eurostat releases new periods for this cube on a rolling basis (roughly quarterly as monthly/quarterly data clears). Verified live: the cube returns observations addressable by period; pull the latest period to confirm the current release.
How this is different
Distinct from the fleet's eurostat-monthly-unemployment and other macro cells — different Eurostat cube, different grain. This is air-passenger flow specifically.
Limitations (source coverage vs product coverage)
- This is COUNTRY-level (and EU-aggregate) traffic, not airport-level or route-level. For airport-pair markets use the US Airport-Pair Fare actor.
- Values are counts of carriage/on-board activity, not seat inventory or load factors.
- Coverage is Eurostat's reporting countries and periods; a country with no reported data for a period returns no row for it.
FAQ
Is this real-time?
No. It is the official Eurostat cube, refreshed when Eurostat publishes new periods (roughly quarterly). It is not a live flight feed.
Airport or route level?
Country level. One row is a country x traffic-type x period observation.
What does an empty run mean?
The geo/period combination has no Eurostat observation — try a broader period or a different country code.
How much does it cost? You pay $0.05 per passenger flow record delivered to your dataset (less on higher Apify plans). Set the record limit in the input to cap what a run can cost. Records that are not delivered are never charged.
How do I get the data out? Every run saves its records to an Apify dataset. You can download it as JSON, CSV, Excel, XML or HTML from the run page, or read it through the Apify API.
Can I run it on a schedule? Yes. Use Apify Schedules to run it daily, weekly or monthly, with the same input each time.
Can I call it from my own code? Yes. Call nexgensignal/eu-air-passenger-flow-records through the Apify API or the Apify Python and JavaScript clients, pass the same JSON input as the form, and read the dataset when the run finishes.
What happens if the source is down? The run ends with a clear status message, and nothing is charged for records that were not delivered.
Input fields
Every input this actor accepts, read from its input schema:
| Field | Type | Default | Description |
|---|---|---|---|
sinceTimePeriod | string | "2015" | Return observations from this period onward. Use a year (2015), a quarter (2015-Q1) or a month (2015-01). Earlier start = more records. |
maxRecords | integer | 500 | Maximum records delivered and billed. You are billed only for records actually delivered. Raise it to pull the full set. |
geo (required) | string | "DE" | Eurostat geo code to pull (e.g. DE, FR, IT, ES). Required: this cube is too large to return in one request, so it is retrieved one territory at a time. |
Output fields
Every field in each delivered record, read from its output schema:
| Field | Type | Meaning |
|---|---|---|
record_id | string | Composite source-native key across all dimensions. |
dataset_code | string | Eurostat dataset code. |
indicator | string | Indicator name. |
freq | string | freq dimension code, verbatim. |
freq_label | string | freq dimension label, verbatim. |
unit | string | unit dimension code, verbatim. |
unit_label | string | unit dimension label, verbatim. |
tra_meas | string | tra_meas dimension code, verbatim. |
tra_meas_label | string | tra_meas dimension label, verbatim. |
tra_cov | string | tra_cov dimension code, verbatim. |
tra_cov_label | string | tra_cov dimension label, verbatim. |
schedule | string | schedule dimension code, verbatim. |
schedule_label | string | schedule dimension label, verbatim. |
geo | string | geo dimension code, verbatim. |
geo_label | string | geo dimension label, verbatim. |
time_period | string | Time period, verbatim (e.g. 2024-Q1 or 2024-01). |
value | number | Observation value, reproduced verbatim (published zeros kept). |
obs_status | string | Eurostat observation status/flag when present, verbatim. |
source | string | Data source (Eurostat). |
source_dataset | string | Source dataset code. |
licence | string | Licence and reformatting notice. |
attribution | string | Required attribution string. |
caveat | string | Interpretation caveat. |
observed_at | string | UTC timestamp the record was retrieved. |
Related actors
- us-airport-pair-fare-records — US airport-pair fare and traffic benchmarks (route level)
- eu-business-demography-records — EU firm formation and survival
- eu-regulatory-change-records — EU legal acts affecting the sector
Source, licence and how it is built
Source and licence are carried on every record (source, licence, attribution, observed_at). The actor reads only the official public endpoint, honours the source's robots and licence terms, and emits values unmodified with full provenance. Records are keyed on a stable id so re-runs upsert cleanly into a table you keep. Row delivery and billing are exactly equal: you are charged once per record delivered (push-then-charge), so an empty run costs nothing.
Part of NexGen Signal — official-source data products.