compsapi.com / completed listings

eBay completed listings, and what they are not

Completed and sold are different things, and treating them as one is a common way to get prices wrong. What each term means, how far back you can see, and what replaced the API call that returned them.

Completed is not the same as sold

A completed listing is any listing that has ended. A sold listing is one that ended with a sale. Every sold listing is completed; most completed listings are not sold.

That matters because an unsold listing ended at its asking price with nobody willing to pay it. It tells you what a seller hoped for, not what the market paid. Mix the two together and your average drifts upward by however many sellers were optimistic, which in slow categories is most of them.

So when old documentation, a forum post from 2019 or a spreadsheet template says "completed listings", check which one it actually means. If you are pricing, you want sold.

What unsold listings are good for

They are not useless, they are just a different measurement. The gap between asking prices that did not sell and prices that did is a read on how much sellers are overreaching in a category, and a high ratio of ended to sold is a demand signal. Just do not average them into a price.

Where they went

Both now require a signed in session, and the public view reaches back about 90 days. The practical effect is that the old workflow, open advanced search while logged out and scan a long tail of completed results, does not work any more. For anything that sells a few times a year, 90 days is frequently an empty page.

What happened to the API

findCompletedItems was the Finding API call that returned completed and sold listings for a keyword. It was deprecated, then switched off, and the Finding API followed. Code calling it now fails rather than returning short results, which at least makes the breakage obvious.

eBay's official successor for sold data, the Marketplace Insights API, is a limited release restricted to approved partners. If you were not approved, there is no official route, which is the position most teams are in. There is a field by field map from the old call here.

Searching completed sales now

One request returns up to 240 completed sales for a keyword, with price, sold date, format and shipping, reaching back up to 1,095 days instead of 90. Every row is a sale, so the sold against unsold problem does not arise:

curl -G https://api.compsapi.com/v1/sold \
  -H "Authorization: Bearer YOUR_KEY" \
  --data-urlencode "q=charizard psa 10" \
  --data-urlencode "days=1095" \
  --data-urlencode "best_offer=1"

Each row carries format, so auctions and fixed price sales can be separated, and best_offer, so you can see which sales were negotiated. That last flag matters more than it sounds: on the public page a negotiated sale displays the asking price rather than the amount paid, which we measured at a median 14.9% too high across 5,859 matched sales.

A free key is 100 requests a month, no card, and each request can return 240 sales.

Price from what things
actually sold for

100 free requests a month · every filter on · no card

Get a free key