ebaysoldlistingsAPI
Guide

How to price items from eBay sold comps (the right way)

A practical method for turning raw eBay sold listings into a price you can list at: pick the right sample, remove outliers, split by condition, and account for Best Offer and shipping.

· 8 min read

Sold comps are the most honest pricing signal there is, but only if you read them correctly. A raw page of 200 sales mixes new and used units, parts-only listings, bundles, and auctions that ended at odd hours. Here is the method we recommend, with the numbers from a real sample.

Step 1: search like a buyer

Use the words a buyer types, then exclude what you are not selling. eBay's own minus syntax works in the keyword: steam deck oled -case -dock -parts. Too broad a search mixes accessories into your comps. Too narrow a search leaves you with ten sales and a noisy answer.

Step 2: use the median, not the average

In our Xbox Series X study the average of 203 sales was $625, but the median was $525, because a few bundles and new-in-box units above $1,000 pulled the average up by $100. The median ignores those extremes. Anchor on it.

Step 3: split by condition

Completed eBay US sales, sampled September 29, 2026.
ItemPre-owned medianBrand new medianGap
Nintendo Switch OLED$179.99$349.00+94%
Shure SM7B$199.99$272.50+36%
PS5 Slim$430.00$595.00+38%
Steam Deck OLED$650.00$799.00+23%

Pricing a used unit from a blended median overprices it, sometimes by a lot. Filter with itemCondition=used or itemCondition=new, or group by the condition field yourself.

Step 4: trim outliers

Drop the bottom and top 10% before taking the median, or keep only the middle 50% (the 25th to 75th percentile). The lowest sales are usually parts-only or broken; the highest are bundles.

Step 5: check auction vs Buy It Now

Auctions typically clear a little lower. Across our samples, auction medians ran 3% to 18% below Buy It Now medians (the SM7B: $175 at auction vs $210 Buy It Now; the GoPro Hero 12: $197.50 vs $239.99). If you plan to list fixed price, price from Buy It Now comps with buyingFormat=buyItNow.

Step 6: account for Best Offer and shipping

  • When bestOfferAccepted is true, eBay does not show the accepted amount, so the listed price is an upper bound. If many of your comps are Best Offer sales, the real market is slightly lower.
  • Compare on totalPrice (price plus shipping) when shipping varies, because a $180 item with $20 shipping and a $200 item with free shipping are the same deal to the buyer.

All six steps in code

import requests, statistics

r = requests.get("https://api.ebaysoldlistingsapi.com/scrape",
    params={"keyword": "steam deck oled -case -dock -parts", "itemCondition": "used",
            "buyingFormat": "buyItNow"},
    headers={"Authorization": "Bearer YOUR_API_KEY"}, timeout=90).json()

prices = sorted(float(x["totalPrice"] or x["soldPrice"]) for x in r["results"] if x.get("soldPrice"))
k = len(prices) // 10
core = prices[k:len(prices) - k]
print("list at about", round(statistics.median(core), 2), "from", len(prices), "sales")

How many sold comps do I need?

Twenty or more comparable sales give a stable median. With fewer than ten, widen the date range or loosen the keyword.

Should I price from active listings?

No. Active listings show asking prices, and many never sell. Price from completed sales, then glance at active listings to see your competition.

What date range should I use?

The last 30 to 90 days for most items. For fast-moving products such as new consoles or trading cards, the last 2 to 4 weeks.

Try it with real data

Get completed eBay sales as JSON. Fifty free requests a month, no card required.

Get your API key