IATA vs ICAO: Which Airport Code Belongs in Your Travel Record?

IATA vs ICAO: Which Airport Code Belongs in Your Travel Record?

· Nen

Your bag tag says LHR. The pilot's flight plan says EGLL. Both mean the same stretch of tarmac west of London, and both are official. If you are building a list of every airport you have been through, you have to pick one to write down, and the choice is less obvious than it looks the first time you notice a four-letter code in a flight-history export.

This is a plain explanation of the two systems: who runs each, why the letters are what they are, and where they disagree. After that comes a clear recommendation for which one belongs in a personal record, and what to do when a code has changed hands since you flew.

The short answer

Log the IATA code, and treat the airport, not the code, as the thing you are recording.

IATA codes are the three-letter ones on your ticket, your boarding pass and your bag tag. They are what you saw at the time, what your old confirmation emails contain, and what everyone you talk to will recognise. ICAO codes are the four-letter ones used by air traffic control and flight planning. They are more systematic and they cover far more airfields, but almost no passenger ever reads one.

The rest of this piece explains why, and covers the edge cases where that answer needs a footnote.

IATA codes: built for the people buying tickets

The International Air Transport Association, the airline trade body, assigns three-letter location codes under IATA Resolution 763 and publishes them in its coding directory (Wikipedia). Three letters allow 17,576 combinations, which is enough for every airport with scheduled passenger flights, and serving those flights is the whole job of the system. The codes exist so that reservations, tickets and baggage can name a place in the same few characters everywhere. The letters printed large on the tag looped round your suitcase handle are the most visible use of them.

Because the codes were handed out over decades, the letters are only loosely tied to names. Some of the oddities are worth knowing because they will turn up in your own history:

  • ORD is Chicago O'Hare, named for Orchard Field, the site's earlier name. MCO is Orlando, from McCoy Air Force Base. MSY is New Orleans, from Moisant Stock Yards.
  • EWR is Newark because codes beginning with N were reserved for the US Navy, and W and K were taken by broadcast call signs, so American cities starting with those letters got irregular codes.
  • Most large Canadian airports start with Y: YYZ Toronto, YUL Montreal, YVR Vancouver. That comes from 1930s weather-station identifiers.

All three come from the same history of how the system grew (Wikipedia). The practical point is simpler: you cannot reliably work out an airport from its IATA code, or the other way round, by reasoning. You have to look it up, and a list you write should always carry the airport's name alongside the letters.

One more wrinkle. IATA does not only code airports. It also issues codes to some railway stations, bus stations and ferry ports, under agreements with operators including Amtrak, SNCF and Deutsche Bahn. If an old booking lists a three-letter code you cannot place, it may be a train station sold as part of an air-rail ticket rather than an airport at all.

ICAO codes: built for the people flying the aircraft

The International Civil Aviation Organization, a UN agency, runs the four-letter system and publishes it quarterly in ICAO Document 7910, Location Indicators (Wikipedia). These codes serve air traffic control, flight plans and weather reporting. Unlike IATA's, their structure is geographic: the first one or two letters identify the country or region, and the rest identify the airfield.

Once you see the pattern it is hard to unsee:

  • EG is the United Kingdom. Heathrow is EGLL, Gatwick EGKK.
  • ED is civilian Germany (Frankfurt is EDDF), LF is France (Charles de Gaulle is LFPG), and RJ is Japan.
  • K is the contiguous United States, where the ICAO code is often just a K in front of the familiar three letters: JFK is KJFK, LAX is KLAX.
  • C is Canada, Y is Australia, Z is China.

The London example shows why passengers never took to them. EGLL tells you the airport is in Britain and nothing else, while LHR at least nods at Heathrow. ICAO codes are designed to be unambiguous to a controller, not memorable to someone at a check-in desk.

They also cover far more places. Many more aerodromes have an ICAO code than an IATA code (Wikipedia): small airfields, flying clubs and military bases that no airline sells a seat to. If you are a private pilot, that coverage is the whole point, and for you the ICAO code is the natural key.

Where the two systems part ways

IATA ICAO
Length Three letters Four letters
Run by Airline trade association UN aviation agency
Used for Tickets, bookings, bag tags Flight plans, air traffic control, weather
Structure No geographic pattern Region and country prefix
Coverage Airports with scheduled passenger service, plus some rail and ferry points Far more aerodromes, including small fields
Seen by passengers Constantly Almost never

