SoldComps

Changelog

What's new in SoldComps.

Highlights

Max items per request reduced from 240 to 200

  • ChangedMaximum items per request reduced from 240 to 200. eBay's search results page, which switched to a new markup layout on July 23, now returns a maximum of ~200 items per page regardless of the requested page size. The count parameter range is now 1–200 (previously 1–240). Requests that previously specified count=240 will return up to 200 items. No action needed — existing integrations continue to work; they may just receive slightly fewer items per page.

Exact match control

  • AddedNew exactMatch query parameter (default true) on all scrape endpoints. When true, eBay's loosened-match results ("Results matching fewer words") are stripped so only items closely matching your keyword are returned. Set to false to include all results eBay returns — useful when you want maximum volume over keyword precision.

Aspect filter — narrow results by eBay item facets

  • AddedNew aspectFilter query parameter on /v1/scrape, /v1/scrape/category, /v1/scrape/max, the RapidAPI channel, and bulk search. Pass a JSON object of eBay item-aspect facet filters using the human-readable names from eBay's sidebar refinements (e.g. {"Brand":"Apple","Storage Capacity":"256 GB"}). Multi-select values use pipe as separator: {"Network":"Unlocked|AT&T"}. Facet names are dynamic per eBay category and vary by site language. Invalid or unrecognized facets are silently ignored by eBay.

