Grail

Max Mode

Pull deep into a keyword's sold history instead of stopping at the first page. One request returns up to 240 sold listings; add page to keep going.

How it works

Every response reports page, totalItems, and hasNextPage. Increment page until hasNextPage is false to walk the full sold sample for a keyword. The summary (median, range) is computed per page; combine the items yourself if you need a global median across every page.

# Page 1 (default)
curl -H "Authorization: Bearer gk_live_your_key" \
  "https://grail.solutions/v1/scrape?keyword=charizard%20base%20set&count=240"

# Page 2 — same keyword, next slice
curl -H "Authorization: Bearer gk_live_your_key" \
  "https://grail.solutions/v1/scrape?keyword=charizard%20base%20set&count=240&page=2"

Walking every page

Respect the rate limit while you paginate — sleep between calls rather than fanning out. Each page is one billed request.

import requests

def all_pages(keyword, key, max_pages=10):
    out, page = [], 1
    while page <= max_pages:
        r = requests.get(
            "https://grail.solutions/v1/scrape",
            params={"keyword": keyword, "count": 240, "page": page},
            headers={"Authorization": f"Bearer {key}"},
        ).json()
        out.extend(r["items"])
        if not r.get("hasNextPage"):
            break
        page += 1
    return out

Notes

  • • count caps at 240 per request.
  • • Deep pages reflect eBay's own result depth — a keyword with 90 results stops at page 1.
  • • Pagination is live-pull. Repeat keywords are cheaper via the corpus (cache-first).