SoldCompsdocs

API Reference · v1

SoldComps API

Real eBay completed sales — price, condition, date, seller — from a single request. No scraping setup, no stale cache, no OAuth dance. Three endpoints: synchronous /v1/scrape for one page at a time, async Max Mode for server-side pagination.

Machine-readable spec: openapi.json

New to eBay sold data? See how we compare →

Quickstart

curl -H "Authorization: Bearer sc_YOUR_KEY_HERE" \
  "https://api.sold-comps.com/v1/scrape?keyword=iphone+15+pro&count=10"

Authentication

All requests to the SoldComps API — /v1/scrape, /v1/scrape/category, and Max Mode — require a bearer token, with one exception (the RapidAPI channel, below):

Authorization: Bearer sc_YOUR_KEY_HERE

API keys start with sc_. Get one from the dashboard. The free plan includes 100 requests/month, no credit card required.

The /rapidapi/scrape-ebay endpoint authenticates through the RapidAPI marketplace headers instead — see the RapidAPI section.

Rate limits

Per-key rate limits scale with your plan. Standard plans (free, starter, growth, scale) get 60 requests/minute; mid-tier custom plans (100k–500k) get 120 requests/minute; and high-volume custom plans (2M, 4M) get 240 requests/minute. A purchasable rate-limit add-on raises any key to 500 requests/minute. When exceeded the API returns 429 with a Retry-After header.

Monthly request quotas vary by plan and are enforced separately from the per-minute bucket. When exhausted the API returns 403 until your billing cycle rolls. See current plan limits at /dashboard/subscription.

Errors

StatusMeaningWhat to do
400Invalid paramsCheck the error body — usually a missing keyword or out-of-range number.
401Missing or invalid API keyVerify the Authorization header. Keys start with sc_.
403Monthly quota exhaustedUpgrade or wait until the next billing cycle. Resets follow your subscription anchor, not calendar UTC.
429Per-minute rate limitBack off for the duration in Retry-After. Limits are 60/min on standard plans, 120/min on mid-tier custom (100k–500k), and 240/min on high-volume custom (2M/4M); the rate-limit add-on raises any key to 500/min.
502Upstream blockedeBay blocked the request. Retry; transient.
503Server busyConcurrency limit reached; retry shortly.
500Server errorUnexpected internal error. Retry with exponential backoff.

Pagination

Each /v1/scrape request returns one page of up to 240 sold listings. Increment the page parameter until hasNextPage is false.

Running the pagination loop client-side is fine for small sweeps. For larger jobs (50+ pages), use Max Mode instead — the server paginates, handles retries, and delivers results inline, via email, or as a signed CSV.

totalItems in the response is the count of items returned on the current page, not a grand total. It can also be lower than the count you requested — count is a ceiling, and items eBay renders without a parseable price or sold date are dropped.

# Increment page until hasNextPage is false
curl -H "Authorization: Bearer sc_YOUR_KEY_HERE" \
  "https://api.sold-comps.com/v1/scrape?keyword=iphone+15+pro&page=1"
# then page=2, page=3, ... while hasNextPage == true
GET/v1/scrape

Search sold listings

One keyword search returns up to 240 real completed eBay sales. Filters narrow by site, category, price range, condition, and seller type.

Query parameters

