Tcgplayer Scraper
Pricing
from $10.00 / 1,000 results
Tcgplayer Scraper
Get TCGplayer card and product data for Pokemon, Magic, Yu-Gi-Oh, and every game on the platform — no API key needed. Real per-seller listings with condition and price, server-side filters by set/rarity/price, and full historical price charts. Search, lookup by ID, or track price history.
Pricing
from $10.00 / 1,000 results
Rating
0.0
(0)
Developer
Norm Data
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
a month ago
Last modified
Categories
Security
Limited permissionsShare

🃏 TCGplayer Scraper
Get TCGplayer card and product data for Pokemon, Magic: The Gathering, Yu-Gi-Oh, and every other trading card game on the platform, no API key and no login. Market price, every seller listing with condition and reputation, and full historical price and sales-volume charts.
Search the whole catalog by set, rarity, condition, and price, look up specific products by ID, or pull a price history chart.
🎯 Who uses it?
💰 Resellers & arbitrage sellers
Find the cheapest real listing for a card by condition, across every seller, not just an aggregate low price.
📦 Collectors & card shop owners
Price a whole collection by looking up each product ID, and keep shop listings priced against real current market data.
📈 Market researchers & investors
Pull the daily price and sales-volume chart for cards you're watching, and track trends by set, rarity, or game over time.
🎮 Deck builders on a budget
Filter competitive staples by price range and set to plan a deck around what you can actually afford.
✨ What it does
Reads TCGplayer's own public search and pricing data directly and normalizes every card or product into a flat row.
- Search: filters the whole TCGplayer catalog by name, game, set, rarity, listing condition, and price range.
- Look up: resolves exact product IDs, one row per ID, with the same full detail as search. A product that doesn't resolve comes back as an
errorrow. - Price history: a real daily price and sales-volume chart for each product ID, broken out by every condition, printing, and edition combination TCGplayer tracks separately.
Missing source values are returned as null, never invented.
🏆 Why this scraper
- Real seller listings, not just an aggregate price. Every listing's condition, printing, language, seller name, rating, sales count, and price plus shipping.
- Server-side filters that actually narrow the search. Set, rarity, listing condition, and price range all filter at the source.
- Real historical price charts. Daily market price, sale price range, and quantity sold, per condition, printing, and edition, going back a full quarter.
- Works with every TCGplayer game, not just Pokemon: verified live across Magic: The Gathering, Yu-Gi-Oh, Cardfight!! Vanguard, Dragon Ball Super, and more in the same run.
- A normal maximum-results cap, not manual page-and-count math.
⚖️ How it compares
Checked directly against both other TCGplayer scrapers on Apify (their own declared input and output):
| Capability | This actor | parseforge/tcgplayer-scraper | devcake/tcgplayer-data-scraper |
|---|---|---|---|
| Every TCGplayer game | yes | Pokemon only | yes |
| Per-seller listings (condition, rating, price + shipping) | yes | no | yes |
| Filter by set | yes | yes | no |
| Filter by rarity | yes | yes | no |
| Filter by listing condition | yes | no | no |
| Filter by price range | yes | no | no |
| Historical price / volume chart | yes | no | recent sales list only |
| Direct lookup by product ID | yes | no | no |
| Declared dataset schema | yes | yes | no |
📦 What data you get
| Entity | Useful fields |
|---|---|
| Product | ID, name, image, game, set name and code, rarity, and product URL. |
| Pricing | Market price, median price, lowest price, lowest price with shipping, and total active listings. |
| Listings | Seller name, rating, sales count, verified/gold flags, condition, printing, language, price, shipping price, quantity, per seller. |
| Card attributes | Game-specific attributes (HP, energy type, stage, attack text, etc.) when TCGplayer has them, cleaned of display markup. |
| Price history | The requested range plus one entry per condition/printing/edition with a dated series of price and volume. |
💡 Use cases
🔎 Search filtered products
{ "mode": "search", "game": "Pokemon", "setName": "Base Set", "rarityName": "Holo Rare", "condition": "Near Mint", "priceMin": 10, "priceMax": 500, "maxItems": 100 }
🔤 Search by name, cheapest first
{ "mode": "search", "query": "black lotus", "game": "Magic: The Gathering", "sortField": "market-price", "sortOrder": "asc", "maxItems": 50 }
🆔 Look up specific products
{ "mode": "lookup", "productIds": [106999, 654213] }
📈 Price history for the last quarter
{ "mode": "priceHistory", "productIds": [106999], "priceHistoryRange": "quarter" }
⚙️ How the input is organised
The input form is split into three sections:
| Section | What it's for |
|---|---|
| Mode | Pick Search, Look up, or Price history, plus the row cap for the run. |
| Search filters | Name, game, set, rarity, condition, price range, foil-only, and sort order. Only used in Search mode. |
| Look up and price history | Product IDs, and the price-history range. Used in Look up and Price history modes. |
Apify Free plan: every run is limited to a fixed 10-row sample. Upgrade your Apify plan to run your own settings.
💰 Pricing
Pay-per-event: a one-time 0.003 when the run starts, plus a price per result saved to your dataset. The price depends on your Apify plan tier:
| Your Apify plan | Price per result |
|---|---|
| Free | 0.0143 |
| Bronze | 0.0129 |
| Silver | 0.0114 |
| Gold / Platinum / Diamond | 0.01 |
Approximate total cost (includes the 0.003 start fee):
| Results collected | Free | Bronze | Silver | Gold+ |
|---|---|---|---|---|
| 100 | $1.43 | $1.29 | $1.14 | $1.00 |
| 1,000 | $14.30 | $12.90 | $11.40 | $10.00 |
| 10,000 | $143.00 | $129.00 | $114.00 | $100.00 |
New Apify accounts start with $5 in free credit.
🚀 Run it
- Create a free Apify account with $5 in credit.
- Open the Tcgplayer Scraper.
- Fill in the input (or keep the prefilled example), set the maximum number of results, then click Start.
- Export the results as CSV, Excel, JSON, or XML from the Dataset tab.
Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python, and schedule it with Apify's built-in Scheduler.
🤖 Use with AI agents (MCP)
Give an AI agent live access to the Tcgplayer Scraper through the Model Context Protocol:
claude mcp add --transport http apify "https://mcp.apify.com?tools=normdata/tcgplayer-scraper"
Then prompt it in plain language to run the scraper and read back the results.
🔧 Troubleshooting
Market price or median price is null. TCGplayer only computes them with enough recent sales; rarely-traded products genuinely have neither.
A product ID returned an error: "not found" row.
Check the ID from the product's URL on tcgplayer.com.
My search returned 0 products. Set name and rarity must match TCGplayer's spelling. Try with name and game only first.
❓ FAQ
| Question | Answer |
|---|---|
| Which games are covered? | Every game on TCGplayer, Pokémon, Magic, Yu-Gi-Oh and the rest. |
| Does it include price history? | Yes, daily price and sales volume per condition, printing and edition. |
| Does it include individual seller listings? | Yes, with condition and price. |
| Do I need an API key? | No. |
🛡️ Limits & responsible use
This Actor reads only TCGplayer's own public search and pricing data. It never signs in and never accesses anything gated behind an account.
An unresolved look-up or price-history product ID still writes one error: "not found" row rather than failing the whole run.
TCGplayer only computes a market price or median price when it has enough recent sales data; an obscure or rarely-traded product can genuinely have neither, reported as null rather than guessed. product_type is left empty when TCGplayer's own search response doesn't include it, which is most products. image_url is built from the product ID against TCGplayer's own image CDN, since the search response carries no image field at all. TCGplayer's own history endpoint only supports month and quarter ranges. TCGplayer's own relevance search can repeat a product across pages as the catalog shifts mid-scan, so this Actor drops repeats and keeps fetching until it has enough distinct rows, which can make a large run take a little longer than the requested count suggests.
Read live from TCGplayer's own data on every run. It is not cached.
Is this an official TCGplayer tool? No. Independent, not affiliated with TCGplayer. It reads only publicly available data.
📧 Contact
Need a scraper for a different site, or found something wrong with this one? norm.data.scrapers@gmail.com
🧪 Local development
bun installbun test # offline: normalisation, filter-building, input logic (real fixtures)bun run src/main.ts # reads storage/key_value_stores/default/INPUT.json