CompSniper
Regional API guide

How to Get eBay Canada Sold Listings with an API

To get eBay Canada sold listings with an API, call CompSniper's GET /v1/scrape with ebaySite=ebay.ca. You get sold comps as JSON with CAD prices, shipping when eBay shows it, sale dates and Best Offer markers.
By Marc AndrewTested with a real ebay.ca search

Search ebay.ca for completed sales

Create a free CompSniper account, set your key as COMPSNIPER_API_KEY and send ebaySite=ebay.ca. eBay's ID EBAY_CA works too.

This tested request asks for five recently ended, used iPhone 14 Pro sales on ebay.ca.

Canada sold listings
curl --get --fail-with-body --max-time 75 "https://api.compsniper.com/v1/scrape" \
  --header "Authorization: Bearer $COMPSNIPER_API_KEY" \
  --data-urlencode 'keyword=iPhone 14 Pro' \
  --data-urlencode 'ebaySite=ebay.ca' \
  --data-urlencode 'count=5' \
  --data-urlencode 'itemCondition=used' \
  --data-urlencode 'sortOrder=endedRecently' \
  --data-urlencode 'sold=true'

A real ebay.ca response in CAD

We ran the request above on . It returned HTTP 200 and five listings. This excerpt shows selected fields from one of those five rows; the other rows and top-level fields are omitted. Values are unchanged.

Real response excerpt
{
  "keyword": "iPhone 14 Pro",
  "totalItems": 5,
  "items": [
    {
      "itemId": "188997248810",
      "title": "Apple iPhone 14 Pro - 256 GB - Physical Sim - Deep Purple (Unlocked)",
      "condition": "Pre-Owned",
      "conditionId": 3000,
      "soldPrice": "539.72",
      "soldCurrency": "CAD",
      "shippingPrice": "39.71",
      "shippingCurrency": "CAD",
      "shippingType": "paid",
      "totalPrice": "579.43",
      "endedAt": "2026-09-28",
      "scrapedAt": "2026-10-03T04:46:12.352167+00:00",
      "itemLocation": null,
      "sellerType": null,
      "bestOfferAccepted": true,
      "url": "https://www.ebay.ca/itm/188997248810?nordt=true"
    }
  ]
}

endedAt is the reported sale date; scrapedAt is the collection timestamp. Repeating the request can return different listings. totalItems: 5 describes the original response, not the one-row excerpt.

This row sold for CAD 539.72 plus CAD 39.71 shipping (shippingPrice, with totalPrice CAD 579.43) on September 28, 2026, and carries bestOfferAccepted: true.

CAD prices and real shipping amounts

Unlike the European samples, three of the five Canadian rows included a known shipping charge (CAD 39.71 to CAD 113.22). Two showed unknown shipping. Compare item prices with item prices, and delivered totals only where shipping is known.

Every row came back with the English condition label Pre-Owned and conditionId 3000. Keep itemCondition=used for used comps, and still read titles for cracked screens or locked phones.

Storage matters for phones: this sample mixed 128 GB, 256 GB and 512 GB units. Put storage in the keyword or group by it before taking a median.

Read Best Offer sales carefully

bestOfferAccepted means the real price was probably lower
When a Best Offer is accepted, eBay usually keeps showing the asking price. The row above is flagged bestOfferAccepted: true, so CAD 539.72 is an upper bound for what the buyer paid. null means the marker was not seen, not that the price is verified.

Keep the comparison recent

Four of the five sales ended in late September 2026, but one ended on March 2, 2026. Old sales can drag a phone median off as new models launch. Add a date window:

Only sales since September 1
curl --get --fail-with-body --max-time 75 "https://api.compsniper.com/v1/scrape" \
  --header "Authorization: Bearer $COMPSNIPER_API_KEY" \
  --data-urlencode 'keyword=iPhone 14 Pro' \
  --data-urlencode 'ebaySite=ebay.ca' \
  --data-urlencode 'count=5' \
  --data-urlencode 'itemCondition=used' \
  --data-urlencode 'sortOrder=endedRecently' \
  --data-urlencode 'sold=true' \
  --data-urlencode 'soldAfter=2026-09-01'

The default AI cleanup removes cases and wrong models; use relevance=false for every raw result. Raise count up to 240 for a fuller sample.

Common questions about eBay Canada sold listings

How do I get eBay Canada sold listings through an API?

Call CompSniper GET /v1/scrape with ebaySite=ebay.ca (or the eBay marketplace ID EBAY_CA), a product keyword and your CompSniper Bearer API key. It returns up to 240 sold listings as JSON. The example in this guide returned CAD prices with paid shipping.

Are eBay Canada prices returned in CAD?

In the recorded sample, every row returned CAD in soldCurrency and shippingCurrency. Read the currency on each row rather than assuming it, and never mix CAD and USD values in one median.

What does bestOfferAccepted: true mean?

The listing sold through an accepted Best Offer. eBay usually shows the original asking price on these, so the buyer likely paid less than soldPrice. Treat those rows as an upper bound or keep them separate.

How do I keep only recent sales?

Add soldAfter (and optionally soldBefore) in YYYY-MM-DD format. In the recorded sample, one of five sales was months older than the rest, which a soldAfter filter would exclude.

Does Canada support the private or business seller filter?

No. sellerType only applies on ebay.de, ebay.fr, ebay.it and ebay.es, where eBay labels seller types. On ebay.ca the filter is ignored and sellerType is null.

Can I get the raw ebay.ca results?

Yes. Add relevance=false for the sold results exactly as eBay lists them. With the default cleanup on, rawMedian and rawSampleCount still report the numbers from before cleanup.

Continue your integration

Keep each marketplace and currency attached to its own sold comps. These guides use the same endpoint and API key:

For the full contract, see the API reference. The eBay sold listings API overview covers the product, and the CSV and Excel guide covers spreadsheet exports.

Written by the CompSniper team. The examples are dated observations, not current valuations or evidence of complete market coverage. CompSniper is an independent service, not an official eBay API.

Try your first ebay.ca sold search

Create a free CompSniper account, get an API key and run the request above. The free plan includes 100 requests per month, with no credit card required.