Select a data source, drag fields into the pivot zones, set your date range, and click Run Report to
fetch data from AeroAPI.
Charts:
โ
FLIFO Dashboard
Enter an operator code and date range, select your charts, and click Run FLIFO to generate an airline
performance report.
๐
Flight Inspector
Enter a flight ident (e.g. SWA45) or tail number (e.g. N12345) and a date
range to inspect individual flights. Each flight appears as a clickable tile โ select one to see the
full track map, OOOI timeline, delays, and derived metrics.
โฑ
Fleet Utilization
Enter an operator or airport code and date range to generate fleet utilization data โ flight hours, block
hours, cycles, daily utilization, and performance rates by aircraft type.
๐ฉ
Fleet Info
Enter an operator or airport code and date range to see fleet composition โ unique aircraft (tail numbers)
by type, with operators broken out for airport queries.
๐ซ
Airport Operations
Enter an airport code and date range to analyze operational performance โ completion rates, on-time stats,
taxi times, gate utilization, terminal breakdowns, and fleet mix.
๐ฌ
Surface Ops Analysis
Analyze ground congestion, taxi queue depth, wave patterns, gate occupancy, and fuel burn at any airport.
Filter by operator to isolate specific operations.
Query Mode: "By Airport"
pulls all traffic (arrivals + departures) โ best for cross-traffic analysis. "By Operator" queries operator
flights directly โ provides more complete OOOI timestamps for taxi analysis.
๐ Wiki
Getting Started
The FlightAware Report Builder lets you query AeroAPI using a drag-and-drop pivot table interface. Instead of
writing raw API calls, you pick fields, set filters, and the tool builds and executes the queries for you โ
including automatic pagination and date-range chunking.
Step 1 โ Get an AeroAPI Key
1Go to flightaware.com/aeroapi/portal and sign up.
2Choose a tier โ Personal ($0 free trial with limited calls), Standard, or
Premium.
3Copy your API key from the portal dashboard.
Step 2 โ Start the Proxy Server
Browsers can't call AeroAPI directly (CORS). Open a terminal and run the local proxy server:
cd /path/to/your/folder
python3 server.py
Then open http://localhost:8090 in your browser. The status bar should show PROXY
โ in green.
The server uses only Python stdlib โ no pip installs needed. It serves
aeroapi-report-builder.html and proxies /aeroapi/* requests to FlightAware. Both
files (server.py and aeroapi-report-builder.html) must be in the same folder.
Step 3 โ Connect Your Profile
1Click ๐ค Connect in the top-right header.
2Enter a profile name (e.g. "My AeroAPI Key") and paste your API key.
3Click ๐ Connect & Save. The tool validates against
/airports/KJFK.
4If valid, the status dot turns green and your profile name appears in the
header.
You can save multiple profiles (e.g. personal vs. team keys) and switch between them. Profiles are stored in
localStorage.
Step 4 โ Build a Report
Choose a Data Source โ The dropdown controls which AeroAPI endpoint is called and which
fields appear in the sidebar:
Flights by Ident โ Flights for a tail number or flight ID
(/flights/{ident}). With dates >10 days back, auto-routes to
/history/flights/{ident}.
Airport Flights โ Arrivals/departures at an airport
(/airports/{ident}/flights). With dates >10 days back, auto-routes to the history endpoint.
Operator Flights โ All flights for an airline (/operators/{ident}/flights).
With dates >10 days back, auto-routes to the history endpoint. Great for large pulls like 1 year of AAL
flights.
Airport Info โ Static airport data like elevation, timezone
(/airports/{ident})
Operator Info โ Airline details like callsign, country (/operators/{ident})
When dates push beyond the 10-day recent-data limit, the tool automatically switches to the
/history/ endpoint. A HISTORY
API badge appears in the cost bar to confirm this. History endpoints cost $0.01/page.
The left sidebar automatically filters to show only fields available for the selected source.
Enter an Identifier โ Depends on the source:
Flights: tail number (N108US) or flight ident (SWA45)
Airport: IATA code (DFW, JFK)
Operator: ICAO operator code (AAL, UAL)
Set Date Range โ Optional for flight sources (recent data if omitted, auto-routes to history
if >10 days back). The tool automatically chunks requests into time windows and stitches results together.
Recent endpoints use 7-day windows; history endpoints use 1-day (24hr) windows per AeroAPI constraints. A
30-day historical range = ~30 API calls (one per day).
Depth / Record Limit โ Choose how many pages to fetch, or select "All records" to paginate
until all data is retrieved. "All records" is the default and is needed for large pulls (e.g., 1 year of AAL
flights). Cost is per page regardless of setting.
Drag Fields โ Drag fields from the left sidebar into the four pivot zones:
Filters โ Narrow results client-side (e.g. only B738 aircraft, only flights to KJFK). A
field can be in Filters AND in Rows/Columns simultaneously.
Rows โ Vertical grouping. Each unique combination becomes a row in the output.
Columns โ Horizontal cross-tab. Unique values become column headers.
Both Rows and Columns pull the same data from the API โ the difference is how results display in the pivot
table.
Example: You query historical flights for N108US over 30 days with these fields:
Rows: Aircraft Type
Columns: Origin ICAO
Values: COUNT(Flight Ident)
This produces a matrix where each row is an aircraft type, each column is an origin airport, and each cell is
the count of flights โ like a cross-tab / pivot table.
If both Aircraft Type and Origin ICAO were in Rows instead, you'd get a flat grouped list
with one row per unique combination, which is simpler but less visual.
Tip: Use Rows for "group by" dimensions and Columns for the dimension you want
spread horizontally. Keep Columns to low-cardinality fields (a field with few unique values) to avoid
extremely wide tables.
Reordering & Moving Fields
You can drag chips between zones โ e.g. move a field from Rows to Columns without removing it first. You can
also drag chips within a zone to reorder them (row order affects grouping priority). The "โ Clear All" button
resets all zones.
Use the โผ All / โถ All buttons to expand or collapse all field groups, and the search bar to find fields
quickly.
Cost Estimation
The action bar shows a real-time cost breakdown before you run:
Calls โ Number of API calls required for your date range. History endpoints use 1-day
windows, so a 60-day range = 60 calls.
Per-page cost โ The AeroAPI price per page for the selected endpoint. History endpoints
cost $0.010/page, recent endpoints $0.005/page.
Min cost โ The minimum cost assuming 1 page per call. Actual cost will be higher if there
is more data (each page holds ~15 records and the tool fetches all pages automatically).
The breakdown reads left to right: [calls] ร $price/pg = $min โ $max
The range shows best-case (1 page per call) to worst-case (40 pages per call,
the AeroAPI pagination limit). After running, the range is replaced with the actual cost in green based on
real pages fetched. A busy operator like AAL over 60 days can easily hit 1,000+ pages โ always check the range
before running large queries.
Test Limit
Use the Test limit input to cap the number of API calls for testing. For example, if your
query would make 365 calls, set test limit to 5 to fetch just the first 5 days of data. Leave blank to fetch
everything.
API Filters
When using Airport Flights or Operator Flights, an API FILTERS bar appears below the source selector. These
filters are applied server-side by AeroAPI before data is returned, which reduces the number of pages
fetched and lowers cost:
Flight Type โ Filter to Airline or General Aviation flights only. Available for Airport
and Operator endpoints.
Airline โ Filter airport results to a specific airline (e.g. AAL for
American, UAL for United). Available for Airport endpoints only.
API filters are the most effective way to reduce cost. If you only need AAL
flights from DFW, setting the Airline filter to AAL means the API returns only matching flights โ saving
potentially hundreds of pages per call.
Aborting a Report
While a report is running, the Run button becomes a red โน Abort button showing live
progress: call number, record count, and running cost (e.g. โน 8/62 pg12 ยท 23,669 recs ยท $19.70). The
cost bar also updates in real-time so you can watch the meter climb. Click Abort to stop โ all data already
fetched is kept and rendered as partial results.
Calculated Fields
The Calculated Fields group in the sidebar provides derived metrics computed automatically
from OOOI times (Out, Off, On, In):
Taxi Out โ Minutes from gate departure to wheels-up (actual_off โ actual_out)
Taxi In โ Minutes from wheels-down to gate arrival (actual_in โ actual_on)
Flight Time โ Minutes airborne, wheels-up to wheels-down (actual_on โ actual_off). Also
available in decimal hours.
Block Time โ Total gate-to-gate time (actual_in โ actual_out). Also available in decimal
hours.
Drag these into Values with SUM to get total flight hours, AVG for average taxi times, etc.
They work with all grouping and filtering โ e.g. SUM of Flight Time (hrs) by Aircraft Type gives fleet
utilization by type.
Date Grouping
When you drag a date/time field (like Actual Out or Scheduled In) into Rows or
Columns, a bucket selector appears on the chip: Raw, Day, Week, Month, Qtr, Year.
Raw โ Full datetime (default, one row per flight)
Day โ Groups by date (2024-01-15)
Week โ ISO week (2024-W03)
Month โ Year-month (2024-01)
Qtr โ Quarter (2024 Q1)
Year โ Year only (2024)
Combined with calculated fields, this enables powerful analyses like: Actual Out bucketed by Month in Rows,
Aircraft Type in Columns, SUM of Flight Time (hrs) in Values โ monthly flight hours by fleet type.
Sorting & Column Filters
Sorting: Click any column header to sort ascending, click again for descending. Works in
Pivot, Raw, and flat table views.
Column Filters (Excel-style): Each column header has a small โผ filter icon. Click it to open
a dropdown showing all unique values in that column with counts. Check/uncheck values to include or exclude
them. Use "Select all" / "Deselect all" for quick toggling, and the search box to find specific values. Active
filters show a yellow โผ icon. Clear all column filters at once from the results info bar.
Column filters stack with the drag-and-drop zone filters โ zone filters apply first (server-side logic), then
column filters narrow the visible rows further.
Checking Usage & Billing
Click ๐ฐ Usage in the header to view your current billing cycle's API usage. This calls
GET /account/usage which is free (no charge). It shows a breakdown by endpoint with query counts
and costs. Data updates every ~10 minutes. For the full dashboard, visit
flightaware.com/commercial/aeroapi/billing/activity/recent.
Viewing Results
After running, results appear in the main area. Use the toolbar to switch between:
Table โ Flat or pivoted table depending on your zone configuration
JSON โ Raw API response data for debugging
โฌ CSV โ Export the current data as a CSV file
Example Workflows
What aircraft types does SWA fly out of Dallas?
Source: Airport Flights โ Identifier: KDAL
Rows: Operator (ICAO) โ Filter: Operator = SWA
Columns: Aircraft Type โ Values: COUNT(Flight Ident)
N108US route history over 30 days:
Source: Flights by Ident โ Identifier: N108US โ Date: 30-day range (auto-routes to history)
Source: Airport Flights โ Identifier: JFK โ Date: 7-day range
Rows: Scheduled Out (Gate) โ Values: COUNT(Flight Ident)
Full year of AAL flights (large pull):
Source: Operator Flights โ Identifier: AAL โ Date: Jan 1 to Dec 31 (auto-routes to history)
Depth: "All records" โ this will auto-chunk into ~365 daily API calls (history endpoints use 1-day
windows) and paginate each fully
Rows: Origin ICAO, Dest ICAO โ Columns: Aircraft Type โ Values: COUNT(Flight Ident)
Use the Raw view + CSV export to get the complete dataset
AeroAPI Pricing Reference
Flights by Ident: $0.005/page (recent) ยท $0.01/page (history)
Airport Flights: $0.01/page
Operator Flights: $0.01/page
Airport Info: $0.005/query
Operator Info: $0.005/query
Account Usage: FREE
Troubleshooting
Status dot stays red โ Make sure python3 server.py is running and you opened
http://localhost:8090 (not the file directly)
"Invalid API key" โ Double-check your key at flightaware.com/aeroapi/portal.
Make sure you copied the full key with no extra spaces.
No results โ Try a known tail number like N108US or a major airport like
KJFK. For historical, make sure the date range includes actual flights.
Run button disabled โ You need: (1) a connected profile, (2) an identifier entered, and
(3) at least one field in Rows, Columns, or Values.
๐ค User Profile
Connect to AeroAPI
Saved Profiles
No saved profiles yet.
Profiles stored in localStorage. API keys
saved as-is โ only use on trusted devices.
{ } API Call Preview
๐ฐ AeroAPI Usage
Click "๐ฐ Usage" to load your current billing data via
GET /account/usage (no charge).
๐ Report Templates
Save Current Report
Saves: data source, identifier, dates, max
pages, and all pivot zone fields.
Saved Templates
No saved templates yet.
Templates stored in localStorage.
๐ฐ Daily Budget
Set a daily spending limit. When the
limit is reached, all API calls stop and a warning is shown. Resets automatically at midnight UTC.
Today's
Spend$0.00
$0$25
โ Non-history airport
endpoints cost ~$0.65/call
FlightAware charges hidden Foresight
prediction fees ($0.06/page) on non-history airport queries (data <10 days old). History endpoints cost
only $0.02/page with no surcharge. Use longer date ranges starting >10 days back to minimize cost.
๐ Data Library
Saved flight data is stored as TSV
files in the ./data/ folder next to server.py. Load any saved dataset to avoid
re-querying the API.
No saved data
files yet. Run a query, then click ๐พ Save Data.
๐
Route Analysis Tool
Enter an Origin and Destination airport, plus date range. Use the Target Airline to cross-compare your
strategy against the rest of the market. Generates competitive scorecards and "What-If" schedule scenario
modeling.
Target Strategy
-
Comp: -
Target Avg Block
-
Taxi: -
Industry Baseline
-
Comp: -
Industry Avg Block
-
Taxi: -
Operator Market Overview (Click
any row to expand flight details)
OPERATOR
FLIGHTS
COMPLETION
ON-TIME (A14)
AVG DELAY
AVG BLOCK Derived
TAXI OUT
TAXI IN
โ Delay Intelligence
Avg Arrival Delay >15 min detected
Flight Details
โ High-Cost Airport Query
Estimated cost (non-history)$0
If all history (>10 days)$0
FlightAware auto-charges
Foresight prediction fees (~$0.60/call) on non-history airport requests (data <10 days old). Move your end
date further back to avoid these charges, or use operator queries instead.