PSA • BGS • SGC • CGC — all graders, all sports

PSA Graded Card Prices API

Individual sale records for PSA, BGS, SGC, and CGC graded cards from eBay, Goldin, Heritage, and more. Query by player, grade, and date — get real transaction prices, not estimates.

Why graded card pricing is hard to get right

Graded card prices are sensitive to three things most price guides get wrong: grade-specific supply, listing type, and Best Offer dynamics. A PSA 10 and a PSA 9 of the same card can have 3–10× price differences. An eBay listing price for a Best Offer graded card is often 25–40% above the accepted price.

The Card API captures the actual accepted Best Offer price on every eBay transaction and tags every record with its listing type, so you can analyze auction vs. Best Offer vs. Buy-It-Now prices separately — the way graded card markets actually work.

$1,200

Listing price (BIN)

What you see on eBay

$875

Best Offer accepted

True transaction price

$950

Price guide estimate

Average — still inflated

Grade premium analysis

One of the most powerful use cases: compare price distributions across grades to calculate the grade premium for any card. This informs grading decisions — is it worth grading a raw card if the PSA 10/9 premium doesn't cover the grading fee?

Python
import requests
import statistics

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

def grade_premium(card: str, grader: str = "PSA") -> dict:
    """Compare median prices across grades for a card."""
    results = {}
    for grade in ["10", "9", "8"]:
        r = requests.get(
            f"{BASE}/sales",
            params={"q": f"{card} {grader} {grade}", "limit": 50},
            headers={"x-market-api-key": API_KEY},
        )
        r.raise_for_status()
        prices = [s["sale_price"] for s in r.json()["data"]]
        results[f"{grader} {grade}"] = {
            "count":  len(prices),
            "median": statistics.median(prices) if prices else None,
        }

    # Calculate premiums
    grades = [f"{grader} {g}" for g in ["10", "9", "8"]]
    for i in range(len(grades) - 1):
        hi = results[grades[i]]["median"] or 0
        lo = results[grades[i + 1]]["median"] or 0
        if lo:
            results[f"{grades[i]} / {grades[i+1]} premium"] = f"{(hi/lo - 1)*100:.0f}%"

    return results

premium = grade_premium("Mike Trout 2011 Topps Update Rookie")
for label, data in premium.items():
    print(f"{label}: {data}")

Graded card search patterns

Mike Trout Rookie PSA 10

Baseball rookie — specific grade

Luka Doncic Prizm Rookie PSA 10

Basketball rookie graded

Patrick Mahomes Rookie BGS 9.5

Football — BGS instead of PSA

Wander Franco Rookie PSA 9

PSA 9 comp for grade premium calc

1952 Topps Mickey Mantle SGC

Vintage baseball — all SGC grades

LeBron James Topps Chrome PSA

All PSA grades — early career

Charizard Base Set PSA 10

Pokemon graded vintage

Connor McDavid Young Guns PSA 10

Hockey OPC Platinum — graded

Where graded card sales come from

eBay

Highest volume

The largest marketplace for graded cards. Captures auction results, fixed-price sales, and — critically — the actual accepted Best Offer price for Best Offer listings. Updated every 15 minutes.

Goldin

High-end auctions

Specializes in premium graded cards — PSA 10 rookies, vintage HOF cards, and record-setting sales. Auction results are captured post-close with full lot detail.

Heritage

Vintage-focused

Heritage Auctions' Platinum Night and Signature Auction results for vintage graded material. Strong for pre-war, 1950s–1970s graded cards.

Alt

Modern graded

Fixed-price marketplace for modern graded cards. Strong PSA and BGS inventory for contemporary rookies and star cards.

Frequently asked questions

What grading companies does the API cover?

All grading companies that appear in marketplace listings: PSA, BGS/Beckett, SGC, CGC, and others. Include the grader and grade in your search query to filter results.

How do I search for PSA 10 prices for a specific card?

Use the q parameter: e.g., 'Mike Trout 2011 Topps Update Rookie PSA 10'. Full-text search matches against listing titles across all covered platforms.

Does the API include BGS and SGC graded card prices?

Yes. Any graded card sold on the covered platforms is indexed regardless of grading company. Include the grader name in your search to filter (e.g., 'BGS 9.5', 'SGC pristine').

How accurate are the graded card prices?

Every price is a real, verified transaction. For eBay, the API captures the actual Best Offer accepted price rather than the listing price. For Goldin and Heritage, it captures the true hammer price.

Can I compare PSA 10 vs PSA 9 prices to calculate the grade premium?

Yes. Query the same card twice with different grade terms and compare the price distributions. This is a common analytical pattern for graded card investors.

Is there historical data for graded card prices?

Yes, with date_from and date_to parameters. Free: 7-day lookback. Pro: 30 days. Enterprise: full history.

Query PSA graded card prices via API

Real transaction prices for graded cards from every major platform. Free tier: 10,000 sales/day, no credit card required.

Get Free API Key →