AENA Airport Stats Scraper (Traffic JSON)
Pricing
from $1.00 / 1,000 airport record delivereds
AENA Airport Stats Scraper (Traffic JSON)
Returns monthly passenger, operations and cargo statistics for every airport in the AENA Spanish airport network as JSON from AENA official XLS reports. One validated record per airport and month; a repeat run of the same month emits nothing.
Pricing
from $1.00 / 1,000 airport record delivereds
Rating
0.0
(0)
Developer
Steadfetch
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Security
Limited permissionsShare
AENA Airport Statistics Scraper (Spanish Airport Traffic Data)
Monthly passenger, operations and cargo statistics for every airport in AENA's Spanish network, extracted from AENA's official monthly XLS reports.
- Source: AENA monthly statistical reports (public, no login, no CAPTCHA on these routes).
- One record per airport and month.
- No personal data: only aggregated airport traffic figures.
What it does
A run does two things:
- Reads AENA's monthly reports listing (
?anio=YYYY) and picks the requested month -- or the latest published month when no period is given. - Downloads that month's XLSX and joins its three side-by-side tables (passengers, operations and cargo) by airport name, emitting one validated record per airport.
Airports are matched across the three tables after normalising accents, case
and repeated spaces. When an airport is missing from one of the tables, the
corresponding fields are null -- values are never inferred or invented.
Total ... rows are excluded in v1 (they can be derived by summing the
airports).
Example output
{"airport": "ADOLFO SU\u00c1REZ MADRID-BARAJAS","period": "2026-01","passengers": 5379569,"passengersYoYPct": 3.49,"operations": 34658,"operationsYoYPct": 2.51,"cargoKg": 62538434,"cargoYoYPct": 6.27,"provisional": true,"url": "https://www.aena.es/sites/Satellite?blobcol=urldata&blobkey=id&blobtable=MungoBlobs&blobwhere=1576873282373&ssbinary=true","fileUrl": "https://www.aena.es/sites/Satellite?blobcol=urldata&blobkey=id&blobtable=MungoBlobs&blobwhere=1576873282373&ssbinary=true","scrapedAt": "2026-10-21T03:00:00.000Z"}
passengers,operations,cargoKgare the monthly totals published by AENA.*YoYPctis the year-over-year variation in percent, rounded to 2 decimals (AENA publishes the fraction; this Actor multiplies by 100).provisionalistruewhen AENA marks the report as provisional data.url(common Steadfetch envelope) andfileUrlpoint to the same official XLSX report; the record is never built from any other page.
Input
{ "period": "2026-01" }
| Field | Type | Required | Description |
|---|---|---|---|
period | string | no | Report month as YYYY-MM. Omit it to extract the latest month published in AENA's listing. |
The Actor only requests the reports listing and the selected XLSX file. It
never calls /consultas-personalizadas or infovuelos (both are behind
reCAPTCHA), and it uses no browser and no proxy.
Pay-per-event pricing
| Event | When it fires | Price |
|---|---|---|
apify-actor-start | once per run (synthetic, automatic) | 0.00005 USD |
apify-default-dataset-item | one validated airport/period record saved to the dataset (synthetic, automatic) | 0.001 USD per record = 1.00 USD per 1,000 records |
Only validated records are pushed to the dataset. Downloads, total rows and repeat runs of an already delivered month are never charged: there is no custom per-item event, so a record can never be billed twice.
Cost per 1,000 results (measured locally)
| Measurement | Value |
|---|---|
| January 2026 XLSX | 55,558 bytes, 117 rows, 66 airport records |
| Parse + join + schema validation | 22.6 ms, 9 MB JS heap (84 MB process RSS) |
| Network | 1 listing page (~84 KB) + 1 XLSX (~56 KB) |
| Run memory ceiling | 256 MB (Actor minimum) |
At 256 MB and roughly 1-2 s per run (two or three HTTP requests dominate), a run costs about 0.0001 GB-hour. At 0.30 USD/GB-hour that is well below 0.01 USD per 1,000 records. The platform figure has not been billed yet: no platform run has been spent on this Actor, because the Apify account has a hard 85 USD/month team credit cap. It will be updated here after the first minimal platform run.
Dedupe and reruns
Delivered (airport, period) keys are stored in the named key-value store
aena-monthly-state. Running the same period again emits 0 new records and
charges nothing. The following month emits the new month's records.
This makes the Actor safe to run on a schedule: a daily run only pays for a new month once.
Development
npm install --include=devnpm test # lint + typecheck + 58 tests (no network, no credit)npm run demo:fixtures # offline pipeline on the real Jan-2026 fixturenpm run publish:checknpm run build && npm run verify:build
npm run demo:fixtures reads test/fixtures/informes-mensuales-2026.html and
test/fixtures/informe-2026-01.xlsx, runs the same parsing pipeline and prints
the validated records. It needs no APIFY_TOKEN.
Data notes
- AENA publishes these reports as provisional data (
DATOS PROVISIONALES); the source can revise them later. Theprovisionalflag tells you when the snapshot is provisional. - The January 2026 workbook contains airline-network airports plus
international subsidiaries (BOAB, ANB, London-Luton) exactly as AENA
publishes them. Totals (
Total Aeropuertos Espanoles,Total BOAB,Total ANB,Total Aeropuertos Brasilenos,TOTAL RED AENA) are excluded from v1. - Values are copied as published. Cargo is in kilograms, exactly as in the report.
FAQ
How fresh is the data? Each run downloads the official XLSX of the selected month from AENA. No cached third-party copy is used.
Can I get several years? Yes: run once per period (YYYY-MM). Every month
from 2004 onward is listed on AENA's site.
Why is a field null? That airport is not present in the corresponding
table of that report. The Actor never guesses or interpolates.
Does it need a proxy or a browser? No. Plain HTTP requests and a local XLSX reader.
What happens on a bot challenge or a 403? The run aborts with a clear error. Steadfetch never solves CAPTCHAs or tries to bypass access controls.
Maintenance
This Actor is tested daily: automated runs keep the source reachable and the output schema valid, and failures open an issue in this repository. The daily QA entry is registered in the Steadfetch QA catalogue and is enabled once the Actor is published on Apify. Schema changes are announced through repository releases.
Legal and attribution
Only public, aggregated data published by AENA is read. The Actor honours
robots.txt, sends an honest User-Agent with contact information and makes two
HTTP requests per run when period is set (three at most in default mode, when a
second-year listing is needed). See docs/legal-gate.md for the reviewed evidence.
Source: AENA (public statistics). Steadfetch is not affiliated with AENA.