FlightByte vs FlightAware AeroAPI
AeroAPI is the deepest flight-tracking API most developers will ever touch: positions, tracks, history, predicted arrival times, and alerts. It is also priced for companies. FlightByte does one thing from that list, watching a flight and telling you when it changes, and starts at nine dollars.
In thirty seconds
fa_flight_id.400 with the legsorigin selector; never a guess.AeroAPI figures from FlightAware’s public pricing page and OpenAPI specification, checked October 15, 2026. Plans change; if something here is out of date, tell us and we will fix it.
FlightAware AeroAPI pricing, free tier and API key
What each tier costs, what you get without paying, and how a key is issued, from FlightAware’s own pages on October 15, 2026. AeroAPI bills every call by result set; the tier decides the monthly minimum, the rate limit and what you may build with it.
| Plan | Price | Included | Notes |
|---|---|---|---|
| Personal | No minimum; first $5 a month free | Pay per result set | 10 result sets a minute, personal or academic use, no alerts, no history, no support |
| Standard | $100 / month minimum | Pay per result set | 5 result sets a second, alerts, history, business and B2C use, e-mail support |
| Premium | $1,000 / month minimum | Pay per result set | 100 result sets a second, B2B use, 99.5% uptime, phone support, invoicing |
The same per-call prices apply on every tier: $0.005 per flight lookup result set, $0.05 per search result set, $0.02 per alert delivered. A result set is up to 15 records; creating, changing and deleting alerts is free. Volume discounts start above $1,000 a month on Standard and Premium.
AeroAPI free tier
Personal is the free tier: no monthly minimum, and the first $5 of usage each month is free, or $10 if you feed ADS-B data to FlightAware. At $0.005 a lookup, $5 is about a thousand flight lookups.
It is limited to ten result sets a minute and to personal or academic use, and it has no alerts, no history and no support. Webhooks start on Standard, at the $100 minimum.
AeroAPI key: how to get one
- Sign in with a FlightAware account.
- Pick an AeroAPI tier on flightaware.com/commercial/aeroapi; the key comes with the AeroAPI account.
- Send it as the
x-apikeyheader toaeroapi.flightaware.com/aeroapi.
Alerts go to one account-wide URL set with PUT /alerts/endpoint, or to a target_url on each alert.
- Hobby, $9 / month
- 100 flights · 4,000 lookups
- Starter, $19 / month
- 500 flights · 20,000 lookups
- Growth, $49 / month
- 2,000 flights · 80,000 lookups
- Scale, $99 / month
- 5,000 flights · 200,000 lookups
- Free tier
- 3 flights a month, commercial use
- Getting a key: sign up
- free key on screen in a minute; paid plans by email
- Where the key goes
- x-api-key header
When AeroAPI is the better choice
It is the bigger product by a distance, and for three jobs there is no contest.
You need to see the aircraft
Positions, tracks, route maps, and Foresight’s predicted arrival times, which power a good share of the airline ETAs in the US. FlightByte tells you a flight is en route; it does not tell you where.
You need history
Ten days of flights on a plain lookup, years through the History endpoints, plus airport and operator activity for any window. FlightByte keeps a live window and a delivery log for the flights it watched.
You are already a company
If a $100 floor is a rounding error and you want one vendor for everything aviation, AeroAPI is that vendor. FlightByte is the specialist you call for one job.
When FlightByte is
When there is a booking behind the flight, the change you care about is a gate or a delay, and $100 a month is a decision rather than a default.
The changes that move people
AeroAPI alerts fire on lifecycle moments: filed, off, on, in. A gate move, a baggage belt, a delay that grew from ten minutes to forty are not alert events. FlightByte sends each one, with from and to.
Delivery you can defend
Signed with a timestamp, retried eight times with backoff, every attempt logged with status and latency. AeroAPI leaves proving the sender to a token in your URL.
Nine dollars, not a hundred
Hobby is $9 for 100 watched flights with every event type. The same watch on AeroAPI starts at the Standard tier’s $100 minimum before the first alert is delivered.
What watching 500 flights a month costs
Using AeroAPI alerts, which is the fair comparison: one alert per flight, an average of six deliveries, and one lookup to resolve the flight first.
- 500 lookups at $0.005
- $2.50
- 500 alerts × 6 deliveries at $0.02
- $60
- Standard tier minimum
- $100
- Gate and delay changes
- poll /flights/{ident} for them
- Plus
- sender check, dedupe, diff, a log
- 500 watched flights
- 500 line items
- Starter covers all 500
- $19
- or Growth (2,000) for headroom
- $49
- Plus
- nothing; delivery is the product
At this volume the AeroAPI bill is the $100 minimum, five times ours. Its volume discounts start above $1,000 a month, which at these assumptions is about eight thousand flights; below that, the floor is the price. See pricing.
Moving over
AeroAPI’s out/off/on/in vocabulary maps cleanly: out and in are gate times, off and on are runway times, and FlightByte keeps exactly that split. What changes is that every time also comes in local form, delays are in minutes, and the status is an enum rather than a sentence.
| AeroAPI | FlightByte | Note |
|---|---|---|
ident_iata | carrier.iata + flightNumber | “TK1848” becomes TK and 1848. |
fa_flight_id | flightKey | Unique per leg once resolved: TK1848:2026-09-12@ATH-IST. |
status | status.phase, status.label | An enum to branch on and a label to show. See the map below. |
cancelled, diverted | status.phase | cancelled and diverted are phases, with events when they happen. |
scheduled_out | departure.times.scheduledGate.utc | Also .local and .timezone. |
estimated_out | departure.times.estimatedGate.utc | Or read departure.bestTimeUtc for “the best time known right now”. |
actual_out | departure.times.actualGate.utc | |
scheduled_off, estimated_off, actual_off | departure.times.*Runway.utc | |
scheduled_on, estimated_on, actual_on | arrival.times.*Runway.utc | |
scheduled_in, estimated_in, actual_in | arrival.times.*Gate.utc | |
departure_delay | departure.delayMinutes | Seconds there, minutes here; negative when early. |
gate_origin, terminal_origin | departure.gate, departure.terminal | |
gate_destination, terminal_destination | arrival.gate, arrival.terminal | |
baggage_claim | arrival.baggage | And an arrival.baggage.changed event when it is assigned. |
origin.code_iata | departure.airport.iata | Plus icao, name, city, timezone and a country with flag URLs. |
operator_iata, operator | carrier.iata, carrier.icao | carrier.name and operatedBy alongside. |
codeshares_iata[] | codeshares[] | |
registration | equipment.tailNumber | |
aircraft_type | equipment.iata, equipment.name | IATA type code and a readable name. |
progress_percent, route, positions | — | No position data. |
| AeroAPI status | FlightByte status.phase | Note |
|---|---|---|
| Scheduled | scheduled | |
| Taxiing / Left Gate | departed | Off the gate. |
| En Route | en_route | Airborne. |
| Landed / Taxiing | landed | On the runway. |
| Arrived / Gate Arrival | arrived | At the gate. |
| Delayed | any phase with status.delayed | Delay is a flag on the phase; delay.increased fires as it grows. |
| Cancelled | cancelled | A flight.reinstated event exists for the ones that come back. |
| Diverted | diverted, redirected | The new airport is under diverted. |
| — | boarding | FlightByte separates gate activity from the schedule. |
AeroAPI’s status is descriptive text, so the left column is illustrative; most integrations branch on the booleans and the *_out/*_in times instead.
The alert call. Two AeroAPI calls become one, the events list is about the changes rather than the lifecycle, and your booking id rides along.
# AeroAPI
PUT https://aeroapi.flightaware.com/aeroapi/alerts/endpoint
x-apikey: $AEROAPI_KEY
{ "url": "https://yourapp.com/hooks/flights?token=…" }
POST https://aeroapi.flightaware.com/aeroapi/alerts
{
"ident": "THY1848",
"origin": "LGAV",
"start": "2026-09-12",
"end": "2026-09-13",
"events": { "departure": true, "arrival": true,
"cancelled": true, "diverted": true }
}# FlightByte
POST https://api.flightbyte.dev/v1/subscriptions
x-api-key: $FLIGHTBYTE_KEY
{
"carrier": "TK",
"flightNumber": "1848",
"date": "2026-09-12",
"webhookUrl": "https://yourapp.com/hooks/flights",
"events": ["flight.departed", "flight.arrived",
"delay.increased", "arrival.gate.changed"],
"metadata": { "bookingId": "BK-1042" }
}The quickstart has the receiver in Node and Python; Webhooks lists all 23 change types.
Questions people ask before switching
How much does the FlightAware API cost?
Is the FlightAware API free?
How do I get a FlightAware API key?
x-apikey header to aeroapi.flightaware.com/aeroapi.Do I need the Standard tier to get alerts from AeroAPI?
Does FlightByte have positions, tracks or predicted arrival times?
Can I keep AeroAPI for history and use FlightByte for alerts?
Watch your first flight tonight.
Nine dollars, a hundred flights, every event, signed. No hundred-dollar floor.
A free key in a minute, no card. On a paid plan? Request a key