# Flightradar24 Reference Data Scraper (`romy/flightradar24-reference-data-scraper`) Actor

Get bulk airline and airport reference data from Flightradar24. Talks directly to Flightradar24's own gRPC/REST APIs, no login needed. Split from the mature, published flightradar24-all-in-one-api for a focused, single-purpose workflow.

- **URL**: https://apify.com/romy/flightradar24-reference-data-scraper.md
- **Developed by:** [Romy](https://apify.com/romy) (community)
- **Categories:** Travel
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 reference record chargeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### What does Flightradar24 Reference Data Scraper do?

**Flightradar24 Reference Data Scraper** dumps Flightradar24's bulk reference data — the full list of airlines (~2,700 rows) and/or airports (~6,700 rows) — from the same internal REST API the official [Flightradar24](https://www.flightradar24.com/) Android app uses, one dataset row per entry. No API key, no login, no scraping setup.

### Why use this Actor?

- **Complete reference tables in one run** — every airline or airport Flightradar24 knows about, not a paginated subset
- **No login, no API key** — talks to the same anonymous `mobile.flightradar24.com` endpoints the app itself uses
- **Split from a bigger Actor** — this is a narrow spin-off of [flightradar24-all-in-one-api](https://apify.com/romy/flightradar24-all-in-one-api), which exposes the full live-tracking + search API surface. Use this Actor if all you need is the bulk airline/airport lookup tables; use the all-in-one Actor for live flights, search, and airport boards.

### Input

| Field      | Type                                  | Default | Description                                                     |
| ---------- | ------------------------------------- | ------- | --------------------------------------------------------------- |
| `datasets` | array of `"airlines"` | `"airports"` | both    | Which bulk reference dumps to fetch. Leave empty to fetch both. |

Example input to fetch airlines only:

```json
{ "datasets": ["airlines"] }
```

### Output

One dataset item per airline or airport, tagged with a `dataset` field so both kinds can share one dataset. Rows are pushed in batches of 500 to stay well under Apify's per-call dataset push limits.

Airline row:

```json
{
    "dataset": "airlines",
    "active": true,
    "hub": null,
    "iata": "2I",
    "icao": "CSB",
    "id": 1545,
    "metadata": {
        "images": {
            "logotypes": {
                "default": { "file": { "source": "https://cdn.flightradar24.com/assets/airlines/logotypes/1545.png" } }
            }
        }
    },
    "modified": 1737980180,
    "name": "21 Air",
    "photoId": null,
    "url": "2i-csb"
}
```

Airport row:

```json
{
    "dataset": "airports",
    "id": 1900,
    "name": "A Coruna Airport",
    "iata": "LCG",
    "icao": "LECO",
    "city": "A Coruna",
    "lat": 43.302059,
    "lon": -8.37725,
    "country": "Spain",
    "alt": 326,
    "size": 4352,
    "timezone": { "name": "Europe/Madrid", "offset": 7200, "offsetHours": "2:00", "abbr": "CEST", "isDst": true },
    "countryId": 209,
    "videoStream": null
}
```

Both endpoints return their rows nested under a `{ version, rows: [...] }` wrapper server-side — this Actor unwraps `rows` and pushes each entry as its own dataset item.

### Pricing

This Actor uses **Pay Per Event** billing: charged $0.002 per row returned (event `reference-record`, FREE tier price — lower on paid plans), not per run. Requesting both datasets returns several thousand results in a single run (roughly 2,700 airline rows + 6,700 airport rows), so factor that into expected cost before running with default input.

### Known limitations

- **These are large, close-to-static reference dumps.** Flightradar24 updates them occasionally (new airlines, airport metadata changes) but not in real time — cache the result client-side rather than re-running this Actor on every request, per the parent Actor's own guidance.
- **Row counts are Flightradar24's own current data**, not a number guaranteed by this Actor — expect roughly 2,700 airlines and 6,700 airports, but the exact count will drift over time as Flightradar24 adds or removes entries.
- **Field shapes are undocumented by Flightradar24** and were determined empirically by inspecting live responses — a future change on Flightradar24's side could add, remove, or rename fields without notice.

### FAQ

**Does this require a Flightradar24 account?**
No. The Actor uses the same anonymous data feed the Flightradar24 mobile app uses — no login, no API key.

**Is this official?**
No. This is an independent tool using Flightradar24's internal APIs, reverse-engineered from the public Android app. Use responsibly and in accordance with Flightradar24's Terms of Service.

**Need a custom integration?**
Contact me at romysaputrasihanandaa@gmail.com or [hire me on Fiverr](https://www.fiverr.com/romyssss).

# Actor input Schema

## `datasets` (type: `array`):

Which bulk reference dumps to fetch. Leave empty to fetch both airlines (~2,700 rows) and airports (~6,700 rows).

## Actor input object example

```json
{
  "datasets": [
    "airlines",
    "airports"
  ]
}
```

# Actor output Schema

## `dataset` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("romy/flightradar24-reference-data-scraper").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("romy/flightradar24-reference-data-scraper").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 '{}' |
apify call romy/flightradar24-reference-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,romy/flightradar24-reference-data-scraper"
        }
    }
}
```

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/pNKV7tWobhwBXHu71/builds/PiFcBrzQDLLYT5Gym/openapi.json