keywordstringrequired
eBay search term. URL-encode spaces and special characters.
pageintegeroptionaldefault: 1
Page number of eBay results to fetch. Increment until hasNextPage is false.
countinteger (1–240)optionaldefault: 240
Max items requested per page (range 1–240 on every plan). A ceiling, not a guarantee — the response may contain fewer items, because items without a parseable price or sold date are dropped during parsing, and promotional tiles are excluded.
ebaySiteenumoptionaldefault: ebay.com
eBay domain to scrape.
ebay.comebay.co.ukebay.deebay.frebay.itebay.esebay.caebay.com.au
categoryIdstringoptionaldefault: 0
eBay category ID (_sacat). Browse all 17,000+ IDs at sold-comps.com/ebay-categories. Use "0" for all categories.
sortOrderenumoptionaldefault: endedRecently
Sort order for results.
endedRecentlytimeNewlyListedpricePlusPostageLowestpricePlusPostageHighestdistanceNearest
minPricenumberoptional
Minimum price filter, in listing currency.
maxPricenumberoptional
Maximum price filter, in listing currency.
itemLocationenumoptionaldefault: default
Item location filter.
defaultdomesticworldwide
itemConditionenumoptionaldefault: any
Item condition filter applied as a request filter on eBay.
anynewused
sellerTypeenumoptional
Filter results by seller type. Only effective on EU sites (ebay.de, .fr, .it, .es). On non-EU sites the filter is silently ignored.
privatebusiness
includeCompleteListingbooleanoptionaldefault: true
Include eBay completed-listing metadata (LH_Complete=1). This is what enables accurate bestOfferAccepted detection — without it, eBay does not render the "Best offer accepted" signal and bestOfferAccepted is false for nearly all items. Does not change which listings are returned: results stay sold-only (LH_Sold=1 takes precedence). Set to false only to match pre-July-2026 behavior.
soldbooleanoptionaldefault: true
When true (default), returns completed/sold listings. When false, returns ACTIVE (currently-listed) results instead. Active responses swap the sold-only fields (soldPrice, soldCurrency, endedAt, bestOfferAccepted) for active-only ones: listingType="active", the asking price in currentPrice/currentPriceMax/currentCurrency, plus watcherCount, unitsSold, acceptsOffers, and timeLeft.

Response fields (each item)

itemIdstringoptional
eBay listing item ID.
urlstringoptional
Canonical listing URL with ?nordt=true to bypass eBay's catalog redirect.
thumbnailUrlstring | nulloptional
Listing thumbnail (500px) from i.ebayimg.com. null when the listing has no product image.
fullResThumbnailUrlstring | nulloptional
Full-resolution version of thumbnailUrl (~1600px), derived by replacing the size suffix (s-l500, s-l140, etc.) with s-l1600. null when thumbnailUrl is null.
epidstring | nulloptional
eBay catalog product ID. Stable across sellers for the same variant. null when the listing has no catalog match.
titlestring | nulloptional
Listing title.
conditionstring | nulloptional
eBay's own localized condition label (e.g. "Pre-Owned", "Gebraucht"), when it resolves to a known value. null when the listing shows no condition, or when the label eBay displayed does not match a known value (rare — the field is dropped rather than surfaced verbatim).
conditionIdnumber | nulloptional
eBay numeric condition ID (best-effort lookup from the localized label). Common: 1000 New, 3000 Used, 7000 For parts.
sellerType"private" | "business" | nulloptional
EU sites only (ebay.de, .fr, .it, .es). null on all non-EU sites. May also be null on EU sites served via eBay's newer card layout, pending mapping.
buyingFormat"auction" | "buyItNow" | "auctionWithBIN" | nulloptional
How the item was listed. "auction" = competitive bidding, "buyItNow" = fixed price (includes Best Offer listings), "auctionWithBIN" = auction that also had a Buy It Now option. null when the listing type could not be determined.
bidCountnumber | nulloptional
Number of bids received. Present for auction listings, null for fixed-price (Buy It Now) listings.
categoryIdstringoptional
eBay category ID.
listingType"sold" | "active"optional
Whether this is a completed sale ("sold", the default) or a currently-listed item ("active", returned when sold=false).
shippingPricestring | nulloptional
Shipping cost; "0.00" when free, null when unknown.
shippingType"free" | "paid" | "pickup" | "unknown" | nulloptional
Shipping category.
totalPricestring | nulloptional
Listing price (soldPrice or currentPrice) + shippingPrice when both known.
sellerUsernamestring | nulloptional
eBay seller username.
sellerPositivePercentnumber | nulloptional
Seller positive feedback percentage.
sellerFeedbackScorenumber | nulloptional
Seller total feedback count.
itemLocationstring | nulloptional
Seller's country as shown on the eBay search results page. Localized per site language (e.g., "United States" on ebay.com, "Großbritannien" on ebay.de). null on ebay.co.uk and when eBay omits the location for a listing.
scrapedAtstringoptional
ISO 8601 timestamp of when SoldComps fetched the listing.

