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?
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 10Baseball rookie — specific grade
Luka Doncic Prizm Rookie PSA 10Basketball rookie graded
Patrick Mahomes Rookie BGS 9.5Football — BGS instead of PSA
Wander Franco Rookie PSA 9PSA 9 comp for grade premium calc
1952 Topps Mickey Mantle SGCVintage baseball — all SGC grades
LeBron James Topps Chrome PSAAll PSA grades — early career
Charizard Base Set PSA 10Pokemon graded vintage
Connor McDavid Young Guns PSA 10Hockey OPC Platinum — graded
Where graded card sales come from
eBay
Highest volumeThe 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 auctionsSpecializes 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-focusedHeritage Auctions' Platinum Night and Signature Auction results for vintage graded material. Strong for pre-war, 1950s–1970s graded cards.
Alt
Modern gradedFixed-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.
Related resources
Sports Card Sales API
All sports cards — recent sales data
eBay Sold Card Prices API
eBay Best Offer and auction data
Baseball Card Price Data
MLB card search and comp analysis
Pokemon Card Prices API
Pokemon TCG graded and raw sales
Card Price History API
Historical price trends by date range
Trading Card Market Data
Full market data overview and MCP
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 →