TCGplayer Price Scraper – Pokémon, MTG & Yu-Gi-Oh Card Prices
Pricing
Pay per event
TCGplayer Price Scraper – Pokémon, MTG & Yu-Gi-Oh Card Prices
TCGplayer price scraper & TCGplayer API alternative: market, low & mid card prices per condition and printing for Pokémon, Magic: The Gathering, Yu-Gi-Oh!, One Piece, Lorcana and more. Listing counts, 30-day sales, set, rarity. Price-change alerts. No login.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Scrapeworks HQ
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
TCGplayer Price Scraper & API Alternative – Pokémon, MTG & Yu-Gi-Oh Card Prices by Condition
Get TCGplayer card prices for Pokémon, Magic: The Gathering, Yu-Gi-Oh!, One Piece, Disney Lorcana, Flesh and Blood, Digimon, sports cards and every other TCGplayer product line. You get market, low and mid prices for each condition (Near Mint, Lightly Played, Moderately Played, Heavily Played, Damaged) and printing (Normal, Foil, Holofoil, 1st Edition…), listing counts, recent sales, set, rarity, card number, images and product URLs.
No TCGplayer API key, no login and no seller personal data. Export to JSON, CSV, Excel or use the Apify API.
🚀 Quick start (60 seconds)
- Click Try for free – the input is prefilled with a working example.
- Press Start. A small run finishes in seconds and costs fractions of a cent.
- Open the Output tab (table view) and export CSV, Excel, JSON or connect Google Sheets.
{"searchKeywords": ["charizard"],"maxResultsPerSearch": 10,"sortBy": "price-desc"}
Sample output
| productName | setName | rarity | marketPrice | lowestPrice | totalListings |
|---|---|---|---|---|---|
| Charizard | Base Set | Holo Rare | 954.65 | 180 | 134 |
| Charizard ex | SV: Obsidian Flames | Double Rare | 2.10 | 1.50 | 410 |
Why this TCGplayer price scraper (TCGplayer API alternative)?
| This Actor | Typical TCGplayer scrapers | |
|---|---|---|
| Market price per condition (NM/LP/MP/HP/DMG) | ✅ | ❌ one price per product |
| Low & mid (median) listing price per condition | ✅ exact | ❌ |
| Listing count per condition | ✅ | ❌ |
| Sales in last 30/90/180/365 days per condition (qty, low, high, last sale date) | ✅ | partial |
| Filter by game, set, rarity, product type | ✅ | ❌ keywords only |
| Product URLs / IDs as input | ✅ | ❌ |
| Seller names, IDs, ratings | ❌ never collected (privacy) | ✅ |
| Price | from $0.80 / 1,000 products | $2.00+ / 1,000 |
Use cases – card price checker, price guide & price alerts
- 📈 Price tracking – schedule daily runs to build your own TCGplayer price history.
- 💵 Buylist & arbitrage – compare NM vs LP prices, market vs lowest listing.
- 🏪 Store inventory pricing – price singles by condition from TCGplayer market data.
- 📊 Collection valuation – feed a list of product URLs and get current values.
- 🤖 Data for apps, bots and spreadsheets – Google Sheets, Make, Zapier, n8n, API.
Input
| Field | Description |
|---|---|
searchKeywords | Card / product names, e.g. charizard, black lotus, blue-eyes white dragon |
productUrls | TCGplayer product URLs (https://www.tcgplayer.com/product/42382/...) or IDs |
games | pokemon, magic (mtg), yugioh, one-piece, lorcana, flesh-and-blood, digimon, pokemon-japan, … |
sets | Set names, e.g. Base Set, SWSH: Crown Zenith, Double Masters 2022 |
rarities / productTypes | e.g. Secret Rare; Cards (singles only) or Sealed Products |
sortBy | relevance, price high→low, price low→high, name |
maxResultsPerSearch / maxResultsTotal | Limits |
includeConditionPrices | Per-condition prices (default on). Turn off for fast, cheap catalog scraping |
priceHistoryRange | Sales window: month, quarter, semi-annual, annual |
englishOnly | Ignore non-English SKUs |
Filters work with or without keywords — e.g. every Pokémon Base Set single sorted by price:
{ "games": ["pokemon"], "sets": ["Base Set"], "productTypes": ["Cards"], "sortBy": "price-desc", "maxResultsPerSearch": 102 }
Output example
{"productId": 42382,"productName": "Charizard","game": "Pokemon","setName": "Base Set","setCode": "BS","rarity": "Holo Rare","number": "004/102","marketPrice": 954.65,"lowestPrice": 180,"totalListings": 134,"url": "https://www.tcgplayer.com/product/42382/pokemon-base-set-charizard","imageUrl": "https://tcgplayer-cdn.tcgplayer.com/product/42382_in_1000x1000.jpg","conditionSummary": [{ "condition": "Near Mint", "listingCount": 17, "lowPrice": 1100, "lowPriceWithShipping": 1100, "midPriceWithShipping": 1750.99 },{ "condition": "Lightly Played", "listingCount": 47, "lowPrice": 485, "lowPriceWithShipping": 485, "midPriceWithShipping": 575.95 }],"conditions": [{ "printing": "Holofoil", "condition": "Near Mint", "language": "English", "marketPrice": 954.65,"sales": { "range": "month", "quantitySold": 5, "transactions": 5, "lowSalePrice": 500, "highSalePrice": 1500, "lastSaleDate": "2026-10-13" } }],"printingPrices": [ { "printing": "Holofoil", "marketPrice": 954.65, "listedMedianPrice": 600 } ],"scrapedAt": "2026-10-21T21:10:00.000Z"}
Field notes: marketPrice is TCGplayer's market price (based on recent sales). conditionSummary uses all live listings for each condition: exact count, lowest price, and the median ("mid") listing price including shipping. conditions[].lowPrice/midPrice are computed from the cheapest sampled listings of that SKU.
⭐ Unique: Monitor mode, CSV-ready output & webhook summary
Build a price tracker in two clicks: schedule the Actor with monitorMode: "changes" and a monitorKey per watchlist. Each run returns only cards whose market/low/median price or listing count moved, with previousPrice, priceChange and priceChangePct. Unchanged cards are free.
- Monitor mode (
monitorMode:all|changes|onlyNew, plusmonitorKey) – cross-run dedupe and field-level diffs (changeType,changedFields,changes,firstSeenAt). Skipped items cost $0. - Flat / CSV-ready output (
outputFormat: "flat") – one column per field, perfect for Excel and Google Sheets. - Run summary – a free
SUMMARYrecord in the run's key-value store (also linked in the Output tab) and optionally POSTed tosummaryWebhookUrl. - Changes dataset view – see what's new/changed at a glance.
💰 Pricing (pay per result)
| Event | Price |
|---|---|
| Run start | $0.001 |
| Product (basic prices) | $0.80 / 1,000 |
| Product + condition/printing prices | $1.50 / 1,000 |
Typical TCGplayer Actors charge $2–$32 / 1,000 – this one is ≥25% cheaper.
🎁 Sweetener: in Monitor mode you only pay for new/changed items, and duplicates within a run are never charged. Run summary + webhook are free.
Speed & politeness
The Actor uses the same public JSON endpoints as tcgplayer.com, with a global rate limit (default 120 requests/min), limited concurrency, and exponential back-off with Retry-After support. Basic mode needs 1 request per 50 products; condition mode about 3–12 requests per product.
FAQ
Do I need a TCGplayer account or API key? No. Only publicly visible data is used.
Is seller data collected? No. Listings are read only to compute aggregated counts and prices; seller names, IDs, ratings and addresses are discarded and never stored.
Is it legal? It collects public pricing data. Respect TCGplayer's terms and applicable law in how you use the data.
I get 403 / 429 errors. Lower maxRequestsPerMinute or enable Apify Proxy.
This Actor is not affiliated with or endorsed by TCGplayer or eBay.
🔌 Integrations & API
Works with Zapier, Make, n8n, Google Sheets, Slack, Airbyte, LangChain/LlamaIndex and the Apify MCP server (AI agents).
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('scrapeworkshq/tcgplayer-scraper').call({"searchKeywords": ["charizard"], "maxResultsPerSearch": 10, "sortBy": "price-desc"});const { items } = await client.dataset(run.defaultDatasetId).listItems();
Python
from apify_client import ApifyClientclient = ApifyClient('<APIFY_TOKEN>')run = client.actor('scrapeworkshq/tcgplayer-scraper').call(run_input={"searchKeywords": ["charizard"], "maxResultsPerSearch": 10, "sortBy": "price-desc"})items = client.dataset(run['defaultDatasetId']).list_items().items
cURL (sync, returns items)
curl -X POST 'https://api.apify.com/v2/acts/scrapeworkshq~tcgplayer-scraper/run-sync-get-dataset-items?token=<APIFY_TOKEN>&format=csv' \-H 'content-type: application/json' -d '{"searchKeywords": ["charizard"], "maxResultsPerSearch": 10, "sortBy": "price-desc"}'
❓ More FAQ
Can I track price history?
Yes – Monitor mode keeps the last seen prices per watchlist and outputs the difference every run; the SUMMARY record counts price drops/rises.
Does it scrape seller or buyer data?
No, only public product and price data.
How does Monitor mode work?
The Actor remembers the IDs and key fields of items it returned before (in a named key-value store in your account, keyed by monitorKey). Next run, each item gets changeType = new / changed / unchanged plus a changes diff. In Only new / Only new or changed modes, the rest is skipped and not charged.
How do I get a clean CSV / Excel / Google Sheet?
Set Output format → Flat / CSV-ready. Nested objects become dot.columns and lists are joined with |, so every export is one row per item with no JSON blobs.
Can I get notified when a run finishes?
Set Summary webhook URL (Zapier/Make/n8n catch hook, Slack workflow, your API). You receive one compact JSON: counts, new/changed, price drops/rises, dataset ID. Or use Apify's native webhooks/integrations.
How do I limit cost?
Use the max-results inputs and Apify's Maximum cost per run. The Actor stops cleanly when the limit is reached.
Found a bug or need a field? Open an issue on the Issues tab – we usually reply within 24 h.
Changelog
- 2026-10-21 – Monitor mode (new/changed only, free skips), flat CSV-ready output, SUMMARY record + webhook, Changes view.