# Trade-A-Plane Scraper (`piotrv1001/trade-a-plane-scraper`) Actor

The Trade-A-Plane Scraper extracts aircraft listings from Trade-A-Plane, capturing year, make, model, price, financing, N-number registration, total/engine time, avionics and equipment, photos, and seller contact details — ideal for aircraft brokers, market analysis, and aviation lead generation.

- **URL**: https://apify.com/piotrv1001/trade-a-plane-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 listings

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

## ✈️ Trade-A-Plane Scraper

Extract **aircraft listings from [Trade-A-Plane](https://www.trade-a-plane.com)** — the largest aviation marketplace — into clean, structured data. The **Trade-A-Plane Scraper** collects prices, full specifications, avionics, registration numbers, photos, and seller contact details from any search you build on the site.

Run it on demand, [schedule](https://docs.apify.com/platform/schedules) recurring exports, or pull results straight into your own systems through the [Apify API](https://docs.apify.com/api/v2) and [integrations](https://apify.com/integrations) (Zapier, Make, Google Sheets, Slack, and more).

### ✨ What does Trade-A-Plane Scraper do?

This Actor turns Trade-A-Plane search and category pages into a downloadable dataset. Just paste one or more search URLs and it does the rest:

- 🛩️ **Full aircraft data** — year, make, model, price, financing estimate, N-number registration, serial number, total time, engine time, number of seats, and condition.
- 🧰 **Rich detail pages** (optional) — complete description, avionics & equipment lists, engines/mods/prop, remarks, annual-due date, and **all listing photos**.
- 📞 **Seller contact** — seller/dealer name, contact person, location, and phone number.
- 🔍 **Any search you can build** — filter by category (Single Engine Piston, Jets, Turboprop, Helicopters, Parts, Real Estate, and more), make, model, or keyword on the site, then paste the URL.
- ⚡ **Automatic pagination** — walks through every results page up to your `maxItems` limit.

### 💡 Why use Trade-A-Plane Scraper?

- **Aircraft brokers & dealers** — monitor competitor inventory, pricing, and days-on-market.
- **Market & investment analysts** — track pricing trends across makes, models, and categories.
- **Financiers & insurers** — pull structured specs and valuations at scale.
- **Lead generation** — build targeted lists of sellers and dealers with contact details.
- **Aviation researchers** — assemble datasets on fleet composition, avionics adoption, and more.

Instead of copy-pasting listings by hand, get every field in JSON, CSV, or Excel in minutes.

### 🛠️ How to use Trade-A-Plane Scraper

1. **Build your search on Trade-A-Plane.** Go to [trade-a-plane.com](https://www.trade-a-plane.com), pick a category and any filters (make, model, etc.), and run the search.
2. **Copy the URL** from your browser's address bar.
3. **Paste it** into the **Search URLs** field of this Actor (you can add several).
4. **Set `Max items`** to control how many listings to collect.
5. *(Optional)* Toggle **Scrape full listing details** on to also open every listing page for complete specs, photos, and contact info.
6. Click **Save & Start**, then download your data from the **Output** tab in JSON, CSV, Excel, or HTML.

### 📥 Input

| Field                | Type    | Description                                                                                 |
| -------------------- | ------- | ------------------------------------------------------------------------------------------- |
| `startUrls`          | array   | One or more Trade-A-Plane search/results URLs to scrape.                                    |
| `maxItems`           | integer | Maximum number of listings to collect (default `50`).                                       |
| `scrapeDetails`      | boolean | Open each listing's detail page for full specs, photos, and contact info (default `false`). |
| `proxyConfiguration` | object  | Optional proxy settings.                                                                    |

Example input:

```json
{
    "startUrls": [
        {
            "url": "https://www.trade-a-plane.com/search?category_level1=Single+Engine+Piston&make=CESSNA&s-type=aircraft"
        }
    ],
    "maxItems": 50,
    "scrapeDetails": true
}
```

### 📤 Output

Each listing is saved as a structured record. You can download the dataset in various formats such as **JSON, HTML, CSV, or Excel**.

Example output item (with `scrapeDetails` enabled):

```json
{
    "listingId": "2454126",
    "url": "https://www.trade-a-plane.com/search?make=CESSNA&model=182T+SKYLANE&listing_id=2454126&s-type=aircraft",
    "title": "2025 CESSNA 182T SKYLANE",
    "year": 2025,
    "make": "CESSNA",
    "model": "182T SKYLANE",
    "category": "Single Engine Piston",
    "price": 775000,
    "priceCurrency": "USD",
    "financingPerMonth": 3559.11,
    "registration": "N32LP",
    "serial": "18283331",
    "totalTime": "28",
    "engineTime": "28 HOURS",
    "condition": "Used",
    "seats": "4",
    "location": { "city": "Hickory", "state": "NC", "country": "USA" },
    "sellerName": "Brinkley Aviation",
    "contactName": "Brent Brinkley",
    "phone": "(828) 448-5708",
    "description": "This beautiful Cessna 182 features the Garmin G1000 NXi Avionics Package...",
    "avionics": "Garmin G1000 NXi\nGFC 700 Autopilot\nADSB In/Out...",
    "enginesModsProp": "Lycoming IO-540-AB1A5\nMcCauley 3 Blade",
    "annualDue": "1/1/2027",
    "images": ["https://dsgiipnwy1jd8.cloudfront.net/..."],
    "scrapedAt": "2026-06-08T07:12:34.387Z"
}
```

#### Data fields

| Field                                                                | Description                              |
| -------------------------------------------------------------------- | ---------------------------------------- |
| `title`, `year`, `make`, `model`                                     | Aircraft identity                        |
| `price`, `priceCurrency`, `financingPerMonth`                        | Asking price and financing estimate      |
| `registration`, `serial`                                             | N-number registration and serial number  |
| `totalTime`, `engineTime`, `condition`, `seats`                      | Key specifications                       |
| `category`, `modelGroup`                                             | Trade-A-Plane classification             |
| `location`                                                           | City, state, country                     |
| `sellerName`, `contactName`, `phone`                                 | Seller / dealer contact                  |
| `description`, `avionics`, `enginesModsProp`, `remarks`, `annualDue` | Full detail-page content *(detail mode)* |
| `images`                                                             | All listing photo URLs *(detail mode)*   |
| `url`, `listingId`, `sellerId`, `scrapedAt`                          | References and metadata                  |

### 💰 Pricing

This Actor uses the **pay-per-event** pricing model — you only pay for the data you actually get:

| Event               | What you get                                            | Price                  |
| ------------------- | ------------------------------------------------------- | ---------------------- |
| **Listing scraped** | One aircraft from the search results (core fields)      | **$0.005** per listing |
| **Detail scraped**  | One full listing page (complete specs, photos, contact) | **$0.015** per listing |

A shallow run of 1,000 listings costs about **$5**; a full-detail run of 1,000 listings costs about **$15**. New Apify accounts include **$5 in free monthly credits**, enough to try the Actor at no cost. Use `maxItems` and the `scrapeDetails` toggle to keep runs within budget.

### 🚀 Tips & advanced options

- **Narrow your searches.** Add `make`/`model` filters on Trade-A-Plane before copying the URL to target exactly the inventory you care about.
- **Start shallow.** Keep `scrapeDetails` off for a fast, cheap overview, then re-run with it on for the listings you want full data on.
- **Multiple searches at once.** Paste several search URLs (e.g. different categories) to combine them into one dataset.
- **Schedule it.** Use Apify [Schedules](https://docs.apify.com/platform/schedules) to track new listings or price changes over time.

### ❓ FAQ & support

**Is scraping Trade-A-Plane legal?**
This Actor collects only publicly available listing information. You are responsible for using the data in compliance with Trade-A-Plane's Terms of Service and applicable laws (including privacy regulations regarding contact data). Do not use scraped personal data for spam or other prohibited purposes.

**Can I get all listings in a category?**
Yes — set `maxItems` high enough and the Actor paginates through the entire results set.

**Some fields are empty for a listing.**
Not every seller fills in every field on Trade-A-Plane. Missing values are simply left out for that listing.

**Found a bug or need a custom field?**
Open an issue on the Actor's **Issues** tab — feedback and custom-solution requests are welcome.

# Actor input Schema

## `startUrls` (type: `array`):

One or more Trade-A-Plane search/results URLs to scrape. Open trade-a-plane.com, apply the filters you want (category, make, model, etc.), copy the resulting URL from your browser, and paste it here. The scraper automatically paginates through all result pages.

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

Maximum number of aircraft listings to scrape across all search URLs. Use this to control run time and cost.

## `scrapeDetails` (type: `boolean`):

When enabled, the scraper opens each listing's detail page to collect full specifications, the complete description, avionics/equipment, all photos, and seller contact details. This is slower and costs more. When disabled, only the data visible on the search-results cards is returned.

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

Proxy settings. Residential proxies are enabled by default and strongly recommended — they are required for reliable results.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.trade-a-plane.com/search?category_level1=Single+Engine+Piston&s-type=aircraft"
    }
  ],
  "maxItems": 50,
  "scrapeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "startUrls": [
        {
            "url": "https://www.trade-a-plane.com/search?category_level1=Single+Engine+Piston&s-type=aircraft"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/trade-a-plane-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 = {
    "startUrls": [{ "url": "https://www.trade-a-plane.com/search?category_level1=Single+Engine+Piston&s-type=aircraft" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/trade-a-plane-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 '{
  "startUrls": [
    {
      "url": "https://www.trade-a-plane.com/search?category_level1=Single+Engine+Piston&s-type=aircraft"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call piotrv1001/trade-a-plane-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/trade-a-plane-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/UoMFF5DqlZuC6wimj/builds/meMxa3vVhsFwCe55S/openapi.json
