About MileMapper Guide
MileMapper Guide is an independent reference site for airline loyalty programs, alliances, and the airports they connect.
How we source data
Airline and airport identity fields (name, IATA/ICAO codes, callsign, country, city, coordinates, timezone) come from the open OpenFlights dataset, which is maintained by an independent community of contributors and made available under an Open Database License. We update our snapshot periodically.
Loyalty program details (status tiers, alliance partnerships, currency names) are compiled from the airlines' own published terms and conditions and from years of accumulated industry knowledge. Programs change frequently, so always confirm details on the airline's official site before booking. This loyalty/alliance content is compiled editorially, not matched against an open dataset, and was not touched or re-verified by the 2026-08-29 data enrichment described below.
2026-08-29 data enrichment: what changed and how
On 2026-08-29 we enriched the existing 450 airport pages and 349 airline pages in place with additional fields pulled from two open datasets. No new pages were created for this update (other than this rewritten page and a new Contact page); no airport or airline records were added, removed, merged, or renamed.
Source 1: OurAirports (airports + runways)
- Source: ourairports.com/data — files
airports.csvandrunways.csv, retrieved directly from davidmegginson.github.io/ourairports-data (OurAirports' own GitHub mirror). - License: Public Domain, per OurAirports' own terms-of-use page ("All data is released to the Public Domain, and comes with no guarantee of accuracy or fitness for use.").
- Fetched: 2026-08-29. Dataset last-modified (per source): 2026-08-29.
airports.csvwas 12,711,520 bytes / 85,986 rows;runways.csvwas 3,962,127 bytes / 48,201 rows (sha256 prefixes 0fb7efcaee151d4c… and 225d1511a0f5b413… respectively, recorded at fetch time). - Join method: exact string match — each of our 450 airport records was matched to a single OurAirports row by its ICAO code first; if the ICAO code did not resolve to exactly one OurAirports row, the IATA code was tried instead. Matches were only accepted when the code mapped to exactly one OurAirports row; airport names were never used to match or disambiguate.
- Result: 447 of 450 airports matched, 3 unmatched. All 3 unmatched airports are genuine closures where the airport's historical ICAO/IATA codes have been reassigned to a replacement facility or dropped from OurAirports' structured code columns: Siem Reap International Airport (REP/VDSR) — OurAirports marks this facility "closed" and stores the old codes only in its free-text keywords field, having opened a replacement, Siem Reap–Angkor International Airport, under new codes SAI/VDSA; Alameda Naval Air Station (NGZ/KNGZ) — a decommissioned US Navy airfield, likewise "closed" with its old codes only in keywords; and an "Aeroclube Airport" in Nova Iguaçu, Brazil (QNV/SDNY) — also marked "closed" with SDNY appearing only in keywords. In all three cases the codes exist somewhere in OurAirports' free-text notes but not in its structured icao_code/iata_code columns, so a codes-only exact join correctly leaves them unmatched rather than guessing.
- Fields added (only where OurAirports had a non-blank value; blank source values were left out, never guessed): airport type (e.g. "Large airport"), elevation in feet, continent code, scheduled-service flag, official website link, Wikipedia link, and a runway table (identifier, length, width, surface code, lighted, open/closed) joined from
runways.csvvia OurAirports' internal airport ID. - Fields deliberately withheld: OurAirports'
municipality,gps_code, andlocal_codecolumns were not added because they duplicate the city/IATA/ICAO fields already on these pages. Runway surface codes (e.g. "ASP", "GRVL") and the continent code are shown exactly as OurAirports stores them, not expanded into full words, because we did not fetch a verified code dictionary from OurAirports' own pages this session — showing the bare source code was judged safer than guessing an expansion.
Source 2: OpenFlights (airline alias & operating status)
- Source: openflights.org/data — file
airlines.dat, retrieved from github.com/jpatokal/openflights. - License: Open Database License (ODbL) 1.0, with individual contents under the Database Contents License (DbCL) 1.0. Per OpenFlights' own licensing page, use requires that you both acknowledge the source and license any derived works you publish under a free license as well. Attribution: the alias and operating-status facts on every enriched airline page are credited to OpenFlights with a link to its data page, on the page itself. Share-alike: those OpenFlights-derived facts are, per this same license, made available for reuse under the same ODbL 1.0 / DbCL 1.0 terms — see the notice on each enriched airline page.
- Fetched: 2026-08-29.
airlines.datwas 396,896 bytes / 6,162 rows (sha256 prefix 39be1a432e8b04eb…, recorded at fetch time). OpenFlights does not publish a per-file last-modified date on its data page, so we cite the fetch date rather than an unverifiable "as of" date. - Join method: exact string match — each of our 349 airline records was matched to a single OpenFlights row by its ICAO code first; if that did not resolve to exactly one OpenFlights row, the IATA code was tried instead. Matches were only accepted when the code mapped to exactly one OpenFlights row; airline names were never used to match or disambiguate, because 2-letter IATA codes are routinely reused by unrelated airlines across countries and eras.
- Result: 325 of 349 airlines matched, 24 unmatched. Every one of the 24 unmatched airlines failed because its IATA code (and, where present, its ICAO code) maps to two or three distinct rows in OpenFlights' current
airlines.dat— a genuine code-collision in the source, not a missing record. Examples: IATA "JL"/ICAO "JAL" maps to both a "Japan Airlines" row and a separate "Japan Airlines Domestic" row, both marked active; ICAO "ABL" maps to both the historical "Air BC" (Canada, inactive) and the current "Air Busan" (South Korea, active), and Air Busan's own IATA "BX" is separately shared with Norway's "Coast Air"; ICAO "CDN" maps to both "Canadian Airlines" and "Canadian Helicopters", and Canadian Airlines' own IATA "CP" is separately shared with US "Compass Airlines". The remaining 21 unmatched airlines follow the identical pattern of a recycled 2-letter IATA code. Because the anti-fabrication rule for this build forbids resolving such collisions by matching on name, all 24 were left unmatched and untouched rather than guessed. - Fields added (only where OpenFlights had a non-blank value): airline alias (e.g. an alternate trading name) and an operating-status flag ("Active"/"Inactive") taken from OpenFlights' own "Active" column. OpenFlights itself documents this field as unreliable for airlines that stopped flying long ago but never had their code reassigned — we display it as OpenFlights records it, not as a verified operational claim.
- Fields deliberately withheld: no other airline fields were available in
airlines.datbeyond name/IATA/ICAO/callsign/country (already present on these pages before this update) and alias/active (added now).
What was left alone
The 76 loyalty programs and 3 alliances on this site have no equivalent open dataset, were not touched, enriched, or re-verified by this update, and this update's sourced airport/airline fields should not be read as validating any loyalty-program or alliance claim elsewhere on the site. The 3 airport pages and 24 airline pages listed above were likewise left completely unchanged because they could not be matched to a source record by code alone.
Editorial policy
MileMapper Guide is independently operated and not affiliated with any airline, alliance, or credit-card issuer. We do not accept payment for editorial coverage.
Corrections
Spotted something out of date? We'd love to hear about it. Reach us at contact@milemapperguide.com or via the Contact page.