Tcgplayer Products Listings Sales Scraper avatar

Tcgplayer Products Listings Sales Scraper

Pricing

from $5.00 / 1,000 results

Go to Apify Store
Tcgplayer Products Listings Sales Scraper

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

Andy Page

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

0

Monthly active users

9 days ago

Last modified

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

FeatureDescription
Product detail scrapingFull product metadata: name, set, product line, market/median/lowest prices
Complete seller listingsEvery active listing with price, shipping, condition, printing, seller trust data
Seller intelligenceRating, sales count, Gold Seller, Verified Seller, Direct Seller, seller programs
Condition & variant dataCard condition (NM/LP/MP/HP/DMG), printing (Normal/Holofoil/1st Edition), language
Aggregation breakdownsProduct-level counts by condition, printing, language, listing type
Sales history (optional)Historical sales data with prices, quantities, and dates
All product linesPokémon, Magic, Yu-Gi-Oh!, One Piece, Flesh and Blood, Disney Lorcana, and more
Proxy supportAuto-enables Apify residential proxies for reliable scraping
Session managementAutomatic session rotation to avoid blocks

Input

Simply provide one or more TCGplayer product URLs:

ParameterTypeRequiredDefaultDescription
productUrlsarrayYesTCGplayer product page URLs to scrape
includeSalesHistorybooleanNofalseAttach sales history to each product
useApifyProxybooleanNotrueRoute requests through Apify Proxy
proxyConfigurationobjectNoResidential USProxy settings (RESIDENTIAL + US recommended)
maxConcurrencyintegerNo5Parallel browser pages
delayBetweenRequestsMsintegerNo1000Delay between requests in ms
maxRequestRetriesintegerNo5Retries per failed request
requestHandlerTimeoutSecsintegerNo120Timeout 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)

FieldTypeDescription
listingIdnumberUnique listing identifier
pricenumberListing price in USD
shippingPricenumberCalculated shipping cost
conditionstringCard condition (Near Mint, Lightly Played, etc.)
conditionIdnumberTCGplayer condition ID
languagestringCard language (e.g. "English")
languageAbbreviationstringLanguage code (e.g. "EN")
printingstringPrint variant (Normal, Reverse Holofoil, 1st Edition, etc.)
quantitynumberAvailable quantity
listingTypestring"standard" or "custom"
sellerNamestringSeller display name
sellerIdstringSeller unique ID
sellerKeystringSeller hash key
sellerRatingnumberSeller feedback rating (0-100%)
sellerSalesstringTotal completed sales (e.g. "50000+")
sellerProgramsarraySeller programs (Pro, Direct, VIP, CertifiedHobbyShop)
goldSellerbooleanTCGplayer Gold Star seller
verifiedSellerbooleanIdentity-verified seller
directSellerbooleanTCGplayer Direct seller
directListingbooleanListing fulfilled by TCGplayer Direct
directProductbooleanProduct eligible for TCGplayer Direct
channelIdnumberSales channel (0 = marketplace, 1 = Direct)
sellerShippingPricenumberSeller's own shipping rate
rankedShippingPricenumberShipping rate used for price+shipping ranking
forwardFreightbooleanForward freight shipping flag
productIdnumberParent product ID
productConditionIdnumberProduct-condition combination ID
customDataobjectAdditional 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:

  1. Product Details API — Fetches metadata (total listings, market price, seller count) from TCGplayer's product details endpoint.
  2. API Interception — Captures the browser's API calls during page load via Playwright response interception.
  3. Request Replay — Replays the exact API request with pagination to fetch ALL listings.
  4. Playwright APIRequestContext — Direct API calls sharing the browser's cookies and proxy.
  5. In-Page Fetch — Executes fetch() inside the browser context, inheriting authentication cookies.
  6. SSR State Extraction — Parses server-side rendered state from the page source.
  7. 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 maxRequestRetries times).
  • Reduce maxConcurrency to 2–3 and increase delayBetweenRequestsMs to 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