Export filtered FAA aircraft registry data

Preview an exact registry slice with a Free key, then queue a CSV, JSON, or XLSX file on Developer or Business. No local FAA bulk-file pipeline is required.
Filtered exports, not a registry-wide dump

The FAA's official bulk download is free. A managed export helps when your product needs a specific filtered subset, selected fields, a repeatable query and a bounded downloadable file. The API does not provide unrestricted registry enumeration.

1. Preview the filtered query on Free

GET https://api.grizzlybulls.com/v1/aircraft/query returns up to ten current records whose released registrantState is FL. That field is the registrant's reported state, not necessarily the aircraft's physical location. A reviewed filter is required; this is not an unfiltered registry walk.

curl --fail-with-body -sS -G \
  -H "Authorization: Bearer $GRIZZLY_BULLS_API_KEY" \
  --data-urlencode "filter=registrantState:equals:FL" \
  --data-urlencode "columns=nNumber,manufacturer,model,registrantState" \
  --data-urlencode "sort=nNumber:asc" \
  --data-urlencode "limit=10" \
  "https://api.grizzlybulls.com/v1/aircraft/query"

Free preview requests consume ordinary monthly API quota. See GET https://api.grizzlybulls.com/v1/aircraft/columns for supported filter, sort and projection fields, or start with the exact N-number lookup guide.

2. Queue the CSV export on a paid plan

POST https://api.grizzlybulls.com/v1/aircraft/exports accepts a format and exactly one registry-query definition or saved-report ID. This request uses the same filter, columns and sort as the Free preview. The HTTP 202 response contains data.exportId and a queued job record, not the finished file. The endpoint also accepts bounded observed change-feed definitions.

curl --fail-with-body -sS -X POST \
  -H "Authorization: Bearer $GRIZZLY_BULLS_API_KEY" \
  -H "Content-Type: application/json" \
  --data @- \
  "https://api.grizzlybulls.com/v1/aircraft/exports" <<'JSON'
{
  "format": "csv",
  "definition": {
    "kind": "registry_query",
    "query": {
      "filters": [
        {
          "column": "registrantState",
          "operator": "equals",
          "values": [
            "FL"
          ]
        }
      ],
      "columns": [
        "nNumber",
        "manufacturer",
        "model",
        "registrantState"
      ],
      "sort": {
        "column": "nNumber",
        "direction": "asc"
      }
    }
  }
}
JSON

Free includes no export runs or saved reports. Developer begins at $49/month; Business at $199/month. Keep the same Grizzly Bulls API key when upgrading.

3. Poll status, then download once complete

Replace the placeholder with the data.exportId returned by the create request. Poll with bounded retries until data.status is completed. Handle queued, running, failed and expired without repeatedly creating new jobs, which may consume your monthly export allowance.

Inspect export status
export AIRCRAFT_EXPORT_ID="aex_REPLACE_WITH_RETURNED_ID"
curl --fail-with-body -sS \
  -H "Authorization: Bearer $GRIZZLY_BULLS_API_KEY" \
  "https://api.grizzlybulls.com/v1/aircraft/exports/$AIRCRAFT_EXPORT_ID"
Download after completion
curl --fail-with-body -sS -o aircraft-florida.csv \
  -H "Authorization: Bearer $GRIZZLY_BULLS_API_KEY" \
  "https://api.grizzlybulls.com/v1/aircraft/exports/$AIRCRAFT_EXPORT_ID/download"

Export files expire after the plan retention window. The download handler verifies the retained file's size and checksum before serving it; expired files are not available through their old IDs.

Exact plan limits

Developer · $49/month

100 runs/month, 5,000 rows, 16 MiB maximum and 24 hours retention.

Business · $199/month

1,000 runs/month, 25,000 rows, 64 MiB maximum and 72 hours retention.

Need recurring updates instead of a one-off file? The observed registry changes and webhooks guide covers the next step. Changes and exports describe accepted FAA observations, not complete historical coverage or confirmed legal ownership transfers.