# OurAirports Global Airport Database Scraper (`parseforge/ourairports-scraper`) Actor

Export the OurAirports community-maintained database of 79,000+ airports, heliports, and airfields worldwide. Filter by type, country, region, scheduled service, or bounding box. Pull ICAO and IATA codes, coordinates, elevation, runway info, and frequencies.

- **URL**: https://apify.com/parseforge/ourairports-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Other, Travel, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.49 / 1,000 result items

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## ✈️ OurAirports Global Airport Database Scraper

> 🚀 **Export the global airport dataset in seconds.** Filter **85,000+ airports, heliports, and airfields** by country, type, bounding box, or scheduled service. No API key, no registration, no manual CSV wrangling.

> 🕒 **Last updated:** 2026-04-16 · **📊 20 fields** per record · **✈️ 85,000+ airports** · **🌍 247 countries** · **🛬 7 airport types**

The **OurAirports Scraper** exports the community-maintained global aviation catalog and returns **20 fields per record**, including ICAO, IATA, GPS, and local codes, geographic coordinates, elevation, and commercial service status. The underlying dataset is one of the most widely cited open aviation references and has been maintained by a global network of pilots, data providers, and aviation professionals since 2007.

The catalog covers **every continent, 247 ISO country codes, and seven airport classifications**, from major international hubs down to rural private airfields. This Actor makes that data downloadable as CSV, Excel, JSON, or XML in under five minutes. All filters run on the server, so you skip the parser engineering entirely.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Travel-tech teams, GIS engineers, aviation analysts, data scientists, logistics & routing companies, journalists, OSM contributors | IATA/ICAO autocomplete, route planning, bounding-box feeds, code lookups, map layer enrichment, aviation research |

---

### 📋 What the OurAirports Scraper does

Five filtering workflows in a single run:

- 🌍 **Worldwide export.** Every airport, heliport, and airfield on the planet.
- 🏳️ **Country filter.** Restrict to one ISO code like `US`, `GB`, `JP`, `DE`, or `BR`, across 247 countries.
- 🛬 **Type filter.** Large, medium, or small airports, heliports, seaplane bases, balloonports, or closed fields.
- 📐 **Bounding-box filter.** Scope to a custom lat/lon region that can cross borders.
- 🛫 **Scheduled-service filter.** Airports with active scheduled passenger flights only.

Each record includes codes (ICAO, IATA, GPS, local), geography (lat, lon, elevation, continent, region, municipality), classification, and reference links such as the official home page, Wikipedia, and community keywords.

> 💡 **Why it matters:** accurate airport reference data powers flight booking, drone mapping, and logistics routing. Building your own pipeline means writing parsers, handling coordinate edge cases, and refreshing by hand. This Actor skips all of that and keeps your dataset fresh on every run.

---

### 🎬 Full Demo

_🚧 Coming soon: a 3-minute walkthrough showing how to go from sign-up to a downloaded dataset._

---

### ⚙️ Input

<table>
<thead>
<tr><th>Input</th><th>Type</th><th>Default</th><th>Behavior</th></tr>
</thead>
<tbody>
<tr><td><code>maxItems</code></td><td>integer</td><td><code>10</code></td><td>Records to return. Free plan caps at 10, paid plan at 1,000,000.</td></tr>
<tr><td><code>country</code></td><td>string</td><td><code>"US"</code></td><td>ISO 3166-1 alpha-2. Empty string = worldwide.</td></tr>
<tr><td><code>type</code></td><td>string</td><td><code>""</code></td><td>One of 7 airport types. Empty = any.</td></tr>
<tr><td><code>hasScheduledService</code></td><td>boolean</td><td><code>false</code></td><td>When <code>true</code>, returns only airports with active scheduled commercial flights.</td></tr>
<tr><td><code>minLat</code>, <code>maxLat</code></td><td>string (float)</td><td><code>null</code></td><td>South/north bounds of a bounding box.</td></tr>
<tr><td><code>minLon</code>, <code>maxLon</code></td><td>string (float)</td><td><code>null</code></td><td>West/east bounds of a bounding box.</td></tr>
</tbody>
</table>

**Example: 50 largest U.S. airports with scheduled service.**

