eBay Best Offer price API: get what the buyer actually paid
eBay's sold pages show the listing price on Best Offer sales, not what the buyer paid. Across 9,500 accepted-offer sales, buyers paid a median 14.2% less. Here is how to get the real accepted price with one API parameter, and how the main sold-data APIs compare.
Short answer: when an eBay listing sells through an accepted Best Offer, the sold page keeps showing the original listing price. The buyer usually paid less. Add bestOfferPrice=true to any sold search on the eBay Sold Listings API and every accepted-offer sale also returns acceptedOfferPrice, the price the buyer actually paid, at no extra cost.
How much the listing price overstates Best Offer sales
We looked up the accepted price on 9,500 US accepted-offer sales between October 11 and October 22, 2026, across trading cards, phones and electronics, sneakers and fashion, watches and cameras.
| Measure | Result |
|---|---|
| Median gap between listing price and price paid | 14.2% lower |
| 1 in 10 accepted-offer sales | 31.8% lower or more |
| Average gap | 16.2% lower |
| Sales where the buyer paid the full listing price | 160 of 9,500 (1.7%) |
On items where many sales close on offers, like graded cards, sneakers and used electronics, averaging the sold page prices therefore pushes your comps up by roughly 14% on those rows. For a repricer, a valuation tool or a buy-list, that is the difference between a fair offer and an overpay.
How to get the accepted offer price
curl "https://api.ebaysoldlistingsapi.com/scrape?keyword=charizard+ex+199/165+psa+10&bestOfferPrice=true" \
-H "Authorization: Bearer YOUR_API_KEY"Every sale with bestOfferAccepted: true then carries two extra fields. soldPrice is never changed, so you always have both numbers.
| Field | Meaning |
|---|---|
acceptedOfferPrice | The price the buyer actually paid, as a decimal string in the sale currency. Null until found. |
acceptedOfferPriceStatus | found (final), pending (still being looked up, for up to about a day, so the same search later returns it) or not_available. |
import requests
r = requests.get(
"https://api.ebaysoldlistingsapi.com/scrape",
params={"keyword": "air jordan 1 chicago 2015", "bestOfferPrice": "true"},
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=90,
)
r.raise_for_status()
for sale in r.json()["results"]:
paid = sale.get("acceptedOfferPrice") if sale.get("acceptedOfferPriceStatus") == "found" else sale["soldPrice"]
print(sale["endedAt"], paid, sale["title"])Pricing tip: for a market price, use acceptedOfferPrice when its status is found, and treat soldPrice as an upper bound on accepted-offer rows that are still pending or not_available.
Not just trading cards
Some services only return accepted prices for collectibles. In the same October 2026 sample we returned the accepted price on 791 phone and electronics sales, 426 sneaker and fashion sales, 98 watch sales and 2,934 trading card sales. Accepted prices are available for sales priced in US dollars.
How eBay sold-data APIs handle Best Offer (October 2026)
| API | Accepted offer price | How | Extra cost |
|---|---|---|---|
| eBay Sold Listings API | Yes, all categories (USD sales) | bestOfferPrice=true on any sold search | None, 1 request per page of up to 240 sales |
| CompsAPI | Yes | best_offer=1 | None stated |
| Trawl | Collectibles only (cards, comics) | details=1 | Detail pages cost more credits |
| Soldgraph | No, flag only | best_offer_accepted flag; displayed prices are not verified accepted-offer prices | Not applicable |
| eBay Browse API | No | Active listings only | Not applicable |
Where the eBay Sold Listings API stands out: the accepted price comes back in the same call as the rest of the sale, on every plan including Free, across categories, with up to 240 sales per page and live data from 8 eBay marketplaces. The Unlimited plan gives you all of it without counting requests.
Try it
Create a free key, then add bestOfferPrice=true to a search you already run. Full field reference: Best Offer prices docs.
Does eBay show the accepted Best Offer price on sold listings?
Not on the sold search results. eBay shows the original listing price with a Best Offer accepted label, so the sold price overstates what the buyer paid. Across 9,500 US accepted-offer sales in October 2026, buyers paid a median 14.2% less than the listing price.
How do I get the accepted offer price through an API?
Add bestOfferPrice=true to a sold search on the eBay Sold Listings API. Each accepted-offer sale then includes acceptedOfferPrice and acceptedOfferPriceStatus, alongside the unchanged soldPrice.
Does it cost extra?
No. bestOfferPrice=true uses the same single request as any sold search, on every plan including Free.
What does pending mean?
The accepted price is still being looked up, for up to about a day. Run the same search later and it returns the price once found.
Does it work for categories other than trading cards?
Yes. In October 2026 accepted prices were returned for phones and electronics, sneakers and fashion, watches and cameras as well as trading cards. Accepted prices are available for sales priced in US dollars.
Try it with real data
Get completed eBay sales as JSON. Fifty free requests a month, no card required.
Get your API key