TCGplayer Data Scraper avatar

TCGplayer Data Scraper

Pricing

from $4.00 / 1,000 results

Go to Apify Store
TCGplayer Data Scraper

TCGplayer Data Scraper

Scrape TCGPlayer prices in seconds. Get real-time market data, seller listings, No API key required. Export as JSON, CSV, or Excel.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

devcake

devcake

Maintained by Community

Actor stats

4

Bookmarked

133

Total users

13

Monthly active users

4 months ago

Last modified

Categories

Share

🃏 TCGPlayer Scraper | Scrape Trading Card Prices & Data

The TCGPlayer Scraper lets you scrape TCGPlayer for trading card prices, market data, and seller listings. No API key required - perform TCGPlayer card search across store listings for Pokemon, Magic: The Gathering, Yu-Gi-Oh!, sports cards, and all TCG categories with real-time pricing, seller ratings, and optional sales history.


📋 What This Scraper Does

The TCGPlayer Scraper automatically searches and extracts comprehensive product data including:

  • 💰 Real-time market prices - Current market value, median price, lowest price
  • 🚚 True total cost - Lowest price including shipping for accurate cost comparison
  • 🏪 Complete seller data - Ratings, verification status, gold seller badges, direct seller flags
  • 🎴 Card attributes - Set info, rarity, card number, condition, printing type
  • 📊 Optional enrichment - Actual sales history and price points by printing type (Normal/Foil)
  • 📦 Bulk export - Scrape hundreds of products in a single run with concurrent processing

🔧 Problem Solved

TCGPlayer data scraping has traditionally required an API key or expensive subscriptions. This scraper provides TCGPlayer data access without authentication - a cost-effective solution for:

  • 📈 Price tracking - Monitor card values over time
  • 💵 Arbitrage research - Find underpriced cards across sellers
  • 📋 Inventory management - Pull current pricing for your listings
  • 🔍 Market analysis - Build datasets for research or machine learning

⚡ Features

FeatureDescription
🔍 TCGPlayer SearchSearch across all stores, categories, and card types
🚀 Concurrent Scraping10x faster with parallel page processing
🔐 TLS Fingerprinting BypassUses curl_cffi Chrome impersonation for reliable access
📝 Multiple Search QueriesScrape different card categories simultaneously
📄 Full PaginationUp to 100 pages per query, 50 products per page
🔄 5 Sort OptionsBest Match, Best Selling, A-Z, Price High-Low, Price Low-High
💵 TCGPlayer Sales DataGet actual sales history, transaction prices, and price trends
📥 TCGPlayer Data DownloadExport results as JSON, CSV, Excel, or via REST API
Clean OutputInternal fields automatically removed

🎛️ Input Parameters

ParameterTypeDefaultMaxDescription
queriesarray["pokemon cards"]-TCGPlayer card search queries. Search store listings for any card
sortOptionstring"Best Match"-Sort order (see options below)
startPageinteger1-Starting page (1-based), applies per query
pageCountinteger3100Pages to scrape per query (50 products/page)
enrichDatabooleanfalse-Fetch sales history & price points

🔀 Sort Options

  • 🎯 Best Match - Default relevance ranking
  • 🔥 Best Selling - Sort by popularity and sales volume
  • 🔤 A-Z - Alphabetical by product name
  • 💰 Price: High to Low - Highest prices first
  • 💸 Price: Low to High - Lowest prices first

📝 Example Input

{
"queries": ["charizard", "black lotus", "blue eyes white dragon"],
"sortOption": "Price: Low to High",
"startPage": 1,
"pageCount": 2,
"enrichData": false
}

💡 Note: With 3 queries × 2 pages × 50 products = 300 products total


📤 Output Data Structure

🎴 Core Product Fields

FieldTypeDescription
productIdintegerUnique TCGPlayer product identifier
productNamestringFull product name
productUrlNamestringURL-safe product name slug
urlstringDirect link to product page
imageUrlstringProduct image URL (400x400)
setNamestringCard set name (e.g., "Base Set Unlimited")
setCodestringSet abbreviation (e.g., "BASE")
raritystringRarity code
rarityNamestringFull rarity name (e.g., "Rare Holo")
numberstringCard number in set
conditionstringDefault condition

