Skip to content

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.

JavaScript
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.

JavaScript
// 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

Ready to build your price tracker?

Free tier includes 100 requests per day. No credit card required.