CompsAPI is live. Three years of eBay sold history, real Best Offer prices. Get a free key →
[ 200 OK ] [ SOLD ] [ .JSON ] [ 1095 D ]
2 months free on annual billing →

The eBay sold listings API,three years deep

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.

GET api.compsapi.com/v1/sold?q=charizard+psa+10&best_offer=1
cached production response[ .JSON ]

      
[ 01 / 08 ] · MAIN FEATURES
//◆ Developer first \\

Sold data, ready to query

Plain HTTPS and JSON. No SDK required, no OAuth dance, no eBay developer approval.

Sold search

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.

Learn more ›

Comps

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 ›

Card layerNEW

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 ›
[ .JSON ]

        
[ 02 / 08 ] · BEST OFFER
//$ Priced right \\

eBay shows asking.
We return the price paid.

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.

Read the docs ›
Rolex Submariner Date · sold on eBay, Best Offer accepted
$24,995 asking
$24,995
"best_offer": true

A real sale from our verification set. The public sold page reported $24,995. The buyer paid $15,500.

Best Offer accuracy

49 accepted-offer sales across four searches, verified one by one, Oct 2026
SourceReturnsReal price
CompsAPIAccepted offer amount49 / 49
Public sold pageAsking price0 / 49
90 day scrapersAsking price0 / 49
[ 03 / 08 ] · PRICE HISTORY
//◷ 1,095 days \\

Three years of eBay
price history

The public sold search stops at 90 days. CompsAPI goes back 1,095, so you price by trend instead of by snapshot.

iPhone 14 Pro · average sold price on eBay US

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.

[ 04 / 08 ] · THE DATA
//≔ Plain JSON \\

Every field you need,
nothing to parse twice

Endpoints

Bearer key auth · HTTPS · JSON
GET /v1/soldSearch sold listings, up to 240 rows per page
GET /v1/compsMedian, spread and newest matches for one query
GET /v1/usageQuota and usage in real time, free to call

Every sale carries

Response fields on /v1/sold items
title · item_id · urlThe listing, exactly as it sold
priceFinal sale price; the accepted amount on offer sales
best_offertrue when the sale closed as an accepted offer
last_soldSold date and time, UTC, to the minute
format · shipping_costAUCTION 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

[ 05 / 08 ] · USE CASES
//◈ Who it's for \\

Built for people
who price things

Resellers and flippers

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.

Trading card dealers

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.

Watch and luxury dealers

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.

Repricing and pricing software

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.

Marketplaces and recommerce

Instant valuations for trade in flows, consignment intake and buyback offers, backed by the prices buyers actually paid on eBay rather than list prices.

Analysts and researchers

Monthly average prices and sales volumes per query across 36 months. Track launch cliffs, seasonality and depreciation curves product by product.

[ 06 / 08 ] · REPLACES
//⇄ Drop in \\

The replacement for
retired eBay data APIs

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.

eBay sold data options, October 2026

From public pricing pages and our own measurements
SourceHistoryBest Offer pricePer pageBest $ per 1k calls
CompsAPI1,095 daysReal accepted price240$0.66
SoldComps90 daysAsking price240$1.58
CompSniper90 daysFlag only240$1.58
SoldGraphno fixed windowFlag onlyone page$1.43
Apify actors90 daysAsking pricevaries$2.50 per 1k rows
eBay sold search90 daysAsking price60manual
[ 07 / 08 ] · PRICING
//¢ Simple plans \\

More requests per dollar

A request is one search page of up to 240 sales. Failed requests are never counted.

Free

$0 / mo
  • 250 requests / mo
  • 90 days of history
  • Real Best Offer prices
  • All filters, card layer
  • No card required
Start free

Starter

$9 / mo
  • 5,000 requests / mo
  • 90 days of history
  • Real Best Offer prices
  • All filters, card layer
  • Email support
Choose Starter
Most popular

Growth

$29 / mo
  • 25,000 requests / mo
  • Full 3 year history
  • Real Best Offer prices
  • 120 requests / min
  • Priority email support
Choose Growth

Pro

$79 / mo
  • 100,000 requests / mo
  • Full 3 year history
  • Real Best Offer prices
  • 120 requests / min
  • Priority email support
Choose Pro

Business · 300,000 requests / mo for $199  ·  Enterprise · custom volume, SLA and bulk history exports, from $500

Talk to us

Overage $2 per 1,000 · upgrade, downgrade or cancel anytime

[ 08 / 08 ] · FAQ
//? Straight answers \\

Frequently asked questions

Is this eBay's official API?

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.

How do I see eBay sold items older than 90 days?

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.

Do you return the real Best Offer price?

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.

Is there a replacement for findCompletedItems?

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.

Is there an alternative to the Marketplace Insights API?

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.

What is a comp?

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.

How fresh is the data?

Sales usually appear within minutes. Each response carries the sold date and time, not just the date.

Which marketplaces are covered?

eBay US is primary, with matching sales from other eBay sites merged in. More marketplaces are on the roadmap.

What counts as a request?

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.

What are the rate limits?

Paid plans run at up to 120 requests a minute. For more throughput, bulk history exports or an SLA, ask about Enterprise.

Do you cover auctions and Buy It Now?

Both. Every row carries format, AUCTION or FIXED_PRICE, and the condition and Best Offer filters work across both formats.

Can I try it before paying?

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.

Price from what things
actually sold for

250 free requests a month · every filter on · no card

Get a free key