Airports
4 500+ commercial and major airports worldwide, each with its IATA and ICAO codes, human-readable name, municipality, ISO country code, WGS-84 coordinates, elevation in feet, and airport type (large or medium). Use it for flight-search autocomplete, route planning, geo lookups, and any application that needs a reliable, coded list of the world's airports.
Quick fetch
Stable URL. CORS-enabled. No auth.
curl https://staticdata.dev/v1/airports.json
Or use as a typed import:
import { airports } from "https://staticdata.dev/v1/airports.ts"
Formats
- JSON 1.02 MB
/v1/airports.json
min: 780.9 KB · /v1/airports.min.json
- CSV 406.0 KB
/v1/airports.csv
- TypeScript 1.02 MB
/v1/airports.ts
export const airports
type Airport = (typeof airports)[number]
Schema
Each record in the dataset has the following shape.
| Field | Type | Description | Example |
|---|---|---|---|
| iata | string | IATA 3-letter airport code | JFK |
| icao? | string | null | ICAO 4-letter ident (may equal local code) | KJFK |
| name | string | Full airport name | John F Kennedy International Airport |
| city? | string | null | Municipality served by the airport | New York |
| country | string | ISO 3166-1 alpha-2 country code | US |
| lat | number | WGS-84 latitude in decimal degrees | 40.63972 |
| lon | number | WGS-84 longitude in decimal degrees | -73.77889 |
| elevationFt? | number | null | Elevation above mean sea level in feet | 13 |
| type | string | Airport size class: large_airport or medium_airport | large_airport |
Preview
First 10 records.
| iata | icao | name | city | country | lat |
|---|---|---|---|---|---|
| AAA | NTGA | Anaa Airport | Anaa | PF | -17.3526 |
| AAC | HEAR | El Arish International Airport | El Arish | EG | 31.055324 |
| AAE | DABB | Annaba Rabah Bitat Airport | Annaba | DZ | 36.826781 |
| AAL | EKYT | Aalborg Airport | Aalborg | DK | 57.094763 |
| AAM | FAMD | Malamala Airport | Malamala | ZA | -24.816866 |
| AAN | OMAL | Al Ain International Airport | Al Ain | AE | 24.2617 |
| AAO | SVAN | Anaco Airport | Anaco | VE | 9.430225 |
| AAP | WALS | Aji Pangeran Tumenggung Pranoto International Airport | Samarinda | ID | -0.374478 |
| AAQ | URKA | Anapa Vityazevo Airport | Krasnyi Kurgan | RU | 45.002102 |
| AAR | EKAH | Aarhus Airport | Aarhus | DK | 56.303331 |
Fetch examples
Drop-in snippets in five languages.
curl -sSL https://staticdata.dev/v1/airports.json | jq '.[0]' import type { Airport } from "https://staticdata.dev/v1/airports.ts";
const res = await fetch("https://staticdata.dev/v1/airports.min.json");
if (!res.ok) throw new Error(`Fetch failed: ${res.status}`);
const airports: Airport[] = await res.json();
console.log(airports[0]); import urllib.request, json
with urllib.request.urlopen("https://staticdata.dev/v1/airports.min.json") as r:
airports = json.load(r)
print(airports[0]) package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
resp, err := http.Get("https://staticdata.dev/v1/airports.min.json")
if err != nil { panic(err) }
defer resp.Body.Close()
var data []map[string]any
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
panic(err)
}
fmt.Println(data[0])
} use serde_json::Value;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let body = ureq::get("https://staticdata.dev/v1/airports.min.json").call()?.into_string()?;
let data: Vec<Value> = serde_json::from_str(&body)?;
println!("{:?}", data.first());
Ok(())
} Sources and methodology
The dataset is derived from the OurAirports open-data project maintained by David Megginson and contributors. The upstream CSV is released into the public domain and updated frequently by a global volunteer community. Only rows where type is large_airport or medium_airport and an IATA code is present are included, which removes private strips, heliports, seaplane bases, and small GA fields that are irrelevant for most developer use cases.
Each record’s iata field is the IATA Location Identifier (the three-letter code printed on baggage tags). The icao field is taken from the OurAirports ident column, which for most international airports matches the ICAO four-letter designator but may be a local code for some regional airports. Coordinates (lat, lon) are WGS-84 decimal degrees sourced from OurAirports; elevationFt is in feet above mean sea level and is null where the source does not record an elevation.
Country codes follow ISO 3166-1 alpha-2. A small number of airports are assigned to territories rather than sovereign states (e.g. GF for French Guiana, PR for Puerto Rico); this mirrors standard IATA country assignments. Records are sorted alphabetically by IATA code for deterministic diffs and predictable binary search. The current snapshot (4 568 airports) was regenerated from OurAirports as of October 2026; it reflects recent changes such as Palm Beach International becoming President Donald J. Trump International Airport with IATA code DJT (formerly PBI, August 2026). IATA codes are occasionally reassigned or retired when airports close or are renamed, so do not treat them as permanent identifiers.
Versioning
URLs under /v1/ are stable: field names and types will not change in a way
that breaks consumers. Values can be corrected or records added when the upstream source
changes; schema-incompatible updates ship under a new version path. See the
airports changelog for this dataset's history.