CompSniper
Developer guide

How to get sold items with the eBay API in 2026

eBay's public APIs no longer return other sellers' sold items: Browse API is active listings only, findCompletedItems was shut down in February 2025, and Marketplace Insights is closed to new developers. To get sold items in code today, call a sold listings API such as GET /v1/scrape?sold=true, which returns up to 240 sold items per request as JSON.
By Marc Andrew7 minute read

Every way to get eBay sold items through an API

APIReturnsAccessSold items today?
Browse API item_summary/searchActive listings onlyOpen to all developersCannot return sold items
Finding API findCompletedItemsSold and completed itemsDecommissioned February 4, 2025No longer works
Marketplace Insights item_sales/searchSold items, last 90 daysLimited Release, not open to new usersWorks only if eBay already approved you
Sell Analytics / Trading APIYour own account's salesYour seller accountOnly your sales, not the market
CompSniper /v1/scrapeSold items, up to 240 per requestFree API key in minutesWorks today on 8 eBay sites

The official history in detail, with links to eBay's own documentation, is in does eBay have a sold listings API? This guide is the practical part: getting sold items into your code today.

Get sold items in Python, JavaScript or cURL

Create a free key at compsniper.com/signup (100 requests a month, no credit card) and set it as COMPSNIPER_API_KEY. Then:

import os
import requests

def get_sold_items(keyword, site="ebay.com", count=240, page=1, **filters):
    response = requests.get(
        "https://api.compsniper.com/v1/scrape",
        headers={"Authorization": f"Bearer {os.environ['COMPSNIPER_API_KEY']}"},
        params={"keyword": keyword, "ebaySite": site, "sold": "true",
                "count": count, "page": page, **filters},
        timeout=75,
    )
    response.raise_for_status()
    return response.json()

data = get_sold_items("nintendo switch oled")
print(data["summary"]["median"], len(data["items"]))
for item in data["items"][:5]:
    print(item["endedAt"], item["soldPrice"], item["title"])

Full walkthroughs with retries and pagination: Python guide, JavaScript and TypeScript guide.

What a sold items response looks like

Each request returns the sold rows in items and a calculated summary. Trimmed example: the summary numbers come from a real Switch OLED search on October 2, 2026, and the single row shows the shape of an item.

JSON
{
  "keyword": "nintendo switch oled",
  "totalItems": 181,
  "hasNextPage": false,
  "summary": { "count": 181, "currency": "USD", "median": 180, "p25": 159.99,
               "p75": 219.99, "min": 85.99, "max": 499.99 },
  "items": [
    { "itemId": "...", "title": "Nintendo Switch OLED Model White ...",
      "soldPrice": "189.99", "soldCurrency": "USD", "shippingPrice": "0.00",
      "endedAt": "2026-10-01T...", "condition": "Pre-Owned",
      "bestOfferAccepted": null, "url": "https://www.ebay.com/itm/..." }
  ]
}

Every field is listed in the API reference. bestOfferAccepted flags sales where the visible price may be higher than what the buyer paid.

Filter sold items and page through results

  • ebaySite: ebay.com, ebay.co.uk, ebay.de, ebay.fr, ebay.it, ebay.es, ebay.ca or ebay.com.au. Defaults to ebay.com.
  • itemCondition (new, used) or conditionId for eBay's numeric condition IDs.
  • categoryId: an eBay category ID from our category ID reference.
  • minPrice, maxPrice, buyingFormat, itemLocation, soldAfter, soldBefore.
  • page with hasNextPage for more results (see pagination).

These map one to one onto eBay's own search filters; our eBay URL parameters guide shows the LH_Sold, _sacat and _sop values behind each one.

Production tips

  • Keep the key on your server. Never ship it in a browser bundle or mobile app.
  • Retry 429 and 503 with backoff. Failed requests are not charged. The error guide lists which codes are safe to retry.
  • Set ebaySite every time. The API does not guess your user's country.
  • Cache per keyword. Sold prices change daily, not every second. Refreshing once a day per item is plenty for most pricing apps.
  • Many items? Use bulk search for up to 20 keywords per run, or the Card Batch API for trading cards.
One request, one charge
A successful request uses one request from your allowance whether it returns 5 sold items or 240. Plans start free with 100 requests a month.

eBay sold items API questions

Can the eBay Browse API return sold items?

No. The Browse API item_summary/search endpoint only returns items currently for sale. It has no sold or completed filter, so it cannot be used for sold prices.

Does findCompletedItems still work?

No. findCompletedItems was part of eBay's Finding API, which eBay decommissioned on February 4, 2025. Code that calls it now fails.

How do I get access to the Marketplace Insights API?

eBay lists Marketplace Insights as a Limited Release that is not open to new users. Developers without existing approval generally cannot get access, which is why most teams use a third-party sold items API.

What is the best API to get eBay sold items?

For most developers, a third-party sold listings API that works today. CompSniper's GET /v1/scrape returns up to 240 sold items per request as JSON with a price summary, across 8 eBay marketplaces, with 100 free requests a month.

How far back can I get eBay sold items through an API?

Sold-item search through CompSniper and through Marketplace Insights covers roughly the last 90 days. Longer history exists only inside eBay's Terapeak Product Research dashboard, which has no public API.

Can I get my own eBay sales through the API?

Yes. eBay's Sell APIs and the Trading API return orders for your own seller account. They do not return other sellers' sales, so they cannot be used for market comps.

Written by CompSniper's founder. eBay API status checked October 3, 2026.

Get eBay sold items in your code today

One REST call, up to 240 sold items as JSON, 8 marketplaces. 100 free requests a month.