# US FAA Corporate Jet & Aircraft Owner Lead Finder (`afkdigital/newapi22-faa-corporate-aircraft-owners`) Actor

Current FAA Releasable Aircraft Database corporate registrants only. Search aircraft by state, verified FAA manufacturer/model, jet/turboprop type and certificate dates. No personal or historical opt-out owner-data recovery. FAA registrant is not necessarily the operator.

- **URL**: https://apify.com/afkdigital/newapi22-faa-corporate-aircraft-owners.md
- **Developed by:** [AFK Digital](https://apify.com/afkdigital) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$7.00 / 1,000 unique faa corporate aircraft 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

## US FAA Corporate Jet & Aircraft Owner Lead Finder

**NEWAPI22** · Apify Actor `newapi22-faa-corporate-aircraft-owners` · version 1.0

Find **corporate aircraft registrants** in the U.S. Federal Aviation Administration's **current Releasable Aircraft Database Download**, with filters for registrant state, manufacturer/model, aircraft class, engine type and registration-certificate issue date.

This Actor **does not identify the current operator, true beneficial owner, owner residence, passenger, contact person or business use of an aircraft**. FAA registration is not proof that the aircraft is operated by the named registrant. A "jet" filter identifies fixed-wing aircraft with FAA turbojet/turbofan engine codes; it **does not establish that an aircraft is a corporate/business jet**.

### Official data and freshness

- FAA release page: https://www.faa.gov/licenses_certificates/aircraft_certification/aircraft_registry/releasable_aircraft_download
- Daily ZIP: https://registry.faa.gov/database/ReleasableAircraft.zip
- FAA data dictionary (May 8, 2025): https://registry.faa.gov/database/ardata.pdf
- Source tables: `MASTER.txt`, `ACFTREF.txt`, `ENGINE.txt` from the **same ZIP download**. The actor does not use co-owner names, deregistered-owner records, reserved-number registrants or other files to recover hidden identity information.
- `source_file_date` is the date in the current `MASTER.txt` ZIP metadata, which can be one day behind the HTTP Last-Modified date because the FAA refreshes nightly Central Time.
- Full archive SHA-256 and `ETag`/`Last-Modified` are recorded in the `SOURCE_MANIFEST` run key-value record; HTTP conditional GET permits reuse only after an **explicit FAA 304 Not Modified** and a matching stored SHA. Connection errors never trigger old-copy fallback.
- Only official current ZIP values are emitted. Blank/withheld owner names are excluded; missing/withheld address fields produce `null`. No historical identity recovery or personal-data enrichment.

### Corporate-only privacy control

The current version hard-requires `corporateOwnerOnly: true` and FAA `TYPE REGISTRANT` codes **3 (Corporation), 7 (LLC), 8 (Non-citizen corporation)**. Individual (`1`), partnership (`2`), co-owned (`4`, `9`) and government (`5`) records are *never* results. Registrant name must be present and not redacted/withheld; this applies even when the FAA marks its type corporate. Addresses are *FAA registration/mailing addresses, not verified business offices*. This Actor does not infer the address of any registrant.

### Input

| Input | Description | Default |
| --- | --- | --- |
| `state` | Two-letter FAA registrant mailing state; optional | Any |
| `manufacturerModel` | Partial manufacturer or model in FAA aircraft reference table | Any |
| `aircraftClass` | `jet`, `turboprop`, or `all` | `jet` |
| `aircraftType` | FAA `TYPE AIRCRAFT` code; `4` single-engine fixed wing, `5` multi-engine fixed wing, etc. | Any |
| `engineType` | FAA `TYPE ENGINE` code; `2` turboprop, `4` turbojet, `5` turbofan | Any |
| `registrationDateFrom`, `registrationDateTo` | Optional inclusive ISO dates `YYYY-MM-DD`; specifically FAA `CERT ISSUE DATE` | Any |
| `corporateOwnerOnly` | Must remain true in v1; never export individuals | `true` |
| `maxResults` | Max unique FAA N-number rows (1–5000) | `20` |
| `costLimitUsd` | Maximum output-event spend, USD (0.007–35); result cap also enforced | `0.14` |
| `timeoutSeconds` | Overall download+processing deadline (30–300 s) | `240` |

Example:

```json
{
  "state": "TX",
  "aircraftClass": "jet",
  "manufacturerModel": "CESSNA",
  "corporateOwnerOnly": true,
  "maxResults": 100,
  "costLimitUsd": 0.70,
  "timeoutSeconds": 240
}
```

### Output

One record per unique public current-release FAA N-number:

- `n_number` — FAA registration N-number.
- `serial_number` — FAA aircraft serial number.
- `aircraft_make_model` — merged from `MASTER.MFR MDL CODE -> ACFTREF.CODE` (full **7-character** key).
- `engine_type` — FAA engine type decoded from MASTER; `ENG MFR MDL -> ENGINE.CODE` (full **5-character** key) is validated.
- `owner_company_name` — **releasable corporate registrant name** only; not necessarily operator.
- `business_address` — current releasable corporate registrant mailing address, `null` if hidden or incomplete.
- `registration_date` — FAA **certificate issue date**, not original acquisition date.
- `expiration_date` — FAA registration certificate expiration date if present.
- `registration_status` — current FAA status code plus known description.
- `source_file_date`, `source_url`, `observed_at` — snapshot lineage.

Apify's default **Dataset** supports JSON and CSV export. The Actor's `RUN_SUMMARY` and `SOURCE_MANIFEST` keys provide counts, timestamps, SHA-256 and source metadata. Output is not contact-enriched; no emails, phone numbers, personal/home addresses, operator inference or individual data.

### Business model

**Pay per event (PPE), synthetic `apify-default-dataset-item` at $0.007 per result**, equivalent to **$7 per 1,000 unique aircraft records**. Configure *only* this item event in the Actor's Apify monetization settings, with no additional paid start event, to meet the exact target; no manual per-row charging in source. The actor also enforces `costLimitUsd` before export and honors platform max-charge limits. Apify commission is 20%; **gross $7 / 1000 is not seller net**. Seller net = $5.60 less compute/storage/platform costs on qualified paid-user runs. Check live profitability after cloud runs.

### Safety and reliability

- HTTPS-only official source, streamed GET with 15 s connect / max 120 s read timeout, 150 MB download ceiling, atomic ZIP replacement and SHA-256 provenance.
- The current download is required. On errors, actor fails closed rather than reusing possibly re-redacted information.
- Python `zipfile` + `csv` streams the ~200 MB MASTER entry with bounded memory; references are small dictionaries.
- Strict required-header checks and malformed-row handling; unmatched reference records are skipped, not guessed. In jet/turboprop filtering, the aircraft AND its engine model must both be verifiable and consistent across the current FAA MASTER, ACFTREF and ENGINE tables. FAA class codes without a matching motor reference are excluded (conservative protection against source misclassification).
- Current-release-only N-number deduplication; the Actor does not compare/deduplicate owners across historical ZIPs.
- Minimal 20-item default intended to complete well under five minutes on Apify. Bigger result requests can take longer and have higher total costs.
- No VPN/proxy circumvention, captcha bypass or third-party personal-data enrichment.

### Development and QA (Netcup)

```bash
cd /opt/NEWAPI/NEWAPI22
python3 -m unittest discover -s tests -v
python3 -m src.local_qa --archive .cache/faa_current.zip \
  --input-json '{"aircraftClass":"jet","maxResults":10,"costLimitUsd":0.07}' \
  --out local-runs/jet.json
python3 -m src.local_qa --archive .cache/faa_current.zip \
  --input-json '{"aircraftClass":"turboprop","maxResults":10,"costLimitUsd":0.07}' \
  --out local-runs/turboprop.json
```

Cloud image: `python:3.12-slim`, `apify` Python SDK and `requests`. No secrets in repository, images or logs. Source ownership and privacy policy apply to any downstream use.

# Actor input Schema

## `state` (type: `string`):

Optional two-letter FAA mailing-state code, e.g. TX. This is NOT an aircraft operating location.

## `manufacturerModel` (type: `string`):

Optional case-insensitive search in validated FAA ACFTREF manufacturer + model.

## `aircraftClass` (type: `string`):

Jet means FAA fixed-wing code 4 or 5 AND engine code 4 or 5; NOT evidence of business-jet use.

## `aircraftType` (type: `string`):

Optional FAA TYPE AIRCRAFT code.

## `engineType` (type: `string`):

Optional FAA TYPE ENGINE code.

## `registrationDateFrom` (type: `string`):

FAA CERT ISSUE DATE (YYYY-MM-DD), not originally acquired date.

## `registrationDateTo` (type: `string`):

FAA CERT ISSUE DATE upper bound inclusive.

## `corporateOwnerOnly` (type: `boolean`):

Required true in v1: FAA registrant types 3 Corporation, 7 LLC, 8 Non-citizen corporation; excludes individuals and co-owned persons.

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

Default intentionally small (<5 min). Billed once per unique N-number.

## `costLimitUsd` (type: `number`):

Actor stops at floor(costLimitUsd / $0.007). Separate Apify per-run spending limit also applies.

## `timeoutSeconds` (type: `integer`):

Timeout covers downloading FAA current archive and scanning; default target < 5 minutes.

## Actor input object example

```json
{
  "aircraftClass": "jet",
  "corporateOwnerOnly": true,
  "maxResults": 20,
  "costLimitUsd": 0.14,
  "timeoutSeconds": 240
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (type: `string`):

No description

## `sourceManifest` (type: `string`):

No description

# 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 = {
    "aircraftClass": "jet",
    "corporateOwnerOnly": true,
    "maxResults": 20,
    "costLimitUsd": 0.14,
    "timeoutSeconds": 240
};

// Run the Actor and wait for it to finish
const run = await client.actor("afkdigital/newapi22-faa-corporate-aircraft-owners").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 = {
    "aircraftClass": "jet",
    "corporateOwnerOnly": True,
    "maxResults": 20,
    "costLimitUsd": 0.14,
    "timeoutSeconds": 240,
}

# Run the Actor and wait for it to finish
run = client.actor("afkdigital/newapi22-faa-corporate-aircraft-owners").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 '{
  "aircraftClass": "jet",
  "corporateOwnerOnly": true,
  "maxResults": 20,
  "costLimitUsd": 0.14,
  "timeoutSeconds": 240
}' |
apify call afkdigital/newapi22-faa-corporate-aircraft-owners --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,afkdigital/newapi22-faa-corporate-aircraft-owners"
        }
    }
}
```

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/ishyRe7KNssfjwp2i/builds/3o62cl9XZUn9iRWnK/openapi.json
