Controller.com Scraper — Aircraft Listings & Price Monitor avatar

Controller.com Scraper — Aircraft Listings & Price Monitor

Pricing

from $2.29 / 1,000 scraped controller.com listings

Go to Apify Store
Controller.com Scraper — Aircraft Listings & Price Monitor

Controller.com Scraper — Aircraft Listings & Price Monitor

Scrape Controller.com aircraft listings for brokers and buyers: asking prices, total time, registration, serials, dealer phones, and images. Monitor new inventory and price changes. Listings or details mode.

Pricing

from $2.29 / 1,000 scraped controller.com listings

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Crawloop Aviation & Sandhills Classifieds — Controller.com aircraft asking prices, total time, registration, dealer phones, and inventory change alerts. Pair with AeroExpo for OEM / MRO catalogs.

Controller.com (aircraft)MachineryTrader (US heavy)TractorHouse (farm)TruckPaper (trucks)AeroExpo (aeronautical catalog)
Controller.com Scraper ◄── you are hereMachineryTrader ScraperTractorHouse ScraperTruckPaper ScraperAeroExpo Scraper

Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by Controller.com, Sandhills Global, or their brands. Data is read from publicly accessible pages only. You are responsible for complying with applicable law and site terms. No warranty on accuracy or availability.

What this Controller.com scraper does

This Controller.com scraper extracts aircraft for-sale, for-lease, and fractional-ownership listings into a clean Apify dataset: asking price, make, model, year, total time, registration, serial number, engine times, dealer phone, location, and images. Built as a Controller.com API alternative for aircraft brokers, buyers’ agents, lessors, appraisers, and aviation data teams who need jets, turboprops, piston aircraft, and helicopters in Python, Node.js, or MCP — export JSON / CSV / Excel without manual browsing.

Run listings for fast catalog pulls (retail cards already include dealer phone and aviation specs) or details for PDP canonical URL, breadcrumbs, and video. Enable monitorMode on an Apify Schedule to track new inventory and price changes per dealer, category, or search.

When to use

  • Broker competitive intelligence — watch a rival AccountCRMID inventory daily
  • Asking-price comps for Citation, King Air, SR22, Robinson, and Gulfstream listings
  • Acquisition shortlists by category, year, total time, seats, state, or registration
  • Outreach lists with published dealer phones (no details mode required for most retail cards)
  • Join used-aircraft asking prices with OEM catalogs from AeroExpo Scraper

When not to use

Aviation + Sandhills workflow

Used aircraft asking prices Catalog / other Sandhills boards
─────────────────────────── ────────────────────────────────
Controller.com Scraper ◄── you are here
│ dealer phones, total time, registration, monitor deltas
AeroExpo Scraper ───────────────► OEM / MRO product catalogs
MachineryTrader Scraper ────────► US heavy equipment
TractorHouse / TruckPaper ──────► farm and commercial trucks

Key features

  • Search URL or filters — paste a search / dealer inventory / category URL, or build one from manufacturer, category, keywords, state, country, condition, seats, registration, and AccountCRMID
  • Two modeslistings (fast SSR cards with phone + specs) and details (canonical URL, video, breadcrumbs)
  • Monitor mode — seed fingerprints, then emit only new / price_change rows; optional Telegram alerts
  • Aviation specs — total time, registration, serial, engine times, seats, flight rules, ADS-B / WAAS / SVT, extra specs preserved
  • Dealer phones on cards — outreach fields without visiting every PDP
  • Cloudflare-readycurl_cffi Chrome TLS; Apify Residential (US) recommended
  • Priced-only filter — skip Call-for-price and zero-price rows
  • Listing typesFor Retail, For Lease, and For Fractional Ownership

Input

FieldTypeDefaultDescription
startUrlsArrayCessna sampleSearch, category, dealer inventory, or detail URLs
searchQueryStringKeywords (make, model, registration, serial)
listingTypeStringFor RetailFor Retail, For Lease, or For Fractional Ownership
manufacturerStringe.g. CESSNA, CIRRUS, BEECHCRAFT (comma-separated)
categoryStringCategory id (3 jets, 8 turboprop, 6 piston single, 7 turbine helicopters)
accountCrmIdStringDealer AccountCRMID inventory watch
state / countryStringLocation filters when building a search URL
conditionStringNew or Used
registrationNumberStringExact N-number / registration lookup
runModeStringlistingslistings or details
pricedOnlyBooleanfalseKeep only rows with a published price
maxItemsInteger100Emit budget (seed run: fingerprint budget)
maxPagesPerUrlInteger10Pages per start URL (~28 listings/page)
monitorModeBooleanfalseDelta tracking via named KV store
monitorStoreNameStringcontroller-com-monitor-stateDistinct name per watch target
proxyConfigurationObjectUS Residential prefillApify proxy settings
{
"searchQuery": "Cirrus SR22",
"listingType": "For Retail",
"runMode": "listings",
"maxItems": 50,
"maxPagesPerUrl": 3,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}
{
"category": "3",
"yearMin": 2015,
"totalTimeMax": 4000,
"pricedOnly": true,
"sort": "priceHighLow",
"maxItems": 100
}
{
"accountCrmId": "8309467",
"runMode": "listings",
"monitorMode": true,
"monitorStoreName": "controller-iams-jets",
"maxItems": 500,
"maxPagesPerUrl": 20
}