💰 Pricing Fields

FieldTypeDescription
marketPricenumberCurrent TCGPlayer market price
medianPricenumberMedian price across all listings
lowestPricenumberLowest listing price (before shipping)
lowestPriceWithShippingnumberTrue lowest price including shipping
totalListingsintegerNumber of active seller listings

🏪 Seller Listing Details

Each product includes a listings array with:

FieldTypeDescription
listingIdintegerUnique listing identifier
sellerNamestringSeller's store name
sellerIdintegerSeller's TCGPlayer ID
sellerKeystringSeller's unique key
sellerRatingnumberSeller rating score
sellerSalesintegerTotal sales by seller
sellerProgramsarraySeller program memberships
verifiedSellerbooleanTCGPlayer verified status
goldSellerbooleanGold seller badge
directSellerbooleanDirect from TCGPlayer
conditionstringCard condition (Mint, Near Mint, etc.)
printingstringPrinting type (Normal, Foil)
languagestringCard language (English, Japanese, etc.)
pricenumberListing price
shippingPricenumberShipping cost
totalPricenumberPrice + shipping combined
quantityintegerAvailable quantity

⚡ Pokemon Card Attributes (when available)

FieldTypeDescription
customAttributes.cardTypestringCard type (Pokemon, Trainer, Energy)
customAttributes.energyTypestringEnergy type (Fire, Water, etc.)
customAttributes.stagestringEvolution stage (Basic, Stage 1, Stage 2)
customAttributes.hpstringHit points
customAttributes.retreatCostnumberRetreat cost
customAttributes.weaknessstringWeakness type
customAttributes.resistancestringResistance type
customAttributes.attack1objectFirst attack details

📊 Enrichment Data (when enrichData: true)

FieldTypeDescription
_enrichedbooleanTrue if enrichment data was fetched
_enrichment.sales.totalSalesintegerTotal number of recorded sales
_enrichment.sales.lastSaleDatestringDate of most recent sale
_enrichment.sales.avgPricenumberAverage sale price
_enrichment.sales.priceRangeobject{min, max} sale prices
_enrichment.sales.recentSales[]arrayLast 10 sales with date, price, condition
_enrichment.pricePoints.normalobjectNormal printing prices
_enrichment.pricePoints.foilobjectFoil printing prices

🏷️ Metadata Tags

FieldTypeDescription
_querystringSearch query that found this product
_scrapedPageintegerPage number where product was found
_sortOptionstringSort option used
_scrapedAtstringISO 8601 timestamp
_scraperVersionstringActor version

📄 Example Output

{
"productId": 290158372,
"productName": "Charizard - 4/102 - Base Set Unlimited",
"productUrlName": "charizard-base-set-unlimited",
"url": "https://www.tcgplayer.com/product/290158372/charizard-base-set-unlimited",
"imageUrl": "https://product-images.tcgplayer.com/fit-in/400x400/290158372.jpg",
"setName": "Base Set Unlimited",
"setCode": "BASE",
"rarity": "Rare Holo",
"rarityName": "Rare Holo",
"number": "4/102",
"marketPrice": 450.00,
"medianPrice": 425.00,
"lowestPrice": 399.99,
"lowestPriceWithShipping": 414.99,
"totalListings": 15,
"listings": [
{
"listingId": 12345678,
"sellerName": "CardShopPro",
"sellerId": 54321,
"sellerKey": "cardshoppro",
"sellerRating": 98.5,
"sellerSales": 15000,
"sellerPrograms": ["Verified", "Gold"],
"verifiedSeller": true,
"goldSeller": true,
"directSeller": false,
"condition": "Near Mint",
"printing": "Normal",
"language": "English",
"price": 399.99,
"shippingPrice": 15.00,
"totalPrice": 414.99,
"quantity": 1
}
],
"customAttributes": {
"cardType": "Pokemon",
"stage": "Stage 2",
"hp": "120",
"weakness": "Water",
"resistance": "Fighting",
"attack1": {"name": "Fire Spin", "damage": "100"}
},
"_query": "charizard",
"_scrapedPage": 1,
"_sortOption": "Price: Low to High",
"_scrapedAt": "2026-02-13T12:00:00Z",
"_scraperVersion": "3.0.0",
"_enriched": false
}

