Pricing-data field guide · 2026

On eBay, only sold prices tell the truth — and that's the data they hide

Active listings are wishful thinking. Completed sales are the real demand curve. Here's how to read sold listings without Terapeak, which item-specifics actually move price, and why your scraper keeps getting blocked.

Open the eBay Actor →

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 listingsSold listings
What it showsAsking price, still for salePrice a buyer actually paid
Demand signalWeak — supply onlyStrong — proof of a real sale
Good forCompetitor floor, current supply depthTrue market value, sell-through, velocity
URL filterdefaultLH_Sold=1&LH_Complete=1
Official-API accessAvailable (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.

The gap, stated plainly: the public site shows sold prices to anyone via 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:

Why your homemade eBay scraper keeps dying

eBay is one of the harder e-commerce targets, and the failure mode is sneaky.

It rarely fails loudly. Hit eBay from a datacenter IP at machine speed and you don't usually get a clean 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:

1

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.

2

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.

3

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 leads

Disclosure: 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.