Cycle Trader Listings Scraper — Prices & Dealers avatar

Cycle Trader Listings Scraper — Prices & Dealers

Pricing

from $4.00 / 1,000 cycle trader listings

Go to Apify Store
Cycle Trader Listings Scraper — Prices & Dealers

Cycle Trader Listings Scraper — Prices & Dealers

Scrape Cycle Trader motorcycle listings: price, mileage, year, make, model, seller type, and dealer phone. Paste a search URL or filter by ZIP, make, and condition.

Pricing

from $4.00 / 1,000 cycle trader listings

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 days ago

Last modified

Share

Cycle Trader Listings Scraper

Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by Trader Interactive or Cycle Trader. Data is read from publicly accessible search and listing pages only. No login. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

Cycle Trader Listings Scraper reads public motorcycle and powersports search results and saves one row per listing: price, mileage, year, make, model, condition, seller type, location, and the dealer phone when the page shows one. Paste a search URL or set a ZIP, make, and condition. This Cycle Trader scraper is an API alternative for those pages: run it from Python, Node.js, or MCP and export JSON.

Dealers and pricing desks use it to watch inventory near a ZIP. A listing page can be opened when you need the full description; the search card is enough for price and mileage.

Which Actor in this suite

ActorWhat it returns
Cycle Trader Listings Scraper ◄── you are hereMotorcycle price, mileage, seller, and location
Equipment Trader ScraperConstruction and farm equipment listings
Machinery Trader ScraperMachinery dealer inventory and price changes

When to use

  • You price used and new motorcycles from a ZIP, make, or a search URL you already filtered.
  • You want dealer name, phone, mileage, and a price drop in one dataset.
  • You need JSON for a spreadsheet, a scheduled job, or an AI assistant.

Skip this Actor for private messages, account data, or a national dump of every listing in one run. Each search page holds about 42 cards, and the site counter stops at 10 pages.

Key features

  • Search URL, or ZIP, radius, make, keyword, condition, seller type, price, and year
  • Price, previous price, mileage, VIN, color, photos, and dealer phone from the search card
  • Optional listing page for the full description
  • One row per listing
  • US residential proxy. A datacenter IP is blocked
  • JSON dataset for API, Python, Node, and MCP

Input

FieldRequiredDescription
startUrlsNoCycle Trader search or category URLs. Listing URLs are skipped.
zip / radiusNoUS ZIP and miles. Radius defaults to 50 when a ZIP is set.
makeNoBrand, for example Harley-Davidson or Honda.
keywordNoExtra keyword on the search URL.
conditionNoNew or Used.
sellerTypeNodealer or private.
minPrice / maxPriceNoAsking-price range in USD.
minYear / maxYearNoModel-year range.
maxItemsNoRows to save. Default 50.
maxPagesNoPages per URL, 1–10. Default 1.
scrapeDetailsNoOpen each listing page for the full description. Default off.
proxyConfigurationNoUS residential. Required for a successful page.
{
"startUrls": [
{
"url": "https://www.cycletrader.com/motorcycles-for-sale?zip=90210&radius=50"
}
],
"maxItems": 20,
"maxPages": 1,
"scrapeDetails": false,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

Make and ZIP without a pasted URL:

{
"zip": "90210",
"radius": "50",
"make": "Harley-Davidson",
"condition": "Used",
"maxItems": 20
}

Output

FieldDescription
idListing id
urlPublic listing URL
titleYear, make, and model
year / make / model / trimIdentity fields
price / previousPrice / currencyAsking price in USD, plus the prior price when a drop is shown
mileageOdometer miles
conditionNew or Used
categoryCategory such as Cruiser
sellerTypeDealer or Private
dealerName / dealerPhoneDealer name and the public phone, when shown
city / state / zip / locationWhere the unit is listed
vinVIN or serial printed on the listing
colorColor
images / imageCountPhoto URLs and count
descriptionText from the card, or the full description when listing pages are on
listedAtWhen the listing was created
badgeCard badge such as Reduced
detailEnrichedTrue when a listing page added a longer description
sourcecycletrader
{
"id": "5040031344",
"url": "https://www.cycletrader.com/listing/2008-Harley-Davidson-SOFTAIL+CROSS+BONES-5040031344",
"title": "2008 Harley-Davidson SOFTAIL CROSS BONES",
"year": 2008,
"make": "Harley-Davidson",
"model": "SOFTAIL CROSS BONES",
"price": 11900,
"previousPrice": 14200,
"currency": "USD",
"mileage": 16346,
"condition": "Used",
"sellerType": "Private",
"location": "Anaheim, CA",
"zip": "92804",
"vin": "5HD1JM5468Y061944",
"imageCount": 20,
"source": "cycletrader"
}

Use cases

  • A dealer compares Harley-Davidson asking prices inside 50 miles of a ZIP.
  • A lender checks mileage, year, and price on current Cycle Trader inventory.
  • A marketplace analyst exports a make search to CSV and refreshes it on a schedule.

Integration examples

Replace YOUR_TOKEN and the Actor id after you open the Actor in Apify Console.

Node.js

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_TOKEN" });
const run = await client.actor("crawloop/cycle-trader-scraper").call({
zip: "90210",
radius: "50",
make: "Honda",
maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("crawloop/cycle-trader-scraper").call(run_input={
"zip": "90210",
"radius": "50",
"make": "Honda",
"maxItems": 20,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

cURL

curl "https://api.apify.com/v2/acts/crawloop~cycle-trader-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"zip\":\"90210\",\"radius\":\"50\",\"make\":\"Honda\",\"maxItems\":20}"

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store name.

Example prompts:

  • "Run Cycle Trader Listings Scraper for used Honda motorcycles within 50 miles of 90210 and return the top 20 rows as JSON"
  • "Scrape Cycle Trader listings for Harley-Davidson and summarize price, mileage, and location"
  • "Chain Cycle Trader Listings Scraper then Equipment Trader Scraper for a dealer who stocks both motorcycles and construction equipment"

Suite next step

After the motorcycle search, run Equipment Trader Scraper for construction and farm equipment from the same dealer-inventory workflow, or Machinery Trader Scraper for machinery comps.

FAQ

Does this log in? No. It reads public search pages and, when you turn listing pages on, public listing pages.

Why is a residential proxy required? The site answers a datacenter IP with an AWS WAF challenge. The default proxy is US residential.