Sold-listing fields (sold=true)

endedAtstring | nulloptional
Date the sale completed, as YYYY-MM-DD (date only — eBay never exposes a time of day). For active listings use timeLeft instead.
soldPricestring | nulloptional
The listing price at time of sale, as a decimal string. eBay does not disclose the accepted best-offer amount, so on Best Offer sales (bestOfferAccepted=true) this is an upper bound, not the realized price. For active listings the asking price is in currentPrice.
soldCurrencystring | nulloptional
ISO 4217 currency of soldPrice. Active listings use currentCurrency.
bestOfferAcceptedbooleanoptional
true when the seller accepted a best offer rather than the listing selling at the listed price. eBay never discloses the accepted offer amount — see soldPrice for what that field actually represents on a Best Offer sale. Requires includeCompleteListing=true (the default). For active listings, whether the listing accepts offers is in acceptsOffers.

Active-listing fields (sold=false)

currentPricestring | nulloptional
Current asking price — the from/low bound of a multi-variant range. The active-mode counterpart to soldPrice.
currentPriceMaxstring | nulloptional
The to/high bound when a listing spans a price range (e.g. "$899.99 to $1099.99"). null for single-price listings; currentPrice is always the low bound.
currentCurrencystring | nulloptional
ISO 4217 currency code for currentPrice/currentPriceMax (e.g. "USD", "GBP"). The active-mode counterpart to soldCurrency.
watcherCountnumber | nulloptional
Number of eBay users watching this listing — a live demand signal. When eBay shows an approximate count ("N+"), this is N as a floor (at least N). null when none shown.
unitsSoldnumber | nulloptional
Units already sold on this currently-listed multi-quantity listing — a live sales-velocity signal. When eBay shows an approximate count ("N+" / "Más de N"), this is N as a floor. null when none shown.
acceptsOffersbooleanoptional
true when the listing accepts Best Offers ("or Best Offer"). The active-mode analogue of bestOfferAccepted.
timeLeftstring | nulloptional
Auction time remaining as a raw, localized, relative string exactly as eBay renders it, including the locale suffix ("6d 4h left", "Noch 5 Std 47 Min", "1g 6h rimasti"). A snapshot at scrape time — not an absolute end timestamp. null for fixed-price / Buy It Now listings.

Example active response (sold=false)

With sold=false, items drop the sold-only fields and return the asking price plus live signals instead. The default (sold) response is shown at the top of this endpoint.

{
  "keyword": "iphone 15 pro",
  "page": 1,
  "totalItems": 240,
  "hasNextPage": true,
  "autoSelectedCategory": { "id": "9355", "name": "Cell Phones & Smartphones" },
  "items": [
    {
      "itemId": "256987654321",
      "url": "https://www.ebay.com/itm/256987654321?nordt=true",
      "thumbnailUrl": "https://i.ebayimg.com/images/g/9QwAAeSwABCqGLiR/s-l500.webp",
      "fullResThumbnailUrl": "https://i.ebayimg.com/images/g/9QwAAeSwABCqGLiR/s-l1600.webp",
      "epid": "20049285656",
      "title": "Apple iPhone 15 Pro 256GB Natural Titanium - Unlocked",
      "condition": "Pre-Owned",
      "conditionId": 3000,
      "sellerType": null,
      "buyingFormat": "buyItNow",
      "bidCount": null,
      "categoryId": "9355",
      "listingType": "active",
      "shippingPrice": "0.00",
      "shippingCurrency": "USD",
      "shippingType": "free",
      "totalPrice": "849.99",
      "sellerUsername": "top-deals-store",
      "sellerPositivePercent": 99.8,
      "sellerFeedbackScore": 14200,
      "itemLocation": "United States",
      "scrapedAt": "2026-03-14T21:00:00.000Z",
      "currentPrice": "849.99",
      "currentPriceMax": null,
      "currentCurrency": "USD",
      "watcherCount": 31,
      "unitsSold": 12,
      "acceptsOffers": true,
      "timeLeft": null
    }
  ]
}

Request

