CompSniper
Changelog

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.

Recent highlights
Sep 12

Shipping Rates API

Compare quote-only US shipping estimates with separate usage and the same API key.

Sep 11

Accurate listing conditions

Return the real listing condition instead of a neighboring product-aspect chip.

Sep 2

eBay facet filters

Narrow sold comps by model, storage, color, seller type, and other eBay facets.

Full history

Every change, dated

  1. 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
  2. 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
  3. 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.

  4. 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 }
  5. 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
  6. 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 }
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 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 }
  14. 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
  15. 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"]}
  16. 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 }
  17. 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
  18. 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
  19. 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"
  20. 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].