Trading Card Market Data
The infrastructure layer for trading card market analytics. 200,000+ individual sale transactions ingested daily from every major platform — queryable via REST API and accessible to AI agents via MCP server.
200K+
Daily transactions
7
Platforms covered
38+
Card categories
<15m
Data freshness
The problem with card market data today
The trading card market generates hundreds of thousands of transactions every day across eBay, Goldin, Heritage, REA, Fanatics Vault, Alt, and Pristine. This data exists — it's publicly visible — but accessing it programmatically requires either building and maintaining scrapers for each source or paying for expensive, aggregated feeds that smooth over individual transaction detail.
The Card API solves this by ingesting individual sale records from all major platforms continuously and making them queryable via a single REST endpoint. You get raw transaction data — not an average, not a 90-day rolling estimate — and you can slice it any way your application needs.
What other solutions provide
- ✗30/60/90-day average prices
- ✗Single-platform data (usually eBay only)
- ✗No Best Offer price capture
- ✗No listing type differentiation
- ✗Proprietary formats, no open API
What The Card API provides
- ✓Individual sale records — every transaction
- ✓7 platforms in one unified schema
- ✓True Best Offer accepted prices
- ✓Auction, Fixed Price, Best Offer tagged
- ✓Clean JSON REST API + MCP server
Platform coverage
| Platform | Listing types | Update frequency | Best Offer prices |
|---|---|---|---|
| eBay | Auction, Fixed Price, Best Offer | Every 15 min | Yes — actual accepted price |
| Goldin | Live auction, Buy Now | Post-auction | N/A |
| Heritage | Signature auction, Platinum | Post-auction | N/A |
| REA | Premier auction | Post-auction | N/A |
| Fanatics Vault | Fractional, Fixed Price | Daily | N/A |
| Alt | Fixed Price marketplace | Daily | N/A |
| Pristine | Fixed Price, Best Offer | Daily | Yes |
The data model
Every sale record uses the same schema regardless of platform:
{
"id": "ebay_3941827461",
"title": "2011 Topps Update Mike Trout RC #US175 PSA 10",
"platform": "eBay",
"listing_type": "BestOffer",
"sale_price": 2450.00,
"sale_date": "2025-04-12",
"listing_url": "https://www.ebay.com/itm/...",
"category": "Baseball Cards"
}The listing_type field lets you separate auction hammer prices from buy-it-now sales from Best Offer accepted prices — which have meaningfully different market dynamics.
Querying the API
Search recent sales across all platforms in one request:
import requests
API_KEY = "tca_your_key_here"
BASE = "https://thecardapi.com/api/v1/market"
def search_sales(card: str, platforms: list[str] | None = None) -> list[dict]:
params = {"q": card, "limit": 100}
if platforms:
params["platform"] = ",".join(platforms)
r = requests.get(
f"{BASE}/sales",
params=params,
headers={"x-market-api-key": API_KEY},
)
r.raise_for_status()
return r.json()["data"]
# Recent Luka Doncic RC PSA 10 across all platforms
sales = search_sales("Luka Doncic Rookie PSA 10")
for s in sales[:5]:
print(f"{s['platform']:15} {s['listing_type']:12} ${s['sale_price']:,.0f} {s['sale_date']}")const API_KEY = "tca_your_key_here";
const BASE = "https://thecardapi.com/api/v1/market";
async function searchSales(card, { platforms } = {}) {
const url = new URL(`${BASE}/sales`);
url.searchParams.set("q", card);
url.searchParams.set("limit", 100);
if (platforms) url.searchParams.set("platform", platforms.join(","));
const { data } = await fetch(url, {
headers: { "x-market-api-key": API_KEY },
}).then((r) => r.json());
return data;
}
const sales = await searchSales("Luka Doncic Rookie PSA 10");
sales.slice(0, 5).forEach((s) =>
console.log(s.platform, s.listing_type, s.sale_price, s.sale_date)
);AI agent access via MCP
The Card API includes an MCP (Model Context Protocol) server with 7 AI-native tools. Any MCP-compatible client — Claude Desktop, Cursor, Claude Code, or any custom agent — can query card market data without writing API integration code.
search_salesFull-text search + filter by platform, date, price, listing type
get_saleRetrieve a specific sale record by ID
get_dailyAggregate statistics for a specific date
get_platformsList platforms with last-updated timestamps
get_coverageData freshness and coverage status
export_csvDownload a filtered set of sales as CSV
get_market_analysisAI-synthesized market analysis for any card
{
"mcpServers": {
"cardapi": {
"url": "https://thecardapi.com/api/mcp",
"headers": {
"Authorization": "Bearer tca_your_key_here"
}
}
}
}Pricing tiers
Free
$0
- ✓10,000 sales/day
- ✓7-day lookback
- ✓CSV export (10K rows)
- ✓MCP server access
Starter
$9/mo
- ✓50,000 sales/day
- ✓7-day lookback
- ✓CSV export (50K rows)
- ✓Everything in Free
Pro
$49/mo
- ✓500,000 sales/day
- ✓30-day lookback
- ✓Unlimited CSV export
- ✓Webhook notifications
Enterprise
Custom
- ✓Unlimited sales/day
- ✓Full history
- ✓S3 bulk delivery
- ✓Dedicated support + SLA
Frequently asked questions
What trading card platforms does the API cover?
eBay (all listing types including Best Offer accepted prices), Goldin, Heritage Auctions, REA, Fanatics Vault, Alt, and Pristine. All platforms are normalized to a single JSON schema.
Does the API return real sale prices or estimated values?
Real sale prices only. Every record is an individual transaction with a verified sale_price and sale_date. For eBay, this includes the actual accepted Best Offer price, not the listing price.
How many transactions are ingested per day?
200,000+ individual sale transactions daily across all platforms. This includes eBay completed listings updated every 15 minutes, major auction house results, and sales from Alt, Fanatics Vault, REA, and Pristine.
Can AI agents use the card market data API?
Yes. The MCP server exposes 7 AI-native tools that work with Claude Desktop, Cursor, Claude Code, and any custom MCP-compatible agent. No integration code required — just add the server config and your API key.
What card categories and sports are covered?
38+ categories including Baseball, Basketball, Football, Hockey, Soccer, Pokemon, Magic: The Gathering, and other TCGs. Search works across all categories by default.
Is there a free tier?
Yes. The Free tier provides 10,000 sales per day, 7-day lookback, CSV export, and MCP server access — no credit card required. Paid plans start at $9/month.
Related resources
Sports Card Sales API
Recent sales from all major platforms
eBay Sold Card Prices API
eBay Best Offer and auction data
Baseball Card Price Data
MLB card search and comp analysis
Card Price History API
Historical data with date filtering
Pokemon Card Prices API
Pokemon TCG sales and PSA grades
PSA Graded Card Prices
Graded card comps across all sports
Start building with card market data
Free tier: 10,000 sales/day, no credit card required. Works for most hobby projects and AI agents.
Get Free API Key →