# FAA Aircraft Registry Scraper - N-Number, Owner & Mode S (`scrapersdelight/faa-aircraft-registry-scraper`) Actor

Look up any US aircraft by N-number, serial or Mode S hex, or search the FAA registry by owner, make, model, state, type, year and registration date. Owner name and address, engine, seats, status, expiry. Also deregistered aircraft, reserved N-numbers, dealers, liens. Monitor new registrations.

- **URL**: https://apify.com/scrapersdelight/faa-aircraft-registry-scraper.md
- **Developed by:** [Scrapers Delight](https://apify.com/scrapersdelight) (community)
- **Categories:** Lead generation, Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.80 / 1,000 faa registry records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does FAA Aircraft Registry Scraper do?

**FAA Aircraft Registry Scraper** reads the official US civil aircraft register published by the FAA (registry.faa.gov) and turns it into clean rows: one row per aircraft with its N-number, serial, make, model, year, engine, seats, registered owner name and mailing address, certificate and expiration dates, status and Mode S transponder code. Look up a list of tail numbers, or search all 317,551 records by owner, make, model, state, type, year and registration date.

Also known as: FAA N-number lookup, tail number lookup, aircraft owner lookup, FAA registry API.

- **N-number, serial and Mode S lookups:** paste tail numbers (`N172SP`), serial numbers or ICAO hex codes (`A835AF`) and get the full FAA record back.
- **Search the whole registry:** filter by owner name, manufacturer, model, owner state, city, ZIP, county, country, owner type, aircraft type, engine type, year, seats, status and date ranges.
- **New registrations and ownership changes:** `certIssuedWithinDays` returns aircraft whose registration certificate was issued in the last N days (413 aircraft in the 7 days to the 2026-10-13 file).
- **Five FAA files in one actor:** registered aircraft, deregistered aircraft (with export country), reserved N-numbers, aircraft dealer certificates and recorded documents (bills of sale, liens, releases).
- **Monitoring with a changes list:** a scheduled run returns only new records, or new plus changed records with each changed field shown as `from` and `to`.
- **Every FAA code decoded:** owner type, aircraft and engine type, status, region, airworthiness class and approved operations, with labels taken from the FAA's own file layout document.
- **No login, no API key, no browser.** Pay only for the records delivered.

### What data can you get from the FAA aircraft registry?

<table>
<tr><td>✈️ N-number (<code>nNumber</code>)</td><td>🔢 Serial number</td><td>📡 Mode S code, hex + octal</td></tr>
<tr><td>🏭 Manufacturer and model</td><td>🧰 Kit maker and kit model</td><td>📅 Year manufactured and age</td></tr>
<tr><td>🛩️ Aircraft type and category</td><td>⚙️ Engine maker, model, type</td><td>🐎 Horsepower or pounds of thrust</td></tr>
<tr><td>💺 Seats and engines</td><td>⚖️ Weight class, cruise speed</td><td>📜 Type certificate sheet and holder</td></tr>
<tr><td>👤 Registered owner name</td><td>👥 Co-owner names</td><td>🏢 Owner type, business owner flag</td></tr>
<tr><td>📍 Street, city, state, ZIP</td><td>🗺️ County, country, FAA region</td><td>🔒 Owner withheld flag</td></tr>
<tr><td>🗓️ Certificate issue date</td><td>⏳ Expiration date, days to expiry</td><td>🛠️ Last FAA action date</td></tr>
<tr><td>✅ Status code and label</td><td>🎫 Airworthiness class and operations</td><td>🔗 FAA inquiry page link</td></tr>
</table>

On the 2026-10-13 FAA file, among the 312,136 validly registered aircraft, 98.8% have an owner name and full mailing address, 100% have make, model, seats, engines and a Mode S code, 85.3% name the engine model, 78% publish a year of manufacture, and 49.4% are owned by a business (LLC, corporation, partnership).

### How to scrape the FAA aircraft registry with FAA Aircraft Registry Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) - it comes with monthly free credit.
2. Open [FAA Aircraft Registry Scraper](https://apify.com/scrapersdelight/faa-aircraft-registry-scraper) and click **Try for free**.
3. Paste tail numbers into **N-numbers**, or leave it empty and pick filters such as **Owner states** and **Aircraft types**.
4. Set **Max results** and click **Start**.
5. Open the **Output** tab and export the rows as JSON, CSV or Excel, or schedule the run.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | |
| `dataset` | Select | `registered` (default), `deregistered`, `reserved`, `dealers` or `documents`. |
| `nNumbers` | List | Tail numbers with or without the N: `N172SP`, `628TS`. Add your own reference after a bar (`N628TS|fleet-7`) and it comes back as `externalId`. |
| `serialNumbers` | List | Exact manufacturer serial numbers. |
| `modeSCodesHex` | List | ICAO 24-bit hex codes, e.g. `A835AF`. |
| **🎯 Filters** (all optional, combined with AND) | | |
| `ownerNameContains` | List | Owner or co-owner name contains any of these, e.g. `AVIATION`. |
| `manufacturers`, `models` | List | Make / model (or kit make / model) contains, e.g. `CESSNA`, `SR22`. |
| `states`, `cities`, `zipCodePrefixes`, `countyCodes`, `countries` | List | Owner mailing location. |
| `registrantTypes`, `businessOwnersOnly` | Select / Boolean | Individual, partnership, corporation, co-owned, government, LLC, non-citizen corporation... |
| `aircraftTypes`, `engineTypes` | Select | Fixed wing single/multi engine, rotorcraft, glider...; reciprocating, turbo-prop, turbo-jet, turbo-fan, electric... |
| `yearMin`, `yearMax`, `minSeats`, `maxSeats` | Integer | Year built and seat range. |
| `registrationStatus` | Select | `valid` (default: V, M, T), `any`, `notValid`. Applies to searches; lookups return any status. |
| `statusCodes` | List | Exact FAA status codes, e.g. `R`, `7`, `13`. |
| `certIssuedWithinDays`, `certIssuedFrom`, `certIssuedTo` | Integer / Date | Registration certificate issued in this window. |
| `lastActionFrom`, `lastActionTo` | Date | Last FAA action on the record. |
| `expiresBefore`, `excludeExpired` | Date / Boolean | Registrations due for renewal; drop expired ones. |
| `fractionalOwnersOnly`, `excludeAirlines` | Boolean | Fractional ownership only; drop owners named ...AIRLINES / AIR LINES / AIRWAYS. |
| `serialNumberContains` | Text | Part of a serial number. |
| `cancelledWithinDays`, `cancelledFrom`, `cancelledTo` | Integer / Date | Deregistered dataset: cancellation window. |
| `documentTypes` | Select | Documents dataset: bill of sale, lien, release, repossession, court... |
| **➕ Extra data** | | |
| `includeLiveDetails` | Boolean | Also read each aircraft's live FAA inquiry page: temporary certificates, pending N-number change, dealer flag, owner county name. Default `false`. |
| `includeRawRecord` | Boolean | Add a `raw` object with every FAA column as published. Default `false`. |
| **🔁 Monitoring** | | |
| `monitorMode` | Select | `off` (default), `new` (records this monitor never delivered), `changes` (new plus changed, with a `changes` list). |
| `monitorName`, `monitorFirstRun`, `resetMonitor` | Text / Select / Boolean | Name the memory; `remember` = the first run stores today's records without delivering them. |
| **📦 Output** | | |
| `maxResults` | Integer | Default `100`. `0` = no cap. Searches stop reading as soon as the cap is filled. |
| `sortBy` | Select | FAA order (fastest), newest certificate, latest action, soonest expiry, latest cancellation, latest receipt. A sorted run returns up to 50,000 rows. |
| **⚙️ Advanced** | | |
| `databaseUrl` | Text | The FAA zip; leave as is. |
| `proxyConfiguration` | Proxy | Not needed. The actor downloads directly and, only if the FAA refuses, falls back to a residential proxy and then the Apify Unblocker by itself. A proxy you set is used only as that fallback. |

#### Input JSON

```json
{
  "states": ["FL"],
  "businessOwnersOnly": true,
  "engineTypes": ["4", "5"],
  "maxResults": 100
}
```

#### Look up tail numbers with the N-numbers field

Paste one tail number per line; the `N` is optional and case does not matter. **Do:** `N628TS`, `628ts` · **Don't:** `N-628TS` (dashes are not part of an N-number). Numbers that are not in the current registry are listed in the run summary as not found and are never charged; try `dataset: "deregistered"` or `"reserved"` for them.

#### Use certIssuedWithinDays for new owners

The FAA sets the certificate issue date when it issues a new Certificate of Aircraft Registration: on a first registration and when an aircraft changes owner. Renewals and address changes do not reset it, so `certIssuedWithinDays: 7` returns last week's new registrations and ownership changes.

#### Keep FAA order for fast runs

The FAA file is in N-number order. With `sortBy: "registry"` a search stops reading as soon as `maxResults` is filled; the 20-row default form read 555 rows and finished in about 5 seconds. Any other sort order reads the whole file first.

### ⬆️ Output

Each record is one dataset item. A registered aircraft (some fields left out here; `includeLiveDetails` was on):

```json
{
  "nNumber": "N628TS",
  "serialNumber": "6177",
  "manufacturer": "GULFSTREAM AEROSPACE CORP",
  "model": "GVI (G650ER)",
  "yearManufactured": 2015,
  "engineManufacturer": "ROLLS DEUT",
  "engineModel": "BR700-725A112",
  "engineThrustLbs": 14975,
  "numberOfSeats": 22,
  "valueTier": "jet",
  "registrantType": "LLC",
  "ownerName": "FALCON LANDING LLC",
  "fullAddress": "1 ROCKET RD, HAWTHORNE, CA 90250-6844",
  "certificateIssueDate": "2016-03-31",
  "expirationDate": "2029-03-31",
  "airworthinessClass": "Standard",
  "approvedOperations": ["Transport"],
  "status": "Valid Registration",
  "modeSCodeHex": "A835AF",
  "temporaryCertificates": [{ "certificateNumber": "T252216", "issueDate": "2025-02-26", "expirationDate": "2025-03-28" }],
  "registryUrl": "https://registry.faa.gov/AircraftInquiry/Search/NNumberResult?nNumberTxt=N628TS",
  "dataAsOf": "2026-10-13"
}
```

#### Fields (registered aircraft)

Fill = share of the 312,136 validly registered aircraft in the 2026-10-13 FAA file that carry a value.

| Field | What it is | Fill |
|---|---|---|
| `nNumber`, `serialNumber` | Tail number and manufacturer serial | 100% |
| `manufacturer`, `model`, `aircraftMfrModelCode` | Make and model from the FAA reference table | 100% |
| `kitManufacturer`, `kitModel` | Kit maker for amateur-built aircraft | 5.4% |
| `yearManufactured`, `ageYears` | Year built, age in years | 78% |
| `aircraftType`, `engineType`, `aircraftCategory` | Decoded type codes (land / sea / amphibian) | 100% |
| `engineManufacturer`, `engineModel` | Engine from the FAA engine table | 85.3% |
| `engineHorsepower` / `engineThrustLbs` | Horsepower (piston, turboprop, turboshaft) or thrust (jets) | 74% / 8% |
| `numberOfEngines`, `numberOfSeats`, `weightClass` | From the FAA aircraft reference table | 100% |
| `cruisingSpeedMph` | Published for some models only | 48.6% |
| `typeCertificateDataSheet`, `typeCertificateHolder` | Type certificate | 9.5% |
| `valueTier` | jet, turboprop, turboshaft, piston, electric, unpowered (from engine type) | 100% |
| `registrantType`, `isBusinessOwner` | Owner type; business = partnership, corporation, LLC, non-citizen corp. | 100% / 49.4% true |
| `ownerName`, `street`, `city`, `state`, `zipCode` | Registered owner and mailing address | 98.8% |
| `otherOwnerNames` | Up to five co-owners | 9.9% |
| `ownerWithheld` | Owner asked the FAA to withhold name and address | 1.2% true |
| `countyCode`, `countryCode`, `region` | FAA county code, country, FAA region | 98.6-98.8% |
| `certificateIssueDate`, `expirationDate`, `daysToExpiry` | Registration certificate dates | 98.9% |
| `lastActionDate` | Last FAA action on the record | 100% |
| `airworthinessDate`, `airworthinessClass`, `approvedOperations` | Airworthiness date, class, operations | 86.5% / 89% / 75.5% |
| `statusCode`, `status`, `isValidRegistration` | Status and its FAA label | 100% |
| `fractionalOwner`, `isCorporateJet`, `isNewRegistration` | Flags | 0.4% / 8.5% / 0.9% true |
| `modeSCodeHex`, `modeSCodeOctal`, `uniqueId` | Transponder code, FAA record id | 100% |

Other datasets: deregistered rows add `cancelDate` (96.7%) and `exportCountry` (28.2%, aircraft sold abroad) plus the last owner and physical address; reserved rows carry `reservedBy`, `reservationDate`, `reservationType`, `expirationNoticeDate`, `changedToNNumber` and `purgeDate`; dealer rows carry the certificate number, dealer name, ownership, dates, `isExpired` and other names; document rows carry the document type, collateral, N-number, receipt and processing dates. The FAA withholds the party name on recorded documents (0 of 8,110 rows publish one), so `partyName` is empty.

### How can I use FAA aircraft registry data?

- ✈️ **Aircraft brokers and dealers:** find owners of a make and model in a region, or last week's new owners.
- 🛡️ **Aviation insurers and agents:** reach new owners and owners whose registration is about to expire.
- 🔧 **MROs, avionics shops, FBOs and flight schools:** list the aircraft based near you by type, engine and age.
- 🏦 **Lenders and title companies:** check registration status, owner and recorded liens for an N-number.
- 📡 **Flight-tracking and data teams:** join ADS-B Mode S hex codes to owner, make and model.
- 📊 **Market research:** count fleets by manufacturer, model, year, state or owner type.

### How much does it cost to scrape the FAA aircraft registry?

Pay per result: **$0.0018 per record ($1.80 per 1,000)**, with no start fee. You are charged only for records delivered to your dataset; N-numbers that are not found, rows your filters exclude and records a monitor already delivered cost nothing. Live inquiry details and the raw record are included.

| Records | Cost |
|---|---|
| 20 | $0.036 |
| 100 | $0.18 |
| 1,000 | $1.80 |
| 10,000 | $18.00 |

### Integrations, API, scheduling and MCP

- **Schedules:** run `certIssuedWithinDays: 1` or `monitorMode: "new"` every day after the FAA publishes its nightly file.
- **Webhooks and apps:** send each run to Make, Zapier, n8n, Google Sheets, Slack or your CRM.
- **API:** start runs and read datasets with the Apify API or the [Python](https://apify.com/scrapersdelight/faa-aircraft-registry-scraper/api/python) and [JavaScript](https://apify.com/scrapersdelight/faa-aircraft-registry-scraper/api/javascript) clients.
- **MCP:** AI agents can call the actor through the [Apify MCP server](https://apify.com/scrapersdelight/faa-aircraft-registry-scraper/api/mcp).

### More US register scrapers

- [FMCSA Carrier Scraper](https://apify.com/scrapersdelight/fmcsa-carrier-scraper) - trucking companies by USDOT and MC number with phone and email.
- [NPI Registry Scraper](https://apify.com/scrapersdelight/npi-registry-scraper) - US healthcare providers from the federal NPI register.
- [GSA Auctions Scraper](https://apify.com/scrapersdelight/gsa-auctions-scraper) - federal surplus lots, including aircraft and parts.
- [GovDeals Scraper](https://apify.com/scrapersdelight/govdeals-auction-scraper) - government surplus auctions, vehicles and equipment.
- [All ScrapersDelight actors](https://apify.com/scrapersdelight)

### Limits and empty runs

- The data is the FAA's nightly release; each row carries `dataAsOf` (the file date). `includeLiveDetails` reads the live inquiry page, which the FAA updates each federal working day.
- The registered file holds 317,551 records (312,136 valid), the deregistered file 383,564 rows, reserved 125,365, dealers 12,480 (about 3,780 not expired), documents 8,110 (mostly the last few weeks).
- The FAA publishes no phone numbers or e-mail addresses for owners.
- A run that matches nothing finishes successfully, delivers no rows and charges nothing; the run summary (`RUN_SUMMARY` in the key-value store) lists N-numbers not found and the filters that did not apply to the chosen dataset.
- Reading the whole file (sorted runs, monitors, lookups of high N-numbers) took about 10 seconds in our tests at the default 1 GB memory.

### FAQ

#### How do I look up an aircraft owner by tail number with FAA Aircraft Registry Scraper?

Put the N-numbers in `nNumbers` and start the run. Each existing aircraft comes back with owner name, mailing address, make, model, engine and dates; missing numbers are listed as not found and not charged.

#### Can FAA Aircraft Registry Scraper find newly registered aircraft?

Yes. `certIssuedWithinDays` returns new registrations and ownership changes in the last N days, and `monitorMode: "new"` on a daily schedule returns each one once.

#### How does change monitoring work in FAA Aircraft Registry Scraper?

With `monitorMode: "changes"` the first run delivers every match (or only remembers it with `monitorFirstRun: "remember"`). Later runs deliver new records and records whose owner, address, status, dates or codes changed, with a `changes` list of `field`, `from` and `to`. An N-number from your list that leaves the registry comes back once as a free `removed` row.

#### How many records can FAA Aircraft Registry Scraper return?

All of them: set `maxResults` to `0` for the whole registry (317,551 records on the 2026-10-13 file). Sorted runs return up to 50,000.

#### Does FAA Aircraft Registry Scraper return deregistered and reserved N-numbers?

Yes. Choose `dataset: "deregistered"` for cancelled registrations (with cancel date and export country) or `"reserved"` for reserved N-numbers.

#### Do I need an FAA account, login or API key?

No. The actor reads the FAA's public download and inquiry pages.

#### Why is the owner name empty for some aircraft?

About 1.2% of valid registrations belong to owners who asked the FAA to withhold their name and address. Those rows have `ownerWithheld: true`.

#### Why did my FAA Aircraft Registry Scraper run return no results?

Your filters matched nothing, or the N-numbers are not in the current registry. The run summary lists not-found numbers and any filter that does not apply to the dataset you picked. Nothing is charged.

#### Can I use FAA Aircraft Registry Scraper through the API or an AI agent?

Yes. Use the Apify API, the Python or JavaScript client, or the Apify MCP server. The input is plain JSON like the example above.

#### Is it legal to scrape the FAA aircraft registry?

The actor reads records the FAA publishes for public download. You are responsible for how you use the data, including any personal information in it.

#### Your feedback

Found a bug or need a field or filter? Open an issue on the [Issues tab](https://apify.com/scrapersdelight/faa-aircraft-registry-scraper/issues/open).

# Actor input Schema

## `dataset` (type: `string`):

Which FAA file to read. Registered aircraft is the current registry (317,551 records on the 2026-10-13 file).

## `nNumbers` (type: `array`):

Look up these aircraft. With or without the N, e.g. N172SP, 628TS. Add your own reference after a bar - N628TS|fleet-7 - and it comes back as externalId.

## `serialNumbers` (type: `array`):

Exact manufacturer serial numbers, e.g. 17280001, R172-2842. Case does not matter. On the documents dataset this matches the engine/propeller serial.

## `modeSCodesHex` (type: `array`):

24-bit transponder codes in hex, e.g. A835AF - the code ADS-B flight trackers show. Registered and deregistered datasets.

## `ownerNameContains` (type: `array`):

Registrant or co-owner name contains any of these, e.g. AVIATION, LEASING, NETJETS. On dealers: dealer name; on reserved: reserving party.

## `manufacturers` (type: `array`):

Aircraft maker (or kit maker) contains any of these, e.g. CESSNA, GULFSTREAM, VANS.

## `models` (type: `array`):

Model or kit model contains any of these, e.g. 172, SR22, CITATION, G650.

## `states` (type: `array`):

Two-letter codes of the owner's mailing state, e.g. TX, FL, CA. Empty = every state and country.

## `cities` (type: `array`):

Exact city names as the FAA writes them, e.g. DALLAS, SCOTTSDALE. Combine with states to avoid same-name cities.

## `zipCodePrefixes` (type: `array`):

Start of the owner's ZIP code, e.g. 752 or 85255.

## `countyCodes` (type: `array`):

The FAA's 3-digit county code (the FIPS county number within the state), e.g. 163 for Wayne County MI. Use together with states.

## `countries` (type: `array`):

FAA two-letter country codes of the mailing address, e.g. US. Foreign owners carry their own code (BS, CA, MX...).

## `registrantTypes` (type: `array`):

Owner type. Empty = all.

## `businessOwnersOnly` (type: `boolean`):

Keep only partnerships, corporations, LLCs and non-citizen corporations (no individuals, co-owners or government).

## `aircraftTypes` (type: `array`):

Empty = all.

## `engineTypes` (type: `array`):

Pick Turbo-jet + Turbo-fan for jets, Turbo-prop for turboprops. Empty = all.

## `yearMin` (type: `integer`):

Oldest year of manufacture, e.g. 2010. Aircraft with no published year are excluded when set.

## `yearMax` (type: `integer`):

Newest year of manufacture, e.g. 1979.

## `minSeats` (type: `integer`):

From the FAA make/model reference table, e.g. 6.

## `maxSeats` (type: `integer`):

e.g. 4 for light aircraft only.

## `registrationStatus` (type: `string`):

Searches only. Lookups by N-number, serial or Mode S always return the record whatever its status. On dealers: valid = certificate not expired.

## `statusCodes` (type: `array`):

Exact FAA status codes, e.g. V (valid), R (pending), 7 (sale reported), 13 (expired). Every code is decoded in the status field.

## `certIssuedWithinDays` (type: `integer`):

Certificate issued in the last N days = new registrations plus ownership changes, e.g. 7. Renewals and address changes do not reset this date.

## `certIssuedFrom` (type: `string`):

Earliest certificate issue date, e.g. 2026-01-01.

## `certIssuedTo` (type: `string`):

Latest certificate issue date.

## `lastActionFrom` (type: `string`):

Earliest date of the FAA's last action on the record (any update: renewal, address change...).

## `lastActionTo` (type: `string`):

Latest last-action date.

## `expiresBefore` (type: `string`):

Registrations (or dealer certificates) expiring before this date - owners due to renew, e.g. 2027-03-31.

## `excludeExpired` (type: `boolean`):

Drop registrations / dealer certificates whose expiration date has already passed.

## `fractionalOwnersOnly` (type: `boolean`):

Keep only aircraft the FAA flags as fractionally owned.

## `excludeAirlines` (type: `boolean`):

Drop owners whose name says AIRLINES, AIR LINES or AIRWAYS - useful for private and corporate fleets.

## `serialNumberContains` (type: `string`):

Part of a serial number, e.g. 525B- for a Citation CJ3 range.

## `cancelledWithinDays` (type: `integer`):

Deregistered dataset: cancellations in the last N days, e.g. 30 (exports, sales abroad, destroyed aircraft).

## `cancelledFrom` (type: `string`):

Deregistered dataset: earliest cancellation date.

## `cancelledTo` (type: `string`):

Deregistered dataset: latest cancellation date.

## `documentTypes` (type: `array`):

Documents dataset only. Empty = all.

## `includeLiveDetails` (type: `boolean`):

Registered aircraft: also read each aircraft's live FAA page for temporary certificates, a pending N-number change, the dealer flag and the owner's county name. About 0.2 s per aircraft.

## `includeRawRecord` (type: `boolean`):

Add a raw object with every column exactly as the FAA file publishes it.

## `monitorMode` (type: `string`):

New = only records this monitor has not delivered before. Changes = new records plus records whose owner, address, status or dates changed, with a changes list.

## `monitorName` (type: `string`):

Optional name for this monitor's memory, e.g. texas-jets. Empty = one memory per combination of dataset and filters.

## `monitorFirstRun` (type: `string`):

Deliver = the first run returns every current match. Remember = the first run only records what exists today (nothing delivered or charged); later runs return what is new.

## `resetMonitor` (type: `boolean`):

Forget what this monitor delivered before and start over.

## `maxResults` (type: `integer`):

Cap on records delivered (and charged). 0 = no cap: the whole registry is 317,551 aircraft. Searches stop reading the file as soon as the cap is filled.

## `sortBy` (type: `string`):

FAA order (N-number) is fastest. Any other order reads the whole file first and returns at most 50,000 rows.

## `databaseUrl` (type: `string`):

The FAA Releasable Aircraft Database zip. Leave as is unless the FAA moves it.

## `proxyConfiguration` (type: `object`):

Not needed: the actor downloads directly. If the FAA refuses, it falls back by itself to residential, then the Apify Unblocker, both capped per run. A proxy set here is only that fallback.

## Actor input object example

```json
{
  "dataset": "registered",
  "states": [
    "TX"
  ],
  "businessOwnersOnly": false,
  "aircraftTypes": [
    "5"
  ],
  "registrationStatus": "valid",
  "excludeExpired": false,
  "fractionalOwnersOnly": false,
  "excludeAirlines": false,
  "includeLiveDetails": false,
  "includeRawRecord": false,
  "monitorMode": "off",
  "monitorFirstRun": "deliver",
  "resetMonitor": false,
  "maxResults": 20,
  "sortBy": "registry",
  "databaseUrl": "https://registry.faa.gov/database/ReleasableAircraft.zip",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `items` (type: `string`):

One row per FAA record: a registered aircraft (owner, address, make/model, engine, dates, status, Mode S), a deregistered aircraft, a reserved N-number, a dealer certificate or a recorded document.

## `runSummary` (type: `string`):

RUN_SUMMARY: the FAA file read and its date, bytes downloaded, CRC check, rows read and matched, delivered and charged, N-numbers not found, and the measured fill of every field you received.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "states": [
        "TX"
    ],
    "aircraftTypes": [
        "5"
    ],
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapersdelight/faa-aircraft-registry-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "states": ["TX"],
    "aircraftTypes": ["5"],
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapersdelight/faa-aircraft-registry-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "states": [
    "TX"
  ],
  "aircraftTypes": [
    "5"
  ],
  "maxResults": 20
}' |
apify call scrapersdelight/faa-aircraft-registry-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapersdelight/faa-aircraft-registry-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/a8MkZnjqpU8a17Ha9/builds/Fw7kMMbTZ9XdzXzFZ/openapi.json
