Grail

eBay sold-history API

Up to 3 years of eBay sold history, as JSON.

Go past the recent window. Query up to 3 years of eBay sold-market history through one API — average sold price, sold range, sell-through, and the listing rows behind them. No scraping, no eBay OAuth, no App ID.

3 yrs of history1,095 days deep$0 to start$29 full history

One request

curl "https://grail.solutions/v1/research/sold?keyword=leica+m6&days=1095" \
  -H "Authorization: Bearer ***"

Up to 3 years of history

Go past the recent window: query up to 1,095 days of eBay sold-market history in one call.

Summary + listing rows

Get average sold price, sold range, total sold, sell-through, and sellers — plus the listing-level rows behind them.

No scraping, no OAuth

One Grail bearer key. No App ID, no token refresh, no proxies, no CAPTCHAs.

Built for products

Structured JSON for pricing tools, resale apps, dashboards, and AI agents.

Built for products

The historical pipe for sold-price data.

A recent snapshot is not enough when you are pricing a catalog, sizing a market, or tracking a trend. Grail gives your product years of sold history behind one request.

Trend & seasonality

See how a keyword has moved over years, not days — for sourcing and market analysis.

Inventory valuation

Price a catalog against real historical sold data instead of a single snapshot.

AI agents

Give an agent a dependable historical sold-price tool through REST or hosted MCP.

Python

import requests

res = requests.get(
    "https://grail.solutions/v1/research/sold",
    params={"keyword": "leica m6", "days": 1095},
    headers={"Authorization": f"Bearer {GRAIL_KEY}"},
    timeout=30,
)
data = res.json()
print(data["summary"])   # multi-year sold-market summary
print(data["coverage"])  # how deep + how complete

Response shape

{
  "schemaVersion": "grail.research_sold.1",
  "source": { "name": "ebay_sold_history", "kind": "sold_history" },
  "coverage": { "requestedDays": 1095, "itemsReturned": 50,
                "totalSold": 24491, "totalSellers": 5170 },
  "summary": { "mean": 367.63, "avgShipping": 17.6,
               "soldPriceRange": "$ 0.01 - $ 17,000.00",
               "totalItemSales": 9003626.33 },
  "items": [
    { "itemId": "275446905731", "title": "Leica M6 Classic 0.72 …",
      "soldPrice": 3100.00, "soldCurrency": "USD", "totalSold": 12 }
  ]
}

FAQ

Straight answers before you wire it in.

How far back does the sold history go?

Up to 3 years (1,095 days) via GET /v1/research/sold. For fresh per-listing detail from the recent window, use GET /v1/scrape (up to 240 rows).

Is this an official eBay API?

No. Grail returns structured eBay sold-market data behind a Grail key, so your product does not need eBay OAuth, an App ID, or an approval queue.

What does a history response include?

A market summary (average sold price, sold price range, total sold, sell-through, seller count, total item sales) plus listing-level rows, with a coverage block telling you exactly how deep the answer is.

Can I use it in a commercial app?

Yes. Commercial use is allowed on every plan, including the free tier. The full 3-year rail is unlocked on Pro and above.