📊 Enriched Output Example (with enrichData: true)

{
"_enriched": true,
"_enrichment": {
"sales": {
"totalSales": 234,
"lastSaleDate": "2026-02-12T15:30:00Z",
"avgPrice": 435.50,
"priceRange": {"min": 380.00, "max": 520.00},
"recentSales": [
{"date": "2026-02-12T15:30:00Z", "price": 425.00, "condition": "Near Mint"}
]
},
"pricePoints": {
"normal": {"marketPrice": 450.00, "listedMedian": 425.00},
"foil": {"marketPrice": 1200.00, "listedMedian": 1100.00}
}
}
}

🎮 Supported Trading Card Categories

Works with all TCGPlayer categories:

  • Pokemon - Base set, Sword & Shield, Scarlet & Violet, all series
  • 🧙 Magic: The Gathering - Standard, Modern, Commander, Legacy
  • 🐉 Yu-Gi-Oh! - Main sets, special editions, reprint sets
  • Sports Cards - Baseball, Basketball, Football, Hockey
  • 🎲 Other TCGs - Digimon, Dragon Ball Super, One Piece, Flesh and Blood, and more

🚀 Getting Started

☁️ Run on Apify Cloud

  1. Open the TCGPlayer Scraper on Apify
  2. Click Run with default settings or configure input
  3. Download your scraped data as JSON, CSV, Excel, or access via REST API

💡 Use Cases

Use CaseDescription
🔍 Card SearchQuickly find and compare cards across all TCGPlayer stores
💰 Card CollectorsFind the best deals with true total cost (price + shipping)
📈 Price TrackingMonitor market trends and price history over time
💵 ArbitrageIdentify price discrepancies between sellers
📋 Inventory ManagementPull current pricing for your own listings
🔍 Market ResearchAnalyze pricing patterns across sets and rarities
📊 Data AnalysisBuild datasets for ML models or business intelligence

🔑 TCGPlayer API vs This Scraper

If you're searching for TCGPlayer API access, here's how this scraper compares to the official options:

FeatureThis ScraperTCGPlayer Official API
🔑 API Key RequiredNoYes (requires partnership)
🌐 Access MethodPublic search APIAuthenticated REST API
💵 Sales HistoryYes (via enrichData)Limited
💰 Price DataReal-timeReal-time
⏱️ Rate LimitsAuto-managedBased on tier
💳 CostPay per Apify runSubscription required
🎯 Best ForOne-time scraping, researchProduction apps, high volume

✅ When to Use This Scraper

  • You need bulk price data without an API key
  • You're doing market research or price tracking
  • You want sales history and price point data
  • You need to scrape multiple queries quickly

🏢 When to Use Official TCGPlayer API

  • You're building a production application
  • You need authenticated, guaranteed access
  • You require SLA guarantees
  • You're doing high-volume commercial operations

💡 Note: This scraper does NOT require or use any TCGPlayer API key. It accesses publicly available data.


❓ Frequently Asked Questions

🔑 Do I need a TCGPlayer API key?

No. This scraper accesses TCGPlayer's public search API directly. No API key, authentication, or TCGPlayer account is required.

💵 Can I get sales history data?

Yes. Set enrichData: true in your input to fetch actual sales transactions including sale dates, prices, and conditions. This adds 2 extra API calls per product.

💰 What's the difference between marketPrice and lowestPrice?

  • marketPrice - TCGPlayer's calculated market value based on recent sales
  • lowestPrice - The cheapest current listing (before shipping)
  • lowestPriceWithShipping - The cheapest listing including shipping cost

📊 How many products can I scrape?

  • Up to 50 products per page (TCGPlayer API limit)
  • Up to 100 pages per query (configurable)
  • With 3 queries × 100 pages × 50 products = 15,000 products max

📱 Does this work with TCGPlayer's app collection?

No. This scraper searches TCGPlayer's product database. It does not access personal collections from the TCGPlayer app.

🔄 Is this the same as TCGPlayer's official API?

No. This is an independent scraper that accesses TCGPlayer's public search endpoints. For official API access with authentication and SLA guarantees, contact TCGPlayer directly.