Tcgplayer Products Listings Sales Scraper
Pricing
from $5.00 / 1,000 results
Tcgplayer Products Listings Sales Scraper
Scrape every seller listing for any TCGplayer.com product. 28 fields per listing: price, shipping, condition, printing variant (Normal/Holofoil), seller rating, sales count, Gold Seller status, and more. Includes market/median/lowest prices, condition breakdowns, and optional sales history.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer

Andy Page
Actor stats
0
Bookmarked
3
Total users
0
Monthly active users
9 days ago
Last modified
Categories
Share
TCGplayer Product Scraper — Listings, Prices & Sales
Paste any TCGplayer.com product URL and get every seller listing with 28 data fields, complete pricing data, condition breakdowns, and optional sales history. Works with Pokémon, Magic: The Gathering, Yu-Gi-Oh!, One Piece, and every other TCGplayer product line.
Why Use This Actor?
- Complete listing capture — Gets ALL seller listings for a product, not just the first page. Uses TCGplayer's internal API with pagination to fetch every single listing.
- 28 fields per listing — Price, shipping, condition, printing variant, seller rating, seller sales count, Gold Seller status, TCGplayer Direct status, seller programs, and more.
- Product-level aggregations — Instant breakdowns by condition, printing (Normal vs Holofoil), language, listing type, and quantity — no post-processing needed.
- Multi-strategy extraction — Five layered strategies (API interception, request replay, Playwright context, in-page fetch, SSR state, DOM scraping) ensure data is captured even when individual methods fail.
- Anti-bot resilient — Built on Playwright with session pooling, residential proxy support, and human-like browsing patterns to handle TCGplayer's DataDome protection.
Features
| Feature | Description |
|---|---|
| Product detail scraping | Full product metadata: name, set, product line, market/median/lowest prices |
| Complete seller listings | Every active listing with price, shipping, condition, printing, seller trust data |
| Seller intelligence | Rating, sales count, Gold Seller, Verified Seller, Direct Seller, seller programs |
| Condition & variant data | Card condition (NM/LP/MP/HP/DMG), printing (Normal/Holofoil/1st Edition), language |
| Aggregation breakdowns | Product-level counts by condition, printing, language, listing type |
| Sales history (optional) | Historical sales data with prices, quantities, and dates |
| All product lines | Pokémon, Magic, Yu-Gi-Oh!, One Piece, Flesh and Blood, Disney Lorcana, and more |
| Proxy support | Auto-enables Apify residential proxies for reliable scraping |
| Session management | Automatic session rotation to avoid blocks |
Input
Simply provide one or more TCGplayer product URLs:
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
productUrls | array | Yes | — | TCGplayer product page URLs to scrape |
includeSalesHistory | boolean | No | false | Attach sales history to each product |
useApifyProxy | boolean | No | true | Route requests through Apify Proxy |
proxyConfiguration | object | No | Residential US | Proxy settings (RESIDENTIAL + US recommended) |
maxConcurrency | integer | No | 5 | Parallel browser pages |
delayBetweenRequestsMs | integer | No | 1000 | Delay between requests in ms |
maxRequestRetries | integer | No | 5 | Retries per failed request |
requestHandlerTimeoutSecs | integer | No | 120 | Timeout per request in seconds |
Example Input
{"productUrls": [{ "url": "https://www.tcgplayer.com/product/632994/pokemon-sv10-destined-rivals-mistys-lapras-194-182?Language=English" }],"includeSalesHistory": true}
Multiple Products
{"productUrls": [{ "url": "https://www.tcgplayer.com/product/632994/pokemon-sv10-destined-rivals-mistys-lapras-194-182?Language=English" },{ "url": "https://www.tcgplayer.com/product/632473/one-piece-card-game-a-fist-of-divine-speed-after-all-these-years-im-losing-my-edge?Language=English" },{ "url": "https://www.tcgplayer.com/product/564929/pokemon-prismatic-evolutions-umbreon-ex-special-art-rare-161" }],"includeSalesHistory": false,"maxConcurrency": 3}
Output Schema
Each product in the dataset includes:
{"productId": "632994","productName": "Misty's Lapras (194/182)","productUrl": "https://www.tcgplayer.com/product/632994/...","setName": "SV10: Destined Rivals","setId": 24873,"productLine": "Pokemon","marketPrice": 4.61,"medianPrice": 7.80,"lowestPrice": 1.50,"lowestPriceWithShipping": 1.95,"totalListings": 29,"totalSellers": 21,"aggregations": {"condition": [{ "value": "Near Mint", "count": 20 },{ "value": "Lightly Played", "count": 5 }],"printing": [{ "value": "Normal", "count": 21 },{ "value": "Reverse Holofoil", "count": 4 }],"language": [{ "value": "English", "count": 25 }],"listingType": [{ "value": "standard", "count": 23 },{ "value": "custom", "count": 2 }]},"listings": [{"listingId": 649554399,"price": 1.98,"shippingPrice": 1.31,"condition": "Near Mint","conditionId": 1,"language": "English","languageAbbreviation": "EN","printing": "Normal","quantity": 1,"listingType": "standard","sellerName": "CardShop Plus","sellerId": "548047","sellerKey": "313506d5","sellerRating": 100,"sellerSales": "1167","sellerPrograms": ["Pro"],"goldSeller": true,"verifiedSeller": false,"directSeller": false,"directListing": false,"directProduct": true,"channelId": 1,"sellerShippingPrice": 0,"rankedShippingPrice": 1.31,"forwardFreight": false,"productId": 632994,"productConditionId": 1214229}],"salesHistory": {"skuId": "632994","buckets": [{"marketPrice": 3.50,"quantitySold": 2,"bucketStartDate": "2026-02-01"}]},"sourceUrl": "https://www.tcgplayer.com/product/632994/...","scrapedAt": "2026-02-20T17:47:22.348Z"}
Listing Fields (28 per listing)
| Field | Type | Description |
|---|---|---|
listingId | number | Unique listing identifier |
price | number | Listing price in USD |
shippingPrice | number | Calculated shipping cost |
condition | string | Card condition (Near Mint, Lightly Played, etc.) |
conditionId | number | TCGplayer condition ID |
language | string | Card language (e.g. "English") |
languageAbbreviation | string | Language code (e.g. "EN") |
printing | string | Print variant (Normal, Reverse Holofoil, 1st Edition, etc.) |
quantity | number | Available quantity |
listingType | string | "standard" or "custom" |
sellerName | string | Seller display name |
sellerId | string | Seller unique ID |
sellerKey | string | Seller hash key |
sellerRating | number | Seller feedback rating (0-100%) |
sellerSales | string | Total completed sales (e.g. "50000+") |
sellerPrograms | array | Seller programs (Pro, Direct, VIP, CertifiedHobbyShop) |
goldSeller | boolean | TCGplayer Gold Star seller |
verifiedSeller | boolean | Identity-verified seller |
directSeller | boolean | TCGplayer Direct seller |
directListing | boolean | Listing fulfilled by TCGplayer Direct |
directProduct | boolean | Product eligible for TCGplayer Direct |
channelId | number | Sales channel (0 = marketplace, 1 = Direct) |
sellerShippingPrice | number | Seller's own shipping rate |
rankedShippingPrice | number | Shipping rate used for price+shipping ranking |
forwardFreight | boolean | Forward freight shipping flag |
productId | number | Parent product ID |
productConditionId | number | Product-condition combination ID |
customData | object | Additional data (e.g. listing images) |
Example Use Cases
1. Price Monitoring — Track a Specific Card
{"productUrls": [{ "url": "https://www.tcgplayer.com/product/564929/pokemon-prismatic-evolutions-umbreon-ex-special-art-rare-161" }],"includeSalesHistory": true}
2. Bulk Price Check — Multiple Cards at Once
{"productUrls": [{ "url": "https://www.tcgplayer.com/product/86222/pokemon-aquapolis-houndour-87" },{ "url": "https://www.tcgplayer.com/product/564929/pokemon-prismatic-evolutions-umbreon-ex" },{ "url": "https://www.tcgplayer.com/product/521389/magic-the-gathering-foundations-llanowar-elves" }],"maxConcurrency": 3}
3. Arbitrage Detection
Scrape a product to get all seller listings, then compare each listing's price + shippingPrice against the marketPrice to find underpriced cards.
4. Seller Intelligence
Each listing includes sellerName, sellerId, sellerRating, sellerSales, goldSeller, and sellerPrograms — enough to build seller profiles and track inventory levels.
5. Cross-Game Comparison
Works with every TCGplayer product line — compare listing density and pricing across Pokemon, Magic, Yu-Gi-Oh!, One Piece, and more.
How It Works
The scraper uses a multi-strategy extraction engine to reliably capture all data:
- Product Details API — Fetches metadata (total listings, market price, seller count) from TCGplayer's product details endpoint.
- API Interception — Captures the browser's API calls during page load via Playwright response interception.
- Request Replay — Replays the exact API request with pagination to fetch ALL listings.
- Playwright APIRequestContext — Direct API calls sharing the browser's cookies and proxy.
- In-Page Fetch — Executes
fetch()inside the browser context, inheriting authentication cookies. - SSR State Extraction — Parses server-side rendered state from the page source.
- DOM Scraping — Last resort: extracts data from rendered HTML.
Each strategy's results are compared, and the largest complete dataset wins.
Anti-Bot Handling
TCGplayer uses DataDome for bot protection. This actor handles it with:
- Residential proxies — Recommended. Auto-enabled on Apify.
- Session pooling — Automatic session rotation with configurable usage limits.
- Human-like delays — Configurable delay between requests (default 1s).
- Browser fingerprinting — Full Playwright browser with realistic headers.
- Block detection — Detects DataDome challenge pages and retries with a fresh session.
Tip: For best results, use RESIDENTIAL proxies with US country code:
{"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}}
Supported Product Lines
- Pokémon
- Magic: The Gathering
- Yu-Gi-Oh!
- One Piece Card Game
- Disney Lorcana
- Flesh and Blood
- Dragon Ball Super
- Digimon
- Star Wars: Unlimited
- And all other TCGplayer categories
Troubleshooting
"0 listings" or empty results
- Check proxy config: Use residential proxies with US country code.
- Verify the URL: Product URLs must contain a numeric product ID (e.g.
/product/632994/...). - Check the product page: Some products may have no active sellers.
DataDome block / "Just a moment" page
- The actor detects blocks and retries automatically (up to
maxRequestRetriestimes). - Reduce
maxConcurrencyto 2–3 and increasedelayBetweenRequestsMsto 2000+ if blocks persist.
Slow runs
- Each product takes 30–60 seconds due to browser rendering and API pagination.
- Default memory (4096 MB) is recommended for Playwright-based scraping.
Limitations
- TCGplayer.com only — Does not support other marketplaces.
- English listings by default — API requests filter for English-language listings.
- US shipping context — Prices and shipping are calculated for US delivery.
- Real-time pricing — Results reflect pricing at scrape time.
Changelog
v1.0.16 (February 2026)
- Simplified to product URL-only input (removed search/startUrls)
- Improved defaults: maxConcurrency=5, maxRequestRetries=5
- Updated documentation and input schema
v1.0.15 (February 2026)
- Added README, output schema, and dataset schema
- Updated actor.json with SEO metadata
v1.0.14 (February 2026)
- 28 fields per listing including seller programs, printing variant, Gold/Verified/Direct status
- Product-level aggregation breakdowns
- Product details endpoint for accurate metadata
- Fixed double-nested API response parsing
- Removed channelId filter to capture ALL marketplace listings
v1.0.0 (February 2026)
- Initial release with multi-strategy extraction engine
Support
- Issues: Report bugs via GitHub issues or the Apify community
- Feature requests: Contact us through Apify
Built by A Page Ventures | Apify Store