Cycle Trader Listings Scraper — Prices & Dealers
Pricing
from $4.00 / 1,000 cycle trader listings
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
21 days ago
Last modified
Categories
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
| Actor | What it returns |
|---|---|
| Cycle Trader Listings Scraper ◄── you are here | Motorcycle price, mileage, seller, and location |
| Equipment Trader Scraper | Construction and farm equipment listings |
| Machinery Trader Scraper | Machinery 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
| Field | Required | Description |
|---|---|---|
startUrls | No | Cycle Trader search or category URLs. Listing URLs are skipped. |
zip / radius | No | US ZIP and miles. Radius defaults to 50 when a ZIP is set. |
make | No | Brand, for example Harley-Davidson or Honda. |
keyword | No | Extra keyword on the search URL. |
condition | No | New or Used. |
sellerType | No | dealer or private. |
minPrice / maxPrice | No | Asking-price range in USD. |
minYear / maxYear | No | Model-year range. |
maxItems | No | Rows to save. Default 50. |
maxPages | No | Pages per URL, 1–10. Default 1. |
scrapeDetails | No | Open each listing page for the full description. Default off. |
proxyConfiguration | No | US 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
| Field | Description |
|---|---|
id | Listing id |
url | Public listing URL |
title | Year, make, and model |
year / make / model / trim | Identity fields |
price / previousPrice / currency | Asking price in USD, plus the prior price when a drop is shown |
mileage | Odometer miles |
condition | New or Used |
category | Category such as Cruiser |
sellerType | Dealer or Private |
dealerName / dealerPhone | Dealer name and the public phone, when shown |
city / state / zip / location | Where the unit is listed |
vin | VIN or serial printed on the listing |
color | Color |
images / imageCount | Photo URLs and count |
description | Text from the card, or the full description when listing pages are on |
listedAt | When the listing was created |
badge | Card badge such as Reduced |
detailEnriched | True when a listing page added a longer description |
source | cycletrader |
{"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 ApifyClientclient = 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().itemsprint(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.