SoldRadar — eBay Sold Prices & Market Intel (8 Markets) avatar

SoldRadar — eBay Sold Prices & Market Intel (8 Markets)

Pricing

from $2.99 / 1,000 results

Go to Apify Store
SoldRadar — eBay Sold Prices & Market Intel (8 Markets)

SoldRadar — eBay Sold Prices & Market Intel (8 Markets)

Real eBay sold prices across 8 marketplaces — not asking prices. Get median/avg price stats, sold & watch counts, promoted-listing bid data, sponsored & best-offer flags, and auto-discovered category IDs. Thousands of sold comps per keyword in seconds. No login, no captcha.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

Yakugusa Yumitori

Yakugusa Yumitori

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

eBay Sold Items Scraper — Sold Prices, Market Intel & Bid Data (8 Marketplaces)

Get confirmed eBay sold prices — what items actually sold for, not asking prices. Search any keyword across 8 marketplaces, filter by price, condition, category, and buying format, and export clean structured rows for comps, resale pricing, and market research.

Most eBay scrapers parse fragile HTML one search at a time. This actor hits a fast structured endpoint instead — batching up to 50 keywords in parallel and pulling thousands of sold listings per keyword (200 per request, deduped) in seconds. It can also expand each keyword into the related terms shoppers actually use — plus a sponsored-listing flag on every row and a promoted-listing bid feed. No login, no captcha, no API key.


What makes this scraper different

Other eBay sold-price scrapers HTML-scrape one search at a time, hit eBay's 10k wall, and hand you the basics. This scraper surfaces data no other eBay actor exposes:

Typical eBay sold scraperThis scraper
Depth per keyword~10,000 (eBay's web cap)12,000+ — bypasses the cap
Promoted-listing bid data✅ advertiser bid + actual clearing CPC per keyword
Sponsored flag per rowisSponsored
Best-Offer-accepted flagrarelyisBestOfferAccepted — so accepted-offer rows don't poison your comps
Keyword expansion✅ one seed → the terms buyers actually type
Category-ID discoverymanual / external lookup siteauto-listed for your keyword in every run
Engineheadless browser + proxiesdirect JSON, sub-second, no proxy for US
Authenticity Guarantee / product ratings

The bits you won't find anywhere else:

  • 💰 Promoted Listings bid intelligence — for any keyword, see what advertisers are bidding and the actual cost-per-click that cleared. Sellers pay for this kind of competitive ad data; no other eBay scraper exposes it.
  • 🧹 Clean comps, not noiseisBestOfferAccepted and isSponsored flag the rows where the displayed price isn't the true market price, so your averages aren't silently skewed (in cards/sneakers ~30% of "sold" prices are accepted-offer asking prices).
  • 🔁 Keyword expansion — turn mechanical keyboard into the 8 related terms shoppers really search, all scraped in one run — a whole niche from one seed.
  • 📊 True market size — every keyword reports totalEntries, the full count of matching sold listings, not just what you pulled.
  • 🗂️ Category IDs, auto-discovered — no hunting for categoryId values or visiting a separate lookup site. Every run lists the category IDs relevant to your keyword in the run summary, so you can re-run scoped to a category in seconds.
  • 📈 Built-in price stats — every keyword gets a ready-made summary: count, min, max, average, median, 25th/75th percentile — with Best-Offer-accepted rows excluded so the numbers reflect actual sale prices. The median + percentiles give you a real comp instantly, no spreadsheet.

Quick start

{
"queries": ["iphone 14 pro", "iphone 15 pro"],
"listingStatus": "sold",
"marketplace": "EBAY-US",
"maxItemsPerQuery": 500,
"sortOrder": "endedRecently"
}

Two keywords, the 500 most recently sold of each, deduped — runs in a few seconds.


What you get on every listing

Price dataprice (the final sold price for sold listings; the asking price for active), currency, totalPrice (price + shipping). Plus soldDate and ended.

Discounts & offersoriginalPrice (was-price), discountPercent, hasPriceDrop, couponText, bestOfferEnabled, freeReturns.

Demand signalsquantitySold ("27 sold"), watchCount ("68 watchers"), scarcity (last_one / almost_gone), hasVariations.

ShippingshippingPrice, shippingType (free / paid / pickup), deliveryEstimate.

Listing format & lifecyclelistingType (auction / fixed_price), bidCount + endTime (active auctions), quantityAvailable.

Placement & trustisSponsored (eBay Promoted Listing — appears on Best Match searches), isBestOfferAccepted (see caveat below), hasAuthenticityGuarantee, isAuthorizedSeller, benefitsCharity, isRefurbished.

Condition & attributescondition (e.g. "Pre-Owned", "Open Box", "Very Good - Refurbished"), brand, itemSpecifics (on-card specs, e.g. ["ASUS", "16 GB"]), fitment (vehicle compatibility for Motors).

Seller intelsellerName, sellerFeedbackScore, sellerPositivePct, itemLocation.

Producttitle, itemId, epid (eBay product id), image (full-res), itemUrl, productRating, productReviewCount.

Plus sourceQuery and marketplace so you know which keyword and site surfaced each row.


Proxies & international coverage

The US marketplace works with no proxy at all. For non-US marketplaces, enable a proxy in the input — the actor automatically routes through an IP in the marketplace's own country, which surfaces materially more local inventory (eBay ranks results by detected location). You bring your own Apify Proxy; nothing is shared.

Local inventory: direct vs country-matched proxy

Same "laptop" sold search — a country-matched residential IP returned up to 24% more listings on European markets. US/CA/IT/ES are roughly equal; the gain is largest where local inventory is otherwise under-surfaced.

Which proxy to pick:

RunRecommended proxyWhy
US marketplaceNone, or DatacenterWorks direct; datacenter is cheap and eBay tolerates the volume
Non-US marketplaceResidential (country auto-matched)Only residential reliably provides in-country IPs for the coverage gain — datacenter country pools are too small
Testing / low volumeNoneUS is full-coverage direct; non-US just returns less

You select the proxy group in the Proxy input; the actor sets the country to match your chosen marketplace automatically.


What you control

KnobDefaultWhat it does
queries1–50 keywords, batched in one run
listingStatussoldsold (confirmed sales) · active (live) · completed (sold + unsold)
marketplaceEBAY-USUS · UK · DE · FR · IT · ES · CA · AU (prices in local currency)
maxItemsPerQuery2001–20,000 per keyword (fetched 200 at a time)
sortOrderendedRecentlyendedRecently · newlyListed · priceLowToHigh · priceHighToLow · bestMatch
conditionanyany · new · used · certified_refurbished · open_box
buyingFormatallall · auction · buy_it_now
concurrentQueries21–5 keywords running in parallel
dedupeAcrossQueriestrueSame item matching two keywords is counted once

Filters: minPrice / maxPrice, categoryId (e.g. 58058), freeShippingOnly, soldWithinDays (recent-comps window — e.g. 30 for the last month; stops paging once past the window).

Power options: expandKeywords (fan each seed into related searches and scrape those too, expansionLimit controls how many), includeAdIntelligence (capture Promoted Listings bid data into a separate promoted-ads dataset).


Use it for

Resale comps & pricing. Pull the recent sold prices for a model, slice by condition, and you have a defensible comp table.

{
"queries": ["rtx 4090"],
"listingStatus": "sold",
"condition": "used",
"minPrice": 800,
"maxPrice": 2000,
"maxItemsPerQuery": 1000,
"sortOrder": "endedRecently"
}

Market research at scale. Turn one seed into a whole niche with keyword expansion, then read the spread.

{
"queries": ["mechanical keyboard"],
"expandKeywords": true,
"expansionLimit": 8,
"listingStatus": "sold",
"maxItemsPerQuery": 300
}

Cross-market arbitrage. Same keyword, different marketplace — prices and demand often diverge sharply. Run EBAY-GB, EBAY-DE, EBAY-AU with a country-matched residential proxy.

Promoted Listings intel. Turn on includeAdIntelligence to capture, per keyword, the advertiser bid, the actual clearing CPC, and which items are being promoted — landed in a separate promoted-ads dataset.


Output

Lands in the default dataset — export as JSON, CSV, Excel, or JSONL. Three pre-built views ship with the dataset:

  • Overview — image, title, price, condition, sold date, seller
  • Pricing — price, shipping, total, format, condition (the comp table)
  • Seller intel — seller feedback, location, product ratings

A run summary lands in the key-value store under SUMMARY with everything per keyword:

  • priceStatscount, min, max, avg, median, p25, p75 over the sold prices pulled (Best-Offer-accepted rows excluded), e.g. { "median": 295.5, "p25": 145, "p75": 849.26, "count": 174 } — an instant comp.
  • categories — the eBay category IDs relevant to the keyword (e.g. 15032 Cell Phones & Accessories, 9394 Cell Phone Accessories) so you can scope a follow-up run with categoryId, no manual lookup.
  • Plus totalEntries (true market size), per-keyword counts, and the run config.

When includeAdIntelligence is on, promoted-listing records land in the promoted-ads dataset.

Sample row

A real row from an iphone 14 pro sold run on EBAY-US:

{
"itemId": "188461874527",
"title": "NEW Apple iPhone 16E (2025) Factory \ud83d\udd13 Unlocked - 100% \ud83d\udd0b Battery 128",
"itemUrl": "https://www.ebay.com/itm/188461874527",
"epid": "10075287556",
"image": "https://i.ebayimg.com/images/g/XCgAAeSw1DRqIEXw/s-l1600.jpg",
"price": 439,
"currency": "USD",
"shippingPrice": 10,
"shippingType": "paid",
"totalPrice": 449,
"originalPrice": null,
"discountPercent": null,
"hasPriceDrop": false,
"couponText": null,
"condition": "Open Box",
"brand": null,
"itemSpecifics": [],
"isRefurbished": false,
"listingType": "fixed_price",
"ended": true,
"soldDate": "2026-06-05",
"bidCount": null,
"endTime": null,
"quantityAvailable": 9,
"quantitySold": null,
"hasVariations": false,
"bestOfferEnabled": true,
"scarcity": null,
"watchCount": null,
"freeReturns": true,
"deliveryEstimate": null,
"fitment": null,
"benefitsCharity": false,
"isSponsored": false,
"isAuthorizedSeller": false,
"hasAuthenticityGuarantee": false,
"isBestOfferAccepted": false,
"sellerName": "gorillacellular",
"sellerFeedbackScore": 1868,
"sellerPositivePct": 99.4,
"itemLocation": "United States",
"productRating": null,
"productReviewCount": null,
"sourceQuery": "iphone 14 pro",
"marketplace": "EBAY-US"
}
{
"keyword": "black handbag",
"sourceQuery": "handbag",
"marketplace": "EBAY-US",
"adType": "FIRST_PARTY",
"adSubType": "PROMOTED_STORE",
"bid": 1.59,
"clearingPrice": 1.35,
"promotedItemIds": ["397732549485", "277655788860", "277655694673"]
}

Speed & limits

Run shapeTime
1 keyword, 200 sold (1 request)< 1s
1 keyword, 1,000 sold (5 requests)3–5s
5 keywords parallel, 500 each~10s
50 keywords, expansion on, deepminutes

Notes

  • Unlike the eBay website (capped at ~10,000 per search), the endpoint behind this actor keeps paginating — 12,000+ unique listings per query confirmed, often most of the available pool. For very large niches, narrow with price / category / condition to target the slice you want.
  • Best Offer caveat: when a listing sold via an accepted Best Offer, eBay does not disclose the actual accepted amount — it shows the listed asking price (struck through). On those rows price is therefore an upper bound, not the true sold price. We flag every such row with isBestOfferAccepted: true so you can exclude them for precise comps. (In offer-heavy categories like trading cards or sneakers this can be ~30% of sold listings.)
  • Promoted bid data is a point-in-time snapshot, populated for roughly 80% of commercial keywords — treat it as directional ad-intelligence, not a guaranteed field.

⚠️ Unofficial. This actor is not affiliated with, endorsed by, or sponsored by eBay Inc. "eBay" is a trademark of eBay Inc., used here for descriptive purposes only. Collects only publicly available listing data.