TCGplayer Listings Scraper avatar

TCGplayer Listings Scraper

Pricing

from $1.20 / 1,000 card listings

Go to Apify Store
TCGplayer Listings Scraper

TCGplayer Listings Scraper

Scrape every seller listing for any TCGplayer card - price, shipping, condition, printing, language, and seller, compared with market price. Pokémon, Magic: The Gathering, Yu-Gi-Oh!, One Piece, Lorcana, and more. Filter, batch up to 100 cards, and add Fair Value Analysis.

Pricing

from $1.20 / 1,000 card listings

Rating

5.0

(1)

Developer

Phantom Coder

Phantom Coder

Maintained by Community

Actor stats

2

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Scrape every individual seller listing for any card on TCGplayer - one row per offer, with seller, condition, printing, language, quantity, price, shipping, and how the price compares to TCGplayer's market price.

Works for Pokémon, Magic: The Gathering, Yu-Gi-Oh!, One Piece, Lorcana, Flesh and Blood, Digimon, Star Wars: Unlimited, and more. Scrape one card, or a whole watchlist of up to 100 cards in a single run.

Looking for the European market? Try the sister Actor, Cardmarket Listings Scraper.


Who is this for

  • Buyers and investors hunting the cheapest Near Mint copy - sort by discountVsMarketPct to see listings priced furthest below market
  • Resellers monitoring a watchlist daily for underpriced listings, without refreshing TCGplayer by hand
  • Store owners checking what competing sellers ask for the cards they stock, by condition and printing
  • Collectors setting price alerts in Make, Zapier, or n8n when a card drops below a target price

No TCGplayer account required.


Why it's different

Product-level price data gives you one number per card - the market price or the lowest listing. This Actor returns the individual seller listings behind that number: who is selling, in what condition, which printing, how many copies, and what shipping costs.

A card with a $108 market price might have a Lightly Played copy at $95 from a Gold Star seller with free shipping - that listing is what this Actor surfaces.

Every listing also gets a deal score, discountVsMarketPct, against the market price for that exact condition, printing, and language - so a Lightly Played foil is compared with other Lightly Played foils, not with Near Mint copies.


What you get

Every listing row includes:

  • Product name, set, set code, card number, rarity, game, image, and product URL
  • Seller name, rating, sales volume, Gold Star and verified status, location, and whether they ship through TCGplayer Direct
  • Condition, printing, language, and quantity available
  • Item price, shipping, and total price in USD
  • TCGplayer market price for the listing's condition, printing, and language, the listed median price, and the discount vs market
  • Whether the seller uploaded photos of the actual card

With the recent sales add-on:

  • The latest completed sales for the product (up to 5): date, condition, printing, language, quantity, price, and shipping

With the Fair Value Analysis add-on:

  • An AI-powered fair value estimate for the card, and how far each listing's price sits below or above it
  • Raw (ungraded) market price, and the discount vs that price
  • PSA (Professional Sports Authenticator) 9 and PSA 10 graded market prices
  • Gem rate (the share of graded copies that come back PSA 10) and the PSA population behind it
  • 1-day price change and 7-day vs 30-day price change

Pokémon only, covering mainly Scarlet & Violet and Mega Evolution sets (especially Illustration Rare and Special Illustration Rare cards). See Understanding the data below.


How to scrape TCGplayer listings

  1. Open the TCGplayer page of a card, for example tcgplayer.com/product/487805/..., and copy the URL. You can also paste just the product ID.
  2. Paste one or more URLs into TCGplayer product URLs, or type card names into Search terms and pick a Game.
  3. Set filters: minimum condition, printings, languages, price range, and seller type.
  4. Run the Actor. It returns the cheapest matching listings for each product, up to Max listings per product.
  5. Download the results as JSON, CSV, Excel, or HTML, or connect them to Google Sheets, Make, Zapier, or your own code through the Apify API.

