eBay Vehicles Scraper avatar

eBay Vehicles Scraper

Pricing

from $2.50 / 1,000 results

Go to Apify Store
eBay Vehicles Scraper

eBay Vehicles Scraper

Scrape eBay Motors vehicle listings by keyword, search URL, or category page. Extract titles, prices, model year, mileage, condition, location, seller details, and more.

Pricing

from $2.50 / 1,000 results

Rating

0.0

(0)

Developer

Fahim Mahmud Chisti

Fahim Mahmud Chisti

Maintained by Community

Actor stats

0

Bookmarked

6

Total users

3

Monthly active users

2 days ago

Last modified

Features

Limited permissions

Share

Scrape vehicle listings from eBay Motors search, category, and filtered browse pages. Paste an eBay URL or type a keyword and get title, price, year, make, model, mileage, VIN, condition, title status, seller, location, publication time, and every photo as structured JSON. Runs on the Apify platform, so you get an API, scheduling, residential proxy rotation, integrations, and run monitoring without maintaining a scraper yourself.

Why use eBay Vehicles Scraper?

  • Private-seller inventory feeds — filter eBay to "For Sale By: Private Seller" and pull fresh listings daily for lead generation, pricing research, or your own listing aggregator.
  • Market pricing — compare asking prices, mileage, and condition across makes, models, and years.
  • Change tracking — the duplicate check skips listings you already stored, so scheduled re-runs only pay for new inventory.
  • No browser needed — the Actor speaks HTTP directly with Chrome TLS fingerprints, which keeps runs fast and cheap.

How to scrape eBay vehicle listings

  1. Open the Input tab.
  2. Add one or more eBay URLs under Start URLs — search pages, vehicle category/browse pages, or direct listing (/itm/...) URLs — or enter terms under Search keywords.
  3. Set Max items and Max pages per search.
  4. Optionally set Only listings from the last (days) to 10, 30, or another number.
  5. Keep Scrape item details enabled to open each listing and extract full vehicle specifics.
  6. Keep the default residential proxy configuration.
  7. Click Start.
  8. Open the run's Dataset tab to view or export the results.

For complex filters such as model year, condition, mileage, seller type, and sort order, configure the filters on eBay first and paste the resulting URL into Start URLs. The Actor requests that URL string exactly as pasted (no rewrite of encoding, filters, sort, page, or page size).

Input

  • Start URLs — eBay search, vehicle category/browse, or direct listing URLs. When provided, keywords are ignored.
  • Search keywords — terms used to create Cars & Trucks (Motors category 6001) searches on the selected domain, 240 results per page.
  • eBay domain — marketplace used for keyword searches; also used for proxy country when no Start URL is provided.
  • Max items — maximum number of listings returned across the run (0 = no limit).
  • Max pages per search — maximum pages processed for each keyword or URL.
  • Only listings from the last (days) — optional maximum listing age. Keyword searches are sorted newest-first. Newest-first eBay.com searches read the publication time straight from the results card, so no item page is opened for listings that are already too old; other listings are checked on the item page. Listings whose publication time cannot be determined are excluded.
  • Scrape item details — opens every listing page for full vehicle specifics (enabled by default; disable for faster runs with search-card data only).
  • Max concurrency — how many listing pages are open at once, each on its own proxy session (default 4, range 1–10). Lower it when eBay blocks often or when your own proxy pool is small.
  • Skip existing listings — skip detail scraping for listing URLs already known (default false).
  • Duplicate check API URL — optional POST exists API; leave empty for Apify storage only.
  • Duplicate check store name — named KV store (default vehicle-listing-urls).
  • Stop after consecutive duplicates — end a search after this many known listings in a row (default 20).
  • Proxy configuration — residential proxies are recommended and enabled by default.

At least one start URL or search keyword is required.

Skip existing listings (duplicate check)

Detail scraping opens every listing through residential proxies. On scheduled re-runs, most results are often listings you already stored. Duplicate check skips those URLs so you do not pay again for detail pages you already have.

