Trawl vs the SoldComps API

SoldComps is an eBay sold listings service that reads eBay's sold search on every request. The SoldComps API returns what that page shows: about 90 days of sales. Trawl answers the same search from recorded sales, with history past those 90 days.

What it is

SoldComps is an API that reads eBay's sold search for you. One request returns up to 240 completed sales from one of eight eBay sites, with the price, date, condition, shipping and seller of each. Any account gets a key; the first 100 requests a month are free. On 2026-10-15 its home page says each request fetches live from eBay.

For the same search over recorded sales, with history past eBay's 90 days, create a free account and call the eBay Sold Listings API.

Side by side

SoldCompsTrawl
What it isAn API that reads eBay's sold search on each request. GET /v1/scrape with a keyword and a bearer key; up to 240 sales a page.An API over recorded sales, GET /ebay/v1/sold, with a published OpenAPI document. A request in, JSON out.
Where the sales come fromeBay's sold search results, read when you ask. Each item carries a scrapedAt time. The docs promise no stale cache.Sales recorded as they close and kept. A search reads the store, not eBay. New sales appear within minutes in busy categories and within the day in quiet ones.
HistoryWhat eBay's sold search shows: up to 90 days per search. soldAfter and soldBefore filter the pages read, not a store.Recorded sales past eBay's 90 days, selected by sale date with date_from and date_to.
Results per callUp to 240 a page. Page by page to page 100 on the main sites, so 24,000 items for one keyword.Up to 2,000 in one response, newest first: max_pages of 100 each. Older sales by repeating with date_to.
MarketplacesEight eBay sites: US, UK, DE, FR, IT, ES, CA, AU. Also endpoints for Mercari, Poshmark and TCGPlayer.ebay.com and ebay.co.uk, one per request.
What a sale carriesTitle, sold price and currency, shipping, total, sold date, condition, buying format, bids, seller name, feedback score and percent, item location, thumbnail, ePID.Title, sale price and currency, shipping, sale date, condition, buying format, bids, item id, ePID, image. Item specifics, images, seller and description from GET /item, or in the same call with details=1.
Best Offer salesThe listed price, with a bestOfferAccepted flag. With hydrateBoa, one extra request, the accepted amount replaces it as boaAcceptedPrice. In our test on 2026-10-15 it came back on trading card sales and on none of three other categories, which is where eBay publishes it.The listed price, with a Best Offer buying format. With details=1, one extra credit a page, the accepted amount is each result's details.sale_price with best_offer_accepted true, on the same Collectibles categories. Same data, same limit.
FiltersCategory, price range, condition, buying format, seller type on EU sites, sold date, item specifics as aspectFilter, minus words in the keyword.Category, price range, condition, item specifics as attr, sale date, excluded words. No buying-format filter; each sale states its format.
PriceA request is one search, whatever came back. 100 requests a month free; $9 for 2,000, $29 for 10,000, $79 for 50,000; 60 requests a minute.Credits: 1 per page of 100 results, 0 for an empty result. 250 credits a month free, then from $20 a month for 3,000.

A SoldComps call names a keyword and an eBay site. Trawl's search takes the same two. The script prints the count, the oldest sale on the page, and five sales with their price, shipping, condition and buying format. It reads the key from TRAWL_API_KEY. The search costs 1 credit.

keyword_search.py · the script
# keyword_search.py  (pip install requests)
import os
import requests

# A SoldComps call: one keyword, one eBay site, the sold listings back.
# The same call on Trawl: the key in a header, the sales as JSON.
r = requests.get(
    "https://api.trawl.dev/ebay/v1/sold",
    headers={"x-api-key": os.environ["TRAWL_API_KEY"]},
    params={"query": "lego 75192", "site": "EBAY_US", "max_pages": 1},  # up to 100 sales, 1 credit
    timeout=30,
)
r.raise_for_status()
sold = r.json()
print(f"{sold['count']} sold, {sold['credits_charged']} credit, oldest {sold['results'][-1]['date_sold'][:10]}")
for s in sold["results"][:5]:
    print(f"{s['date_sold'][:10]}  {s['currency']} {s['sale_price']:>8.2f} + {s['shipping_price']:>6.2f} ship  {s['condition']:<5} {s['buying_format']:<11} {s['title'][:40]}")
terminal · printed 2026-10-15
100 sold, 1 credit, oldest 2026-10-02
2026-10-15  $   730.00 +   0.00 ship  new   Best Offer  LEGO Star Wars 75192 Ultimate Collector
2026-10-15  $   750.00 +  53.19 ship  new   Best Offer  LEGO Star Wars Millennium Falcon UCS 751
2026-10-15  $   759.99 +  67.86 ship  new   Buy It Now  LEGO Star Wars: Millennium Falcon (75192
2026-10-14  $    24.99 +   0.00 ship  new   Buy It Now  LEGO Star Wars Han Solo and Chewbacca Mi
2026-10-14  $   649.99 + 130.00 ship  new   Buy It Now  LEGO: Star Wars [Millenium Falcon #75192

Where SoldComps is the better fit

A reader who needs ebay.de, ebay.fr, ebay.it, ebay.es, ebay.ca or ebay.com.au should use it: Trawl covers ebay.com and ebay.co.uk. The same goes for Mercari, Poshmark and TCGPlayer sales, which Trawl does not record. Each SoldComps result carries the seller's name and feedback; on Trawl those come from GET /item or details=1. A request there returns up to 240 sales for one unit of quota, so a small plan goes further per sale returned.

Where Trawl differs

Trawl keeps the sales. A search reads recorded sales, so it reaches past the 90 days eBay's sold search shows, and the same search returns the same rows each time. One response holds up to 2,000 sales, newest first, with no page loop. The eBay sold listings history guide reads a year of one query's sales. The eBay sold comps API guide prices an item from its last 100 sales. For the scrapers sold per result, see Trawl vs an Apify eBay sold listings scraper; for eBay's own API, see Trawl vs the eBay Marketplace Insights API.