curl -H "Authorization: Bearer sc_YOUR_KEY_HERE" \
  "https://api.sold-comps.com/v1/scrape\
?keyword=iphone+15+pro\
&ebaySite=ebay.com\
&page=1\
&count=240\
&sortOrder=endedRecently"

Response

{
  "keyword": "iphone 15 pro",
  "page": 1,
  "totalItems": 240,
  "hasNextPage": true,
  "autoSelectedCategory": { "id": "9355", "name": "Cell Phones & Smartphones" },
  "items": [
    {
      "itemId": "256123456789",
      "url": "https://www.ebay.com/itm/256123456789?nordt=true",
      "thumbnailUrl": "https://i.ebayimg.com/images/g/3nkAAeSwCitqGLiR/s-l500.webp",
      "fullResThumbnailUrl": "https://i.ebayimg.com/images/g/3nkAAeSwCitqGLiR/s-l1600.webp",
      "epid": "20049285656",
      "title": "Apple iPhone 15 Pro 256GB Natural Titanium - Unlocked",
      "condition": "Pre-Owned",
      "conditionId": 3000,
      "sellerType": null,
      "buyingFormat": "buyItNow",
      "bestOfferAccepted": false,
      "bidCount": null,
      "categoryId": "9355",
      "listingType": "sold",
      "endedAt": "2026-03-10",
      "soldPrice": "899.99",
      "soldCurrency": "USD",
      "shippingPrice": "0.00",
      "shippingCurrency": "USD",
      "shippingType": "free",
      "totalPrice": "899.99",
      "sellerUsername": "top-deals-store",
      "sellerPositivePercent": 99.8,
      "sellerFeedbackScore": 14200,
      "itemLocation": "United States",
      "scrapedAt": "2026-03-14T21:00:00.000Z"
    }
  ]
}

Async sweeps

Max Mode

Max Mode auto-paginates server-side. Submit once, then poll for progress, get the result by email, or stream a signed CSV. Unlike /v1/scrape, a Max Mode submission is not 1 credit — each successfully scraped page debits 1 request from your monthly quota. A 50-page sweep can cost up to 50 requests. Failed pages don't debit. maxPages caps blast radius (max 100).

One job per user can be active at a time. A second submit while one is running returns 409 with the existing jobId.

POST/v1/scrape/max

Submit

Enqueue an async sweep. Returns a jobId you can poll, cancel, or wait for the worker to deliver via email / signed download URL. Pass Idempotency-Key to dedupe re-submits over a 24h window.

Request body

keywordstringrequired
eBay search term.
maxPagesinteger (1–100)optionaldefault: 50
Upper bound on how many pages the worker will fetch. Each successful page debits 1 request from your monthly quota.
resultTypeenumoptionaldefault: inline
How to deliver the result: inline (poll the results endpoint), email (CSV attached or signed link), download (signed CSV stream URL).
inlineemaildownload
emailTostringoptional
Recipient address when resultType=email. Falls back to the account email on file.
daysToScrapeinteger (1–365)optionaldefault: 90
History window in days. Currently has no effect on the scrape — the value is accepted and stored with the job, but is not yet applied to the fetch.
ebaySiteenumoptionaldefault: ebay.com
eBay domain to scrape.
ebay.comebay.co.ukebay.deebay.frebay.itebay.esebay.caebay.com.au
categoryIdstringoptionaldefault: 0
eBay category ID (_sacat).
sortOrderenumoptionaldefault: endedRecently
Sort order.
endedRecentlytimeNewlyListedpricePlusPostageLowestpricePlusPostageHighestdistanceNearest
minPricenumberoptional
Minimum price filter.
maxPricenumberoptional
Maximum price filter.
itemLocationenumoptionaldefault: default
Item location filter.
defaultdomesticworldwide
itemConditionenumoptionaldefault: any
Item condition filter.
anynewused
sellerTypeenumoptional
EU sites only.
privatebusiness
includeCompleteListingbooleanoptionaldefault: true
Include eBay completed-listing metadata (LH_Complete=1) so bestOfferAccepted is detected accurately. Does not change which listings are returned. Set to false only to match pre-July-2026 behavior.