That last row decides it for most people. You rebuild a personal record from what you actually have: old boarding passes, confirmation emails, loyalty statements, photos of departures boards. Every one of those sources uses IATA codes. Writing the list in ICAO would mean looking up a second code for every entry, and it would be no more accurate.

City codes are not airports

IATA also issues metropolitan codes that cover every airport serving a city: LON for London, NYC for New York, PAR for Paris, TYO for Tokyo, MIL for Milan (Wikipedia). Booking sites use them so you can search "any London airport" in one go.

They help when you buy a ticket and are useless in a record, because you never land at LON. You land at Heathrow, Gatwick, Stansted, Luton, City or Southend, and they are not interchangeable: each is a different place, with its own terminal, its own queues and its own way into town. If an old itinerary only shows a city code, the specific airport is usually printed on the boarding pass, or you can pin it down from the flight number and the date. It is worth the extra minute to find it, because "London" is a city you visited, while Stansted is an airport you passed through.

Codes change hands

The other trap for anyone logging old trips is that a code names an airport only for as long as that airport holds it. When a city replaces its airport, the code often moves to the new one.

  • HKG belonged to Kai Tak, the old airport in Kowloon, until 6 July 1998. That day Kai Tak closed and both its IATA and ICAO codes were reassigned to the new airport at Chek Lap Kok (Wikipedia). A boarding pass from 1996 reading HKG and one from 2016 reading HKG describe two different airports.
  • BKK originally meant Don Mueang. The code moved to Suvarnabhumi, and Don Mueang took DMK (Wikipedia).
  • Berlin went through the reverse. Brandenburg Airport opened on 31 October 2020 under the new code BER, the last airlines finished moving out of Tegel by 8 November, and Schönefeld's buildings became the new airport's Terminal 5 (Wikipedia). If you flew into Berlin before that autumn, your airport was Tegel or Schönefeld, not BER.

This is the real reason to record the airport rather than the code. "HKG, 1996" is ambiguous. "Kai Tak, 1996" is not. When you rebuild old trips, read the date before you trust the letters. If you are working through a backlog of old flights, our guide to logging travel history retroactively sets out where to look, cheapest source first.

How MapMyWorld handles the two codes

Our airport log follows the recommendation above, gaps included.

  • Every airport record carries both codes, and the IATA code leads. The airport table stores the ICAO code and the IATA code side by side. Your airport list shows the IATA code, falling back to ICAO only for an airport that has no IATA code. When a visit adds a pin to your map, the pin is named for the airport with its IATA code in brackets, for example "London Heathrow Airport (LHR)".
  • Search matches name, IATA code and city, not ICAO. Type LHR, Heathrow or London and you find Heathrow. Type EGLL and you get nothing. The search is a plain text match, which has a side effect worth knowing: a city code like LON appears to work only because those letters occur in "London", and it will turn up Barcelona for the same reason. The airport pickers in the trip form behave the same way.
  • The reference list only includes airports that hold a three-letter IATA code. It was built from a public airport dataset filtered to entries with one. That covers everywhere you can buy a ticket to, but a grass strip or flying club with only an ICAO code cannot be logged. Pilots whose logbooks are full of those fields will find the list incomplete, and that criticism is fair.
  • One entry per airport. Six trips through Hong Kong make one Hong Kong entry, with a visit type and a date. If a closed airport like Kai Tak is not in the list, the workaround is to log the airport that inherited its code and accept that your record cannot tell the two apart. That is a real limitation for anyone whose flying goes back before 1998.
  • The Free plan holds 10 airports. Pro removes the ceiling, at $7.99 a month, $59.99 a year or $199.99 once.

Which code to write down

If you want the whole argument on one card:

  • Write the IATA code, because it is what your sources contain.
  • Write the airport's name next to it, because codes move and three letters do not describe a place.
  • Write the date, because the date is what separates the Kai Tak HKG from the Chek Lap Kok one.
  • Resolve city codes to a specific airport before they go in the list.
  • If you fly yourself, keep ICAO codes in your logbook. A passenger's record and a pilot's logbook answer different questions, and each code suits one of them.

Those same three fields (airport, visit type, date) are the whole model in how to log every airport you pass through, which walks through building the list from nothing. And if a code-by-code audit of your old flights leaves you wondering whether ninety minutes airside in a transit lounge counts as having been to a country, we set out the options in what counts as visiting a country.

The letters on your bag tag are a label for a place. The place is what goes in the record. Start your record — free.

Start your record — free