Getting 0 results is normal for strict filters. It means no listing matched your filters at the time of the run - not that the Actor failed. Runs with no matching listings aren't charged per listing.


Input

FieldTypeDefaultDescription
productUrlsArray-TCGplayer product URLs or product IDs. Up to 100 products per run.
searchQueriesArray-Card names to search for. Each search adds its top results to the run.
gameSelectAny gameLimit search results to one game. Applies to search terms only.
maxProductsPerQueryInteger5How many top search results to scrape per search term.
maxListingsPerProductInteger10Maximum listings per product, cheapest first. Up to 5,000.
minConditionSelectAny conditionNear Mint, Lightly Played, Moderately Played, Heavily Played, or Damaged - returns that condition and better.
printingsArrayAllFor example Normal, Foil, Holofoil, Reverse Holofoil, 1st Edition, or Unlimited. Names depend on the game.
languagesArrayAllEnglish, Japanese, Chinese (Simplified and Traditional), Korean, French, German, Italian, Portuguese, Russian, or Spanish.
minPrice / maxPriceNumber-Item price range in USD, excluding shipping.
goldSellersOnlyBooleanfalseOnly TCGplayer Gold Star sellers.
verifiedSellersOnlyBooleanfalseOnly TCGplayer verified sellers.
sortBySelectPrice including shippingCheapest first, by price including shipping or by item price only.
includeRecentSalesBooleanfalseAdd-on: attach the latest completed sales (up to 5) to each product's listings.
enableFairValueBooleanfalseAdd-on: attach an AI-powered fair value estimate and grading data. Pokémon only, Scarlet & Violet and Mega Evolution sets.

Example input:

{
"productUrls": [
"https://www.tcgplayer.com/product/487805/magic-universes-beyond-the-lord-of-the-rings-tales-of-middle-earth-the-one-ring"
],
"searchQueries": ["charizard ex"],
"game": "pokemon",
"maxProductsPerQuery": 5,
"maxListingsPerProduct": 25,
"minCondition": "Lightly Played",
"languages": ["English"],
"goldSellersOnly": true
}

Output

One row per seller listing. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

{
"productName": "The One Ring",
"setName": "Universes Beyond: The Lord of the Rings: Tales of Middle-earth",
"setCode": "LTR",
"cardNumber": "246",
"rarity": "Mythic",
"game": "Magic: The Gathering",
"productId": 487805,
"productUrl": "https://www.tcgplayer.com/product/487805/magic-universes-beyond-the-lord-of-the-rings-tales-of-middle-earth-the-one-ring",
"imageUrl": "https://tcgplayer-cdn.tcgplayer.com/product/487805_in_1000x1000.jpg",
"listingId": 329542601,
"sellerName": "Brute Force Games",
"sellerRating": 99.9,
"sellerSales": "50000+",
"goldSeller": true,
"verifiedSeller": true,
"directSeller": false,
"sellerLocation": "San Diego, CA, US",
"condition": "Lightly Played",
"printing": "Foil",
"language": "English",
"quantity": 1,
"price": 130.49,
"shippingPrice": 1.49,
"totalPrice": 131.98,
"currency": "USD",
"marketPrice": 139.93,
"listedMedianPrice": 149.6,
"discountVsMarketPct": 6.7,
"hasPhotos": false,
"scrapedAt": "2026-10-19T15:14:14.141Z"
}

With the recent sales add-on, rows also have a recentSales array when the product has recent sales:

"recentSales": [
{
"orderDate": "2026-10-19T02:58:51.327+00:00",
"condition": "Near Mint",
"printing": "Foil",
"language": "English",
"quantity": 1,
"price": 136.94,
"shippingPrice": 0
}
]

With the Fair Value Analysis add-on, rows for a covered card also have these fields when a fair value estimate is returned. Individual fields are left out when no data exists for them:

{
"fairValueUsd": 30.5,
"discountVsFairValuePct": 20,
"rawPriceUsd": 27.73,
"discountVsRawPct": 12,
"psa9PriceUsd": 60,
"psa10PriceUsd": 108.02,
"gemRatePct": 33.3,
"psa10Pop": 40,
"totalPop": 120,
"price1dChangePct": 0.5,
"price7dVs30dChangePct": -1.3,
"gemRateDate": "2026-10-18"
}

Understanding the data

Fair value is an AI-generated price estimate for an ungraded copy of the card. Raw market price is the going rate for an ungraded copy. Comparing a listing's price against either gives you a deal score - positive means the listing is priced below that benchmark, negative means above it:

FieldCompares the listing's price againstPositive means
discountVsFairValuePctThe AI fair value estimatePriced below fair value - a deal
discountVsRawPctThe raw (ungraded) market pricePriced below raw market price

psa9PriceUsd and psa10PriceUsd show what graded copies sell for, and gemRatePct / psa10Pop / totalPop show how likely a raw copy is to grade PSA 10 and how many already have. price1dChangePct and price7dVs30dChangePct show short-term price momentum.


Output fields

FieldWhat it contains
productNameCard or product name
setName / setCodeSet or expansion name and code
cardNumberCollector number within the set
rarityRarity as listed on TCGplayer
gameGame, for example Pokémon or Magic: The Gathering
productIdTCGplayer product ID
productUrlTCGplayer product page
imageUrlProduct image
listingIdTCGplayer listing ID
sellerNameSeller store name
sellerRatingSeller feedback rating, 0-100
sellerSalesSeller sales volume bucket, for example 10000+
goldSellerSeller is a TCGplayer Gold Star seller
verifiedSellerSeller is TCGplayer verified
directSellerSeller ships through TCGplayer Direct
sellerLocationCity, state, and country of the seller
conditionNear Mint, Lightly Played, Moderately Played, Heavily Played, or Damaged (Unopened for sealed products)
printingPrinting, for example Normal, Foil, or Holofoil
languageCard language
quantityCopies available in this listing
priceItem price in USD, excluding shipping
shippingPriceShipping in USD when this listing is bought on its own (0 = free shipping)
totalPriceprice + shippingPrice
currencyAlways USD
marketPriceTCGplayer market price for this exact condition, printing, and language
listedMedianPriceMedian price of current listings for this printing, when TCGplayer reports one for that exact printing name
discountVsMarketPct(marketPrice - price) / marketPrice × 100 - positive means the listing is cheaper than market
hasPhotosThe seller uploaded photos of the actual card
recentSalesAdd-on: latest completed sales for the product (up to 5)
fairValueUsdAdd-on: AI-powered fair value estimate for the card in USD
discountVsFairValuePctAdd-on: (fairValueUsd - price) / fairValueUsd × 100 - positive means the listing is cheaper than fair value
rawPriceUsdAdd-on: market price for the raw (ungraded) card in USD
discountVsRawPctAdd-on: (rawPriceUsd - price) / rawPriceUsd × 100 - positive means the listing is cheaper than raw market price
psa9PriceUsd / psa10PriceUsdAdd-on: market price for a PSA 9 / PSA 10 graded copy in USD
gemRatePctAdd-on: share of graded copies that came back PSA 10, in percent
psa10Pop / totalPopAdd-on: number of copies graded PSA 10, and total graded copies
price1dChangePctAdd-on: 1-day change in raw market price, in percent
price7dVs30dChangePctAdd-on: 7-day vs 30-day change in raw market price, in percent
gemRateDateAdd-on: date the grading population figures were last updated
scrapedAtWhen the listing was scraped

How much does it cost to scrape TCGplayer?

This Actor uses pay-per-event pricing - you pay for the listings you receive, plus a tiny start fee and any add-on you turn on.

EventFreeStarterScaleBusiness
Actor start$0.00005$0.00005$0.00005$0.00005
Card listing$0.003$0.002$0.0015$0.0012
Add-on: Recent sales$0.003$0.002$0.0015$0.0012
Add-on: Fair Value Analysis$0.07$0.06$0.05$0.04