Request

curl -X POST https://api.sold-comps.com/v1/scrape/max \
  -H "Authorization: Bearer sc_YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: rtx-4090-march-sweep" \
  -d '{
    "keyword": "rtx 4090",
    "maxPages": 50,
    "resultType": "email",
    "emailTo": "[email protected]",
    "ebaySite": "ebay.com",
    "daysToScrape": 90
  }'

Response

{
  "jobId": "8c2f1a3e-3b54-4f6b-9c2a-1d6e2b9a0d31",
  "status": "queued",
  "resultsUrl": "/v1/scrape/max/results/8c2f1a3e-3b54-4f6b-9c2a-1d6e2b9a0d31",
  "estimatedSeconds": 150
}
GET/v1/scrape/max/results/:jobId

Poll

Returns progress while the job is running, or a summary + delivery info once terminal. Recommended poll interval is 5 seconds. The job retains results for 30 days, then 410 Gone.

Terminal statuses: done, failed, cancelled, quota_exhausted, upstream_unhealthy.

terminationReason: natural_end (no more pages), maxPages_reached, quota_exhausted, upstream_unhealthy (5 consecutive page failures), cancelled, or terminal_error (page 1 failed).

Running response

{
  "jobId": "8c2f1a3e-3b54-4f6b-9c2a-1d6e2b9a0d31",
  "status": "running",
  "keyword": "rtx 4090",
  "ebaySite": "ebay.com",
  "createdAt": "2026-06-13T20:01:14.000Z",
  "startedAt": "2026-06-13T20:01:14.000Z",
  "progress": {
    "currentPage": 12,
    "pagesAttempted": 12,
    "pagesSucceeded": 12,
    "pagesFailed": 0,
    "failedPages": [],
    "itemsCollected": 2880,
    "consecutiveFailures": 0
  }
}

Request

curl -H "Authorization: Bearer sc_YOUR_KEY_HERE" \
  https://api.sold-comps.com/v1/scrape/max/results/8c2f1a3e-3b54-4f6b-9c2a-1d6e2b9a0d31

Response

{
  "jobId": "8c2f1a3e-3b54-4f6b-9c2a-1d6e2b9a0d31",
  "status": "done",
  "keyword": "rtx 4090",
  "ebaySite": "ebay.com",
  "createdAt": "2026-06-13T20:01:13.000Z",
  "startedAt": "2026-06-13T20:01:14.000Z",
  "completedAt": "2026-06-13T20:04:09.000Z",
  "expiresAt": "2026-07-13T20:04:09.000Z",
  "summary": {
    "pagesAttempted": 42,
    "pagesSucceeded": 42,
    "pagesFailed": 0,
    "failedPages": [],
    "totalItems": 9870,
    "partial": false,
    "terminationReason": "natural_end"
  },
  "error": null,
  "delivery": {
    "method": "email",
    "status": "delivered",
    "lastError": null
  }
}
DELETE/v1/scrape/max/:jobId

Cancel

Marks the job for cancellation. The worker checks between pages, so a job mid-page can take a few seconds to settle. Idempotent — repeat calls return 200. Pages already scraped are not refunded.

Returns 200 with the updated job status. The final delivery for cancelled jobs is short-circuited — no email is sent and the CSV download returns the partial result so far.

Request

curl -X DELETE \
  -H "Authorization: Bearer sc_YOUR_KEY_HERE" \
  https://api.sold-comps.com/v1/scrape/max/8c2f1a3e-3b54-4f6b-9c2a-1d6e2b9a0d31
GET/v1/scrape/max/:jobId/download.csv

Download CSV

Streams the full result as CSV. Authenticated with a signed token in the ?token= query parameter, not a Bearer header — the URL is safe to share in email. Tokens expire 24 hours after the job completes.

The download URL is returned at the top level of the poll response as downloadUrl (when resultType=download) or attached directly to completion emails. Do not append your API key — the signed token is the auth.

CSV columns: every field on the per-item response, one row per listing.

Request

# The download URL is returned in the poll response when
# resultType=download. The token is in the URL — do NOT add a Bearer header.

