Real eBay sold prices as JSON: up to 240 sales per GET request, up to 1,095 days of price history, and the price a Best Offer actually closed at. One key, no approval process.
Plain HTTPS and JSON. No SDK required, no OAuth dance, no eBay developer approval.
Search every matching eBay sale up to 1,095 days back. Each row carries the sold date and time, sale format, shipping cost and a best_offer flag. Minus words, category and condition filters (new, open box, refurbished, used, parts) built in.
A priced answer in one call: the median, the spread and the newest matching sales, with parts, lots, bundles and wrong models cleaned out before the math runs.
Learn more ›Built for trading card comps: filter by grader (PSA, BGS, CGC and more), grade, language and first edition, with junk detection tuned for card titles.
Learn more ›Best Offer hides the real price. When a buyer and seller agree on an offer, the public sold page keeps showing the asking price. On high ticket items the gap often runs 20 to 40 percent, and anything priced from it inherits the error.
One parameter fixes it. Pass best_offer=1 and every sale carries a flag, with price set to the amount the sale actually closed at. Pass best_offer=only to get accepted offers and nothing else.
A real sale from our verification set. The public sold page reported $24,995. The buyer paid $15,500.
| Source | Returns | Real price |
|---|---|---|
| CompsAPI | Accepted offer amount | 49 / 49 |
| Public sold page | Asking price | 0 / 49 |
| 90 day scrapers | Asking price | 0 / 49 |
The public sold search stops at 90 days. CompsAPI goes back 1,095, so you price by trend instead of by snapshot.
Seasonality needs a full year. Sports cards climb into the playoffs, consoles spike in December, golf clubs peak in spring. A 90 day window hides every one of those curves and quietly misprices anything seasonal.
Depreciation needs three. The chart above is real API output: iPhone 14 Pro average sold price, down 30 percent across 24 months. Price trade ins, buybacks and insurance values from the curve, not the moment. Pass days=1095 and page through it.
| GET /v1/sold | Search sold listings, up to 240 rows per page |
| GET /v1/comps | Median, spread and newest matches for one query |
| GET /v1/usage | Quota and usage in real time, free to call |
| title · item_id · url | The listing, exactly as it sold |
| price | Final sale price; the accepted amount on offer sales |
| best_offer | true when the sale closed as an accepted offer |
| last_sold | Sold date and time, UTC, to the minute |
| format · shipping_cost | AUCTION or FIXED_PRICE, buyer shipping |
p50 1.0 s · p95 about 2 s · 99.98% success over 93,660 production requests · failed requests never counted · time based paging, no duplicates between pages
Check what an item actually sells for before you buy it. Pull eBay comps by condition, see the spread between asking and accepted prices, and price listings to move instead of sit.
Graded card comps for PSA, BGS and CGC with grade and language filters. Three years of history shows how a card priced across whole seasons, not one hot week.
High ticket sales close as Best Offers, so public sold prices run high. Price watches, jewelry and designer pieces from accepted offers, not wishful asking prices.
Feed live sold comps into your repricer, valuation model or buy box logic. Time based paging keeps syncs clean and /v1/usage makes metering your own customers simple.
Instant valuations for trade in flows, consignment intake and buyback offers, backed by the prices buyers actually paid on eBay rather than list prices.
Monthly average prices and sales volumes per query across 36 months. Track launch cliffs, seasonality and depreciation curves product by product.
findCompletedItems is retired. eBay switched off the Finding API call developers used for sold and completed listings. CompsAPI returns the same workflow's data, keyword search over sold items with price, date, format and shipping, as one GET request.
Marketplace Insights is closed. eBay's Marketplace Insights API is limited to approved partners and closed to new applicants. CompsAPI needs no approval, no eBay developer account and no quota negotiation. Start with a free key today.
Scrapers hit the 90 day wall. Scraping sold search means login walls, 90 days of history, asking prices on Best Offer sales and constant maintenance. An API that maintains itself costs less than a scraper that doesn't.
| Source | History | Best Offer price | Per page | Best $ per 1k calls |
|---|---|---|---|---|
| CompsAPI | 1,095 days | Real accepted price | 240 | $0.66 |
| SoldComps | 90 days | Asking price | 240 | $1.58 |
| CompSniper | 90 days | Flag only | 240 | $1.58 |
| SoldGraph | no fixed window | Flag only | one page | $1.43 |
| Apify actors | 90 days | Asking price | varies | $2.50 per 1k rows |
| eBay sold search | 90 days | Asking price | 60 | manual |
A request is one search page of up to 240 sales. Failed requests are never counted.
Business · 300,000 requests / mo for $199 · Enterprise · custom volume, SLA and bulk history exports, from $500
Talk to usOverage $2 per 1,000 · upgrade, downgrade or cancel anytime
No. CompsAPI is an independent service and is not affiliated with eBay. eBay's own sold data options are the Marketplace Insights API, which is closed to new applicants, and the retired findCompletedItems call. CompsAPI is a drop in replacement for both workflows: one GET request, an API key, no approval process.
Pass days up to 1095 on /v1/sold. The response pages through up to three years of sold history for any search, with the sold date and time on every row.
Yes. With best_offer=1, every sale carries a best_offer flag and price is the amount the sale actually closed at, in every category. In our October 2026 verification, all 49 accepted-offer sales in the set carried the asking price on the public sold page and the real price here.
CompsAPI covers the findCompletedItems workflow: keyword search over sold listings with price, sold date, format and shipping per item, returned as JSON with up to 240 rows per page.
Yes. Marketplace Insights is limited to approved eBay partners. CompsAPI returns sold listings data with no approval process, a free tier to test on and up to 1,095 days of history instead of 90.
A comp, short for comparable sale, is a recent real sale of the same item in similar condition. Resellers price inventory from comps instead of list prices. /v1/comps automates it: a cleaned median, the spread and the newest matching sales in one call.
Sales usually appear within minutes. Each response carries the sold date and time, not just the date.
eBay US is primary, with matching sales from other eBay sites merged in. More marketplaces are on the roadmap.
One search page of up to 240 sales. /v1/usage is free to call and shows your quota in real time. Failed requests are never counted.
Paid plans run at up to 120 requests a minute. For more throughput, bulk history exports or an SLA, ask about Enterprise.
Both. Every row carries format, AUCTION or FIXED_PRICE, and the condition and Best Offer filters work across both formats.
Yes. The Free tier is 250 requests a month with every filter enabled, no card. Email keys@compsapi.com and you will have a key the same day.
250 free requests a month · every filter on · no card
Get a free key