· 14 min read
Controller.com Aircraft For Sale Scraper: 37 Data Fields per Record
Each record carries 37 output fields, including engine hours, airframe time, and pricing, delivered from the live market. This Actor retrieves aircraft listings from the public pages of Controller.com without requiring a login or API key. The search parameters support filtering by aircraft category, location, and condition, letting you capture the exact inventory you need. This tool is for aviation market analysts, aircraft brokers, and appraisers who require asset profiles. It is not for anyone who needs the direct email addresses or phone numbers of sellers, as these contact details are not returned in the dataset.
Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open Controller.com Aircraft For Sale Scraper on Apify and run the prefilled example.
How reliable is Controller.com Aircraft For Sale Scraper in production?
Across the last 30 days of public runs on the Apify platform, Controller.com Aircraft For Sale Scraper recorded 58 runs with the following outcomes.
| Outcome | Runs | Share |
|---|---|---|
| Succeeded | 47 | 81.0% |
| Failed | 11 | 19.0% |
| Aborted by the user | 0 | 0.0% |
| Timed out | 0 | 0.0% |
| Total | 58 | 100.0% |
In the last 30 days, roughly one run in five failed or timed out. That is a 19.0% rate, so you should build automatic retries and error-monitoring alerts around your scheduled tasks. Expect this rate to hold when running unattended.
What does it cost to run Controller.com Aircraft For Sale Scraper?
Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. With 19.0% of runs failing or timing out in the last 30 days, budget for re-running a portion of those batches rather than assuming every run completes.
The primary driver of your run cost is the maxItems setting, which limits how many listings are written to the dataset. To test this Actor's utility before committing your budget, run it with the default maxItems of 30, which caps your result charges at $0.15.
How do you run Controller.com Aircraft For Sale Scraper from the API?
None of its 21 controls is strictly required, so the defaults below produce a valid run on their own. The payload below uses the schema's own prefilled values, so it runs as written once you substitute your API token.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~controller-aircraft-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchQuery":"Cessna","category":"","state":"","condition":"","listingType":"","sortOrder":"","maxItems":30,"proxyConfiguration":{"useApifyProxy":false}}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"searchQuery": "Cessna",
"category": "",
"state": "",
"condition": "",
"listingType": "",
"sortOrder": "",
"maxItems": 30,
"proxyConfiguration": {
"useApifyProxy": False
}
}
run = client.actor("crawlerbros~controller-aircraft-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"searchQuery": "Cessna",
"category": "",
"state": "",
"condition": "",
"listingType": "",
"sortOrder": "",
"maxItems": 30,
"proxyConfiguration": {
"useApifyProxy": false
}
}
const run = await client.actor('crawlerbros~controller-aircraft-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
The synchronous endpoint holds the connection open until the run finishes, which is convenient for small batches and wrong for large ones. For anything long running, start the run asynchronously and poll, or attach a webhook, so a dropped connection does not cost you the results.
Which Controller.com Aircraft For Sale Scraper inputs matter, and which can you skip?
The input schema contains 21 optional controls to refine your query. The category and manufacturer filters are the primary tools for targeting specific aircraft markets. Most users should leave the proxyConfiguration disabled, as Controller.com does not require a proxy from Apify datacenter IPs.
searchQuery(string): Free-text keyword search (make, model, registration #, serial #, etc.). Leave empty to browse by category/filters only. Default:"Cessna".category(string): Restrict results to one aircraft category. Leave as "All aircraft categories" to search across every aircraft type. Default:"".state(string): Restrict results to a US state or Canadian province where the aircraft is located. Default:"".condition(string): Filter by aircraft condition. Default:"".listingType(string): Filter by how the aircraft is being offered. Default:"".sortOrder(string): How results are ordered. Default:"".maxItems(integer): Hard cap on the number of listings returned. Default:30.proxyConfiguration(object): Optional. Controller.com does not require a proxy from Apify datacenter IPs, so this is disabled by default. Enable Apify Proxy (Auto) only if you experience blocking. Default:{"useApifyProxy":false}.manufacturer(string): Filter by one or more manufacturers as listed on Controller.com (e.g.Cessna,Cirrus,Beechcraft,Piper,Gulfstream,Robinson Helicopter). Separate multiple manufacturers with a comma.priceMin(integer): Only include listings priced at or above this amount. Listings marked "Call for price" are always included regardless of this filter.priceMax(integer): Only include listings priced at or below this amount. Listings marked "Call for price" are always included regardless of this filter.yearMin(integer): Only include aircraft manufactured in or after this year.
The other 9 controls, with their defaults, are listed in the input schema on Controller.com Aircraft For Sale Scraper on Apify.
Fixed-choice controls: category accepts 15 values (default ""), including "" (All aircraft categories), 6 (Piston Single Aircraft), 9 (Piston Twin Aircraft), 3 (Jet Aircraft); state accepts 65 values (default ""), including "" (Any location), Alabama, Alaska, Arizona; condition accepts "" (Any condition), New, Used; listingType accepts "" (Any listing type), For Retail (For sale (retail)), For Lease, For Fractional Ownership; sortOrder accepts "" (Best match), priceLowHigh (Price: low to high), priceHighLow (Price: high to low), yearOldNew (Year: oldest first), yearNewOld (Year: newest first).
What does Controller.com Aircraft For Sale Scraper return?
The output records are ideal for building valuation models and monitoring active aircraft inventory, featuring total airframe times and avionics booleans. It conspicuously lacks seller contact information or historical listing archives.
id- Controller.com listing IDtitle- full listing title as published (e.g.2016 CESSNA TTX)year,manufacturer,model- parsed from the titlecategory- aircraft category (e.g.Turboprop Aircraft)price,currency- numeric price in USD, when publishedpriceOnRequest-truewhen the seller lists "Call for Price" instead of a numbercondition-NeworUsed, when Controller.com shows ittotalTimeHours- airframe total time in hoursserialNumber,registrationNumberengine1MakeModel,engine1Time,engine2MakeModel,engine2TimeengineTboHours- engine time-between-overhaul, in hourstotalLandings,seats,flightRulesyearPainted,yearInterior- when the listing reports when the paint/interior was last refreshedadsbEquipped,waasEquipped,svtEquipped- avionics booleans, when shownadditionalSpecs- any other spec the listing publishes that doesn't map to a field above (e.g. winglets, maintenance programs) - never lost, always preserveddescription- seller's summary textcity,region,country- aircraft locationimageUrl- primary listing photoupdatedAt- when the seller last updated the listing (site-local time)listingUrl,sourceUrl- canonical Controller.com listing URLrecordType: "aircraftListing",scrapedAt
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open Controller.com Aircraft For Sale Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Start by setting the category filter to "Jet Aircraft" and maxItems to 100 to review the returned fields.
- Verify that the manufacturer and model fields in the dataset are populated correctly.
- Introduce a price range using priceMin and priceMax to verify that currency and price are returned correctly.
- Apply a state filter like "Florida" to limit geographic scope, then check that city and region match.
- Configure totalTimeMax to 3000 to filter for lower-hour airframes and confirm the totalTimeHours field aligns.
- Specify a manufacturer list like "Cessna, Cirrus" to isolate key brands and check that other makers are excluded.
- Run an end-to-end test with your final parameters, checking that scrapedAt and updatedAt are present in every record.
How do you apply it? Three worked playbooks
These are Controller.com Aircraft For Sale Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Aircraft brokers & dealers
Outcome: Monitor new and competitor listings by category, price band, or region
Configure: Set category to "Jet Aircraft", state to "Florida", and maxItems to 500.
Working method: Execute an initial run to establish a baseline of current listings. Schedule daily runs with sortOrder set to "yearNewOld" and compare the returned listingUrl values against your baseline to isolate new arrivals.
Deliverable: A daily delta CSV file showing new listings and changed price fields for jets located in Florida.
Stop condition: The listingUrl field is null or missing in more than 5% of the returned dataset.
Use case 2: Aviation finance & leasing
Outcome: Source retail, lease, and fractional-ownership inventory
Configure: Set listingType to "For Lease", totalTimeMax to 5000, and maxItems to 1000.
Working method: Run the scraper for lease listings, then run a separate execution with listingType set to "For Fractional Ownership" to divide your inventory tracking. Merge the datasets on the id field to build a comprehensive asset list.
Deliverable: A consolidated inventory spreadsheet tracking lease and fractional aircraft with their totalTimeHours, year, and model specifications.
Stop condition: The listingType field in the output contains values other than the configured filter type.
Use case 3: Aircraft valuation tools
Outcome: Build comparable-sales datasets from real published listings
Configure: Set category to "Piston Single Aircraft", yearMin to 2015, and maxItems to 1000.
Working method: Execute a broad query for the target aircraft category. Extract the manufacturer, model, totalTimeHours, engine1Time, and price fields to establish baseline valuation averages for modern piston singles.
Deliverable: A clean JSON dataset of 2015-or-newer piston single aircraft listings with verified prices and airframe times for comparative analysis.
Stop condition: Critical valuation parameters like totalTimeHours or price are missing on more than 30% of the returned records.
What breaks, and how do you design around it?
- Over the last 30 days, 19.0% of public runs failed and 0.0% timed out. Build retries and alerting around those rates rather than assuming every run completes.
If you observe that seats, yearPainted, or yearInterior are missing, keep in mind that Controller.com only exposes these fields on a subset of summary cards. When the country filter is unavailable, query by the state parameter to target US and Canadian regions.
When should you not use Controller.com Aircraft For Sale Scraper?
Do not use this Actor if you need direct contact details for listing agents or comprehensive historical sales archives, as it only captures public listing cards live. If you require aircraft classified data from other sources, use the GlobalAir Scraper or Barnstormers Aircraft Classifieds Scraper to query those inventories instead. If you are tracking construction equipment or automotive markets, consider using the Heavy Equipment Scraper or GoodCarBadCar Sales Scraper. For broader European regional classifieds, use the Finn.no Scraper or Marktplaats Scraper.
What should you check before trusting the output?
- Check that price is populated as a number or priceOnRequest is true, with no records containing null for both.
- Verify that category matches your input category exactly across all returned records.
- Check that listingUrl starts with a valid Controller.com URL scheme.
- Identify records where totalTimeHours is null and cross-reference with additionalSpecs to ensure data was not missed.
- Ensure the scrapedAt timestamp is within the last 24 hours for daily scheduled runs.
None of this proves a record is correct. It gives a scheduled Controller.com Aircraft For Sale Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
What is the success rate of this Actor?
Telemetry shows that out of 58 runs in the last 30 days, 47 succeeded. This represents an 81.0% success rate, with roughly one run in 5 failing or encountering an issue. 0 runs timed out and 0 runs were aborted by users during this period.
How much does it cost to run this scraper?
On Apify's free plan, results cost $0.005 per result, which is $5.00 per 1,000 results. There are also standard platform usage charges billed by Apify on top of these per-result fees, while the run-start fee is charged every time a run begins.
Can I test this Actor without paying?
Yes. Apify's free plan includes $5.00 of monthly usage with no credit card required. This is enough to cover up to 1,000 results of this Actor, allowing you to run several tests using the default maxItems cap of 30, which costs at most $0.15 in result charges per run.
Why are some specs like seats and year painted missing on some records?
The server-side filters for seats, yearPainted, and yearInterior work reliably to filter listings, but the corresponding output fields only appear in your dataset if the seller's listing card actually displays that spec on the website. Empty fields are omitted entirely.
Is a proxy configuration required for this scraper?
No. Controller.com does not require a proxy from Apify datacenter IPs, so the proxyConfiguration is disabled by default to keep your runs as cost-effective as possible. You should only enable it if you experience unexpected blocks.
Where to go next
When you are ready to run it, open Controller.com Aircraft For Sale Scraper on Apify; the free plan covers up to 1,000 results a month.
Start with the Controller.com Aircraft For Sale Scraper Actor page for the current input schema, pricing tier, and run history.
Other Actors we maintain for related data:
- GlobalAir Scraper: Scrape aircraft-for-sale listings from GlobalAir.com - registration number, total airframe time, make, model, year, engine/avionics/interior/exterior specs, price, location, seller contact, and photos.
- Barnstormers Aircraft Classifieds Scraper: Scrape aircraft and aircraft-parts classified listings from barnstormers.com - search by keyword/make/model, browse by real site category, view recent listings, or pull all ads from one seller.
- Heavy Equipment Scraper: Scrape heavyequipment.com listings - search by keyword, browse by category or equipment type, or filter by US state / Canadian province.
- GoodCarBadCar Sales Scraper: Scrape U.S. and Canada automotive sales figures from GoodCarBadCar.net - sales by brand, by model, by manufacturer, by vehicle segment (SUV, truck, car), and total industry sales by year.
- Marktplaats Scraper: Scrape Marktplaats.nl - the Netherlands' #1 classifieds marketplace (owned by eBay).
- OfferUp Classifieds Scraper: Scrape OfferUp.com listings by keyword search or by category.
- Finn.no Scraper: Scrape Finn.no - Norway's largest classifieds marketplace.
- ThredUp Scraper: Scrape ThredUp - the largest online resale marketplace for women's and kids' secondhand fashion.
Related guides:
- MachineryTrader Scraper: Up to 1,000 Free Results a Month (2026)
- Bazaraki Cyprus Classifieds Scraper: 15 Categories Covered (2026)
- United Real Estate Homes for Sale Scraper: 3 Practical Use Cases
- OpenInsider Scraper: 18 Data Fields, Up to 1,000 Free Results/Month
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-10-05.
Actor last updated by its maintainers on 2026-07-04.
Run outcome figures cover the 30 day public window ending 2026-10-05.
Featured actors
Controller.com Aircraft For Sale Scraper
Scrape aircraft for-sale listings from Controller.com - Sandhills Global's aircraft classifieds marketplace. Search by keyword, browse by aircraft category, and filter by price, year, total time, manufacturer, condition, and location.
Run on Apify ↗