curl -o results.csv \
  "https://api.sold-comps.com/v1/scrape/max/8c2f1a3e.../download.csv?token=eyJhb..."
GET/rapidapi/scrape-ebay

RapidAPI - Scrape eBay

Identical response shape to /v1/scrape, but callable only through the SoldComps RapidAPI listing. Auth is via RapidAPI's marketplace headers — X-RapidAPI-Key + X-RapidAPI-Host — not Bearer tokens. Quotas and billing run through your RapidAPI subscription.

Query parameters

keywordstringrequired
eBay search term. URL-encode spaces and special characters.
pageintegeroptionaldefault: 1
Page number of eBay results to fetch. Increment until hasNextPage is false.
countinteger (1–240)optionaldefault: 240
Max items requested per page (range 1–240 on every plan). A ceiling, not a guarantee — the response may contain fewer items, because items without a parseable price or sold date are dropped during parsing, and promotional tiles are excluded.
ebaySiteenumoptionaldefault: ebay.com
eBay domain to scrape.
ebay.comebay.co.ukebay.deebay.frebay.itebay.esebay.caebay.com.au
categoryIdstringoptionaldefault: 0
eBay category ID (_sacat). Browse all 17,000+ IDs at sold-comps.com/ebay-categories. Use "0" for all categories.
sortOrderenumoptionaldefault: endedRecently
Sort order for results.
endedRecentlytimeNewlyListedpricePlusPostageLowestpricePlusPostageHighestdistanceNearest
minPricenumberoptional
Minimum price filter, in listing currency.
maxPricenumberoptional
Maximum price filter, in listing currency.
itemLocationenumoptionaldefault: default
Item location filter.
defaultdomesticworldwide
itemConditionenumoptionaldefault: any
Item condition filter applied as a request filter on eBay.
anynewused
sellerTypeenumoptional
Filter results by seller type. Only effective on EU sites (ebay.de, .fr, .it, .es). On non-EU sites the filter is silently ignored.
privatebusiness
includeCompleteListingbooleanoptionaldefault: true
Include eBay completed-listing metadata (LH_Complete=1). This is what enables accurate bestOfferAccepted detection — without it, eBay does not render the "Best offer accepted" signal and bestOfferAccepted is false for nearly all items. Does not change which listings are returned: results stay sold-only (LH_Sold=1 takes precedence). Set to false only to match pre-July-2026 behavior.
soldbooleanoptionaldefault: true
When true (default), returns completed/sold listings. When false, returns ACTIVE (currently-listed) results instead. Active responses swap the sold-only fields (soldPrice, soldCurrency, endedAt, bestOfferAccepted) for active-only ones: listingType="active", the asking price in currentPrice/currentPriceMax/currentCurrency, plus watcherCount, unitsSold, acceptsOffers, and timeLeft.

Response fields (each item)

