What we shipped
New filters, fields, integrations, and fixes. The API contract stays stable and versioned under /v1, so additions never break your integration. Newest changes first.
Shipping Rates API
Compare quote-only US shipping estimates with separate usage and the same API key.
Accurate listing conditions
Return the real listing condition instead of a neighboring product-aspect chip.
eBay facet filters
Narrow sold comps by model, storage, color, seller type, and other eBay facets.
Every change, dated
- ADDED
Up to 3 years of eBay sold history on every plan
GET /v1/research/sold searches eBay sold history by keyword going back up to 3 years, across all eight eBay sites, on every plan including free. Each page of up to 50 listing rows is one request, failed requests are free, and prices are reported in USD. Rows are grouped by listing, with units sold, average and total sale price, average shipping, and the last sale date. History searches have their own cap of 20 per minute per account.
GET /v1/research/sold?keyword=...&startDate=2023-10-11&endDate=2026-10-10 - ADDED
TCGplayer sold prices and active listings
GET /v1/tcgplayer/sold returns TCGplayer completed sales with condition, variant, language, quantity, shipping and sale time, plus optional market price history buckets. GET /v1/tcgplayer/listings returns active listings with seller details. Both search by card name or TCGplayer product ID, use your existing API key and allowance, and return the full sale history rather than the last 5 sales shown to signed-out visitors.
GET /v1/tcgplayer/sold?keyword=charizard+ex+223&history=quarter - CHANGED
Lower Shipping Rates pricing and a new 20K plan
Shipping Rates plans are now $19 per month for 10,000 successful quotes, $29 for 20,000, and $49 for 50,000. These prices are available to all customers. Shipping keeps its own allowance and uses your existing API key. Sold-comps plans and existing subscription terms are unchanged.
- CHANGED
Shipping service eligibility is explicit
Custom-package quotes now keep ordinary applicable services in rates and place USPS Flat Rate, FedEx One Rate, and Media Mail options in conditionalRates with machine-readable requirements. Callers can select an exact carrier package type or confirm Media Mail eligibility when appropriate. The fastest field is calculated from the shortest applicable maximum delivery window instead of relying on the empty upstream marker. Prices and every valid upstream option are preserved.
{ "totalRates": 14, "totalConditionalRates": 7 } - ADDED
Quote-only eBay Shipping Rates API
POST /v1/shipping/rates returns US shipping-rate estimates from origin ZIP, destination ZIP, package weight, and dimensions. Responses preserve retail and eBay discounted prices, carrier services, tracking, and delivery timing when available. Shipping uses the same CompSniper API key with a separate subscription and quota. Failed and empty quotes are not charged, and the endpoint never purchases a label or changes an eBay account.
POST /v1/shipping/rates - CHANGED
Accurate listing conditions across eBay categories
The condition field now reads the actual eBay listing condition when a result card also contains a brand, size, model, or product-aspect summary. Category-specific values such as New with tags and New with box are preserved, and conditionId is populated when the value has a known eBay mapping. Item selection, filters, prices, sold dates, URLs, and response structure are unchanged.
{ "condition": "Pre-Owned", "conditionId": 3000 } - ADDED
Public multi-keyword SSE search
POST /v1/bulk-search accepts up to 20 unique product keywords and streams independent result events with at most three searches running concurrently. Completed Idempotency-Key requests replay without repeating searches or spending quota. Every successful keyword and combined run now have authenticated CSV exports, while failed searches preserve quota.
POST /v1/bulk-search Accept: text/event-stream - CHANGED
Active-listing responses now expose live listing fields
sold=false now requests current eBay listings instead of completed results. Active rows use listingType active and return currentPrice, currentPriceMax, currentCurrency, watcherCount, unitsSold, acceptsOffers, bidCount, and timeLeft when those signals are visible. Sold-only fields are omitted, summary is null, and normal sold searches keep their existing response shape and cache keys.
GET /v1/scrape?keyword=iphone+14&sold=false - ADDED
eBay facets, EU seller filters, and localized condition IDs
Keyword, category, summary, Max Mode, RapidAPI, and hosted MCP searches now support validated human-readable aspectFilter facets. sellerType can filter private or business sellers on ebay.de, ebay.fr, ebay.it, and ebay.es while remaining ignored elsewhere. Returned rows now populate sellerType and best-effort conditionId from observed localized labels without changing the existing condition text, item selection, or summary unless a new filter is explicitly requested.
aspectFilter={"Model":"Apple iPhone 15 Pro","Storage Capacity":"256 GB"}&sellerType=private - ADDED
Opt-in eBay exact-section parsing
Keyword searches now accept exactMatch=true to remove every listing after eBay's explicit Results matching fewer words boundary before pricing and semantic cleanup. When eBay does not emit the boundary, results are unchanged. The option defaults to false, and explicit false uses the existing cache key, so current integrations keep their previous result volume. If the boundary is found, hasNextPage is false and an empty items array is possible.
exactMatch=true - CHANGED
Query-aware pricing mismatches removed before summaries
Relevance-enabled searches now run conservative deterministic title checks before semantic cleanup. They remove explicit unrequested lots, multipacks, bundles, selection listings, modified or non-original items, prototypes, damaged or parts-only units, standalone accessories, and conflicting years, capacities, sizes, quantities, grading details, or catalog numbers. Explicit query intent preserves those special cases. relevance=false remains the broad valid feed, and existing API keys, parameters, quotas, fields, and the response envelope are unchanged.
relevance=true // deterministic pricing checks, then one semantic cleanup stage - CHANGED
Malformed listing rows removed in every mode
Keyword and category searches now remove malformed navigation or recommendation rows before relevance cleanup. Sold rows require a real item ID, matching item URL, positive sold price, and sold date. Active rows require a real item ID, matching item URL, and positive price. Duplicate item IDs are returned once. This also applies with relevance=false. Existing API keys, authentication headers, parameters, quotas, response fields, and the response envelope are unchanged.
relevance=false // semantic cleanup off; baseline listing validation remains on - ADDED
Best Offer signal in compact card batches
Compact Card Batch rows now include bestOfferAccepted. It is true when eBay marked the sale as an accepted Best Offer and null when no accepted-offer marker was detected. Since eBay does not disclose the accepted amount, exact-card matchers can exclude true rows before calculating a price.
{ "bestOfferAccepted": true } - ADDED
Asynchronous card pricing batches
Submit up to 100 sports or trading cards in one request, poll one background job, and receive an independent cleaned price summary for every card. Supply exact keywords or structured year, set, subject, card number, parallel, grader, and grade fields. Each successfully processed card uses one normal request.
POST /v1/cards/batch - ADDED
Aspect filters (facet narrowing)
Narrow a keyword search by the same sidebar facets eBay shows shoppers: brand, model, storage size, color, and more. Pass an aspectFilter of URL-encoded JSON to trim 240 raw results down to exactly the variant you are pricing.
aspectFilter={"Brand":["Apple"],"Storage Capacity":["256 GB"]} - ADDED
totalResults in the response envelope
Every response now reports eBay's own headline count for the query as a string, for example "14,000+". Use it to gauge how deep a market runs beyond the 240 items on the page. It is null when eBay does not surface a count.
{ "totalItems": 240, "totalResults": "14,000+", "hasNextPage": true } - ADDED
Sold-date range filter
Bound results to a specific window with soldAfter and soldBefore (both YYYY-MM-DD). Applied after parsing, so you get precise date slices for trend analysis. When either is set, the response also returns scrapedCount so you can see how many items were considered before filtering.
soldAfter=2026-07-01&soldBefore=2026-07-31 - ADDED
buyingFormat filter
Split the market by how items actually sold. Filter to auction, buyItNow, or acceptsOffers (or leave it at all) to compare auction realizations against fixed-price sales for the same keyword.
buyingFormat=auction - CHANGED
endedAt is now a clean date
The endedAt field returns a plain YYYY-MM-DD date instead of a localized timestamp string. Parsing is now identical across all 8 marketplaces, with no locale-specific formats to special-case in your code.
"endedAt": "2026-07-24" - CHANGED
Accurate bestOfferAccepted
Best Offer detection is now reliable. When includeCompleteListing is on (the default), bestOfferAccepted correctly flags sales that closed via an accepted offer. Note that soldPrice on those sales remains an upper bound, since eBay never discloses the accepted amount.
"bestOfferAccepted": true
Build on an API that keeps getting better
Every addition is backward compatible. Start free with 100 requests a month, no credit card.
Questions about a change? Email [email protected].