```json
{
    "maxItems": 50,
    "country": "US",
    "type": "large_airport",
    "hasScheduledService": true
}
````

**Example: every airport in Japan via bounding box.**

```json
{
    "maxItems": 200,
    "minLat": "30",
    "maxLat": "46",
    "minLon": "128",
    "maxLon": "146"
}
```

> ⚠️ **Good to Know:** records for large and medium airports are typically accurate within meters. Small airfields and recently added heliports depend on community contributors and can vary by tens to hundreds of meters. For safety-critical routing, cross-check against an official aeronautical information publication before making operational decisions.

***

### 📊 Output

Each airport record contains **20 fields**. Download the dataset as CSV, Excel, JSON, or XML.

#### 🧾 Schema

| Field | Type | Example |
|---|---|---|
| 🆔 `id` | string | `"6523"` |
| 🏷️ `ident` | string | `"KJFK"` |
| ✈️ `type` | string | `"large_airport"` |
| 🏢 `name` | string | `"John F Kennedy International Airport"` |
| 📍 `latitude` | number | `40.639801` |
| 📍 `longitude` | number | `-73.7789` |
| ⛰️ `elevationFt` | number | null | `13` |
| 🌎 `continent` | string | `"NA"` |
| 🏳️ `isoCountry` | string | `"US"` |
| 🗺️ `isoRegion` | string | `"US-NY"` |
| 🏙️ `municipality` | string | `"New York"` |
| 🛫 `scheduledService` | string | `"yes"` |
| 🛂 `icaoCode` | string | null | `"KJFK"` |
| 🎫 `iataCode` | string | null | `"JFK"` |
| 🛰️ `gpsCode` | string | null | `"KJFK"` |
| 🏷️ `localCode` | string | null | `"JFK"` |
| 🔗 `homeLink` | string | null | `"https://..."` |
| 📖 `wikipediaLink` | string | null | `"https://en.wikipedia.org/..."` |
| 🏷️ `keywords` | string | null | `"NYC, IDL, Idlewild"` |
| 🕒 `scrapedAt` | ISO 8601 | `"2026-04-15T00:00:00.000Z"` |

#### 📦 Sample records

<details>
<summary><strong>✈️ Large international airport: John F. Kennedy International (KJFK)</strong></summary>

```json
{
    "id": "6523",
    "ident": "KJFK",
    "type": "large_airport",
    "name": "John F Kennedy International Airport",
    "latitude": 40.639801,
    "longitude": -73.7789,
    "elevationFt": 13,
    "continent": "NA",
    "isoCountry": "US",
    "isoRegion": "US-NY",
    "municipality": "New York",
    "scheduledService": "yes",
    "icaoCode": "KJFK",
    "iataCode": "JFK",
    "gpsCode": "KJFK",
    "localCode": "JFK",
    "homeLink": "https://www.panynj.gov/airports/en/jfk.html",
    "wikipediaLink": "https://en.wikipedia.org/wiki/John_F._Kennedy_International_Airport",
    "keywords": "NYC, IDL, Idlewild, Anderson",
    "scrapedAt": "2026-04-15T00:00:00.000Z"
}
```

</details>

<details>
<summary><strong>🚁 Urban heliport: Downtown Manhattan (KJRB)</strong></summary>

```json
{
    "id": "26485",
    "ident": "KJRB",
    "type": "heliport",
    "name": "Downtown Manhattan/Wall St Heliport",
    "latitude": 40.701214,
    "longitude": -74.009003,
    "elevationFt": 7,
    "continent": "NA",
    "isoCountry": "US",
    "isoRegion": "US-NY",
    "municipality": "New York",
    "scheduledService": "no",
    "icaoCode": "KJRB",
    "iataCode": "JRB",
    "gpsCode": "KJRB",
    "localCode": "JRB",
    "homeLink": null,
    "wikipediaLink": "https://en.wikipedia.org/wiki/Downtown_Manhattan_Heliport",
    "keywords": null,
    "scrapedAt": "2026-04-15T00:00:00.000Z"
}
```

</details>

<details>
<summary><strong>🛩️ Small rural airfield: Cottle Airpark, Texas</strong></summary>

```json
{
    "id": "317861",
    "ident": "05TA",
    "type": "small_airport",
    "name": "Cottle Airpark",
    "latitude": 29.9894,
    "longitude": -95.5319,
    "elevationFt": 135,
    "continent": "NA",
    "isoCountry": "US",
    "isoRegion": "US-TX",
    "municipality": "Houston",
    "scheduledService": "no",
    "icaoCode": null,
    "iataCode": null,
    "gpsCode": null,
    "localCode": "05TA",
    "homeLink": null,
    "wikipediaLink": null,
    "keywords": null,
    "scrapedAt": "2026-04-15T00:00:00.000Z"
}
```

</details>

***

### ✨ Why choose this Actor

| | Capability |
|---|---|
| 🌍 | **Global coverage.** 85,000+ airports, heliports, seaplane bases, and airfields across 247 ISO country codes. |
| 🎯 | **Multi-dimensional filtering.** Country, type, scheduled-service, and bounding-box filters combine freely in a single run. |
| 🔖 | **Official identifiers.** ICAO, IATA, GPS, and local codes for cross-system joins with airline, weather, and flight-tracking APIs. |
| ⚡ | **Fast.** 10 airports in under 5 seconds, 10,000 records in under a minute. |
| 🌐 | **Trusted community source.** Cited by aviation developers, weather stations, and in-flight entertainment providers worldwide. |
| 🔁 | **Always fresh.** Every run pulls the latest catalog, so the dataset reflects current community contributions. |
| 🚫 | **No authentication.** Works with public aviation data. No login or API key needed. |

> 📊 Accurate airport master data is the foundation of every route, schedule, drone flight plan, and baggage-handling system in modern aviation.

***

### 📈 How it compares to alternatives

| Approach | Cost | Coverage | Refresh | Filters | Setup |
|---|---|---|---|---|---|
| **⭐ OurAirports Scraper** *(this Actor)* | $5 free credit, then pay-per-use | **85,000+** worldwide | **Live per run** | country, type, service, bounding box | ⚡ 2 min |
| Official aeronautical publications | Free | Country-specific, limited | 28-day cycle | Specialized parsing required | 🐢 Days |
| Live flight-tracking APIs | $99+/month | Real-time, flight-level | Streaming | Many | ⏳ Hours |
| Legacy community dumps | Free | Subset, stale | Rarely updated | None | 🕒 Variable |

Pick this Actor when you want broad global coverage, server-side filtering, and no pipeline maintenance.

***

### 🚀 How to use

1. 📝 **Sign up.** [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=vmoqkp) (takes 2 minutes).
2. 🌐 **Open the Actor.** Go to the OurAirports Global Airport Database Scraper page on the Apify Store.
3. 🎯 **Set input.** Pick a country (or leave empty for worldwide), choose an airport type, and set `maxItems`.
4. 🚀 **Run it.** Click **Start** and let the Actor collect your data.
5. 📥 **Download.** Grab your results in the **Dataset** tab as CSV, Excel, JSON, or XML.

> ⏱️ Total time from signup to downloaded dataset: **3-5 minutes.** No coding required.

***

### 💼 Business use cases

<table>
<tr>
<td width="50%" valign="top">

#### ✈️ Travel Tech & Booking

- Airport autocomplete with canonical IATA/ICAO codes
- Local airport directory synced without a parser
- City-to-airport mappings for search and sort
- "Nearest airport" features via lat/lon queries

</td>
<td width="50%" valign="top">

#### 🗺️ GIS, Mapping & OSM

- Global airport layers for Leaflet, Mapbox, Kepler
- Enrich OSM contributions with ICAO/IATA
- Regional airport feeds by bounding box
- Airport-density heatmaps by country

</td>
</tr>
<tr>
<td width="50%" valign="top">

#### 📊 Aviation Analysts & Researchers

- ML training sets with clean coordinates
- Hub density and service benchmarks
- Cross-country coverage comparisons
- Correlations with weather or traffic data

</td>
<td width="50%" valign="top">

#### 🚁 Logistics, Drones & Routing

- Multi-modal graphs with heliports and seaplane bases
- Drone flight-planning with elevation + position
- Airport nodes in supply-chain optimization
- No-fly-zone proximity checks

</td>
</tr>
</table>

***

### 🔌 Automating OurAirports Scraper

Control the scraper programmatically for scheduled runs and pipeline integrations:

- 🟢 **Node.js.** Install the `apify-client` NPM package.
- 🐍 **Python.** Use the `apify-client` PyPI package.
- 📚 See the [Apify API documentation](https://docs.apify.com/api/v2) for full details.

The [Apify Schedules feature](https://docs.apify.com/platform/schedules) lets you trigger this Actor on any cron interval. Hourly, daily, or weekly refreshes keep downstream databases in sync automatically.

***

### 🌟 Beyond business use cases

Data like this powers more than commercial workflows. The same structured records support research, education, civic projects, and personal initiatives.

<table>
<tr>
<td width="50%">

#### 🎓 Research and academia

- Aviation networks and route analyses for academic papers
- Geospatial datasets for GIS coursework and theses
- Reproducible studies with cited, versioned dataset pulls
- Open-data exercises on global infrastructure mapping

</td>
<td width="50%">

#### 🎨 Personal and creative

- Side projects, indie aviation apps, and portfolio demos
- Travel maps, flight-tracking dashboards, and visualizations
- Content research for travel bloggers and creators
- Hobbyist databases for pilots and aviation enthusiasts

</td>
</tr>
<tr>
<td width="50%">

#### 🤝 Non-profit and civic

- Disaster-response logistics with airport access mapping
- Civic transparency around regional airport coverage
- Investigative journalism on aviation infrastructure
- OpenStreetMap and OurAirports community contributions

</td>
<td width="50%">

#### 🧪 Experimentation

- Train airport-classification or routing ML models
- Validate travel-tech product hypotheses with real data
- Prototype agent pipelines that resolve airport codes
- Test dashboard concepts with live aviation feeds

</td>
</tr>
</table>

***

### 🤖 Ask an AI assistant about this scraper

Open a ready-to-send prompt about this ParseForge actor in the AI of your choice:

- 💬 [**ChatGPT**](https://chat.openai.com/?q=How%20do%20I%20use%20the%20OurAirports%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🧠 [**Claude**](https://claude.ai/new?q=How%20do%20I%20use%20the%20OurAirports%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🔍 [**Perplexity**](https://perplexity.ai/search?q=How%20do%20I%20use%20the%20OurAirports%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)
- 🅒 [**Copilot**](https://copilot.microsoft.com/?q=How%20do%20I%20use%20the%20OurAirports%20Scraper%20by%20ParseForge%20on%20Apify%3F%20Show%20me%20input%20examples%2C%20output%20fields%2C%20common%20use%20cases%2C%20and%20how%20to%20integrate%20it%20into%20a%20workflow.)

***

### ❓ Frequently Asked Questions

#### 🧩 How does it work?

Configure your country, type, or bounding-box filters in the input form, click Start, and the Actor applies the filters server-side and emits a clean structured record per airport. No browser automation, no captchas, no setup.

#### 📏 How accurate is the data?

Large and medium airports are typically accurate within meters. Small airfields and recently added heliports depend on community contributors and can vary by tens to hundreds of meters. For safety-critical routing, cross-check against an official aeronautical information publication before making operational decisions.

#### 🔁 How often is the dataset refreshed?

The community catalog is updated continuously. Every run of this Actor fetches the latest data, so your dataset reflects current records as of run time.

#### 🚁 Does it include heliports and private airfields?

Yes. Set the Airport Type filter to `heliport`, `seaplane_base`, or `balloonport`, or leave it empty to include every classification.

#### ⏰ Can I schedule regular runs?

Yes. Use Apify Schedules to run this Actor on any cron interval (hourly, daily, weekly) and keep a downstream database in sync.

#### ⚖️ Is this data legal to use?

OurAirports publishes under a permissive open-data license. Review the downstream terms of your specific use case, but raw airport metadata is generally public.

#### 💼 Can I use this data commercially?

Yes. The underlying airport data is published under an open license that permits commercial use. You are responsible for complying with the license and with any downstream regulatory requirements in your own product.

#### 💳 Do I need a paid Apify plan to use this Actor?

No. The free Apify plan is enough for testing and small runs (10 records per run). A paid plan lifts the limit and gives you access to scheduling, higher concurrency, and larger datasets.

#### 🔁 What happens if a run fails or gets interrupted?

Apify automatically retries transient errors. If a run still fails, you can inspect the log in the Runs tab, fix the input, and re-run. Partial datasets from failed runs are preserved so you never lose progress.

#### 🛬 What if I need runway details?

This Actor returns airport-level records only. For runway length, surface, and heading, reach out via the contact form below to request a companion runway scraper.

#### 🆘 What if I need help?

Our support team is here to help. Contact us through the Apify platform or use the Tally form linked below.

***

### 🔌 Integrate with any app

OurAirports Scraper connects to any cloud service via [Apify integrations](https://apify.com/integrations):

- [**Make**](https://docs.apify.com/platform/integrations/make) - Automate multi-step workflows
- [**Zapier**](https://docs.apify.com/platform/integrations/zapier) - Connect with 5,000+ apps
- [**Slack**](https://docs.apify.com/platform/integrations/slack) - Get run notifications in your channels
- [**Airbyte**](https://docs.apify.com/platform/integrations/airbyte) - Pipe airport data into your warehouse
- [**GitHub**](https://docs.apify.com/platform/integrations/github) - Trigger runs from commits and releases
- [**Google Drive**](https://docs.apify.com/platform/integrations/drive) - Export datasets straight to Sheets

You can also use webhooks to trigger downstream actions when a run finishes. Push fresh airport data into your product backend, or alert your team in Slack.

***

### 🔗 Recommended Actors

- [**✈️ FAA Aircraft Registry Scraper**](https://apify.com/parseforge/faa-aircraft-registry-scraper) - U.S. civil aircraft registrations and owners
- [**🔌 AFDC EV Stations Scraper**](https://apify.com/parseforge/afdc-ev-stations-scraper) - U.S. alternative fuel and EV charging stations
- [**🗺️ Nominatim OSM Scraper**](https://apify.com/parseforge/nominatim-osm-scraper) - Geocode addresses via OpenStreetMap
- [**🏨 Agoda Scraper**](https://apify.com/parseforge/agoda-scraper) - Hotel availability, pricing, and reviews
- [**📈 Indexmundi Scraper**](https://apify.com/parseforge/indexmundi-scraper) - Global demographic and economic indicators

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more reference-data scrapers.

***

**🆘 Need Help?** [**Open our contact form**](https://tally.so/r/BzdKgA) to request a new scraper, propose a custom data project, or report an issue.

***

> **⚠️ Disclaimer:** this Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by OurAirports or any of its contributors. All trademarks mentioned are the property of their respective owners. Only publicly available open airport data is collected.

# Actor input Schema

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `country` (type: `string`):

ISO 3166-1 alpha-2 country code (e.g. US, GB, JP). Leave empty for worldwide.

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

Filter by airport classification.

## `hasScheduledService` (type: `boolean`):

Restrict to airports with scheduled commercial flights.

## `minLat` (type: `string`):

Optional south edge of a bounding box filter.

## `maxLat` (type: `string`):

Optional north edge.

## `minLon` (type: `string`):

Optional west edge.

## `maxLon` (type: `string`):

Optional east edge.

## Actor input object example

```json
{
  "maxItems": 10,
  "country": "US",
  "type": "",
  "hasScheduledService": false
}
```

# Actor output Schema

## `overview` (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 = {
    "maxItems": 10,
    "country": "US"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/ourairports-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 = {
    "maxItems": 10,
    "country": "US",
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/ourairports-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "maxItems": 10,
  "country": "US"
}' |
apify call parseforge/ourairports-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/ourairports-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OurAirports Global Airport Database Scraper",
        "description": "Export the OurAirports community-maintained database of 79,000+ airports, heliports, and airfields worldwide. Filter by type, country, region, scheduled service, or bounding box. Pull ICAO and IATA codes, coordinates, elevation, runway info, and frequencies.",
        "version": "1.0",
        "x-build-id": "zgP271bL2MkXkDAe1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~ourairports-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-ourairports-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/parseforge~ourairports-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-ourairports-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/parseforge~ourairports-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-ourairports-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    },
                    "country": {
                        "title": "Country Code",
                        "type": "string",
                        "description": "ISO 3166-1 alpha-2 country code (e.g. US, GB, JP). Leave empty for worldwide."
                    },
                    "type": {
                        "title": "Airport Type",
                        "enum": [
                            "",
                            "large_airport",
                            "medium_airport",
                            "small_airport",
                            "heliport",
                            "seaplane_base",
                            "balloonport",
                            "closed"
                        ],
                        "type": "string",
                        "description": "Filter by airport classification.",
                        "default": ""
                    },
                    "hasScheduledService": {
                        "title": "Scheduled Commercial Service Only",
                        "type": "boolean",
                        "description": "Restrict to airports with scheduled commercial flights.",
                        "default": false
                    },
                    "minLat": {
                        "title": "Bounding Box Min Latitude",
                        "type": "string",
                        "description": "Optional south edge of a bounding box filter."
                    },
                    "maxLat": {
                        "title": "Bounding Box Max Latitude",
                        "type": "string",
                        "description": "Optional north edge."
                    },
                    "minLon": {
                        "title": "Bounding Box Min Longitude",
                        "type": "string",
                        "description": "Optional west edge."
                    },
                    "maxLon": {
                        "title": "Bounding Box Max Longitude",
                        "type": "string",
                        "description": "Optional east edge."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
