FlightByte vs AirLabs
AirLabs sells itself as the cheapest broad aviation API on the market, and it is among the cheapest. It also has a Flight Alert API, in beta, that sends a POST when a flight changes. FlightByte is only that POST, done as a product: signed, retried, logged, typed, and priced per watched flight. Which one you want depends on whether the webhook is a feature or the job.
In thirty seconds
changed list of field namesapi_key in the URL, so in every proxy log; the listener call is a GET.x-api-key.scheduled, en-route, landed. Cancelled and diverted are not among the documented values.400 with the legsorigin selector; never a guess.AirLabs figures from the plan data behind its pricing section and its Flight and Flight Alert API documentation, checked October 15, 2026; plans and quotas load dynamically on their site, so check there before deciding. If something here is out of date, tell us and we will fix it.
AirLabs pricing, free plan and API key
What each plan costs, what the free plan allows, and how a key is issued, from AirLabs’s own pages on October 15, 2026. Every lookup and every alert delivery draws on the same monthly quota of queries.
| Plan | Price | Included | Notes |
|---|---|---|---|
| Free | $0 | 1,000 queries / month | Personal use; no fleets or routes, no Flight Alert API |
| Developer | $49 / month, $45 billed yearly | 25,000 queries | Commercial use |
| Business | $99 / month, $75 billed yearly | 100,000 queries | Regular support |
| Enterprise | $499 / month, $475 billed yearly | 1,000,000 queries | Priority support, early access |
Early access to the beta Flight Alert API is for paid plans, and each delivery is subtracted from the same query quota. AirLabs publishes no overage price. The $19-per-10,000 line in the comparison table on its home page is a volume example, not a plan you can buy.
AirLabs free tier
Free is 1,000 queries a month for personal use, without the fleets and routes databases and without the Flight Alert API. No card is asked for.
At one query every five minutes for the last six hours of a flight, 1,000 queries watch about fourteen flights a month.
AirLabs API key: how to get one
- Sign up at airlabs.co with a name, website, company, what you are building, an e-mail address and a password.
- Wait: as of this check, new sign-ups go on a waiting list, and AirLabs gives no date for when registration resumes.
- Once in, send the key as the
api_keyquery parameter toairlabs.co/api/v9; a signature valid for three minutes can stand in for it.
- 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 AirLabs is the better choice
It is one of the cheapest ways to ask a lot of questions about aviation, and for three jobs that is exactly right.
You need volume
A million queries for $499 is among the lowest per-request prices on these comparison pages. A board for a whole airport, a search box over every route, a fleet page: request-priced and cheap is the right shape.
You need positions
Latitude, longitude, altitude, heading, speed and squawk, on the flight object and on a real-time endpoint. FlightByte says a flight is en route; it does not say where.
You need the catalogue
Airports, airlines, routes, fleets, cities, countries, taxes and time zones as databases you can query. FlightByte carries the airport data that belongs to a flight and nothing beyond it.
When FlightByte is
When something in your product has to happen because a specific flight changed, and it has to happen every time.
The delivery is the product
Signed with a timestamp, retried eight times with backoff, logged with the status and latency your endpoint returned, readable back from the API. A beta alert feature has to earn each of those; here they are the reason the thing exists.
Changes, not field names
AirLabs tells you dep_gate changed and hands you the flight. FlightByte tells you departure.gate.changed from A11 to A22 with a sentence you could forward. Twenty-three of those, filtered per subscription.
A vocabulary that covers the bad days
Three status values do not have a word for cancelled or diverted. Ten phases and events for cancelled, diverted, redirected and reinstated do, and those are the days the notification matters.
What watching 500 flights a month costs, and what is left to build
Using the Flight Alert API rather than polling. One listener per flight, a few dozen deliveries each, every delivery a request against the quota.
- 500 listeners, a few dozen deliveries each
- ≈ 10–20k requests
- Plan covering that
- Developer, $49
- Beta access
- paid plans only
- Plus
- sender check, retries, dedupe, from/to diff, 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
On the invoice FlightByte is the cheaper of the two, $19 against $49. The right-hand column of the AirLabs list is the bigger difference: those are the pieces a beta alert API leaves to you, and the pieces a wrong one costs a passenger. See pricing.
Moving over
AirLabs is flat: one object, prefixed field names, local and UTC as separate fields. FlightByte nests by side and splits estimated from actual and gate from runway. Most of the map is mechanical.
| AirLabs | FlightByte | Note |
|---|---|---|
flight_iata | carrier.iata + flightNumber | “TK1848” becomes TK and 1848; flightKey adds the date and the leg. |
cs_flight_iata, cs_airline_iata | codeshares[], operatedBy | A list of every codeshare number, and the operator when it differs. |
airline_iata | carrier.iata | carrier.icao and carrier.name alongside. |
dep_iata, dep_icao | departure.airport.iata, .icao | Plus name, city, timezone and a country with flag URLs. |
dep_time, dep_time_utc | departure.times.scheduledGate.local, .utc | One object with both forms and the time zone. |
dep_estimated, dep_estimated_utc | departure.times.estimatedGate | Or departure.bestTimeUtc for “the best time known right now”. |
| — | departure.times.actualGate, actualRunway | Actual gate and runway times; not in the documented AirLabs field list. |
arr_time, arr_estimated | arrival.times.scheduledGate, estimatedGate | |
dep_delayed, arr_delayed | departure.delayMinutes, arrival.delayMinutes | Minutes in both; negative when early on FlightByte. |
dep_terminal, dep_gate | departure.terminal, departure.gate | Same on arrival. |
arr_baggage | arrival.baggage | And an arrival.baggage.changed event when it is assigned. |
status | status.phase | See the status map below. |
duration | duration | Scheduled, estimated and actual minutes on FlightByte. |
reg_number | equipment.tailNumber | |
aircraft_icao, model | equipment.iata, equipment.name | IATA type code rather than ICAO. |
updated | fetchedAt | When this snapshot was taken. |
lat, lng, alt, speed, squawk | — | No position data. |
| AirLabs status | FlightByte status.phase | Note |
|---|---|---|
scheduled | scheduled, boarding | Delay is a flag, status.delayed, not a value. |
en-route | departed, en_route | Off the gate versus airborne. |
landed | landed, arrived | On the runway versus at the gate. |
| — | cancelled, diverted, redirected | With flight.cancelled, flight.diverted and flight.reinstated events. |
| AirLabs | FlightByte | Note |
|---|---|---|
airline_iata + flight_number + dep_date | carrier, flightNumber, date | Plus origin when the number flies twice. |
webhook_url | webhookUrl | HTTPS; private ranges refused. |
_fields | events | Eleven field names there; 23 change types here. |
listener_id | subscriptionId | In every delivery. |
changed[] | changes[] | Names there; type, from, to, deltaMinutes and message here. |
| — | x-flightbyte-signature, metadata | A signature to verify and your own booking id echoed back. |
The listener call, side by side. The AirLabs listener is a GET with the key and the callback in the URL; the FlightByte subscription is a POST with the key in a header, a date, a leg selector and your metadata.
# AirLabs GET https://airlabs.co/api/v9/listen ?airline_iata=TK&flight_number=1848 &dep_date=2026-09-12 &webhook_url=https://yourapp.com/hooks/flights?token=… &_fields=dep_gate,dep_estimated,arr_estimated,status &api_key=$AIRLABS_KEY # every delivery is one request off the quota; # retries and signing are not documented
# FlightByte
POST https://api.flightbyte.dev/v1/subscriptions
x-api-key: $FLIGHTBYTE_KEY
{
"carrier": "TK",
"flightNumber": "1848",
"date": "2026-09-12",
"origin": "ATH",
"webhookUrl": "https://yourapp.com/hooks/flights",
"events": ["departure.gate.changed", "delay.increased",
"arrival.estimated.changed", "flight.cancelled"],
"metadata": { "bookingId": "BK-1042" }
}The quickstart has the receiver in Node and Python; the signature guide has it in seven frameworks.
Questions people ask before switching
How much does the AirLabs API cost?
Does AirLabs have a free plan?
How do I get an AirLabs API key?
api_key query parameter.AirLabs alerts cost a request each. Why pay per watched flight instead?
Is the AirLabs Flight Alert API production-ready?
Can I use both?
Watch your first flight tonight.
Nine dollars, a hundred flights, every event, signed. The migration map above is the whole afternoon.
A free key in a minute, no card. On a paid plan? Request a key