# Flightradar24 Live Map Scraper (`romy/flightradar24-live-map-scraper`) Actor

Pull live aircraft positions from Flightradar24 — bounding-box live feed, global top-flights scoreboard, or nearest-flights-to-a-point lookup. No login or API key needed. Split out from romy/flightradar24-all-in-one-api as a focused Actor.

- **URL**: https://apify.com/romy/flightradar24-live-map-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 $1.56 / 1,000 flight row returneds

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 Live Map Scraper do?

**Flightradar24 Live Map Scraper** runs a single bounded query against Flightradar24's internal gRPC live feed (`data-feed.flightradar24.com`) and pushes one dataset row per result — no API key, no login, no scraping setup. It's the live-position slice of [Flightradar24 All-in-One API](https://apify.com/romy/flightradar24-all-in-one-api), split out as its own focused Actor.

Three modes:

- **`live-feed`** — every flight currently inside a bounding box
- **`top-flights`** — the globally most-tracked flights right now (Flightradar24's own "scoreboard")
- **`nearest-flights`** — flights nearest a lat/lon, sorted by distance

### Why use Flightradar24 Live Map Scraper?

- **Real-time** — positions update roughly every 1–3 seconds per flight on Flightradar24's side
- **No account needed** — talks to the same anonymous feed the free-tier Flightradar24 Android app uses
- **One call, one result set** — no pagination or streaming to manage; each run pushes a bounded snapshot and exits
- **Use cases:** aviation monitoring, airport-region traffic snapshots, flight-delay/research datasets, competitive intelligence on route activity

### How it connects to the parent

This Actor reuses the parent's gRPC plumbing (`fr24-grpc.ts` — HTTP/2 framing, unary calls, protobuf loading) verbatim, and re-implements only the `LiveFeed`, `TopFlights`, and `NearestFlights` operations from the parent's `fr24-feed.ts`. It drops `FlightDetails`, `FollowFlight`, `Playback`, and `LiveFlightsStatus` — those stay in the full [Flightradar24 All-in-One API](https://apify.com/romy/flightradar24-all-in-one-api).

### Input

| Field                               | Type    | Default | Description                                                                           |
| ----------------------------------- | ------- | ------- | ------------------------------------------------------------------------------------- |
| `mode`                              | string  | —       | Required. `"live-feed"` | `"top-flights"` | `"nearest-flights"`                     |
| `north` / `south` / `west` / `east` | number  | —       | Bounding box in decimal degrees. Required for `live-feed`.                            |
| `limit`                             | integer | varies  | Max results. Default 1500 (`live-feed`), 50 (`top-flights`), 300 (`nearest-flights`). |
| `maxage`                            | integer | 14400   | Max age (seconds) of position data to include. `live-feed` only.                      |
| `lat` / `lon`                       | number  | —       | Center coordinate. Required for `nearest-flights`.                                    |
| `radius`                            | integer | 200000  | Search radius in meters. `nearest-flights` only.                                      |

Example (`live-feed`, flights over Indonesia):

```json
{
    "mode": "live-feed",
    "north": 6,
    "south": -11,
    "west": 95,
    "east": 141,
    "limit": 50
}
```

### Output

One dataset row per flight (`live-feed`, `nearest-flights`) or scoreboard entry (`top-flights`).

`live-feed` row (real example field shape, from the parent's proven-working feed):

```json
{
    "flightId": 1094013202,
    "lat": -5.815,
    "lon": 111.413,
    "track": 205,
    "alt": 38000,
    "speed": 476,
    "callsign": "PAS646",
    "onGround": false,
    "timestampMs": "1786924707066",
    "extraInfo": { "flight": "IP646", "reg": "PK-PWO", "type": "A320" }
}
```

`nearest-flights` row — the same `Flight` fields as above, flattened with the server-computed distance:

```json
{
    "flightId": 1094013202,
    "lat": -5.815,
    "lon": 111.413,
    "callsign": "PAS646",
    "distanceMeters": 18342
}
```

`top-flights` row:

```json
{
    "flightId": 1094013202,
    "liveClicks": 812,
    "totalClicks": 15230,
    "flightNumber": "IP646",
    "callsign": "PAS646",
    "fromIata": "CGK",
    "toIata": "SIN",
    "fullDescription": "Airbus A320-214"
}
```

### Known limitations

- **Three modes only** — `flight-details`, `follow-flight` (live streaming), `playback` (history), and `flights-status` (batch refresh) are not exposed here; use the parent [Flightradar24 All-in-One API](https://apify.com/romy/flightradar24-all-in-one-api) for those.
- **No auth for any mode**, same as the rest of the parent's feed endpoints — the gRPC feed is called anonymously, exactly as the free tier of the Flightradar24 app does.
- **`nearest-flights` distance is server-computed**, in meters, as returned by Flightradar24 — not a client-side haversine calculation.

### Pricing

This Actor uses **Pay Per Event** billing: charged $0.002 per flight/result row pushed to the dataset (event `flight`, FREE tier price — lower on paid plans). See the Actor's Pricing tab for current rates.

# Actor input Schema

## `mode` (type: `string`):

Which query to run.

## `north` (type: `number`):

Northern latitude bound, decimal degrees. Required for mode "live-feed".

## `south` (type: `number`):

Southern latitude bound, decimal degrees. Required for mode "live-feed".

## `west` (type: `number`):

Western longitude bound, decimal degrees. Required for mode "live-feed".

## `east` (type: `number`):

Eastern longitude bound, decimal degrees. Required for mode "live-feed".

## `limit` (type: `integer`):

Max results to return. Default 1500 for "live-feed", 50 for "top-flights", 300 for "nearest-flights".

## `maxage` (type: `integer`):

Max age of position data to include, in seconds. Used only by mode "live-feed".

## `lat` (type: `number`):

Center latitude. Required for mode "nearest-flights".

## `lon` (type: `number`):

Center longitude. Required for mode "nearest-flights".

## `radius` (type: `integer`):

Search radius in meters. Used only by mode "nearest-flights".

## Actor input object example

```json
{
  "mode": "live-feed",
  "north": 6,
  "south": -11,
  "west": 95,
  "east": 141,
  "maxage": 14400,
  "radius": 200000
}
```

# 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 = {
    "mode": "live-feed",
    "north": 6,
    "south": -11,
    "west": 95,
    "east": 141
};

// Run the Actor and wait for it to finish
const run = await client.actor("romy/flightradar24-live-map-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 = {
    "mode": "live-feed",
    "north": 6,
    "south": -11,
    "west": 95,
    "east": 141,
}

# Run the Actor and wait for it to finish
run = client.actor("romy/flightradar24-live-map-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 '{
  "mode": "live-feed",
  "north": 6,
  "south": -11,
  "west": 95,
  "east": 141
}' |
apify call romy/flightradar24-live-map-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,romy/flightradar24-live-map-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/P5fhemAqwrEiZa6dp/builds/dTEXV5jJQyb5LTg2n/openapi.json
