FlightTracer
Turn an aircraft tail number, ICAO hex, or ADS-B Exchange link into a flight map, altitude and speed charts and reusable data.
pip install flight-tracer
flight-tracer trace --icao a40442
No date means recent activity. For a historical flight, add --date YYYY-MM-DD.
Example: An LAPD helicopter, N224LA, patrolling on an early Saturday morning.
Start with what you have
| You have | Command |
|---|---|
| ICAO hex | flight-tracer trace --icao a40442 |
| U.S. tail number | flight-tracer trace --n-number N358TV |
| Historical date | flight-tracer trace --icao a40442 --date 2026-09-16 |
| ADS-B Exchange link | flight-tracer trace --url "https://globe.adsbexchange.com/?icao=a9a1ad&showTrace=2020-01-26" |
| Tail number to look up | flight-tracer resolve --n-number N358TV |
Tail-number lookup requires pip install "flight-tracer[faa]". A callsign such as FDX9756 cannot currently be used as an input; first find the aircraft's ICAO hex or tail number for that flight and date.
Common recipes
Fetch a date range and render every leg
flight-tracer trace --n-number N868FD \
--start 2026-09-26 --end 2026-09-27 --leg all
Both dates are included. Each detected leg gets its own folder, plus an overview map. Use --leg 1 for one leg or --leg latest for the most recent detected leg.
Select a time window
flight-tracer trace --icao a9a1ad --date 2020-01-26 \
--after 2020-01-26T09:00:00 --before 2020-01-26T10:00:00 \
--window-timezone America/Los_Angeles --timezone America/Los_Angeles
Bounds are inclusive. Timestamps without an offset default to UTC unless --window-timezone is set. --timezone controls display separately. For older archives, --infer-legs can optionally detect explicit ground stops. See the detailed January 26 case study.
Make a portrait map with local times
flight-tracer trace --icao a40442 --date 2026-09-16 \
--aspect-ratio 9:16 --timezone America/Los_Angeles
Portrait outputs are 1080 × 1920. Local times appear alongside UTC; exported timestamps keep their full precision.
Change the basemap and gap threshold
flight-tracer trace --icao a40442 --date 2026-09-16 \
--background osm --gap-minutes 2
Connections across tracking gaps longer than two minutes are dashed. The default threshold is five minutes. The default basemap is esri-light; see all map styles, including Mapbox with your own token.
Export data without charts
flight-tracer trace --icao a40442 --date 2026-09-16 \
--no-plots --formats csv,geojson --output exports
What you get
A single-leg run writes:
data/a40442_2026-09-16_2026-09-16/
├── map.png # Route, start and last location, dates, attribution
├── altitude.png # Altitude over time
├── speed.png # Ground speed over time
├── trace.csv # Recorded points and decoded fields
├── points.geojson # Point geometries
├── line.geojson # Routes by leg
├── summary.json # Aircraft metadata, times and statistics
└── selection.json # Time bounds, leg selection and ground-filter settings
For several detected legs, the root contains the full data and overview.png; subfolders such as leg1_FDX9756/ contain each leg's data and charts. Interactive runs ask which leg to use; --leg all skips the prompt. Non-interactive runs default to all legs.
Running the same aircraft/date selection again writes to the same folder. Use a different --output directory to keep variants.
Installation and upgrades
Python 3.9 or newer is required. Optional extras add tail-number lookup and automatic timezone lookup:
pip install "flight-tracer[faa,tz]"
flight-tracer --version
flight-tracer trace --help
Quote extras such as [faa,tz] in zsh. To upgrade an existing installation:
pip install --upgrade flight-tracer
For local development, run this from the repository after installing dependencies:
pip install --no-deps -e .
Understand the trace
- Last location means last received position, not a confirmed landing or crash site.
- Dashed segments approximate missing coverage. They do not establish the path flown. Exported route geometries include connections without dash styling.
- Legs use the archive's boundary flags. Older archives may lack them. Opt-in
--infer-legsuses explicit ground stops and labels its results as estimates; otherwise use a time window. Seven-field historical records are supported. - Date Line crossings are handled automatically. Maps wrap around the Pacific where appropriate; exported routes split at ±180°.
- Altitude and speed are raw, uncorrected values. Missing metadata stays empty. Times default to UTC; local time is opt-in.
More examples and reference
| Guide | What you'll find |
|---|---|
| Recipes | Historical links, older archives, ground points, timezones and troubleshooting |
| Map styling | Aspect ratios, basemaps, Mapbox tokens, OSM caching and tracking gaps |
| Python examples | Fetching, selecting time windows, plotting and working with fleets |
| CLI reference | Options, defaults and date precedence |
| Changelog | Release history |
| Backlog | Prioritized feature ideas and maintenance work |
Contributing and releasing
Run checks with python -m pytest tests/. See PUBLISH.md for the release workflow.
Credits and license
Flight data comes from ADS-B Exchange. Consider subscribing or contributing data. FAA tail-number resolution uses hangarbay. Keep the basemap attribution in exported maps.
FlightTracer is released under CC0 1.0.
Metadata
Release files for flight-tracer 0.2.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| flight_tracer-0.2.10.tar.gz | 48.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| flight_tracer-0.2.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 86.3 kB
Release files / flight_tracer-0.2.10.tar.gz
| Download URL | flight_tracer-0.2.10.tar.gz |
|---|---|
| Size | 48.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0982b545ff727fb4660d4ebfab82e64111c5c743b7860bdef7e7ad17a651996d
|
|
BLAKE2b-256 checksum How to use checksums |
bcc9b51115ec75a231671ecd1a6248be5e9a1acff69f3cad8fb86c25171ca301
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / flight_tracer-0.2.10-py3-none-any.whl
| Download URL | flight_tracer-0.2.10-py3-none-any.whl |
|---|---|
| Size | 37.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ef80f1c58f1314e0824ffbee53582cd9d6eb08a8cf534b568564905c2b6e856a
|
|
BLAKE2b-256 checksum How to use checksums |
b62731762ac2436ce35ce9ef2bbf83ef96075cd2d3f2ae29fe5f44add8f6c935
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|