← Blog

Aviation6 min read

IATA vs ICAO airport codes: why Heathrow is LHR and EGLL

IATA vs ICAO airport codes explained: why airports have a three-letter and a four-letter code, who assigns each, where they're used, and why LAX has an X.

The three-letter code LHR and the four-letter code EGLL side by side, both pointing to London Heathrow, on an Active Flights blog card.

Look at the tag on your checked bag after a flight to London and it says LHR. Ask the pilot where they filed the flight plan to, and they’ll say EGLL. Same airport — Heathrow, which handled a record 83.9 million passengers in 2024 (Wikipedia: Heathrow Airport) — two completely different codes.

The short answer: IATA airport codes are three letters, assigned by IATA, the airlines’ association, for tickets, timetables and baggage. ICAO airport codes are four letters, assigned through ICAO, the International Civil Aviation Organization, for air traffic control and flight planning. Most big airports have both.

What is the difference between IATA and ICAO codes?

IATA code ICAO code
Length 3 letters 4 letters
Example LHR EGLL
Who sets it IATA (Resolution 763) ICAO (Doc 7910, Location Indicators)
Used for tickets, timetables, bag tags flight plans, air traffic control, weather
Built from usually the name of the city or airport region + country + airport

Sources: Wikipedia: IATA airport code; Wikipedia: ICAO airport code.

IATA — the International Air Transport Association — governs its codes under Resolution 763, administers them from its Montreal headquarters, and publishes them twice a year in the Airline Coding Directory. They’re the codes passengers meet: “mainly used for passenger services such as tickets and checked luggage” (Wikipedia: IATA airport code).

ICAO — the International Civil Aviation Organization — publishes its codes in Document 7910, Location Indicators, updated every quarter. These are the codes air traffic control, flight planning and weather stations use (Wikipedia: ICAO airport code).

How to read a four-letter ICAO code

An IATA code is a label; an ICAO code is an address. It reads from the general to the specific: the first letter is a region of the world, the first two letters usually narrow it to a country, and the rest picks out the airport.

Reading EGLL, from region to airport E G L L region northern Europe EG = country United Kingdom airport London Heathrow IATA code LHR Other first letters: K contiguous US · C Canada · Y Australia · Z China and neighbours
The ICAO code narrows from region to country to airport. Source: Wikipedia, ICAO airport code.

So E is northern Europe and EG the United Kingdom; K is the contiguous United States, C Canada, Y Australia, and Z China (shared with Mongolia and North Korea). Countries choose their own codes within that framework, and there are political exceptions: the RAF base at Mount Pleasant in the Falklands is EGYP, a British prefix far from Britain (Wikipedia: ICAO airport code).

Why are US airport codes K plus the IATA code?

In the contiguous US and in Canada, the shortcut is easy: many ICAO codes are just the IATA code with a prefix. IAD (Washington Dulles) becomes KIAD; YEG (Edmonton) becomes CYEG.

Same airport, two codes IATA ICAO Washington Dulles IAD KIAD prefix + IATA Edmonton YEG CYEG prefix + IATA London Heathrow LHR EGLL no relation Kahului, Hawaii OGG PHOG no relation
The prefix rule holds in the contiguous US and Canada, but not in Alaska, Hawaii or most of the world. Source: Wikipedia, ICAO airport code.

The rule breaks for Alaska (PA), Hawaii (PH) and US territories — Kahului, Hawaii, is OGG to IATA but PHOG to ICAO — and almost everywhere outside North America.

ICAO’s alphabet has a few house rules of its own. No code starts with I, Q or X, and J is unused apart from JZRO, assigned ceremonially to the spot on Mars where the Ingenuity helicopter first took off. And when a flight plan has to name an airfield that has no ICAO code at all, pilots write the placeholder ZZZZ.

Why some airport codes don’t match the city

The odd IATA codes are where the history hides (Wikipedia: IATA airport code):

  • LAX — Los Angeles used the two-letter code LA. When codes grew to three letters in 1947, it gained an X that “does not have any specific meaning” (Wikipedia: Los Angeles International Airport). Portland (PDX), Sioux City (SUX) and Phoenix (PHX) got the same treatment (Atlanta Journal-Constitution).
  • ORD — Chicago O’Hare keeps the code of its former name, Orchard Field.
  • MCO — Orlando’s code comes from McCoy Air Force Base.
  • MSY — New Orleans is named for the Moisant Stock Yards once on the site.
  • PEK, BOM, LED — the old names live on: Peking (Beijing), Bombay (Mumbai) and Leningrad (St Petersburg).
  • YYZ — most big Canadian codes start with Y; Toronto took a railway station’s code because YTZ was already taken by Billy Bishop Toronto City Airport.
  • JFK — New York’s Idlewild was renamed in 1963 and given KIA. In 1968 the airport asked to switch to JFK, because KIA was widely read as “killed in action”.

Codes usually survive a rename, as PEK and BOM show. And three letters allow at most 17,576 combinations — one reason so many codes use letters that aren’t in the airport’s name. Some airports have more than one — EuroAirport Basel-Mulhouse-Freiburg answers to BSL, MLH and EAP — and big cities get a city code covering all their airports, like LON, NYC and PAR. And far more airfields have an ICAO code than an IATA one.

ICAO codes describe airports; aircraft types have their own pair of IATA and ICAO codes, with the same split between commercial and operational use.

Where you’ll see each code

If you’re booking, tracking a bag or reading a departures board, it’s IATA. If you’re reading a flight plan, an air traffic control message or an airport weather report, it’s ICAO.

Airline schedules sit on the IATA side: a SSIM schedule file names every departure and arrival airport by its three-letter code, and those codes are what turn a schedule into a route map. SSIM Toolkit reads them that way when it opens a schedule.


Sources

SSIM Toolkit · Desktop app

Download SSIM Toolkit

Enter your email and we'll send you a download link. It works for 24 hours. Free during the Early Access Preview.

By downloading, you'll receive release notes and product updates from Active Flights by email. Unsubscribe any time. See our privacy policy.