eBay Sold Listings Scraper
Pricing
from $0.70 / 1,000 sold listing returneds
eBay Sold Listings Scraper
Search eBay sold and completed listings: sale price, currency, shipping, sold date, condition, buying format, bids and location as rows. Nine marketplaces, no eBay API key, no browser. $0.70 per 1,000 - the lowest per-listing price of any eBay scraper on Apify with an active user base.
Pricing
from $0.70 / 1,000 sold listing returneds
Rating
0.0
(0)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
eBay Sold Listings Scraper — sold comps API, no eBay key
Search eBay's sold and completed listings and get them back as rows: item id, title, sale price, currency, shipping cost, sold date, condition, buying format, seller location and image.
This is what you use to price something. What did this actually sell for, how many times, at what spread, in the last N days.
No eBay developer account, no OAuth, no browser.
Output
| Field | Notes |
|---|---|
itemId, title, listingUrl | the listing |
salePrice, currency | the price it sold for, parsed to a number, plus the marketplace currency |
shippingCost, shippingText | shipping parsed to a number; Free delivery becomes 0. shippingText keeps eBay's raw string |
soldDate, soldDateText | ISO timestamp and eBay's own label ("Aug 9, 2026" / "10 Aug 2026") |
condition | "Pre-Owned", "Brand New", "Open Box", "Parts Only", "Very Good - Refurbished" … |
buyingFormat | "Buy It Now", "or Best Offer", "Best offer accepted", "4 bids" |
bids | number of bids, when the listing was an auction |
itemLocation | where the seller shipped from |
imageUrl | the gallery thumbnail URL (the image is not downloaded) |
page, source, scrapedAt | provenance |
Measured field coverage
Measured on a real 300-row platform run on 2026-08-10: query nintendo switch, 2 pages,
ebay.com. 300/300 rows real, 0 diagnostics, 54 s.
| Field | Filled |
|---|---|
itemId, title, listingUrl, salePrice, currency, soldDate, soldDateText, condition, buyingFormat, itemLocation, imageUrl | 100% |
shippingCost, shippingText | 99.7% |
bids | 19.0% |
bids is only present on auction listings — 19% of that sample. No column was empty on every row.
Median sale price in the sample: $126.75.
Input
query— keywords. Leave it empty and you get one labelled, uncharged sample row.site—ebay.com,.ca,.co.uk,.de,.com.au,.fr,.it,.es,.ie.categoryId— eBay category ID (e.g.625for cameras). Verified to change results.condition—new,open box,refurbished,used,parts. eBay applies it server-side.minPrice/maxPrice— applied by eBay and re-checked on the parsed price.soldFrom/soldTo— date window, applied after parsing.currency— keep only listings in one currency.maxItems(default 120),maxPages(default 3, ~200 listings per page),maxSessions(default 8),requestTimeoutSecs.proxyConfiguration— optional; leave it empty for the tuned default.
Every filter above was run live before being documented. Rows a filter drops are neither returned nor charged.
How it gets past eBay's block, and what it cost to find out
Two independent things were wrong with the previous build, and both are measured, not guessed.
1. The fingerprint. Through Apify datacenter exits, impit's Chrome profile 403s on every
session and Firefox does too. ios18 is the profile eBay accepts. firefox144 is the worst of both
worlds — HTTP 200 with a 14 KB interstitial and zero listings.
2. The cookie warm-up. Even on ios18, hitting the search URL cold gave 2 clean pages out of
12. Fetching https://www.ebay.com/ first, keeping its ~14 cookies, then requesting the search
page with a same-origin referer gave 6 out of 6, and the same warmed session then paginated three
deep without a single refusal. impit has no cookie jar by default, so this is not optional.
A session that starts refusing is thrown away and a new one warmed on a new address — a burned eBay session stays burned. Interstitials arrive as HTTP 200 with a small body, so the actor judges the body content, never the status code.
The old parser also looked for .s-item__title. eBay now emits .s-card__title, so even an
unblocked page would have parsed to zero rows. Both are handled.
Billing
$0.70 per 1,000 sold listings ($0.0007 each), plus $0.001 each time a run starts — the lowest
per-listing price of any eBay scraper on the Apify Store with an active user base; the next
cheapest, automation-lab/ebay-scraper (147 monthly users), is $0.84 per 1,000 even on its cheapest
volume tier.
Pay per event, event name listing. One event per unique real listing. Duplicates across pages are
charged once. Never charged: the empty-input sample, filtered-out rows, EBAY_BLOCKED,
NO_LISTINGS and NO_MATCHES diagnostics.
Verified on 2026-08-10 against the Apify Store API. Among sold-listing scrapers specifically,
caffein.dev/ebay-sold-listings (455 monthly users) is $2.50 per 1,000 on its cheapest tier and
sync-network/ebay-sold-listings-scraper is $2.00. This actor is below all of them. Every rival
figure quoted here is that actor's lowest volume tier, not the headline price a free account
sees.
What this does not do
- No seller username or feedback score. eBay removed those from the search-result card; this actor will not fabricate them. Use a seller-profile scraper if you need them.
- No per-item detail pages, so no item specifics, description HTML, or full photo set.
- No live/active listings — this is the sold and completed view only.
- No eBay API, no OAuth, no application key.
- No residential proxy.
- eBay caps a search at roughly 200 listings per page; very deep pagination eventually stops
returning new items and the actor writes an uncharged
NO_LISTINGSrow rather than looping.
FAQ
How do I find what something sold for on eBay?
Put the product name in query, set soldFrom to the start of the window you care about, and read
salePrice and soldDate from each row.
How many sold listings per run?
About 200 per page. maxPages up to 20, maxItems up to 2,000. A 300-row run took 54 seconds.
Do I need an eBay API key? No. Nothing to register, nothing to authorise.
Can I search a non-US eBay site?
Yes — set site. Prices come back in that marketplace's currency and soldDateText in its date
format; soldDate is normalised to ISO either way. Note that non-US sites publish fewer attributes,
so condition is much sparser there than the 100% measured on ebay.com.
Does it include shipping in the price?
No. salePrice is the item price and shippingCost is separate, so you can add them yourself or
compare item-only prices.
What happens if eBay blocks it?
Each page gets up to maxSessions freshly warmed sessions on new addresses. If all of them are
refused you get one uncharged EBAY_BLOCKED row saying so, and zero listing charges.
Is the sample row charged?
No. Empty input returns one _sample: true row and zero billable events.