The recent sales add-on is charged once per product, only when sales are returned and at least one listing is delivered. The Fair Value Analysis add-on is charged once per card, only when a fair value is returned and at least one listing is delivered. If the remaining maximum cost per run can't cover an add-on, the listings are delivered without it and it isn't charged.

Typical run costs (Starter plan):

  • 10 cheapest listings for one card: $0.02
  • 50 listings for one card: $0.10
  • Daily watchlist of 20 cards, 10 listings each: $0.40 per run
  • 10 listings for one card with Fair Value Analysis: $0.08

Set a maximum cost per run in the run options to cap spending. The Actor stops cleanly when it reaches the limit and keeps everything scraped so far.


Tips

  • Keep maxListingsPerProduct low for monitoring. For price alerts, the 5-10 cheapest listings are usually all you need.
  • Filter on TCGplayer's side. Condition, printing, language, price, and Gold Star filters are applied before listings are counted, so you only pay for listings that match.
  • Use product URLs for watchlists. Search results can change from day to day; product URLs always point to the same product.
  • Use exact printing names. Printing names differ by game: Pokémon uses Holofoil and Reverse Holofoil, Magic uses Foil, and Yu-Gi-Oh! uses 1st Edition, Unlimited, and Limited.

FAQ

Do I need a TCGplayer account? No. The Actor uses public TCGplayer data, with no login or API key.

Which games are supported? Any product on TCGplayer works with product URLs. The Game filter for search covers Pokémon, Pokémon Japan, Magic: The Gathering, Yu-Gi-Oh!, One Piece, Lorcana, Flesh and Blood, Digimon, Dragon Ball Super: Fusion World, Star Wars: Unlimited, Riftbound, Gundam, Union Arena, Weiss Schwarz, Cardfight!! Vanguard, Grand Archive, Sorcery: Contested Realm, and Final Fantasy.

In what order are listings returned? Cheapest first. By default, listings follow TCGplayer's own Price + Shipping sort; set Sort by to Item price only to sort by item price instead. TCGplayer's ranking counts some sellers' shipping differently than the single-item shippingPrice, so totalPrice isn't always strictly ascending.

Why is marketPrice sometimes empty? TCGplayer only calculates a market price for condition, printing, and language combinations with enough recent sales. Uncommon combinations may have none.

Which cards does Fair Value Analysis cover? Pokémon only, mainly Scarlet & Violet and Mega Evolution sets, especially Illustration Rare and Special Illustration Rare cards. Other games, Pokémon Japan, and older Pokémon sets return listings as normal, without the fair value fields, and aren't charged for the add-on.

Can I scrape sealed products? Yes. Booster boxes, Elite Trainer Boxes, and other sealed products work the same way as singles.

Is it legal to scrape TCGplayer? This Actor collects publicly available listing data. It doesn't collect personal data beyond seller store names and the city, state, and country they publish. Make sure your use of the data complies with TCGplayer's terms and the laws that apply to you.


Limitations

  1. US marketplace. Prices, shipping, and availability are for buyers shipping to the United States.
  2. Up to 100 products per run. Split bigger watchlists across several runs or tasks.
  3. Recent sales are limited to the latest 5 per product. TCGplayer publicly shows only the latest sales.
  4. Verified sellers only scans a limited number of listings. On cards with many unverified sellers, it can return fewer listings than Max listings per product.
  5. Prices change continuously. Each run is a snapshot of TCGplayer at that moment. A listing can sell before you act on it.
  6. Fair Value Analysis has narrow coverage. Pokémon only, mainly Scarlet & Violet and Mega Evolution sets, especially Illustration Rare and Special Illustration Rare cards. Cards outside that scope return listings as normal, with no fair value fields and no charge.

Support

Questions, bugs, feature requests, or need a custom trading card data solution? Open a ticket in the Issues tab.