# Airport Facility Records — US FAA NASR (`nexgensignal/airport-facility-records`) Actor

Keyless, pay-per-record FAA NASR register — one row per US landing facility with location, elevation, ownership, ARTCC, fuel, tower and frequencies. Public-domain; no owner/manager person data.

- **URL**: https://apify.com/nexgensignal/airport-facility-records.md
- **Developed by:** [NexGen Signal](https://apify.com/nexgensignal) (community)
- **Categories:** Business, News, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $33.50 / 1,000 facility records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Airport Facility Records — US FAA NASR

**Keyless. Pay per record. Every US landing facility, cycle by cycle.**

This actor turns the **US FAA's National Airspace System Resources (NASR)** 28-day subscription into clean, per-facility records — the authoritative register of every public and private landing facility in the United States. Each run reads the FAA's keyless bulk subscription file and delivers one row per landing facility: its identifiers, location and elevation, ownership and use, runway-supporting attributes, services, and the frequencies and lighting that describe it. Facility grain, structured for engineering use, in the public domain — and **owner and manager personal contact details are structurally excluded and never emitted.**

### What this is, in one paragraph

NASR is the FAA's master reference for the national airspace: airports, heliports, seaplane bases, gliderports, balloonports, and ultralight fields, published on a 28-day cycle. This actor reads the base landing-facility record for the cycle you choose, filters to the state and facility type you want, and flattens each facility into a single analysis-ready record: identity (site number, location ID, ICAO), geography (state, county, city, coordinates, elevation), classification (facility type, ownership, use), and operational reference data (ARTCC, fuel, repair services, tower, UNICOM/CTAF frequencies, lighting, beacon). Values are exactly as published by the FAA for that cycle. You are billed only for records actually delivered.

### Who buys this and for what job

- **Aviation software and app builders** who need a clean, current airport/heliport reference table keyed by location ID and ICAO, without parsing the FAA's fixed-width subscription format.
- **Logistics, drone, and mobility operators** mapping landing facilities, ownership type, and services near routes and sites.
- **GIS, mapping, and analytics teams** placing facilities by coordinates and elevation and enriching them with ARTCC, chart, and frequency data.
- **Change-tracking and monitoring products** comparing cycle-over-cycle to detect new, deactivated, or reclassified facilities (each record carries its cycle effective date).

### Public-domain data — with a not-for-navigation caveat

Two honesty riders travel on every record. First, **licensing**: FAA NASR data is a **work of the US federal government** — no copyright, **public domain** under 17 U.S.C. §105 — free to reuse with attribution to the FAA. Second, **fitness**: this is facility *reference* data from the 28-day subscription and is **not for navigation, flight planning, or operational or safety-of-life use** — consult official FAA charts, NOTAMs, and the Chart Supplement before any aviation decision. Values are as published for the cycle shown.

### Facility grain — no person data

This actor works at facility grain: one record per landing facility. The underlying NASR base record also carries facility **owner and manager** personal contact fields — names, mailing addresses, and phone numbers, which for private airfields are often those of individuals. **This actor never reads or emits any of them.** The owner/manager name, address, and phone byte-ranges are excluded structurally at parse time (they are not in the field map at all), a person-key guard runs on every record as a backstop, and the acceptance suite feeds a synthetic record carrying planted owner and manager names and phone numbers and asserts none of it can ever appear in output. What you get is the facility, not the person behind it.

### Pricing

| Event | Free plan | Bronze | Silver | Gold / Platinum / Diamond |
|-------|-----------|--------|--------|---------------------------|
| `facility_record` | $0.05 | $0.045 | $0.04 | $0.0335 |

Delivered before charged. Blocked runs and empty results cost nothing.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `cycle` | string | latest | NASR 28-day cycle effective date (YYYY-MM-DD). Blank uses the latest available cycle. |
| `state` | string | — | Optional. Keep only facilities in this US state/territory (full name, e.g. CALIFORNIA, ALASKA). |
| `facilityType` | string | — | Optional. Keep only facilities whose type contains this text (e.g. AIRPORT, HELIPORT, SEAPLANE BASE). |
| `maxRecords` | integer | 500 | Ceiling on records delivered and billed. |

### Output

One JSON object per landing facility. Real example (values as published by the FAA, Aspen-Pitkin County / Sardy Field, 2026-08-06 cycle):

```json
{
  "record_id": "02517.*A",
  "site_number": "02517.*A",
  "facility_type": "AIRPORT",
  "location_id": "ASE",
  "icao_id": "KASE",
  "faa_region": "ANM",
  "state_name": "COLORADO",
  "county_name": "PITKIN",
  "city_name": "ASPEN",
  "facility_name": "ASPEN-PITKIN COUNTY/SARDY FLD",
  "ownership_type": "PU",
  "ownership_type_desc": "Public",
  "facility_use": "PU",
  "facility_use_desc": "Public",
  "arp_latitude": "39-13-18.7620N",
  "arp_longitude": "106-52-05.6400W",
  "elevation_ft": 7837.9,
  "land_area_acres": 573.0,
  "boundary_artcc_id": "ZDV",
  "responsible_artcc_id": "ZDV",
  "activation_date": "03/1949",
  "fuel_types": "100LLA1+",
  "airframe_repair": "MINOR",
  "control_tower": "Y",
  "unicom_freq": "122.950",
  "ctaf": "118.850",
  "beacon_lens_color": "WG",
  "landing_fee": "Y",
  "cycle_effective_date": "2026-08-06",
  "source": "US FAA NASR (National Airspace System Resources)",
  "licence": "US FAA ... public domain (17 U.S.C. §105) ...",
  "disclaimer": "Facility reference data ... NOT for navigation ...",
  "observed_at": "2026-08-21T00:00:00Z"
}
```

An unbilled `RUN_RECEIPT` records the robots check, the cycle and file, the filters, facilities seen and delivered, whether charged equals delivered, and a note that owner/manager person fields are never emitted.

### Field reference

Each record is one landing facility. Identity: `record_id` / `site_number`, `location_id`, `icao_id`, and `facility_type`. Geography: `faa_region`, `state_code`, `state_name`, `county_name`, `county_state`, `city_name`, `arp_latitude`, `arp_longitude`, `elevation_ft`, `magnetic_variation`, `sectional_chart`, `dist_from_cbd_nm`, `dir_from_cbd`, and `land_area_acres`. Classification: `ownership_type`(`_desc`) and `facility_use`(`_desc`). Airspace and reference: `boundary_artcc_id`, `responsible_artcc_id`, `activation_date`, `arff_certification`, and `npias_code`. Services and equipment: `fuel_types`, `airframe_repair`, `powerplant_repair`, `lighting_schedule`, `beacon_schedule`, `control_tower`, `unicom_freq`, `ctaf`, `segmented_circle`, `beacon_lens_color`, and `landing_fee`. Provenance and caveats: `cycle_effective_date`, `traffic_pattern_altitude` (where published), `source`, `source_url`, `licence`, `attribution`, `disclaimer`, and `observed_at`.

### How a run works

A run first re-reads the door host's robots posture from your runtime — the NASR subscription files live under `nfdc.faa.gov/webContent/`, which that host's robots.txt explicitly allows — and stops at the door if that ever changes. It then resolves the current 28-day cycle (or the `cycle` you name) by probing the FAA's cycle grid for the live `APT.zip`, downloads it, and streams the fixed-width file, keeping only the base landing-facility records (one per facility). Each facility is parsed by field position — reading only the facility fields and **never** the owner/manager contact byte-ranges — and delivered **before** it is charged, so a blocked or empty run costs you nothing. Your optional `state` and `facilityType` filters bound the pull, and the actor stops at your `maxRecords` ceiling and records `charge_equals_delivered` in the receipt.

### Facility types and coverage

A NASR cycle covers on the order of 19,000+ US landing facilities, and this actor surfaces the `facility_type` on every row. Types include **AIRPORT**, **HELIPORT**, **SEAPLANE BASE**, **GLIDERPORT**, **BALLOONPORT**, and **ULTRALIGHT** fields, spanning public and private ownership and use. Because each record carries state, county, city, and coordinates, you can scope by geography as well as by type. Pass a single `facilityType` to build a focused feed — say, only heliports — or a `state` to pull one state's facilities for a bounded, low-cost run, or take a whole cycle and group downstream. Each record's `cycle_effective_date` makes cycle-over-cycle change tracking straightforward: pull two cycles and diff by `site_number`.

### Cost guidance

One `facility_record` per delivered facility: cost = facilities delivered × your plan's per-record price. A full cycle is ~19,000+ facilities, so scope with `state` and `facilityType` to keep runs bounded — one state's airports is typically a few hundred to a couple thousand. 1,000 facilities is **$50** (Free) / **$33.50** (Gold).

### Honest limitations

- **Not for navigation.** Reference data only — not for flight planning, navigation, or any operational/safety-of-life use. Use official FAA charts, NOTAMs, and the Chart Supplement.
- **Base facility record.** This is the landing-facility base record; runway-by-runway detail, remarks, and attendance schedules are separate NASR record types not emitted here.
- **Some legacy fields are no longer populated.** Based-aircraft and annual-operations counts that once lived in this file are blank in the current subscription, so they are not emitted (a null-always field is noise, not data).
- **As published, per cycle.** Values are exactly as the FAA distributes them for the cycle shown; this actor reformats, it does not recompute.
- **No person data** — owner/manager names, addresses, and phone numbers are structurally excluded.

### Differentiation

The NexGenData fleet ships an **FAA Airworthiness Directives** product (aircraft safety mandates) and an aviation **flight-tracking** tool (live positions). This actor is a different job on a different FAA dataset: the **NASR landing-facility register** — the static, cycle-published reference of *where the airports, heliports, and other facilities are and what they offer*, not aircraft safety directives and not live flights. Facility reference records ≠ airworthiness mandates ≠ flight tracks; the three catch different buyer searches, and the nearest sibling is named here so buyers pick the right one.

### The NexGen Signal family

Part of the NexGen Signal family of pay-per-record data products:

- [Storm Event Records — US NOAA / NCEI](https://apify.com/nexgensignal/storm-event-records)
- [Natural Hazard Event Records — NASA EONET](https://apify.com/nexgensignal/natural-hazard-event-records)
- [Air Quality Monitor Records — US EPA AQS](https://apify.com/nexgensignal/air-quality-monitor-records)
- [EPA Facility Compliance Records — Envirofacts](https://apify.com/nexgensignal/epa-facility-compliance-records)
- [US Treasury Fiscal Records — Rates & Debt](https://apify.com/nexgensignal/treasury-fiscal-records)

*Source: US FAA National Airspace System Resources (NASR) 28-day subscription. NASR data is a work of the US federal government, no copyright, public domain (17 U.S.C. §105); free to reuse with attribution to the FAA. Reference data only — not for navigation or operational use. Reformatted to facility records; owner/manager person contact fields are structurally excluded and never emitted.*

# Actor input Schema

## `cycle` (type: `string`):

Optional NASR 28-day cycle effective date, YYYY-MM-DD (e.g. 2026-08-06). Leave blank to use the latest available cycle.

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

Optional. Keep only facilities in this US state/territory (full name as FAA uses it, e.g. CALIFORNIA, TEXAS, ALASKA). Case-insensitive.

## `facilityType` (type: `string`):

Optional. Keep only facilities whose type contains this text (e.g. AIRPORT, HELIPORT, SEAPLANE BASE, GLIDERPORT, BALLOONPORT, ULTRALIGHT). Case-insensitive.

## `maxRecords` (type: `integer`):

Maximum records delivered and billed. You are billed only for records delivered.

## Actor input object example

```json
{
  "maxRecords": 500
}
```

# Actor output Schema

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

The delivered FAA NASR airport facility records.

# 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 = {
    "maxRecords": 500
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgensignal/airport-facility-records").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 = { "maxRecords": 500 }

# Run the Actor and wait for it to finish
run = client.actor("nexgensignal/airport-facility-records").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 '{
  "maxRecords": 500
}' |
apify call nexgensignal/airport-facility-records --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nexgensignal/airport-facility-records"
        }
    }
}

```

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/CU5k31GouW11STE2b/builds/Yzr9LoAjLSU2bBagr/openapi.json