With monitorMode: true, the first run seeds fingerprints and writes no dataset rows. Later scheduled runs emit only changeType: "new" or "price_change".

Output

FieldDescription
idListing id
title / make / model / yearAircraft identity
price / currency / priceFormatted / priceOnRequestAsking price when published
totalTime / totalTimeHours / registrationNumber / serialNumberAirframe identity and hours
engine1MakeModel / engine1Time / seats / flightRulesCommon aviation specs
additionalSpecsAny other published spec (winglets, APU, programs, …)
dealerName / dealerPhone / dealerContactSeller contact
accountCrmIdDealer account key for inventory watch URLs
location / city / state / countryAircraft location
images / imageCountPhoto URLs
changeType / previousPrice / monitoredAtMonitor deltas only
{
"id": "258432389",
"title": "2016 CESSNA CITATION LATITUDE",
"make": "CESSNA",
"model": "CITATION LATITUDE",
"year": "2016",
"price": null,
"currency": "USD",
"priceFormatted": "Call for price",
"priceOnRequest": true,
"condition": "Used",
"category": "Jet Aircraft",
"totalTimeHours": 3552,
"serialNumber": "680A-0067",
"registrationNumber": "N518KB",
"engine1MakeModel": "PRATT & WHITNEY PW306D1",
"dealerName": "International Aircraft Marketing & Sales",
"dealerPhone": "(941) 961-4245",
"accountCrmId": "8309467",
"location": "Orlando, Florida",
"url": "https://www.controller.com/listing/for-sale/258432389/2016-cessna-citation-latitude-jet-aircraft"
}

Use cases

  • Aircraft brokers — monitor new and competitor listings by category, price band, or region
  • Market research — track asking prices across manufacturers, years, and aircraft categories
  • Aviation finance & leasing — source retail, lease, and fractional-ownership inventory
  • Aircraft valuation tools — build comparable datasets from published listings
  • Buyer's agents — shortlist aircraft matching budget, hours, seats, and location

Integration examples

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/controller-com-scraper').call({
manufacturer: 'CESSNA',
category: '3',
runMode: 'listings',
maxItems: 40,
pricedOnly: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("crawloop/controller-com-scraper").call(run_input={
"searchQuery": "Cirrus SR22",
"runMode": "listings",
"maxItems": 40,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item.get("priceFormatted"), item.get("dealerPhone"))

cURL

curl "https://api.apify.com/v2/acts/crawloop~controller-com-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"manufacturer\":\"CESSNA\",\"category\":\"3\",\"maxItems\":25,\"runMode\":\"listings\"}"

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store ID crawloop/controller-com-scraper.

Example prompts:

  • "Run Controller.com Scraper for Cessna jets, max 40, priced only, and return title, price, totalTimeHours, registrationNumber, dealerPhone as JSON"
  • "Monitor dealer AccountCRMID 8309467 on Controller.com and list only new or price-changed rows"
  • "Scrape Controller.com listings for Cirrus SR22, then look up avionics catalogs with AeroExpo Scraper"

Suite next step

After used-aircraft asking prices, pull aeronautical product catalogs (avionics, GSE, UAV) with AeroExpo Scraper, or US heavy equipment comps with MachineryTrader Scraper.

FAQ

Is this a Controller.com API?
There is no official public bulk API for most users. This Actor is a structured scrape / API alternative that returns a dataset you can call from Python, Node.js, cURL, or MCP.

Do I need details mode for dealer phones?
Usually no — retail cards already expose dealerPhone, location, total time, and registration. Use details when you need canonical URL, breadcrumbs, or video.

How do I watch one dealer?
Set accountCrmId (from any listing card) or paste a dealer inventory search URL, enable monitorMode, pick a unique monitorStoreName, and schedule the Actor.

Why is price missing on some listings?
Sellers often list "Call for price". Those rows get priceOnRequest: true and no numeric price. Turn on pricedOnly to skip them.

Which proxy should I use?
Apify Residential with apifyProxyCountry: "US" is recommended — the site sits behind Cloudflare.

Can I search by N-number?
Yes — set registrationNumber (exact match) or put the N-number in searchQuery.

Does Controller EMEA use a different catalog?
The .co.uk front is the same Sandhills inventory. Switch baseUrl if you need that host; filters and fields are the same.

ActorRole
AeroExpo ScraperAeronautical product catalogs, specs, PDF datasheets
MachineryTrader ScraperUS Sandhills heavy equipment + dealer monitor
TractorHouse ScraperUS / EU Sandhills farm equipment
TruckPaper ScraperUS commercial trucks and trailers