Response
Every field returned by GET /scrape, the response envelope and the headers, with an example.
Every response returns the complete set of matching sales, each with full listing detail in the marketplace's own currency, ready to drop into your database, model or spreadsheet.
{
"keyword": "nintendo switch oled",
"ebaySite": "ebay.com",
"count": 240,
"page": 1,
"hasNextPage": true,
"totalResults": 2900,
"results": [
{
"itemId": "1256xxxxxxxx",
"title": "Nintendo Switch OLED White",
"soldPrice": "255.00",
"soldCurrency": "USD",
"endedAt": "2026-09-20",
"condition": "Pre-Owned",
"buyingFormat": "buyItNow",
"bidCount": null,
"bestOfferAccepted": false,
"shippingPrice": "0",
"shippingType": "free",
"totalPrice": "255.00",
"sellerUsername": "top_deals_88",
"url": "https://www.ebay.com/itm/1256xxxxxxxx",
"thumbnailUrl": "https://i.ebayimg.com/images/g/..."
}
]
}Envelope
countnumberpagenumberhasNextPagebooleanTrue when eBay has more results for this search. Request page=2, page=3 and so on until it is false.
totalResultsnumber | nulleBay's own match count for the keyword. It is a rough figure that includes near matches, so expect fewer clean sales than this number.
Result fields
itemIdstringtitlestringsoldPricestringsoldCurrencystringendedAtstringYYYY-MM-DD.conditionstringbuyingFormatstringbuyItNow or auction. Auctions also include a bid count.bidCountnumber | nullbestOfferAcceptedbooleanTrue when the sale closed through an accepted Best Offer. eBay shows the listing price on these sales, so soldPrice
is an upper bound for them. Add bestOfferPrice=true to get the price actually paid.
acceptedOfferPricestring | nullOnly with bestOfferPrice=true. See Best Offer prices.
acceptedOfferPriceStatusstringOnly with bestOfferPrice=true, on accepted-offer rows: found, pending or not_available.
shippingPricestring"0" when free).shippingTypestringfree, flat or calculated.totalPricestringsellerUsernamestringurlstringthumbnailUrlstringEach result also carries additional metadata (seller feedback, item location, category and rating fields) for callers that need it.
Headers
X-Usage-RemainingintegerRequests left in your monthly allowance after this call. Omitted on the Unlimited plan.
X-RateLimit-LimitintegerYour plan's per-minute request limit (sent with X-RateLimit-Window: 60).
X-Fair-Usestringthrottled on the Unlimited plan once the period's fair-use volume is reached. See Rate limits.
Retry-AftersecondsSent with 429, 502 and 503 responses: how long to wait before retrying.