I learned this distinction the embarrassing way. Years ago I was building a little flight-tracking side project and assumed the 4-letter code was just the 3-letter code with a K slapped on the front. It worked for JFK, LAX, and ORD, so I shipped it. Then a user searched Honolulu and my app confidently told them the code was KHNL. It is PHNL. Hawaii does not play by the K rule, and my string concatenation did not know that. Lesson learned: never derive one code from the other. Look it up.
The 30-second version
| Feature | IATA code | ICAO code |
|---|---|---|
| Length | 3 letters (JFK) | 4 letters (KJFK) |
| Assigned by | International Air Transport Association | International Civil Aviation Organization (a UN agency) |
| Primary use | Ticketing, baggage, booking systems | Flight planning, air traffic control, weather reports |
| Who sees it | Travelers, travel agents, booking sites | Pilots, controllers, dispatchers |
| Structure | No geographic structure; memorable labels | First letters encode region and country |
Why two systems exist
They solve different problems. IATA codes are commercial shorthand: short, pronounceable-ish labels for humans moving through airports. ICAO codes are operational identifiers in a global grid where the first one or two letters pin down the region. K means the contiguous United States. EG means the United Kingdom (Heathrow is EGLL). Y means Australia (Sydney is YSSY), RJ means Japan, LF means France.
The practical difference is uniqueness. ICAO codes are globally unique by construction, which is exactly what you want when a controller hands off a flight plan. IATA codes are unique in practice but carry no structure, and they are not even limited to airports: IATA assigns 3-letter identifiers to rail stations and ferry terminals involved in intermodal travel. New York's Penn Station is ZYP. Your bag tag and a train station can share a namespace, which tells you everything about which system was designed for computers and which for people.
Which one should you use?
It depends on who you are. If you are a traveler, live in IATA-land: it is what is on your ticket, your bag tag, and every booking site. If you are a pilot, developer, or aviation nerd, ICAO is your system: it is what flight trackers, METAR weather reports, and air traffic control use.
One more wrinkle worth knowing: far more airfields have ICAO codes than IATA codes. IATA only bothers with airports that matter commercially, which is why thousands of small strips have a 4-letter ICAO indicator (or the ZZZZ "no code" procedure) and no 3-letter code at all. Going the other direction is rarer but real: some small Alaskan airports with scheduled service have an IATA code for ticketing and no ICAO code, and you will see them in our database with the ICAO field blank.
A few myths worth retiring
"Airport codes never change." They are deliberately stable, but changes happen, usually for geopolitical reasons. Berlin Schonefeld kept its IATA code SXF through German reunification but changed its ICAO code when control passed from East to West Germany.
"A renamed city must get a new code." No. Mumbai is still BOM, Chennai is still MAA, St. Petersburg is still LED. The code is infrastructure, not branding.
"Every US airport's ICAO code starts with K." Only the contiguous states. This one cost me a bug report, so I will keep repeating it.
Look up both codes for any US airport
Search the free US airport codes database
679 US airports with scheduled airline service, each with its IATA code, ICAO code (where one exists), city, and state. Free CSV download, data from OurAirports in the public domain.
Sources: Navan, "What is an Airport Code? IATA and ICAO Guide"; Skylink API, "ICAO vs IATA Codes: The Difference Explained"; Wikivoyage, "Airport codes"; Aviatopia, "ICAO vs IATA Airport Codes." Verified October 2026.