Poshmark sold listings API

  • AddedNew GET /v1/poshmark/sold endpoint — search Poshmark sold listings by keyword, with filters for department, condition, brand, price range, and sort order. Returns up to 48 items per page (Poshmark's native page size). Same auth and middleware stack as the eBay endpoints.
  • AddedOptional enrich=true parameter fetches detailed data for each listing: soldAt, listedAt, daysToSell, category, condition, colors, description, shippingCost, commentsCount, shareCount, sellerLocation, sellerSoldCount, and sellerAvgShipTime. Enriched requests cost 2 quota slots instead of 1.

Total results count

  • AddedNew totalResults response field on all scrape endpoints. Returns eBay's reported total result count for your search query as a string (e.g. "14,000+" or "89"). Approximate counts include a + suffix. null when unavailable. Distinct from totalItems (items returned on this page) and scrapedCount (items parsed before date filtering).

Sold date range filter (soldAfter / soldBefore)

  • AddedNew query parameters soldAfter and soldBefore (both YYYY-MM-DD) on /v1/scrape, /v1/scrape/category, the RapidAPI channel, and bulk search. Filter sold results by endedAt — inclusive on both bounds. Sold-only; silently ignored when sold=false. This is a post-parse filter: each request still scrapes one full page from eBay, then filters, so a page may return fewer items than count.
  • AddedNew response field scrapedCount — the total items parsed from eBay before date filtering. Only present when soldAfter or soldBefore is set. If scrapedCount is high but items is low, more pages likely won't help.

buyingFormat filter + categoryId deprecation

  • AddedNew query parameter buyingFormat (default "all") on /v1/scrape, /v1/scrape/category, /v1/scrape/max, the RapidAPI channel, and bulk search. Filters results by listing format: "auction", "buyItNow" (fixed-price / Buy It Now), or "acceptsOffers" (listings with Best Offer enabled). This is an input filter, separate from the existing per-item buyingFormat field on each item in the response.
  • DeprecatedThe categoryId field on each item in scrape responses is now deprecated. It echoed back the input categoryId filter parameter — not the item's actual eBay category. When no category filter was applied, it now returns null instead of "0". Use the response-level autoSelectedCategory for the best available category signal.

endedAt is now date-only (YYYY-MM-DD)

  • ChangedendedAt on sold-listing responses now returns a date-only string (e.g. "2026-07-19") instead of a full ISO 8601 datetime with a fabricated midnight-UTC time. eBay's search results only ever expose a sold date, never a time of day, so the previous timestamp implied precision that doesn't exist. Non-breaking for any code parsing the value via new Date(...) — it resolves to the exact same instant.

Fix: sold listings gated behind eBay login

  • FixedeBay began gating sold-listing search results behind a login wall for a portion of traffic. Requests that hit this gate previously failed with a block error; the scraper now detects and works around the login requirement, returning sold listings normally.

Active (non-sold) listings via sold=false

  • AddedNew query parameter sold (default true) on /v1/scrape. Pass sold=false to return active, currently-listed items instead of completed sales. Each item carries listingType="active" and its own set of fields.
  • AddedActive items expose active-only fields: currentPrice / currentPriceMax / currentCurrency (the asking price and its high bound for a multi-variant range), watcherCount (demand), unitsSold (velocity), acceptsOffers (Best Offer status), and timeLeft (raw auction countdown, e.g. "6d 4h"). All parsed across every supported eBay site.
  • ChangedSold and active responses now carry only their relevant fields. Sold responses keep soldPrice, soldCurrency, endedAt, and bestOfferAccepted. Active responses omit those and use currentPrice/currentCurrency plus the new active signals instead.

Accurate bestOfferAccepted detection (includeCompleteListing)

  • AddedNew query parameter includeCompleteListing (default true) on all scrape endpoints. Adds LH_Complete=1 to the eBay search — the only way eBay renders the explicit "Best offer accepted" text on items where an offer was actually accepted. Without it, bestOfferAccepted was false for nearly all items.
  • ChangedbestOfferAccepted is now accurate by default — existing integrations get the improvement automatically with no code change. Pass includeCompleteListing=false to restore the previous behavior.

itemLocation field on all search results

  • AddedEvery item now includes itemLocation: the 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 (which does not display location). No extra requests — the data was already on the page.

More reliable searches on eBay's updated results layout

  • FixedeBay has been rolling out a new search-results page layout to a portion of traffic. Requests that hit it previously failed with a block error; they now parse correctly and return the full set of sold listings.

Sign in with GitHub

  • AddedSign up and log in with GitHub, alongside Google and email/password. Existing accounts link automatically by verified email.

Listing signals — buying format and bid count

  • AddedbuyingFormat field on each listing: "auction", "buy_it_now", or null. Lets you separate auction results from fixed-price sales without parsing the title.
  • AddedbidCount field: number of bids on auction listings. null for fixed-price and Best Offer listings.
  • AddedBoth fields are returned on all eBay sites and supported on EN, DE, FR, IT, and ES locales.

Pricing v2 — more requests at the same price

  • ChangedMonthly request limits increased across all paid plans at no extra cost. Starter: 500 → 2,000. Growth: 2,000 → 10,000. Scale: 5,000 → 50,000.
  • ChangedFree tier increased from 50 to 100 requests per month.
  • AddedNew high-volume self-serve tiers: 100K ($129/mo), 150K ($179/mo), 250K ($299/mo).

Category-only search — browse eBay categories without a keyword

  • AddedNew GET /v1/scrape/category endpoint: pass a categoryId and get sold listings for the entire category, no keyword required. Useful for tracking hardware, collectibles, or any niche where you want everything sold in a category.
  • AddedSupports all the same filters as /v1/scrapeebaySite, page, count, sortOrder, minPrice, maxPrice, itemLocation, itemCondition, and sellerType on EU sites.

Full-resolution thumbnail URLs

  • AddedfullResThumbnailUrl field on each listing — same image as thumbnailUrl but at 1600px instead of 500px. Derived automatically; no extra requests.

Max Mode — async auto-paginating sweep

  • AddedNew POST /v1/scrape/max endpoint: submit a keyword once, get back all pages automatically. No more client-side loops, retry logic, or quota math.
  • AddedThree result delivery modes: poll GET /v1/scrape/max/results/:jobId for inline JSON, download a signed CSV URL, or receive an email with the CSV attached.
  • AddedQuota is charged per successfully scraped page (same rate as /v1/scrape), so a 50-page sweep costs 50 requests. Failed pages don't count.
  • AddedDELETE /v1/scrape/max/:jobId cancels a running sweep between pages.

Fewer transient failures on /v1/scrape

  • FixedA class of intermittent upstream errors that previously surfaced as a 500 response are now retried internally and return results normally.

Thumbnail URLs, seller type filter, and EU seller labels

  • AddedthumbnailUrl field on each listing — direct link to the eBay CDN image at 500px. Swap the suffix (s-l500s-l1600) for full resolution.
  • AddedsellerType field (private | business | null) on EU listings (ebay.de, ebay.fr, ebay.it, ebay.es). Always null on non-EU sites where eBay doesn't surface this.
  • AddedOptional sellerType filter on /v1/scrape for EU sites — pass sellerType=private or sellerType=business to narrow results.

Item condition and condition ID on every listing

  • Addedcondition field: the localized condition label exactly as eBay shows it (e.g. "Pre-Owned", "Neu", "Occasion"). Useful for filtering and display without post-processing.
  • AddedconditionId field: eBay's numeric condition code (1000 = New, 3000 = Used/Pre-Owned, 7000 = For Parts, etc.) derived from the label. null for unknown or unlisted labels.

Fix: stray non-local prices on international eBay sites

  • FixedRequests to non-US eBay sites (ebay.de, ebay.co.uk, ebay.ca, etc.) occasionally returned listings priced in the wrong currency. Results are now verified after parsing and automatically retried when wrong-currency prices are detected.

ePID field — catalog product ID on eligible listings

  • Addedepid field on each listing: eBay's catalog product ID when the listing is matched to a specific product (e.g. iPhone 15 Pro 256GB). null when the seller hasn't matched their listing to a catalog entry.
  • AddedUseful for grouping sold prices by exact product variant rather than relying on keyword matching alone.