eBay Sold Listings Scraper
Pricing
from $2.00 / 1,000 results
eBay Sold Listings Scraper
Scrape real sold prices, dates, conditions, and shipping from eBay's completed listings filter. Residential-proxy backed (Apify pool) with Chrome 124 TLS fingerprint impersonation — bypasses eBay's anti-bot.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
tnodes
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
9 days ago
Last modified
Categories
Share
Real sold prices, dates, conditions, and shipping from eBay's completed-listings
filter. Output schema mirrors the de-facto Apify convention
(itemId, soldPrice, endedAt, condition, conditionId, ...) so it
drop-in replaces caffein.dev/ebay-sold-listings and similar actors.
How it works
eBay aggressively blocks scrapers via:
- IP fingerprinting — datacenter IPs get 404/CAPTCHA
- TLS fingerprinting — plain
requests/httpxflagged by TLS handshake - Cookie/session checks — naked requests to
/sch/i.html?LH_Sold=1get 403
This actor handles all three:
- Apify's residential proxy pool (sticky session per actor run)
curl_cffiimpersonates Chrome 124's TLS fingerprint exactly- Browser-realistic flow: visit homepage (warm cookie jar) → search with
Refererheader
Input
| Field | Type | Default | Description |
|---|---|---|---|
keyword | string | (required) | Search term — product name, MPN, model number |
condition | enum | any | any / new / used |
daysToScrape | int | 60 | Only listings sold within last N days (1–90; eBay caps at 90) |
count | int | 50 | Max results to return (1–300) |
Output fields
Each dataset record:
| Field | Type | Notes |
|---|---|---|
itemId | string | eBay item identifier |
url | string | Listing URL |
title | string | Listing title (Opens in a new tab accessibility suffix stripped) |
soldPrice | number | Realized sale price |
soldCurrency | string | ISO code (USD, GBP, EUR, ...) |
endedAt | string | ISO 8601 sale date |
condition | string | Localized label (Pre-Owned, Brand New, ...) |
conditionId | int | eBay numeric enum: 1000=New, 1500=Open Box, 3000=Used, 7000=For Parts |
shippingPrice | number | null if unknown |
shippingCurrency | string | ISO code |
shippingType | enum | free / paid / pickup / unknown |
totalPrice | number | soldPrice + shippingPrice |
scrapedAt | string | ISO 8601 of when this run extracted the record |
Limits + notes
- eBay's sold-listings filter only shows the last 90 days, regardless of
daysToScrape. - Bundle/lot listings (
"Lot of 5 ...") and for-parts listings are NOT filtered out here — downstream consumers should regex-filter if they want comparable single-unit prices. - Seller info (
sellerUsername,sellerFeedbackScore) is NOT in the new 2026li.s-cardlayout and isn't returned. Older actors that include these fields are scraping individual listing pages, which is 50x more expensive.
Local development
$apify run -p # runs locally with the input from .actor/INPUT.json
License
MIT.