eBay sold listings

Individual graded and ungraded eBay sales for Pokémon cards and sealed products, each linking to the listing it came from.

eBay Sold Listings

GET/v1/cards/:id/listings/ebay1 credit per item returned

Recent eBay sold comps for a card, graded and ungraded. Each row carries its own currency ("USD" or "EUR"): read it per row rather than assuming USD. Cursor-based pagination for large result sets.

attribution is "exact", "shared", or "unknown". A variant can share one source page with its base card; when it does, both get the same sales, titled for whichever printing actually sold. "shared" marks those rows as evidence for the group, not this card specifically. "unknown" means the comp predates us recording which printing it came from.

To poll for new comps, track the highest ingested_at you've seen and pass it back as since. That's collection time, not sold_at: a collection run can bring in sales weeks old, so filtering by sale date would skip them. The bound is exclusive, and the timestamp already ends in Z, so send it straight into the query string. To price from recent sales instead, pass period=90d, which filters on sold_at.

grade_qualifier names the tier when a grader issues more than one at the same number: "Pristine" is a CGC Pristine 10, and "Black Label" is a BGS Black Label 10. It is null for everything else, including CGC Gem Mint 10 and plain BGS 10. grade still reads "10" for all of them, so grade=10 returns every tier. To get one tier, add the grade_qualifier filter: grader=BGS&grade=10&grade_qualifier=black_label returns Black Labels, and grade_qualifier=none returns plain BGS 10s. A Pristine 10 usually sells well above a Gem Mint 10.

sale_type is how the item sold: "auction", "fixed_price" or "best_offer_accepted". Fixed price includes listings that allowed offers but sold at the listed price. For "best_offer_accepted", price is what the buyer paid, which we read off the item page because eBay's search results show only the asking price. Multi-quantity listings sold by offer are left out, since their page shows no accepted amount. sale_type is null for comps collected before it existed, so a null row can still carry an accepted offer's asking price. It is also null for comps mirrored from PriceCharting and for sealed comps.

seller_country is the seller's location as a two-letter ISO code such as "US", "JP" or "GB". Puerto Rico is "PR", so seller_country=US,PR covers both. It is null when we don't know the location: older comps, some comps mirrored from PriceCharting, and locations we can't match to a country.

Parameters

idstringrequired

The unique card ID.

gradedboolean

true = graded only; false = ungraded only; omit = both. The two values are exact complements: every comp is returned by exactly one of them.

graderstring

Grading company filter (e.g. "PSA", "BGS", "CGC").

gradestring

Grade value filter (e.g. "10", "9.5", "9").

grade_qualifierstring

Only comps in one tier of their grade: "pristine" (CGC Pristine 10), "black_label" (BGS Black Label 10), or "none" for comps with no named tier, which includes plain CGC and BGS 10s. "none" also returns comps collected before the tier was recorded.

sale_typestring

Only comps that sold this way, as comma-separated values from "auction", "fixed_price" and "best_offer_accepted" (e.g. "auction,best_offer_accepted"). Case-insensitive. Comps with no known sale type are left out, so passing all three values keeps every comp whose sale type is known. An unknown value returns 400.

seller_countrystring

Only comps from sellers in these countries, as comma-separated ISO 3166-1 alpha-2 codes (e.g. "US,JP"). Case-insensitive, at most 30. Comps with no known seller country are left out.

exclude_seller_countrystring

Leave out comps from sellers in these countries, in the same format (e.g. "CN,HK"). Comps with no known seller country stay in.

min_pricenumber

Minimum sale price.

max_pricenumber

Maximum sale price.

variantstring

Filter by the printing the comp was collected under (e.g. "Holofoil", "Reverse Holofoil").

sincestring

Only comps ingested after this instant. Accepts an RFC 3339 timestamp or YYYY-MM-DD (midnight UTC). A malformed value returns 400 rather than being ignored. Filters on ingested_at, not sold_at.

periodstring

