Pokemon TCG • PSA graded • eBay Best Offer prices

Pokemon Card Prices API

Individual sale records for Pokemon cards from eBay, Goldin, Heritage, and more. PSA-graded cards, vintage base set, modern sets — real transaction prices, not estimates. Free to start.

Why real transaction prices matter for Pokemon

Pokemon card prices are volatile and highly dependent on condition, set, and listing type. A PSA 10 Charizard Base Set sells for a fundamentally different price than a raw copy — and eBay listing prices for Best Offer cards are often 20–40% above the true accepted price.

The Card API captures the actual accepted Best Offer price on every eBay transaction — not the listing price. Combined with true auction hammer prices from Goldin and Heritage, you get real market data instead of inflated asking prices.

$850

eBay listing price

What you see

$620

Accepted Best Offer

True sale price

37%

Price inflation

Overstatement avoided

Search patterns for Pokemon cards

The q parameter supports full-text search across card titles as they appear in listings:

Charizard Base Set PSA 10

Graded vintage Charizard comps

Pikachu Illustrator

Ultra-rare promo card sales

Lugia Neo Genesis BGS 9.5

Graded Lugia from Neo Genesis

Charizard VMAX PSA 10

Modern rainbow/alt art graded sales

1st Edition Base Set PSA

All graded 1st edition cards

Umbreon Gold Star BGS

EX era gold star graded cards

Scarlet Violet Charizard ex PSA

Recent set graded cards

Pokemon booster box sealed

Sealed product sales

Code examples

Get recent PSA 10 Pokemon card sales and build a comp report:

Python
import requests
import statistics

API_KEY = "tca_your_key_here"
BASE    = "https://thecardapi.com/api/v1/market"

def pokemon_comps(card: str, grade: str = "PSA 10") -> dict:
    """Fetch recent sales and return comp statistics."""
    r = requests.get(
        f"{BASE}/sales",
        params={"q": f"{card} {grade}", "limit": 100},
        headers={"x-market-api-key": API_KEY},
    )
    r.raise_for_status()
    sales = r.json()["data"]
    prices = [s["sale_price"] for s in sales]

    return {
        "card":   card,
        "grade":  grade,
        "count":  len(prices),
        "median": statistics.median(prices) if prices else None,
        "mean":   statistics.mean(prices) if prices else None,
        "low":    min(prices) if prices else None,
        "high":   max(prices) if prices else None,
        "by_platform": {
            p: [s["sale_price"] for s in sales if s["platform"] == p]
            for p in set(s["platform"] for s in sales)
        },
    }

comps = pokemon_comps("Charizard Base Set")
print(f"Median: ${comps['median']:,.0f} | Mean: ${comps['mean']:,.0f}")
print(f"Range:  ${comps['low']:,.0f} – ${comps['high']:,.0f}")
JavaScript
const API_KEY = "tca_your_key_here";
const BASE    = "https://thecardapi.com/api/v1/market";

async function pokemonComps(card, grade = "PSA 10") {
  const url = new URL(`${BASE}/sales`);
  url.searchParams.set("q",     `${card} ${grade}`);
  url.searchParams.set("limit", 100);

  const { data: sales } = await fetch(url, {
    headers: { "x-market-api-key": API_KEY },
  }).then((r) => r.json());

  const prices = sales.map((s) => s.sale_price);
  const sorted = [...prices].sort((a, b) => a - b);
  const median = sorted[Math.floor(sorted.length / 2)] ?? null;
  const mean   = prices.length ? prices.reduce((a, b) => a + b, 0) / prices.length : null;

  return {
    card, grade,
    count: prices.length,
    median,
    mean,
    low:  Math.min(...prices),
    high: Math.max(...prices),
  };
}

const comps = await pokemonComps("Charizard Base Set");
console.log(`Median: $${comps.median?.toFixed(0)} | Mean: $${comps.mean?.toFixed(0)}`);

Platform coverage for Pokemon cards

PlatformPokemon volumeNotable for
eBayVery highHigh-volume raw and graded cards — auctions, BIN, Best Offer
GoldinHighUltra-rare and vintage graded Pokemon (Illustrator, 1st Ed Charizard PSA 10)
HeritageMediumVintage Pokemon auction results with full lot descriptions
AltMediumGraded modern Pokemon cards — PSA, BGS, CGC
PristineLow–MediumGraded modern cards with Best Offer pricing

Frequently asked questions

What Pokemon card data does the API provide?

Individual sale records including sale price, date, listing type (auction, fixed price, Best Offer), and platform. Search by card name, set, and grade to get comps for any Pokemon card.

Does the API include PSA graded Pokemon card prices?

Yes. Include the grade in your search query (e.g., 'Charizard Base Set PSA 10' or 'Lugia Neo Genesis BGS 9.5') to filter to graded card sales.

Which Pokemon sets are covered?

All sets that appear on the covered platforms — from Base Set and Jungle through modern Scarlet & Violet releases. Coverage is comprehensive for any set that actively sells on eBay and major auction houses.

Can I get historical Pokemon card price data?

Yes. Use date_from and date_to parameters to query historical windows. Free: 7-day lookback. Pro: 30 days. Enterprise: full history.

Is there a free API for Pokemon card prices?

Yes. Free tier: 10,000 sales/day, 7-day lookback, no credit card required. Sufficient for pricing tools, portfolio apps, and AI agent use cases.

How does this compare to TCGPlayer or other price guides?

TCGPlayer and similar guides show market price estimates. This API provides individual transaction records — the actual sale prices from each deal. You can calculate your own medians, means, and percentiles from real data.

Get Pokemon card prices via API

Free tier: 10,000 sales/day, 7-day lookback, no credit card required. Real transaction prices from eBay, Goldin, Heritage, and more.

Get Free API Key →