If you're pulling eBay data to price products, source inventory, or run arbitrage, the first thing to get straight is which listings you're even looking at. Most people scrape the default search results — the active ones — and quietly draw the wrong conclusions. The price a seller is asking is not the price the market pays. Get this distinction wrong and every downstream number is poisoned.
Active vs sold: the only distinction that matters
eBay's default search shows items currently for sale. Those prices are aspirational — plenty of them will sit unsold for months, or get relisted cheaper, or never move at all. The honest signal is the sold listing: a completed transaction with a real buyer, a real final price, and a real date.
| Active listings | Sold listings | |
|---|---|---|
| What it shows | Asking price, still for sale | Price a buyer actually paid |
| Demand signal | Weak — supply only | Strong — proof of a real sale |
| Good for | Competitor floor, current supply depth | True market value, sell-through, velocity |
| URL filter | default | LH_Sold=1&LH_Complete=1 |
| Official-API access | Available (Browse API) | Restricted — Terapeak / Marketplace Insights only |
That last row is the whole story. eBay's modern Browse API will happily serve you active inventory. Sold-price history is walled off: it lives in the Marketplace Insights API (limited-access, application required) and in Terapeak, which is bundled into a paid eBay Store subscription. If you don't sell on eBay, you don't get Terapeak — even though the exact same sold data renders to any logged-out visitor on the website.
LH_Sold=1&LH_Complete=1. The official API does not, unless you qualify and apply. Scraping the public completed-listings page closes that gap directly — you read what the browser reads, no Store subscription, no Insights approval.The fields that actually drive price
A title and a price are not enough to make a pricing decision. On eBay, value lives in two places people under-extract:
Condition is a hard price tier, not a footnote
The same model can sell as "New", "Open box", "Seller refurbished", "Used", or "For parts or not working", and those tiers are often 2–3x apart in realized price. If you average sold prices across conditions, your "market value" is meaningless. Always carry the condition field and segment by it before you compute anything.
Item specifics are the structured truth
eBay's item specifics are the key–value attributes a seller fills in — Brand, Model, Storage Capacity, Size, Colour, MPN, and for collectibles things like Grade or Certification. They are the difference between "iPhone, $400" and "iPhone 14 Pro / 256GB / Unlocked / Deep Purple, $620 sold." For matching, deduping and apples-to-apples pricing, these specifics matter more than the free-text title, which sellers stuff with keywords. A useful eBay record therefore looks like:
title,itemId,url— identityprice+currency, and for sold items thesoldDatecondition— the tier, treated as a segment keyitemSpecifics— the key–value map (Brand, Model, MPN…)sellerName,sellerFeedback,sellerCountry— trust + shipping originshippingCost,bids/buyItNow,watchers— demand texture
Why your homemade eBay scraper keeps dying
eBay is one of the harder e-commerce targets, and the failure mode is sneaky.
429. You get a challenge interstitial, a near-empty result page, or subtly truncated listings — an HTTP 200 with garbage inside. Naive scripts "succeed" while silently collecting nothing, and you find out a week later when your pricing model is built on air.The fixes that actually work are unglamorous and constant: rotate residential proxies (datacenter ranges are largely pre-blocked), send realistic browser headers, pace requests, and re-validate selectors because eBay rotates its markup. Maintaining that pool is a job in itself. A maintained actor absorbs it, so you send a query and get clean rows back instead of babysitting infrastructure.
The repricing & arbitrage workflow
Here's where sold data pays for itself. The loop most resellers and repricers actually run:
Pull sold comps, segmented by condition
Scrape the last 30–90 days of sold listings for a product, split by condition. The median sold price per tier — not the average, which outliers wreck — is your true market value.
Measure sell-through, not just price
Compare sold count vs active count for the same query. A high sold-to-active ratio means fast-moving inventory you can price confidently; a low one means a glut you should undercut or avoid.
Find the spread, then reprice on a schedule
Cross sold medians against current active floors (and other channels) to spot underpriced inventory to flip, or to set your own price just under the cheapest credible competitor. Re-run nightly so your prices track the market instead of a stale snapshot.
Driving it over HTTP
A run that pulls sold listings for a query, segmented and complete with specifics, looks like this. The soldListings flag is the one that matters — flip it off for active-supply analysis:
curl -X POST "https://api.apify.com/v2/acts/renzomacar~ebay-products/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"searchTerms": ["iphone 14 pro 256gb unlocked"],
"soldListings": true,
"condition": "used",
"ebayDomain": "ebay.com",
"maxItems": 300,
"includeItemSpecifics": true
}'
You get one JSON object per listing — title, sold price, sold date, condition, the item-specifics map, seller and shipping. Pipe it into a sheet (append &format=csv to the dataset URL), take the median per condition tier, and you've reconstructed Terapeak's core report without a Store subscription. Schedule the same run nightly and you've got a live repricing feed.
Get eBay sold prices without Terapeak
Our maintained eBay Products scraper pulls active and sold listings — price, sold date, condition, item specifics and seller — over residential proxies, as clean JSON or CSV. No Store subscription, no proxy pool to babysit. Free Apify credits to start.
Get the eBay Scraper → Or get done-for-you leadsDisclosure: the links to Apify on this page are affiliate links. If you create a paid account through them we may earn a commission, at no extra cost to you. We recommend Apify because we build and ship the eBay Products scraper on it ourselves.