CompSniper Docs

Accepted Best Offer Prices API

Get the price the buyer actually paid on eBay Best Offer sales with bestOfferPrice=true on /v1/scrape, at no extra cost, on every CompSniper plan.

On an eBay sale that ended with an accepted Best Offer, the sold page shows the listing price, not the price the buyer paid. Add bestOfferPrice=true to a sold search and CompSniper returns the real accepted price on those rows as acceptedOfferPrice. It is available on every plan, including free, and costs nothing extra: the search is still billed as one request.

In a test on October 11, 2026 across 177 Pokemon card Best Offer sales, the accepted price was found for 77% of them, and every accepted price was at or below the listing price shown on eBay.

Make a request

curl --fail-with-body \
  -H "Authorization: Bearer cs_live_REPLACEWITHYOURKEY" \
  "https://api.compsniper.com/v1/scrape?keyword=charizard+ex+199%2F165+psa+10&count=60&bestOfferPrice=true"
Python
import requests

response = requests.get(
    "https://api.compsniper.com/v1/scrape",
    headers={"Authorization": "Bearer cs_live_REPLACEWITHYOURKEY"},
    params={"keyword": "charizard ex 199/165 psa 10", "count": 60, "bestOfferPrice": "true"},
    timeout=120,
)
response.raise_for_status()
for item in response.json()["items"]:
    if item["bestOfferAccepted"]:
        print(item["itemId"], item["soldPrice"], item["acceptedOfferPrice"], item["acceptedOfferPriceStatus"])

Response fields

Rows where bestOfferAccepted is true gain two fields. Every other row is unchanged.

Accepted Best Offer row (shortened)
{
  "itemId": "389012345678",
  "title": "Pokemon Charizard ex 199/165 SIR PSA 10",
  "bestOfferAccepted": true,
  "soldPrice": "450.00",
  "soldCurrency": "USD",
  "acceptedOfferPrice": "405.00",
  "acceptedOfferPriceStatus": "found"
}
FieldMeaning
acceptedOfferPriceThe price the buyer actually paid, as a string in the sale currency. null unless the status is found.
acceptedOfferPriceStatusfound, pending or not_available (see below).

soldPrice is never changed. It stays the price eBay shows on the sold listing, so your existing code keeps working, and you can compare the two prices to see the discount the seller accepted.

Status values

StatusMeaning
foundThe accepted price is in acceptedOfferPrice. Found prices are final.
pendingNot found yet. CompSniper keeps checking in the background for up to 5 days. Look it up again later with the free lookup below.
not_availableNo accepted price will be returned for this sale, for example when it was still missing after 5 days, or the sale is not priced in US dollars.

Accepted prices are returned for sales priced in US dollars (ebay.com). On other marketplaces, accepted-offer rows return not_available.

Look up saved prices later (free)

GET /v1/best-offer-prices returns the saved accepted prices for up to 100 item IDs at once. It does not count against your monthly requests, so a daily job can fill in pending rows from earlier searches in one call.

curl -H "Authorization: Bearer cs_live_REPLACEWITHYOURKEY" \
  "https://api.compsniper.com/v1/best-offer-prices?itemIds=389012345678,389087654321"
Response
{
  "items": [
    { "itemId": "389012345678", "acceptedOfferPrice": "405.00", "acceptedOfferPriceStatus": "found" },
    { "itemId": "389087654321", "acceptedOfferPrice": null, "acceptedOfferPriceStatus": "pending" }
  ],
  "requestId": "..."
}

An item ID that was never seen in a bestOfferPrice=true search returns the status unknown. The lookup uses your normal per-minute rate limit.

Card Batch

Card Batch jobs accept the same option as options.bestOfferPrice: true, and each accepted-offer sale in the results carries acceptedOfferPrice and acceptedOfferPriceStatus. See Card Batch.

Good to know

  • Works on sold searches only. It is ignored with sold=false.
  • A search with accepted-offer rows can take a few seconds longer while prices are looked up. A problem with the lookup never fails the search itself.
  • Use acceptedOfferPrice when it is found and fall back to soldPrice otherwise, so your median reflects what buyers really paid.

On this page