Every runway wears a big number painted on each end — 27, 09L, 22R — and to a passenger it looks arbitrary. It isn't. A runway's number is a compass reading, its letter tells you which of several parallel strips you're on, and every so often those numbers actually change. Once you know the rule, you can read a runway's heading off its name from the window seat. Here's how runway numbering works, and how the same data shows up when you pull an airport by API.

The number is a magnetic heading, divided by ten

A runway is numbered for the magnetic compass heading you fly when landing or taking off on it, rounded to the nearest ten degrees, with the trailing zero dropped:

  • A runway aligned to 270° (due west, magnetic) is Runway 27.
  • A runway aligned to 090° (due east) is Runway 09 — note the leading zero; single-digit runways always keep it (01 through 09).
  • A runway aligned to 145° rounds to 150° → Runway 15.

Because a runway is a two-way strip, it has two numbers, one at each end, always 18 apart (180° opposite). The strip you'd call Runway 09 approaching from the west is Runway 27 approaching from the east — same pavement, opposite directions, and the two ends always differ by exactly 18: 09 + 18 = 27, 04 + 18 = 22. That's why numbers only run from 01 to 36 — there are 360 degrees in a circle, divided by ten.

A jet on short final over the red approach lights, moments before touching down on the runway

L, C, and R: telling parallel runways apart

When an airport has two or three runways on the same heading, the number alone can't distinguish them, so a letter is appended for position as seen from the approach:

  • Two parallels: L (left) and R (right) — e.g. 09L and 09R.
  • Three parallels: L, C (center), and R — e.g. 27L, 27C, 27R.

The catch: the letter flips with the direction, just like the number does. The runway you land on as 09L from the west is the same strip you land on as 27R from the east — left and right swap because you've turned around. Big hubs with four or more parallels (like some in the US) bend the rule by nudging a runway's printed number one degree off its true heading — so you'll see 28L and 28R alongside a 27L/27R pair — purely to give every strip a unique identifier.

Why runway numbers change

Here's the part that surprises people: a runway can be renumbered without moving a single slab of concrete. The numbers are based on magnetic heading, and the Earth's magnetic field drifts over time. As magnetic north wanders, the magnetic heading of a fixed runway slowly changes, and once the drift pushes it past the rounding boundary, the runway is repainted with the new number. Airports from Tampa to Fairbanks have renumbered runways in recent years for exactly this reason — the pavement points the same way it always did; the compass moved underneath it. It's also why runway data is worth pulling from a maintained source rather than hard-coding it once.

The "14 L" runway designation and touchdown-zone markings viewed from ground level down the runway

Runway data in an airport API

When you fetch an airport from SkyLink API's airports endpoint, each runway comes back with both end identifiers plus its physical dimensions — the same le_ident/he_ident pair you'd read off the pavement:

curl "https://skylink-api.p.rapidapi.com/airports/search?icao=KJFK" \
  -H "X-RapidAPI-Key: $RAPIDAPI_KEY" \
  -H "X-RapidAPI-Host: skylink-api.p.rapidapi.com"
{
  "ident": "KJFK",
  "name": "John F. Kennedy International Airport",
  "runways": [
    {
      "length_ft": 12079.0,
      "width_ft": 200.0,
      "surface": "PEM",
      "le_ident": "04L",
      "he_ident": "22R"
    }
  ]
}

le_ident and he_ident are the low-end and high-end identifiers — the two numbers painted on each end of the strip. Here they're 04L and 22R: the same runway from opposite directions, 18 apart (04 + 18 = 22), with the L/R marking it as the left/right of a parallel pair. Note that runways can be an empty array [] for small fields with no charted runway data, so guard for it. From these you can render a runway diagram, pick the longest runway for a performance calc, or match a landing aircraft to the strip it used.

Runway data pairs naturally with the rest of an airport record — frequencies, navaids, and elevation all come back in the same call, and you can chain to aircraft performance to check whether a given aircraft's takeoff distance fits the runway length you just read.

SkyLink API gives you a free tier of 1,000 requests/month covering a 74,000+ airport database, with paid plans starting at $18.59/mo for production traffic. It's available through the free trial — sign up, grab a key, and pull runways, frequencies, and navaids for any airport in one call.