eBay Sold Listings Scraper - Real Sold Prices & Comps avatar

eBay Sold Listings Scraper - Real Sold Prices & Comps

Pricing

from $12.00 / 1,000 results

Go to Apify Store
eBay Sold Listings Scraper - Real Sold Prices & Comps

eBay Sold Listings Scraper - Real Sold Prices & Comps

Scrape eBay SOLD listings (sold comps) — real transaction prices, sold dates, condition, shipping, seller and images for any keyword. Auto-parses PSA/BGS/CGC/SGC card grades from titles. Uses residential proxies to beat Akamai anti-bot. Filter by sold date, price range, category and condition.

Pricing

from $12.00 / 1,000 results

Rating

0.0

(0)

Developer

lulz bot

lulz bot

Maintained by Community

Actor stats

0

Bookmarked

11

Total users

4

Monthly active users

7 days ago

Last modified

Categories

Share

eBay Price Scraper — SOLD Comps & ACTIVE Listings

Scrape eBay market data for any keyword. This actor returns real value for every user:

  • With your eBay cookies → true SOLD comps: real transaction prices, sold dates, condition, shipping, seller — the data resellers, card flippers, and collectibles dealers need for accurate comps.
  • Without cookies (default) → current ACTIVE listings: live asking prices, "X sold" demand counts, and best-offer / auction signals for the same query — still valuable market data, and it always returns rows.

Every row is flagged with a saleType field ("sold" or "active") so you always know which kind of price you got.

How the two modes work

eBay gates all SOLD/COMPLETED listing searches (LH_Sold=1 / LH_Complete=1) behind a login — anonymous sold searches are redirected to signin.ebay.com and return nothing. This affects every eBay sold-comp scraper. To handle that:

You provideModeWhat you getsaleType
Valid ebayCookiesSOLDReal sold comps with soldDate"sold"
No cookiesACTIVECurrent live listings (asking prices)"active"
Expired/invalid cookiesSOLD → auto-fallback to ACTIVECurrent live listings"active"

The actor never returns 0 rows for a valid query on a working eBay category — if the sold path is gated, it automatically falls back to active listings.

What you get per item

FieldDescription
saleType"sold" (real transaction) or "active" (current live listing)
itemIdeBay item id
listingUrlDirect link to the listing
titleListing title
priceRow price — sold price (sold mode) or current asking price (active mode)
soldPriceKept for back-compat; equals price. On active rows this is the current asking price — check saleType before treating it as a comp
currencyCurrency code (USD, GBP, EUR, CAD, AUD)
soldDateISO date the item sold — populated on sold rows only (null for active)
soldCount"X sold" quantity for the listing (active listings; a demand signal)
conditionItem condition caption
shippingPriceShipping cost (0 if free)
totalPricePrice + shipping
listingTypeauction / buy-it-now / best-offer (when detectable)
bestOfferWhether the listing shows a Best Offer option
imageUrlThumbnail image
sellerSeller username (when present)
gradingCompanyPSA / BGS / CGC / SGC parsed from the title
gradeNumeric grade (e.g. 10, 9.5) parsed from the title
certNumberGrading cert number parsed from the title (when present)
searchQueryThe keyword that produced this row
scrapedAtISO timestamp of the scrape

The PSA/BGS/CGC/SGC parsing makes graded-card data directly joinable with population reports and arbitrage tools.

Getting SOLD data (optional — supply cookies)

To get real sold comps instead of active listings:

  1. Log in to eBay in your browser.
  2. Export your .ebay.com cookies — either copy the raw Cookie: request header from DevTools (Network tab), or export a JSON cookie array with an extension like EditThisCookie.
  3. Paste it into the ebayCookies input.

Accepted formats:

  • Raw header string: "nonsession=...; ebay=...; s=...; ..."
  • JSON array: [{"name":"s","value":"...","domain":".ebay.com"}, ...]

Cookies expire. If they stop authenticating, the actor auto-falls back to active listings (so you still get data) and — if even the fallback returns nothing — emits a COOKIES_INVALID diagnostic. Re-export fresh cookies to restore the sold path.

Input

{
"searchQueries": ["charizard psa 10 base set", "iphone 14 pro"],
"ebayCookies": "",
"daysToScrape": 30,
"maxResults": 60,
"itemsPerPage": 240,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
  • searchQueries — keywords to search.
  • ebayCookies — optional. Empty → active listings. Supplied → sold comps. (See above.)
  • daysToScrape — sold mode only: keep items sold in the last N days (1–90; eBay keeps ~90 days of sold data). Ignored for active listings.
  • maxResults — cap per keyword.
  • category — optional eBay category id (_sacat).
  • condition — optional condition filter (LH_ItemCondition).
  • minPrice / maxPrice — optional price range (_udlo / _udhi).
  • itemsPerPage — 60, 120, or 240 (larger = fewer page loads = fewer proxy hits).

Diagnostics

If a run returns 0 rows it still succeeds (you are never charged for an error) and writes a DIAGNOSTIC key-value record explaining why:

  • NO_RESULTS — eBay returned nothing for the query (and, where applicable, the active fallback). Try a broader keyword or relax filters.
  • BOT_BLOCKED — eBay served captcha/anti-bot on every attempt. Retry later or with a different residential proxy region.
  • COOKIES_INVALID — supplied cookies didn't authenticate and the active fallback also found nothing. Re-export fresh cookies.

Anti-bot

eBay protects search with Akamai Bot Manager (TLS/JA3 + HTTP/2 fingerprinting + IP reputation) and a sign-in wall on sold listings. Datacenter IPs get HTTP 403 after roughly one request. This actor uses real Chromium (Playwright) + Apify RESIDENTIAL proxies with rotating sessions, fingerprint injection, a homepage warm-up, sequential pagination, and throttling, and injects your ebayCookies (when provided) to authenticate the sold path. Residential proxies are required — run it on the Apify platform.

Notes

  • Prices and sold dates come straight from eBay's server-rendered HTML, so there are no extra page loads per item.
  • Sold results are sorted recently-ended, so the actor stops paginating a query once it passes your daysToScrape cutoff. Active results are sorted by best match.
  • Promotional "Shop on eBay" placeholder cards are filtered out automatically.