Only comps sold in the last N days: "90d", or a bare "90" (1 to 365). Filters on sold_at, where since filters on ingested_at.

sortstring

Sort order. One of "date_desc", "date_asc", "price_desc", "price_asc". Defaults to date_desc.

limitnumber

Number of listings to return per page (max 20). Defaults to 20.

cursorstring

Pagination cursor returned from a previous response.

Try it

curl -H "X-API-Key: YOUR_API_KEY" \
https://api.pkmnprices.com/v1/cards/{id}/listings/ebay
Response
{
  "data": [
    {
      "id": 5678,
      "title": "PSA 10 Charizard ex 006/197 Obsidian Flames",
      "price": 275,
      "currency": "USD",
      "sale_type": "fixed_price",
      "grader": "PSA",
      "grade": "10",
      "grade_qualifier": null,
      "variant": "Holofoil",
      "attribution": "exact",
      "sold_at": "2025-01-14",
      "ingested_at": "2025-01-16T04:12:07Z",
      "listing_url": "https://www.ebay.com/itm/123456789012",
      "seller_country": "US"
    },
    {
      "id": 5680,
      "title": "CGC Pristine 10 Charizard ex 006/197 Obsidian Flames",
      "price": 610,
      "currency": "USD",
      "sale_type": "auction",
      "grader": "CGC",
      "grade": "10",
      "grade_qualifier": "Pristine",
      "variant": "Holofoil",
      "attribution": "exact",
      "sold_at": "2025-01-14",
      "ingested_at": "2025-01-16T04:12:07Z",
      "listing_url": "https://www.ebay.com/itm/123456789015",
      "seller_country": "JP"
    },
    {
      "id": 5679,
      "title": "Charizard ex 006/197 Obsidian Flames",
      "price": 42.5,
      "currency": "USD",
      "sale_type": null,
      "grader": null,
      "grade": null,
      "grade_qualifier": null,
      "variant": "Holofoil",
      "attribution": "shared",
      "sold_at": "2025-01-13",
      "ingested_at": "2025-01-16T04:12:07Z",
      "listing_url": "https://www.ebay.com/itm/123456789013",
      "seller_country": null
    }
  ],
  "pagination": {
    "has_more": true,
    "next_cursor": "NTY3OQ==",
    "count": 20
  }
}

eBay Sealed Sold Listings

GET/v1/sealed/:id/listings/ebay1 credit per item returned

Recent eBay sold comps for a sealed product. currency is always "USD" here. Same shape as card listings, minus the grading filters. Cursor-based pagination. Paid plans only.

attribution means the same thing, but a sealed product maps to one source page with no printing to distinguish, so the value describes the whole product, identical on every row. variant is always null; there's no variant filter.

Parameters

idstringrequired

The unique sealed product ID.

min_pricenumber

Minimum sale price.

max_pricenumber

Maximum sale price.

sincestring

Only comps ingested after this instant. Accepts an RFC 3339 timestamp or YYYY-MM-DD (midnight UTC). Filters on ingested_at, not sold_at.

periodstring

Only comps sold in the last N days: "90d", or a bare "90" (1 to 365). Filters on sold_at, where since filters on ingested_at.

sortstring

Sort order. One of "date_desc", "date_asc", "price_desc", "price_asc". Defaults to date_desc.

limitnumber

Number of listings to return per page (max 20). Defaults to 20.

cursorstring

Pagination cursor returned from a previous response.

Try it

curl -H "X-API-Key: YOUR_API_KEY" \
https://api.pkmnprices.com/v1/sealed/{id}/listings/ebay
Response
{
  "data": [
    {
      "id": 8901,
      "title": "Pokemon Scarlet Violet Elite Trainer Box Sealed",
      "price": 48.99,
      "currency": "USD",
      "grader": null,
      "grade": null,
      "sold_at": "2025-01-14",
      "listing_url": "https://www.ebay.com/itm/123456789014"
    }
  ],
  "pagination": {
    "has_more": false,
    "next_cursor": null,
    "count": 1
  }
}