Five routes, what each costs, how far back each reaches, and which ones show the amount the buyer really paid. The last part is where most of them quietly fail.
| Route | Cost | History | Bulk | Real price on offers |
|---|---|---|---|---|
| eBay sold filter, signed in | Free | ~90 days | No | No |
| eBay mobile app | Free | ~90 days | No | No |
| Terapeak in Seller Hub | Seller account | Up to 3 years | Limited | Partly |
| Third party comp tools | $10 to $50 / mo | Varies | Some | Mostly no |
| A sold listings API | Free tier, then $9+ | Up to 3 years | Yes | Yes |
Sign in, search the item, apply the sold filter in the results. Free, accurate for what it shows, and the right answer when you have one item to price. The limits are that it needs a signed in session, reaches back about 90 days, shows one item per click and cannot be exported. For anything rarer than a few sales a quarter, 90 days is often an empty page.
Same data, same 90 day window, filter under the filter control. Worth knowing because it is the fastest route when you are standing in front of the item at a car boot sale or an estate sale.
If you have a seller account, Terapeak reaches back up to three years and aggregates rather than making you click each sale. It is built for one person researching inside the Seller Hub interface, so it does not help you price a hundred items, feed a repricer or populate a database. There is no official API behind it. We wrote up what to do when you need it in code rather than in a browser.
Plenty exist and some are good. Two things to check before you rely on one. Ask how far back it goes, because many are capped at 90 days by the same wall you are trying to get around. Then ask where its numbers come from: a tool reading the public sold page inherits every limitation on this page, including the one in the next section. We compare the main ones here.
The right answer when the question is not "what did this sell for" but "what did these four hundred things sell for, every morning". One request, up to 240 sales, up to 1,095 days of history:
curl -G https://api.compsapi.com/v1/sold \
-H "Authorization: Bearer YOUR_KEY" \
--data-urlencode "q=charizard psa 10" \
--data-urlencode "days=1095" \
--data-urlencode "best_offer=1"
Free tier is 100 requests a month with no card. Every request can return 240 sales, so the free tier covers a surprising amount of research.
Every free route above shares a flaw. When a listing sells through an accepted Best Offer, the public sold page shows the asking price, not the amount the buyer paid. The accepted figure is not published anywhere on that page, so no amount of careful looking recovers it.
Measured across 5,859 matched sales where we hold both numbers: the public figure read high 99.0% of the time, median 14.9%, p90 40.8%. Sneakers ran 20.0% at the median, jewellery 17.6%, designer handbags 17.5%. Every one of the twelve categories we measured came out above 11%.
The error only goes one way, because offers are not accepted above the asking price. So if you price off what you can see for free, you sit above the market, and nothing in the data tells you by how much. The full study has the category tables and the method.
One item, right now: the sold filter, signed in. A handful of items a week: the sold filter, and sanity check anything that looks like a negotiated category. A business that depends on being right: something that returns the accepted price and more than 90 days, because those two gaps are the ones that cost real money.
100 free requests a month · every filter on · no card
Get a free key