# findCompletedItems replacement: how to get eBay sold data after the Finding API shutdown

URL: https://ebaysoldlistingsapi.com/blog/ebay-findcompleteditems-replacement

Updated: 2026-10-15



eBay shut down the Finding API, and findCompletedItems went with it. Here is what replaced it, what the official options really cover, and how to migrate your code to a sold-listings API in minutes.



For years, `findCompletedItems` in eBay's Finding API was how developers pulled sold and completed listings. eBay decommissioned the Finding API in February 2025, so every call to it now fails. If your price checker, repricer, or valuation model depended on it, this guide shows the fastest way back to working sold data.

### What eBay offers instead (and why it usually does not help)

Option | Returns sold items? | Who can use it
--- | --- | ---
Finding API `findCompletedItems` | Did, until February 2025 | Nobody, the API is retired
Browse API `item_summary/search` | No, active listings only | Any developer
Marketplace Insights API | Yes, last 90 days | Limited release, approval required and rarely granted
Terapeak (Seller Hub) | Yes, in a browser | eBay sellers, no API
eBay Sold Listings API | Yes, up to 240 sales per call | Anyone with a free key

The official migration path eBay points to is the Browse API, but it only searches live listings. The only first-party source of sold data is Marketplace Insights, and most applications are never approved. That gap is why sold-listings APIs exist.

### Migrating a findCompletedItems call

A typical old request looked like this:

```
GET https://svcs.ebay.com/services/search/FindingService/v1
  ?OPERATION-NAME=findCompletedItems
  &SECURITY-APPNAME=YourAppID
  &RESPONSE-DATA-FORMAT=JSON
  &keywords=nintendo+switch+oled
  &itemFilter(0).name=SoldItemsOnly
  &itemFilter(0).value=true
```

The equivalent today is one GET with a bearer key. Sold-only is the default, so there is no filter to remember:

```
curl "https://api.ebaysoldlistingsapi.com/scrape?keyword=nintendo+switch+oled" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

### Field mapping

findCompletedItems field | Sold Listings API field
--- | ---
`itemId` | `itemId`
`title` | `title`
`sellingStatus.currentPrice` | `soldPrice` + `soldCurrency`
`listingInfo.endTime` | `endedAt`
`condition.conditionDisplayName` | `condition` (and `conditionId`)
`listingInfo.listingType` | `buyingFormat` (auction or buyItNow)
`sellingStatus.bidCount` | `bidCount`
`shippingInfo.shippingServiceCost` | `shippingPrice` + `shippingType`
`sellerInfo.sellerUserName` | `sellerUsername`
`viewItemURL` | `url`
`galleryURL` | `thumbnailUrl`
(not available) | `totalPrice`, `bestOfferAccepted`, `itemLocation`

### Filters that carry over

- `itemFilter Condition` becomes `itemCondition=new|used` or an exact `conditionId`.
- `itemFilter MinPrice / MaxPrice` becomes `minPrice` and `maxPrice`.
- `itemFilter ListingType` becomes `buyingFormat=auction|buyItNow`.
- `categoryId` stays `categoryId`.
- `GLOBAL-ID` (EBAY-GB, EBAY-DE...) becomes `ebaySite=ebay.co.uk`, `ebay.de`, and so on across 8 marketplaces.
- Date windows use `soldAfter` and `soldBefore` (YYYY-MM-DD).
- `sortOrder=EndTimeSoonest` becomes `sortOrder=endedRecently`; `PricePlusShippingLowest` becomes `pricePlusPostageLowest`; `StartTimeNewest` becomes `timeNewlyListed`.
- `paginationInput.entriesPerPage` (max 100) becomes `count` (max 240), and `pageNumber` becomes `page`; read `hasNextPage` to know when to stop.
- `SECURITY-APPNAME` becomes an `Authorization: Bearer` key from the dashboard. No eBay developer account or approval.

### Drop-in Python helper

```
import requests

def find_completed_items(keywords, site="ebay.com", **filters):
    r = requests.get(
        "https://api.ebaysoldlistingsapi.com/scrape",
        params={"keyword": keywords, "ebaySite": site, **filters},
        headers={"Authorization": "Bearer YOUR_API_KEY"},
        timeout=90,
    )
    r.raise_for_status()
    return r.json()["results"]

for item in find_completed_items("nintendo switch oled", itemCondition="used"):
    print(item["endedAt"], item["soldPrice"], item["title"])
```

Need hundreds of keywords at once, like a nightly repricing run? Use batch jobs (https://ebaysoldlistingsapi.com/docs/batch-jobs) to submit up to 100 keywords in one request and download everything as a single CSV.

Q: Is findCompletedItems still available?
A: No. eBay decommissioned the Finding API, including findCompletedItems, in February 2025. Calls to it no longer return data.

Q: What is the official replacement for findCompletedItems?
A: eBay's Browse API replaced most Finding API search calls, but it only returns active listings. Sold data officially lives in the Marketplace Insights API, which is limited release and requires eBay approval.

Q: How do I get eBay sold listings without Marketplace Insights access?
A: Use a sold-listings API such as the eBay Sold Listings API. One GET request returns up to 240 completed sales for a keyword as JSON, with a free plan to start.

Q: Does the replacement cover eBay UK and Germany?
A: Yes. Pass ebaySite=ebay.co.uk, ebay.de, ebay.com.au, ebay.ca, ebay.fr, ebay.it, or ebay.es. Prices come back in the local currency.
