TCGplayer Price Trends & Sales Velocity Tracker avatar

TCGplayer Price Trends & Sales Velocity Tracker

Pricing

Pay per event

Go to Apify Store
TCGplayer Price Trends & Sales Velocity Tracker

TCGplayer Price Trends & Sales Velocity Tracker

TCGplayer card and sealed product prices with 30 and 90 day price change, sales velocity and days of supply per printing.

Pricing

Pay per event

Rating

0.0

(0)

Developer

datagrit

datagrit

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Categories

Share

TCGplayer Price Trends & Sales Velocity Tracker reads the public TCGplayer catalogue and returns, for every printing and language of a card or sealed product, the current market price, the 30-day and 90-day price change, the units sold in 30 and 90 days, sales per day and days of supply. Results are clean records you can export as JSON, CSV or Excel, call through the Apify API, or connect to n8n, Make and AI agents through MCP. It is built for card resellers, collectors, investors and price-tracking tools that need to know which cards are moving, not only what they cost today. Choose a game, add search terms, set your filters and run.

Why track TCGplayer prices and sales velocity?

  • Find risers and fallers. Set a minimum 30-day price change to list cards that are climbing, or a maximum to list cards that are dropping, for any game TCGplayer carries.
  • Buy what sells. Filter by units sold in 30 or 90 days, so you skip cards nobody buys and rank the rest by sales per day.
  • Judge sealed products. Booster boxes and other sealed products carry the same metrics plus days of supply: active listings divided by average daily sales, a fast read on whether stock is tight.
  • Build a price feed. Schedule the Actor and push rows into a sheet, a database or a repricing tool, with prices for Lightly Played, Moderately Played, Heavily Played and Damaged copies next to the Near Mint price.

What data can you extract from TCGplayer?

Each row is one printing and language of one product, for example the Holofoil English copy of a card. The figures refer to the main condition: Near Mint for cards and Unopened for sealed products.

productNamesetNamevariantlanguagemarketPricepriceChange30dPctsold30dsold90dsoldPerDaydaysOfSupply
Charizard GX - 9/68 (#60 Charizard Stamped)Battle AcademyHolofoilEnglish14.578.8351381.5354.2
Charizard - 3/70 (#39 Charizard Stamped)Battle AcademyNormalEnglish7.37-0.3731321.4746.3
{
"found": true,
"productId": 219059,
"productName": "Charizard GX - 9/68 (#60 Charizard Stamped)",
"productLine": "Pokemon",
"setName": "Battle Academy",
"variant": "Holofoil",
"language": "English",
"condition": "Near Mint",
"sealed": false,
"marketPrice": 14.57,
"priceChange30dPct": 8.8,
"priceChange90dPct": 12.1,
"lowSalePrice90d": 10.2,
"highSalePrice90d": 20,
"sold30d": 35,
"sold90d": 138,
"soldPerDay": 1.53,
"marketPriceLightlyPlayed": 10.67,
"daysOfSupply": 54.2,
"productUrl": "https://www.tcgplayer.com/product/219059"
}

The record also holds set code, card number, rarity, release date, the last sales window, sales across all conditions, listing count, lowest and median listing price, image URL and scrapedAt.

How much does it cost to scrape TCGplayer?

You pay per result row. Set a maximum spend on the run and the Actor stops when it is reached. One product usually gives one or several rows, because every printing and language is its own row. Rows filtered out by your settings are never charged, and a run with no match returns one status row that is not charged. The Actor uses plain HTTP requests and needs no proxy, so runs are light on platform resources.

  1. Pick a game in Game and add Search terms, for example charizard, booster box or lightning bolt. Leave the terms empty and pick a game, a set or both to read a whole game or set; this also works when you call the Actor through the API.
  2. Set the number of products to read in Maximum products to scan and the row limit in Maximum results.
  3. Add filters, for example a minimum number of units sold or a minimum 30-day price change.
  4. Run the Actor and download the dataset.

Input

  • Search terms – card or product names; each term is searched separately and a product found twice is returned once.
  • Game (product line) – limits the search to one game such as Pokemon, Magic: The Gathering, Yu-Gi-Oh!, Disney Lorcana or One Piece, or searches all games.
  • Sets, Rarities, Printings, Languages – optional lists that keep only matching rows. A set can be given by its name (SV: Scarlet & Violet 151) or by the last part of its TCGplayer URL (sv-scarlet-and-violet-151). A set that does not exist in the chosen game stops the run with an error and similar names, instead of returning another set's cards.
  • Cards or sealed products – keep single cards only, sealed products only, or both. The choice is applied in the TCGplayer search, so the products you scan are already of that type.
  • Minimum and maximum market price – price range in USD.
  • Minimum units sold in 30 days / 90 days – drops cards that barely sell.
  • Minimum and maximum 30-day price change – find risers or fallers.
  • Order of products to scan – TCGplayer relevance, highest price first or lowest price first.
  • Maximum products to scan – how many products are read per run; TCGplayer search exposes at most 9950 products per search.
  • Maximum results – total row limit.
  • Proxy configuration – optional and normally left off.

How the numbers are calculated

The market price is TCGplayer's own market price for the main condition in the latest 3-day window. It is an average of recent sales and carries over when nothing sold, so a price change is reported only when the printing had at least one sale in that window; otherwise the field is empty. Units sold are summed over the 3-day windows of the last 30 or 90 days, for the main condition. The 90-day change needs at least 84 days of history, so new releases have an empty 90-day change. Days of supply divides the active listings of the whole product by its average daily sales across all printings and conditions. TCGplayer reports sales per 3-day window, so figures are estimates of real sales volume rather than an audited count.

The Actor reads only publicly available catalogue and sales information and does not log in or bypass access controls. You are responsible for using the data in line with applicable laws and the terms of the source. If you find an issue, open it in the Issues tab; problems are answered within one business day.

FAQ

How fresh is the data? Every run reads TCGplayer live. The market price is the value of the latest 3-day window of sales, so it can differ by a few cents from the price shown on the product page right now (for example 14.57 against 14.63 for the same foil card). Use it for trends and comparisons between runs, not as a live quote.

How many products and rows can one run read, and how long does it take? One run reads up to 9950 products per search term, set by Maximum products to scan. Each product needs one extra request for its sales history, and the Actor keeps a short pause between batches, so expect roughly 6 seconds per 10 products and about a minute for the default 100 products. Rows are limited by Maximum results.

Why do I get more rows than products? Each printing and language is its own row; a card with Normal and Foil copies in two languages gives up to four rows.

Why are the price change fields empty for some rows? The printing had no sales in the window, or it is newer than 84 days for the 90-day change.

Can I schedule runs? Yes, use Apify schedules or call the Actor from your own workflow and compare runs over time.

Something looks wrong. Open an issue with the input you used; changes at the source are fixed quickly.

See other data Actors from the same publisher on the Store profile.