Build a Card Price Tracker
Monitor price movements across Pokemon, Magic: The Gathering, Yu-Gi-Oh!, and 89+ trading card games. TCG API gives you the data you need to track market trends, spot opportunities, and alert users to price changes — all through a single, unified REST API.
The Problem
Trading card prices are volatile. A card can spike 300% overnight after a tournament win, a new set announcement, or a viral social media post. Collectors, investors, and players all need timely price data — but getting it is harder than it should be.
- Fragmented data sources. Every game has different marketplaces, formats, and pricing structures. Scraping each one individually is brittle and time-consuming.
- No historical context. A card's current price is only useful if you know where it's been. Without price change data, you can't tell if a card is trending up, crashing, or stable.
- Manual tracking doesn't scale. Watching a handful of cards by hand is possible. Tracking 500 cards across 6 games is a full-time job without automation.
How TCG API Solves This
TCG API provides a single endpoint for pricing data across every trading card game on TCGPlayer. Prices for the top 7 games are refreshed daily, and every response includes built-in price change metrics so you don't have to calculate them yourself.
Built-in Price Changes
Every price response includes change_24h, change_7d, and change_30d percentage fields. No extra calculations needed.
Top Movers Endpoint
The /prices/top-movers endpoint returns the biggest gainers and losers across any game, saving you from polling every card individually.
Price History
Access historical price data via /cards/{id}/history to chart trends, detect patterns, and build alerts based on price trajectories.
89+ Games, One API
Track prices for Pokemon, Magic, Yu-Gi-Oh!, One Piece, Lorcana, Flesh and Blood, and dozens more — all with the same endpoint structure and response format.
Code Example
This JavaScript example searches for a card by name, fetches its current price, and checks whether the price has moved significantly in the last 24 hours. You could run this on a schedule and push alerts to Slack, Discord, email, or any notification service.
const API_BASE = "https://api.tcgapi.dev/v1";
const API_KEY = "tcg_live_your_key_here";
// Search for a card across all games
async function checkPriceAlert(cardName, thresholdPercent = 10) {
const headers = { "X-API-Key": API_KEY };
// Step 1: Search for the card
const searchRes = await fetch(
`${API_BASE}/search?q=${encodeURIComponent(cardName)}&game=pokemon&limit=1`,
{ headers }
);
const { results } = await searchRes.json();
if (!results || results.length === 0) {
console.log(`No results found for "${cardName}"`);
return null;
}
const card = results[0];
// Step 2: Get current price data with change metrics
const priceRes = await fetch(
`${API_BASE}/cards/${card.id}/prices`,
{ headers }
);
const priceData = await priceRes.json();
// Step 3: Check if 24h change exceeds threshold
const change24h = priceData.change_24h || 0;
const alert = Math.abs(change24h) >= thresholdPercent;
return {
name: card.name,
set: card.set_name,
market_price: priceData.market_price,
change_24h: change24h,
change_7d: priceData.change_7d,
alert: alert,
direction: change24h > 0 ? "UP" : "DOWN"
};
}
// Track a watchlist of cards
const watchlist = ["Charizard ex", "Pikachu VMAX", "Moonbraker"];
for (const card of watchlist) {
const result = await checkPriceAlert(card, 5);
if (result?.alert) {
console.log(
`ALERT: ${result.name} (${result.set}) is ${result.direction} ` +
`${result.change_24h.toFixed(1)}% — now $${result.market_price.toFixed(2)}`
);
}
} Discover Trending Cards Automatically
Instead of polling individual cards, use the top movers endpoint to find the biggest price swings across an entire game in a single request.
// Get the top gainers and losers for Pokemon
const res = await fetch(
`${API_BASE}/prices/top-movers?game=pokemon&period=24h&limit=10`,
{ headers: { "X-API-Key": API_KEY } }
);
const { gainers, losers } = await res.json();
console.log("Top 10 Pokemon Gainers (24h):");
gainers.forEach(card => {
console.log(` +${card.change_pct.toFixed(1)}% ${card.name} — $${card.market_price.toFixed(2)}`);
}); Key API Endpoints
Search for cards by name across all games or filter by a specific game.
Get current market price, low price, and percentage changes (24h, 7d, 30d).
Retrieve historical price data points for charting trends and detecting patterns.
Discover the biggest price gainers and losers for any game in a single call.
Ready to build your price tracker?
Free tier includes 100 requests per day. No credit card required.