Live Aircraft Position Tracker
Pricing
from $2.00 / 1,000 aircraft position collecteds
Live Aircraft Position Tracker
Track every aircraft flying right now over a region, a map box, an airport, a callsign or a tail number. One row per aircraft with position, altitude, speed, heading, climb rate, route, aircraft type, operator and the tail number most trackers hide.
See what is flying right now — over a whole region, over a box you draw yourself, into and out of one airport, or a single aeroplane you name. Every aircraft comes back as one clean row with its position, altitude, speed, heading, climb rate, route, aircraft type, operator and tail number, which most public trackers hide. Point it at Europe and get thousands of live aircraft; point it at one tail number and find out exactly where that aeroplane is this minute. No account and no login are needed — just run it.
What you can do with it
- Power a live map or dashboard. Pull every aircraft over your region on a schedule and drive a map, a flight board or an internal ops screen.
- Find one aeroplane. Give a tail number and get its position, altitude, route and speed right now — the fleet-tracking question that ordinary flight lookups cannot answer because they hide the registration.
- Watch an airport. Everything currently flying to or from JFK, LHR or DXB, inbound and outbound, with how far each arrival still has to go.
- Follow a specific flight. Track by callsign and get only that flight — near-matches such as BAW1170 when you asked for BAW117 are counted and thrown away, never handed to you as your flight.
- Build a movements dataset. Run it every few minutes and keep the rows to build your own history of who flew where, on what aircraft, and when.
- Spot business and private aviation. Turn on aircraft details and each row names the registered owner, manufacturer and full model — the only way to tell whose jet just landed.
- Feed a research or logistics model. Altitude bands, climb rates, ground speed, routes and aircraft types for a whole region in one table.
What you get
One row per aircraft. A real, abridged record — every value below is what this actor produced from one collected answer, with aircraft details switched off:
{"callsign": "UAL1","registration": "N81107","flightNumber": "UA1","airlineIcao": "UAL","aircraftType": "B789","originIata": "SFO","originAirport": "San Francisco International Airport","originCity": "San Francisco","destinationIata": "SIN","destinationAirport": "Singapore Changi Airport","destinationCity": "Singapore","latitude": 18.6769,"longitude": 155.3201,"altitudeFt": 38004,"altitudeM": 11584,"groundspeedKt": 516,"groundspeedKmh": 955.6,"verticalSpeedFpm": 0,"headingDeg": 253,"onGround": false,"squawk": null,"kmToDestination": 5912.9,"icao24": "ab0f8b","positionSource": "satellite","isIdentityWithheld": false,"hasFullDetail": false,"detailStatus": "not_requested","trackedBy": "callsign","trackedValue": "UAL1","observedAt": "2026-08-16T15:37:36.000Z","collectedAt": "2026-08-16T12:57:41.208Z"}
Coordinates are passed through exactly as the source published them — it gives two decimal places on some answers and four on others, and neither is rounded off nor padded out here. kmToDestination is the straight-line distance from that position to the destination airport: this 787 was 5,912.9 km short of Singapore when it was seen.
Switch aircraft details on and three more fields are filled in from the aircraft registry: operator, manufacturer and aircraftDescription. For the Virgin Atlantic 787 in the same run those read Virgin Atlantic Airways, Boeing and Boeing 787 9.
Alongside the table you get a run summary: how many aircraft were collected, how many reads were made, how many reads found genuinely nothing, and how many reads could not be completed. Those last two are never merged — see Limits below.
Input reference
| Field | Type | Default | What it does |
|---|---|---|---|
mode | choice | area | What to track: a map area, an airport, a flight callsign, or a tail number. |
region | choice | europe | For map areas: Europe, North America, South America, Africa, Middle East, Asia, Oceania, North Atlantic, the whole world, or a custom box. |
north, south, west, east | number | — | The four edges of your own box, in degrees. Used when region is Custom box. |
airports | list | ["JFK"] | For airport mode: three-letter airport codes. Unknown codes are refused before the run starts. |
callsigns | list | — | For callsign mode: radio callsigns such as BAW117. Only exact matches are returned. |
registrations | list | — | For tail-number mode: registrations such as G-VNYL or N154QS. |
coverage | choice | standard | Standard returns the fullest record per aircraft. Wide adds a second, broader observation network so aircraft the first does not report still appear, with route and tail-number fields left empty on those extras rather than guessed. Those extras never take the place of a fuller record: every aircraft the first network reported is delivered first, and the second network is only asked for what is left of your row limit. Applies to map areas and callsigns. |
includeOperatorDetail | boolean | false | Add the registered owner, manufacturer and full model to every aircraft. Charged separately. |
maxDetailLookups | number | 250 | Ceiling on how many aircraft get those extra details. |
includeGroundAircraft | boolean | true | Keep aircraft taxiing or parked as well as airborne ones. |
minAltitudeFt | number | — | Keep only aircraft at or above this altitude. |
maxAltitudeFt | number | — | Keep only aircraft at or below this altitude. |
airlines | list | — | Keep only these three-letter operator codes, e.g. BAW, DLH. |
aircraftTypes | list | — | Keep only these short type codes, e.g. A320, B789. |
maxRows | number | 500 | The run stops once this many aircraft have been collected. |
tileSizeDegrees | number | 20 | For map areas: the size of each square the region is read in. Smaller squares give more complete coverage of busy airspace and take longer. |
maxAreaTiles | number | 12 | Ceiling on how many squares are actually read. If the area needs more than this, the run reads this many squares spread evenly across the whole area and the summary records the rest as not read — Europe at the default square size needs 8, the whole world needs 162. |
parallelReads | number | 3 | How much the run does at once. Three suits almost every job. |
Output fields
| Field | What it is |
|---|---|
icao24 | The aircraft's unique transponder address — the safest key to join rows on. |
registration | The tail number painted on the aircraft. |
callsign | The radio callsign the flight is operating under. |
flightNumber | The commercial flight number, where the flight has one. |
airlineIcao | Three-letter operator code. |
operator | The registered owner or operator, in words. Filled in when aircraft details are switched on. |
operatorCode | The operator's short code, from the same lookup. |
aircraftType | Short aircraft type code, e.g. B789. |
aircraftDescription | Manufacturer and model in words, e.g. Boeing 787 9. With aircraft details on. |
manufacturer | Aircraft manufacturer. With aircraft details on. |
latitude, longitude | Position at the moment it was observed. |
altitudeFt, altitudeM | Altitude, in feet and in metres. |
groundspeedKt, groundspeedKmh | Speed over the ground, in knots and km/h. |
verticalSpeedFpm | Climb or descent rate in feet per minute; negative is descending. |
headingDeg | Direction of travel in degrees. |
squawk | Transponder code, where it is published. |
onGround | True when the aircraft is on the ground rather than airborne. |
isGlider | True for gliders. |
originIata, originAirport, originCity, originCountry | Where the flight started, with the airport named in full. |
destinationIata, destinationAirport, destinationCity, destinationCountry | Where it is going, named in full. |
kmToDestination | Straight-line distance still to fly, where the destination is known. |
registrationCountry | The country the aircraft is registered in, where it is stated. |
positionSource | How the position was observed, where the source states it — for example satellite for space-based reception. Empty when it is not stated. |
isIdentityWithheld | True when the aircraft publishes no identity at all. Roughly one aircraft in nine is in this state: its tail number, flight number and route are withheld and only the position, altitude and type remain. |
hasFullDetail | True when the owner and model lookup succeeded for this aircraft. |
detailStatus | Why a row has no extra detail: not requested, nothing published, or the limit was reached. |
trackedBy, trackedValue | Which of your inputs produced this row. |
observedAt | When the position itself was observed. |
collectedAt | When this actor collected it. |
Pricing
You pay per event, so a small run costs a small amount.
| What you pay for | Price |
|---|---|
| Each aircraft returned | $2.00 per 1,000 |
| Each aircraft you asked for full owner and model details on | $0.80 per 1,000 |
Aircraft with nothing published in the registry are never charged the detail price.
Worked example. You track everything over Europe twice an hour and cap each run at 500 aircraft, with aircraft details switched off. Each run returns about 500 aircraft, so it costs about $1.00. Over a day that is 48 runs — roughly $48. Turning aircraft details on for all 500 adds $0.40 a run.
A second example: you watch a fleet of 20 tail numbers every ten minutes with details on. A run returns at most 20 rows, so it costs about $0.04 plus $0.016 — $0.056 a run. Every ten minutes is 144 runs a day, so that is about $8 a day, or roughly $240 a month. Halve the frequency and you halve the bill: every twenty minutes is about $4 a day.
Limits & what this actor cannot do
- Positions are a snapshot at the moment of collection. An aircraft moving at 500 knots covers about 15 km in a minute, so a position is already history by the time you read it. Run it more often for a fresher picture; there is no live stream.
- Positions can lag the aircraft. What is published is what was last received from the aircraft, which is not always this second —
observedAttells you exactly how old each position is, and you should use it rather than assuming the row is current. - Coverage is not uniform. Reception is dense over Europe, North America and East Asia and thin over oceans, deserts and polar regions. Some aircraft over water are reported from space and some are not reported at all. An aircraft missing from the results has not necessarily landed.
- A very large area returns what the source publishes, not everything airborne. Any single square has a ceiling on how many aircraft it will report, so busy airspace read in one big square comes back truncated. The run summary tells you which squares hit that ceiling; smaller squares fix it, at the cost of a longer run.
- When you cap the number of aircraft, the cap is shared out across the area. Ask for 300 aircraft over Europe and you get roughly the same number from each part of it, not 300 from whichever corner answered first. Squares with less to give do not waste their share.
- A big area is read in squares, and a limit on the squares is a limit on the coverage. If the area needs more squares than
maxAreaTilesallows, the squares that are read are spread evenly across the whole area and the rest are reported as not read. The whole world at the default square size needs 162 squares, so a world run on the default limit of 12 is a sample of the planet, not a census of it — the summary says so in numbers, and an unread square is never reported as an area with no aircraft. - Wide coverage cannot reach across the 180° meridian. A map square that spans it can only be given to the second observation network as two areas, which it does not accept, so those squares get no second read. The main read covers them normally, and the run summary counts them rather than passing over them in silence.
- Not every aircraft carries every field. Military, private and some general-aviation aircraft publish no tail number, no route and sometimes no callsign — about one aircraft in nine in a wide sweep. Those rows are flagged with
isIdentityWithheldand the missing fields are left empty. Nothing is filled in from anywhere else, nothing is estimated, and a placeholder the source puts where a callsign should be is never passed off as one. - A read the source refuses is reported as a failed read, never as "no aircraft". This source answers a large share of reads with a valid, well-formed document containing nothing at all, and the actor detects it, retries, and — if it still cannot get a live answer — records the read as failed. It will never tell you an area is empty when it could not confirm that it is. The same rule covers a change in the shape of what the source publishes: aircraft that arrive in a form this actor cannot read are counted in the summary and the read is reported as failed, so a format change can never be delivered to you as an empty sky.
- It cannot look backwards. This is a "where is it now" actor. It does not return where an aircraft was an hour ago, its flight path, or its history.
- It cannot tell you about the flight's commercial status. No delays, no gates, no scheduled or estimated times, no bookings.
- Tail-number and callsign lookups only find aircraft that are currently flying or on the ground with their transponder on. An aeroplane in a hangar is not visible to anyone.
- Owner and model details come from an aircraft registry. Registries lag reality: an aircraft sold last month may still show its previous owner, and some airframes have nothing published at all.
- Speed depends on the size of the job and on the source's own response times; no fixed throughput is promised.
- The source's terms govern automated access. You are responsible for using the data lawfully and in line with those terms, and for handling any personal data in line with applicable privacy law.
FAQ
Do I need an account on the source site? No. Nothing to sign up for and nothing to configure.
Does it need my login or password? No. It never asks for credentials of any kind.
Can I schedule it? Yes. Scheduling every few minutes is the normal way to use it — that is how you build a live map or a movements history.
Are these positions live?
They are the most recent published positions at the moment the run collected them. Every row carries observedAt so you can see for yourself how fresh it is, and a fast-moving aircraft has already travelled some distance by the time you read the row.
Why does an aircraft I can see on a map not appear in my results? Three ordinary reasons: it was outside the area or filters you set; the square it is in hit the source's per-square ceiling; or nothing in the observation network can hear it right now. The run summary distinguishes the first two.
Why do some rows have no tail number or route?
Because the aircraft does not publish them. Military and many private aircraft withhold their identity — those rows are marked isIdentityWithheld — and the wide-coverage setting adds aircraft that are only reported as a position and a callsign. Those fields are left empty rather than guessed.
What happens if the source will not answer? The run retries, and any read it still cannot complete is counted as a failed read in the summary. A run where nothing could be read finishes as a failure — you will never get a green run with an empty table that quietly means "we could not look".
Can I get every aircraft in the world in one run?
Yes, but you must raise the map-square limit, and the exact numbers matter. At the default square size of 20 degrees the whole world is 162 squares, while maxAreaTiles defaults to 12 — so a world run on the defaults reads 12 squares, spread evenly across the planet, and the run summary reports the other 150 as not read. For full coverage set region to the whole world, keep tileSizeDegrees at 20, set maxAreaTiles to 162 and raise maxRows. Making the squares smaller is counterproductive here: no run may read more than 200 squares, and below 18 degrees the world needs more squares than that, so smaller squares mean less of the world, not more. Smaller squares are the right tool for one busy region, not for the planet.
Why does my run say some squares were not read?
Because the area you chose needs more squares than the map-square limit allows. The run reads squares spread evenly across the whole area rather than working from one corner, and the summary tells you how many squares the area needs (areaSquaresNeededForFullCover), how many were read, and how many were not. Nothing is claimed about the squares that were not read — an unread square is never reported as an area with no aircraft.