SoldComps

Changelog

What's new in SoldComps.

Highlights

TCGPlayer search and sales history API (Beta)

Search TCGPlayer products by keyword and pull recent sales history by product ID. Pricing, card metadata, and seller listings — same auth and quota as eBay endpoints. Currently in beta — may return errors under heavy load. Failed requests are not charged against your quota.

Item detail endpoint — full listing data for any eBay item

Look up any eBay listing by item ID and get the full detail page data: item specifics, all images, seller info, condition, shipping, location, category, and more. Works for both sold and active listings.

Mercari sold and active listings API (Beta)

Search Mercari sold listings alongside eBay and Poshmark — same auth, same middleware, same API shape. Up to 100 items per page, with filters for price, condition, category, brand, and sort order. Currently in beta — may return errors under heavy load. Failed requests are not charged against your quota.

One-time credit purchases — pay-as-you-go API requests

Buy API request credits without a subscription commitment. Credits never expire, work alongside your plan, and kick in automatically when your monthly quota runs out.

Aspect filter — narrow results by eBay item facets

Filter by eBay sidebar facets like Brand, Grade, Storage Capacity, and Network. Pass a JSON object — facet names match what you see on eBay.

Poshmark sold listings API

Search Poshmark sold listings alongside eBay — same auth, same middleware, same API shape. Optionally enrich each listing with detailed seller and timing data.

TCGPlayer search and sales history API (Beta)

  • AddedNew GET /v1/tcgplayer/search endpoint — search TCGPlayer products by keyword. Each item includes market price, lowest listing price, median price, set name, rarity, card number, and up to 3 of the cheapest seller listings with price/shipping/condition/seller detail. Same auth and middleware stack as the eBay endpoints. Each page costs 1 quota slot.
  • AddedNew GET /v1/tcgplayer/sales endpoint — recent sold-listing data for a TCGPlayer product ID. Each sale includes price, shipping cost, condition, printing variant, quantity, and sold date. Filter by condition, variant, or language. Each request costs 1 quota slot.

Best Offer price hydration + itemCondition fix

  • AddedNew hydrateBoa query parameter (default false) on all sold-item endpoints. When true, items sold via Best Offer have their soldPrice updated to the actual accepted offer amount using eBay's Price Guide. Surfaces boaAcceptedPrice and boaAcceptedCurrency for cross-currency cases. Primarily useful for trading card categories (~50% hit rate on ebay.com cards). Non-card categories silently skip. Costs 1 additional request when hydration finds at least one match — at most 1 extra per request regardless of how many items were hydrated. No extra charge on misses.
  • FixedThe itemCondition query parameter (new / used) was not being mapped to eBay's condition ID on the primary fetch path — only the numeric conditionId parameter worked. Both now filter correctly.

Item detail endpoint — full listing data for any eBay item

  • AddedNew GET /v1/item/{itemId} endpoint — pass an eBay item number (or full URL) and get the complete listing detail: item specifics (Brand, Model, Storage Capacity, Color, etc.), full-resolution images, seller username and feedback, condition, shipping cost, item location, return policy, category breadcrumb, ended date, and bid count. Same auth and quota as /v1/scrape — each call costs 1 request.
  • AddedOptional includeDescription=true parameter fetches the seller's item description as sanitized plain text (~200ms extra latency, no additional quota cost).
  • AddedSupports all 8 eBay sites via the ebaySite parameter. Prices and shipping are returned in the local currency of the requested site (e.g. GBP on ebay.co.uk, EUR on ebay.de).

Mercari sold and active listings API (Beta)

  • AddedNew GET /v1/mercari endpoint — search Mercari sold listings by keyword. Returns up to 100 items per page with normalized fields (price in dollars, condition labels, direct image URLs). Same auth and middleware stack as the eBay and Poshmark endpoints.
  • AddedFilter by sortOrder (bestMatch, newest, lowestPrice, highestPrice, mostPopular), minPrice/maxPrice (in dollars), itemCondition (new, likeNew, good, fair, poor), categoryId, and brandId.
  • AddedEach item returns: itemId, url, title, price, currency (always USD), originalPrice, condition, conditionId, status, imageUrl, thumbnailUrl, sellerId, brand, categoryId, categoryName, and marketplace (always "mercari"). Each page costs 1 quota slot.

One-time credit purchases — pay-as-you-go API requests

  • AddedOne-time credit purchases at $3 per 1,000 requests. Buy any amount from 100 to 1,000,000 credits in a single purchase via Stripe — no subscription required. Credits never expire.
  • AddedCredits work as automatic overflow — when your subscription quota runs out mid-month, purchased credits are consumed transparently with no code change needed. Or set the X-Credit-Source: credits request header to use credits exclusively.
  • AddedCredit balance and purchase history visible on the dashboard subscription and usage pages. Failed requests are refunded automatically — you only pay for successful scrapes.

Company name on invoices

  • AddedSet a company name from your Account page to have it appear on Stripe invoices and receipts instead of your personal name.

eBay sold listings restored + authenticated requests

  • FixedeBay began blocking sold-listing searches behind a login requirement on mobile starting August 18. This affected all sold-item endpoints. We've shipped a workaround that bypasses the login wall. All sold-listing endpoints are live and working — you may see intermittent block errors as we continue scaling up capacity.
  • AddedNew X-eBay-Cookies request header on all scrape endpoints. Forward your own eBay session cookies to access login-gated results (e.g. adult categories, certain completed listings). Cookies are forwarded per-request only and never stored. Use cookies from the same eBay site you are scraping — e.g. an ebay.co.uk request needs cookies from a UK eBay account.

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.