Enable it with duplicateCheck: true (default false).

If N consecutive listing URLs in a search are known duplicates (N = duplicateCheckLeadingStop, default 20), that search stops (no further pages) to avoid paying for known inventory.

Modes

  • When duplicateCheckApiUrl is set, the Actor POSTs batches of up to 500 listing URLs to your endpoint, then skips URLs returned in existing. It also reads and updates the named Apify Key-Value store. A URL is skipped if either your API or the store marks it as known.
  • When duplicateCheckApiUrl is empty, the Actor uses the Apify Key-Value store only (no external API).

API contract

// Request
{ "listingUrls": ["https://example.com/listing/1", "https://example.com/listing/2"] }
// Response
{
"existing": ["https://example.com/listing/1"],
"missing": ["https://example.com/listing/2"]
}

listingUrls may also be a single string. URLs are normalized (query string and trailing slash ignored). No auth header is required for public endpoints. If the API call fails or exceeds a 20s timeout, the Actor fail-opens and scrapes the batch.

After a listing is saved successfully, its URL is written to the named store under the KNOWN_LISTING_URLS record so future runs skip it even without an API. Cached URLs expire after 30 days, and the store is capped at 50,000 entries (oldest first). Legacy boolean true entries are migrated to timestamps on load.

Example:

{
"startUrls": [{ "url": "https://www.ebay.com/sch/i.html?_nkw=toyota+tacoma" }],
"maxItems": 100,
"duplicateCheck": true,
"duplicateCheckApiUrl": "https://your-api.example.com/listings/exists",
"duplicateCheckStoreName": "vehicle-listing-urls"
}

Output

With Scrape item details enabled, each dataset item looks like this (shortened):

{
"itemId": "800892395851",
"title": "2003 Hummer H2",
"subtitle": null,
"listedAt": "2026-11-08T15:35:46.589Z",
"publishedAt": "2026-11-08T12:20:33.000Z",
"price": "32,900.00",
"currency": "USD",
"condition": "Used",
"location": "Wadsworth, Ohio, United States",
"seller": "The Wrist Supply",
"sellerFeedbackScore": "168",
"sellerFeedbackPercent": "100",
"year": "2003",
"mileage": "19135",
"make": "Hummer",
"model": "H2",
"trim": null,
"vin": "5GRGN23U43H143774",
"bodyType": "SUV",
"engine": "6.0L Gas V8",
"transmission": "Automatic",
"driveType": "4WD",
"fuelType": "gasoline",
"exteriorColor": "Yellow",
"interiorColor": "Gray",
"titleStatus": "Clean",
"forSaleBy": "Private Seller",
"specifics": { "Year": "2003", "Make": "Hummer", "Model": "H2", "Mileage": "19,135", "...": "..." },
"images": ["https://i.ebayimg.com/images/g/tmUAAeSwQp5q8Gag/s-l1600.jpg", "..."],
"imageUrl": "https://i.ebayimg.com/images/g/tmUAAeSwQp5q8Gag/s-l1600.jpg",
"shipping": "Local Pickup",
"url": "https://www.ebay.com/itm/800892395851",
"sourceUrl": "https://www.ebay.com/b/Private-Seller-Less-than-75-000-miles-Clean-Cars-and-Trucks/6001/bn_116418348?_sop=10",
"page": 1,
"scrapedAt": "2026-11-08T15:35:46.589Z",
"detailsScraped": true,
"taskId": null,
"taskName": null
}

With detail scraping disabled, items contain the lighter search-card fields only: title, price, currency, condition, title status, transmission, drive type, make, year, mileage, shipping, location, seller username, seller or dealer display name (sellerName), image, URL, and publishedAt when the results page shows a listing time. Keyword search cards carry all of these; browse-node cards show only title, condition, make, price, and delivery option. Such rows carry detailsScraped: false. If an item page cannot be loaded after all retries, the Actor saves the search-card row with detailsScraped: false instead of dropping the listing.