itemIdstringoptional
eBay listing item ID.
urlstringoptional
Canonical listing URL with ?nordt=true to bypass eBay's catalog redirect.
thumbnailUrlstring | nulloptional
Listing thumbnail (500px) from i.ebayimg.com. null when the listing has no product image.
fullResThumbnailUrlstring | nulloptional
Full-resolution version of thumbnailUrl (~1600px), derived by replacing the size suffix (s-l500, s-l140, etc.) with s-l1600. null when thumbnailUrl is null.
epidstring | nulloptional
eBay catalog product ID. Stable across sellers for the same variant. null when the listing has no catalog match.
titlestring | nulloptional
Listing title.
conditionstring | nulloptional
eBay's own localized condition label (e.g. "Pre-Owned", "Gebraucht"), when it resolves to a known value. null when the listing shows no condition, or when the label eBay displayed does not match a known value (rare — the field is dropped rather than surfaced verbatim).
conditionIdnumber | nulloptional
eBay numeric condition ID (best-effort lookup from the localized label). Common: 1000 New, 3000 Used, 7000 For parts.
sellerType"private" | "business" | nulloptional
EU sites only (ebay.de, .fr, .it, .es). null on all non-EU sites. May also be null on EU sites served via eBay's newer card layout, pending mapping.
buyingFormat"auction" | "buyItNow" | "auctionWithBIN" | nulloptional
How the item was listed. "auction" = competitive bidding, "buyItNow" = fixed price (includes Best Offer listings), "auctionWithBIN" = auction that also had a Buy It Now option. null when the listing type could not be determined.
bidCountnumber | nulloptional
Number of bids received. Present for auction listings, null for fixed-price (Buy It Now) listings.
categoryIdstringoptional
eBay category ID.
listingType"sold" | "active"optional
Whether this is a completed sale ("sold", the default) or a currently-listed item ("active", returned when sold=false).
shippingPricestring | nulloptional
Shipping cost; "0.00" when free, null when unknown.
shippingType"free" | "paid" | "pickup" | "unknown" | nulloptional
Shipping category.
totalPricestring | nulloptional
Listing price (soldPrice or currentPrice) + shippingPrice when both known.
sellerUsernamestring | nulloptional
eBay seller username.
sellerPositivePercentnumber | nulloptional
Seller positive feedback percentage.
sellerFeedbackScorenumber | nulloptional
Seller total feedback count.
itemLocationstring | nulloptional
Seller's country as shown on the eBay search results page. Localized per site language (e.g., "United States" on ebay.com, "Großbritannien" on ebay.de). null on ebay.co.uk and when eBay omits the location for a listing.
scrapedAtstringoptional
ISO 8601 timestamp of when SoldComps fetched the listing.

Sold-listing fields (sold=true)

endedAtstring | nulloptional
Date the sale completed, as YYYY-MM-DD (date only — eBay never exposes a time of day). For active listings use timeLeft instead.
soldPricestring | nulloptional
The listing price at time of sale, as a decimal string. eBay does not disclose the accepted best-offer amount, so on Best Offer sales (bestOfferAccepted=true) this is an upper bound, not the realized price. For active listings the asking price is in currentPrice.
soldCurrencystring | nulloptional
ISO 4217 currency of soldPrice. Active listings use currentCurrency.
bestOfferAcceptedbooleanoptional
true when the seller accepted a best offer rather than the listing selling at the listed price. eBay never discloses the accepted offer amount — see soldPrice for what that field actually represents on a Best Offer sale. Requires includeCompleteListing=true (the default). For active listings, whether the listing accepts offers is in acceptsOffers.

Request

curl --request GET \
  --url 'https://sold-comps.p.rapidapi.com/rapidapi/scrape-ebay?keyword=iphone+15+pro&count=240' \
  --header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
  --header 'X-RapidAPI-Host: sold-comps.p.rapidapi.com'

Response

{
  "keyword": "iphone 15 pro",
  "page": 1,
  "totalItems": 240,
  "hasNextPage": true,
  "autoSelectedCategory": { "id": "9355", "name": "Cell Phones & Smartphones" },
  "items": [
    {
      "itemId": "256123456789",
      "url": "https://www.ebay.com/itm/256123456789?nordt=true",
      "thumbnailUrl": "https://i.ebayimg.com/images/g/3nkAAeSwCitqGLiR/s-l500.webp",
      "fullResThumbnailUrl": "https://i.ebayimg.com/images/g/3nkAAeSwCitqGLiR/s-l1600.webp",
      "epid": "20049285656",
      "title": "Apple iPhone 15 Pro 256GB Natural Titanium - Unlocked",
      "condition": "Pre-Owned",
      "conditionId": 3000,
      "sellerType": null,
      "buyingFormat": "buyItNow",
      "bestOfferAccepted": false,
      "bidCount": null,
      "categoryId": "9355",
      "listingType": "sold",
      "endedAt": "2026-03-10",
      "soldPrice": "899.99",
      "soldCurrency": "USD",
      "shippingPrice": "0.00",
      "shippingCurrency": "USD",
      "shippingType": "free",
      "totalPrice": "899.99",
      "sellerUsername": "top-deals-store",
      "sellerPositivePercent": 99.8,
      "sellerFeedbackScore": 14200,
      "itemLocation": "United States",
      "scrapedAt": "2026-03-14T21:00:00.000Z"
    }
  ]
}