CompSniper Docs

Graded Card Auction Prices API (Goldin, Fanatics Collect, Pristine Auction, MySlabs)

Realized prices from Goldin, Fanatics Collect (formerly PWCC), Pristine Auction and MySlabs by keyword, with buyer's premium, sold date, sale type, grading company and grade, through one CompSniper API key.

CompSniper has four endpoints for realized prices from the big graded card and collectibles auction houses:

EndpointSourceWhat you get
GET /v1/goldin/soldGoldinSold lots with hammer price, buyer's premium, final price, bid count and sale type
GET /v1/fanatics/soldFanatics Collect (formerly PWCC)Sales with final price, sale type, grading company, grade, cert number and year
GET /v1/pristine/soldPristine AuctionEnded lots with the realized price, end time and sale type
GET /v1/myslabs/soldMySlabsSold slabs with price (1% buyer's premium included), shipping, sold day and sale type

All four use the same API key, per-minute limit, monthly allowance and purchased credits as the eBay endpoints, on every plan including free. No auction-house account is needed. Every call is one keyword search and counts as one request; failed calls are never charged.

price is what the buyer paid in US dollars. Where the house charges a buyer's premium (Goldin, Fanatics Collect auctions, MySlabs) it is included, so prices compare directly with eBay sold prices.

Request

curl --fail-with-body \
  -H "Authorization: Bearer cs_live_REPLACEWITHYOURKEY" \
  "https://api.compsniper.com/v1/goldin/sold?keyword=1999+pokemon+base+set+charizard+psa+8"
Python
import requests

for house in ["goldin", "fanatics", "pristine", "myslabs"]:
    response = requests.get(
        f"https://api.compsniper.com/v1/{house}/sold",
        headers={"Authorization": "Bearer cs_live_REPLACEWITHYOURKEY"},
        params={"keyword": "michael jordan 1986 fleer psa 8"},
        timeout=60,
    )
    response.raise_for_status()
    data = response.json()
    print(house, data["totalItems"], "sales, median", (data["summary"] or {}).get("median"))

Parameters

ParameterValuesDefault
keywordCard, player, set and grade, up to 300 charactersRequired
sortByrecent, price_desc, price_ascrecent
pageGoldin 1 to 100, Fanatics Collect 1 to 200, Pristine 1 to 50, MySlabs 1 only1
deepMySlabs only: true merges several result sets for a few hundred salesfalse

Page sizes: 50 sales (Goldin, Fanatics Collect), 60 (Pristine Auction), up to 72 (MySlabs). Keep requesting the next page while hasNextPage is true.

MySlabs returns one page per search. Add deep=true to merge the results of every sort order and price range for the same keyword (a few hundred distinct sales, about 10 seconds). Deep MySlabs calls count as one request each and are limited to about 3 per minute per account.

Response

Example response (Goldin, shortened)
{
  "keyword": "1999 pokemon base set holo charizard psa 8",
  "page": 1,
  "pageSize": 50,
  "marketplace": "goldin",
  "sortBy": "recent",
  "totalResults": 178,
  "totalItems": 50,
  "hasNextPage": true,
  "items": [
    {
      "saleId": "202609-0920-5312-36623fb6-0c1e-4a95-aaf9-bd7fcfc8fbaf",
      "url": "https://goldin.co/item/1996-pokemon-japanese-basic-set-no-rarity-holo-6-charizard-psa-nm-mt-8bkr1g",
      "title": "1996 Pokemon Japanese Base Set No Rarity Symbol Holo #6 Charizard - PSA NM-MT 8",
      "price": 152500,
      "hammerPrice": 125000,
      "buyersPremiumPercent": 22,
      "shippingPrice": null,
      "currency": "USD",
      "soldAt": "2026-10-26T04:05:54.000Z",
      "saleType": "Thematic",
      "bids": 42,
      "gradingService": "PSA",
      "grade": "8",
      "certNumber": null,
      "year": 1996,
      "category": null,
      "imageUrl": null
    }
  ],
  "summary": { "count": 50, "currency": "USD", "median": 6133.55, "mean": 81155.21, "min": 350.14, "max": 3080500, "p25": 1235.56, "p75": 31262.5, "avgShipping": null },
  "scrapedAt": "2026-10-31T09:00:00.000Z"
}

Fields

FieldMeaning
saleIdThe house's id for the sale or lot
urlLink to the lot (Goldin, Pristine Auction, MySlabs)
priceWhat the buyer paid in USD, buyer's premium included where the house charges one
hammerPrice, buyersPremiumPercentWinning bid and premium rate (Goldin); MySlabs premium is 1%
shippingPriceShipping the buyer paid, when shown (MySlabs)
soldAtSale time in UTC; MySlabs gives the day only
saleTypeHow it sold, for example FIXED, WEEKLY, PREMIER (Fanatics Collect), Weekly, Elite, Thematic (Goldin), Fixed price, Auction (MySlabs)
bidsNumber of bids (Goldin)
gradingService, gradeGrading company and grade (Fanatics Collect from its records, the others read from the title)
certNumberThe slab's certificate number (Fanatics Collect)
year, category, imageUrlCard year, category (Fanatics Collect) and image

The houses match keywords loosely, the way their own search boxes do: the search above also returns other Charizard cards and grades, which is why its price range is wide. Check title, grade and year (or add the set, number and grade to the keyword) before you use a price as a comp for one exact card.

totalResults is how many sales match the search when the house reports it. summary holds the count, median, mean, min, max, p25 and p75 of the returned prices.

Coverage

SourceCoverage
Fanatics Collect5.5 million sales back to 2008, including PWCC history; sorted by sold date or price
GoldinEvery sold lot that matches the keyword, sorted by sold date or price
Pristine AuctionEnded lots that match the keyword
MySlabsThe most recent sold slabs for the keyword (up to 72), or a few hundred with deep=true

Billing

  • One successful call is one request on every endpoint, including MySlabs with deep=true.
  • Failed requests are free.
  • Repeat calls can return instantly from a short-lived saved copy and count as one request.

Errors

These endpoints use the shared error format (code, error, requestId):

StatusCodeMeaningWhat to do
400invalid_paramsMissing keyword, a page out of range, or a MySlabs page above 1Fix the request
429rate_limited / quota_exceededPer-minute limit or monthly allowance reachedSee Rate limits
502, 503upstream_blocked / server_busyThe house did not answer this time, or MySlabs is busyRetry after a few seconds, with a bound

See Errors for the full list. For PSA population reports and PSA's own sales records by grade, see the PSA endpoints.

On this page