listedAt always equals scrapedAt. The time the seller published the listing is publishedAt (null when eBay does not expose it).

Some fields may be empty when the seller does not provide them. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

When the Actor is started from an Apify Task, each dataset item also includes taskId and taskName so you can track which Task produced it. Direct Actor runs set both to null.

Data fields

FieldDescription
itemId, urleBay item number and canonical listing URL
title, subtitleListing title and optional subtitle
price, currencyAsking price as shown and its ISO currency code
condition, titleStatus, forSaleByCondition label, vehicle title status, private seller or dealer
year, make, model, trim, vinVehicle identity
mileage, bodyType, engine, transmission, driveType, fuelTypeMechanical specifics
exteriorColor, interiorColorColors
location, seller, sellerName, sellerFeedbackScore, sellerFeedbackPercentWhere the vehicle is and who sells it (sellerName is the store or dealer display name on card rows)
publishedAt, listedAt, scrapedAtWhen eBay published the listing, and when it was scraped
images, imageUrlAll photos (largest size) and the primary photo
specificsEvery "Item specifics" row as label → value
shipping, sourceUrl, page, detailsScrapedDelivery option from the results card, the page the listing came from, and whether the item page was read

How much does it cost to scrape eBay vehicles?

The Actor is pay-per-event: a small start fee plus a fixed price per dataset item, and you also pay the Apify platform usage of the run (compute and residential proxy traffic). A detail-scraped listing transfers roughly 0.7 MB through the proxy. Rough guide:

  • 100 listings with details — about 1–2 minutes at the default concurrency; well under $1 including proxy traffic.
  • 1,000 listings with details — about 10–15 minutes; a few dollars, most of it residential proxy traffic.
  • Search-card only (details disabled) — a page of 240 results costs one request, so thousands of rows cost cents.

Enable Skip existing listings on schedules so re-runs only pay for new inventory, and keep Max items set to what you need.

Tips and advanced options

  • Enable duplicateCheck on scheduled re-runs to skip listings you already stored.
  • Bound cost with Max items and Max pages per search.
  • Disable Scrape item details when search-card data is enough. With the listing-age filter on a newest-first eBay.com search, the Actor uses the time shown on the card and only opens item pages for listings without one.
  • Raise Max concurrency to 6–8 for large runs; drop it to 1–2 if you see many "Blocked" warnings in the log.
  • The run's Container URL serves live progress as JSON (scraped, maxItems, currentUrl, inFlight, failedRequests).
  • Paste browse URLs with eBay's own filters (seller type, mileage, title status, model year) for the most precise feeds.

FAQ, limitations, and support

Why did my run fail with "Nothing scraped"? eBay refused every request after all retries. The Actor fails loudly instead of returning an empty dataset so schedules and integrations notice. Retry, lower Max concurrency, or check your proxy settings.

Why did a keyword search return zero listings? eBay found nothing in Cars & Trucks and padded the page with results from other categories (parts, brochures, toys). The Actor detects that notice and keeps only exact in-category matches, so it does not charge you for non-vehicle rows. Broaden the keyword or use a browse URL.

Why is location, seller, or mileage empty on card-only rows from browse URLs? eBay's browse-node cards only show title, condition, make, price, and delivery option. Keyword search cards show more (year, mileage, location, seller, listing time). Enable Scrape item details for the full record.

Is it legal to scrape eBay? Scraping publicly available data is generally legal, but you are responsible for complying with eBay's terms, applicable law, and the handling of any personal data (seller names are public usernames). Do not store personal data unless you have a lawful basis.

Known limitations: auctions report the current bid as price; publishedAt on card-only rows is read from eBay.com's newest-first results and is accurate to the minute in US Pacific time; non-US marketplaces fall back to the item page for publication time.

Found a bug or need another field? Open an issue on the Actor's Issues tab. Custom scrapers and integrations are available on request.