TCGplayer Listings Scraper
Pricing
from $1.20 / 1,000 card listings
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
Maintained by CommunityActor 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
discountVsMarketPctto 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
- 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. - Paste one or more URLs into TCGplayer product URLs, or type card names into Search terms and pick a Game.
- Set filters: minimum condition, printings, languages, price range, and seller type.
- Run the Actor. It returns the cheapest matching listings for each product, up to Max listings per product.
- 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
| Field | Type | Default | Description |
|---|---|---|---|
productUrls | Array | - | TCGplayer product URLs or product IDs. Up to 100 products per run. |
searchQueries | Array | - | Card names to search for. Each search adds its top results to the run. |
game | Select | Any game | Limit search results to one game. Applies to search terms only. |
maxProductsPerQuery | Integer | 5 | How many top search results to scrape per search term. |
maxListingsPerProduct | Integer | 10 | Maximum listings per product, cheapest first. Up to 5,000. |
minCondition | Select | Any condition | Near Mint, Lightly Played, Moderately Played, Heavily Played, or Damaged - returns that condition and better. |
printings | Array | All | For example Normal, Foil, Holofoil, Reverse Holofoil, 1st Edition, or Unlimited. Names depend on the game. |
languages | Array | All | English, Japanese, Chinese (Simplified and Traditional), Korean, French, German, Italian, Portuguese, Russian, or Spanish. |
minPrice / maxPrice | Number | - | Item price range in USD, excluding shipping. |
goldSellersOnly | Boolean | false | Only TCGplayer Gold Star sellers. |
verifiedSellersOnly | Boolean | false | Only TCGplayer verified sellers. |
sortBy | Select | Price including shipping | Cheapest first, by price including shipping or by item price only. |
includeRecentSales | Boolean | false | Add-on: attach the latest completed sales (up to 5) to each product's listings. |
enableFairValue | Boolean | false | Add-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:
| Field | Compares the listing's price against | Positive means |
|---|---|---|
discountVsFairValuePct | The AI fair value estimate | Priced below fair value - a deal |
discountVsRawPct | The raw (ungraded) market price | Priced 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
| Field | What it contains |
|---|---|
productName | Card or product name |
setName / setCode | Set or expansion name and code |
cardNumber | Collector number within the set |
rarity | Rarity as listed on TCGplayer |
game | Game, for example Pokémon or Magic: The Gathering |
productId | TCGplayer product ID |
productUrl | TCGplayer product page |
imageUrl | Product image |
listingId | TCGplayer listing ID |
sellerName | Seller store name |
sellerRating | Seller feedback rating, 0-100 |
sellerSales | Seller sales volume bucket, for example 10000+ |
goldSeller | Seller is a TCGplayer Gold Star seller |
verifiedSeller | Seller is TCGplayer verified |
directSeller | Seller ships through TCGplayer Direct |
sellerLocation | City, state, and country of the seller |
condition | Near Mint, Lightly Played, Moderately Played, Heavily Played, or Damaged (Unopened for sealed products) |
printing | Printing, for example Normal, Foil, or Holofoil |
language | Card language |
quantity | Copies available in this listing |
price | Item price in USD, excluding shipping |
shippingPrice | Shipping in USD when this listing is bought on its own (0 = free shipping) |
totalPrice | price + shippingPrice |
currency | Always USD |
marketPrice | TCGplayer market price for this exact condition, printing, and language |
listedMedianPrice | Median 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 |
hasPhotos | The seller uploaded photos of the actual card |
recentSales | Add-on: latest completed sales for the product (up to 5) |
fairValueUsd | Add-on: AI-powered fair value estimate for the card in USD |
discountVsFairValuePct | Add-on: (fairValueUsd - price) / fairValueUsd × 100 - positive means the listing is cheaper than fair value |
rawPriceUsd | Add-on: market price for the raw (ungraded) card in USD |
discountVsRawPct | Add-on: (rawPriceUsd - price) / rawPriceUsd × 100 - positive means the listing is cheaper than raw market price |
psa9PriceUsd / psa10PriceUsd | Add-on: market price for a PSA 9 / PSA 10 graded copy in USD |
gemRatePct | Add-on: share of graded copies that came back PSA 10, in percent |
psa10Pop / totalPop | Add-on: number of copies graded PSA 10, and total graded copies |
price1dChangePct | Add-on: 1-day change in raw market price, in percent |
price7dVs30dChangePct | Add-on: 7-day vs 30-day change in raw market price, in percent |
gemRateDate | Add-on: date the grading population figures were last updated |
scrapedAt | When 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.
| Event | Free | Starter | Scale | Business |
|---|---|---|---|---|
| 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
maxListingsPerProductlow 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
- US marketplace. Prices, shipping, and availability are for buyers shipping to the United States.
- Up to 100 products per run. Split bigger watchlists across several runs or tasks.
- Recent sales are limited to the latest 5 per product. TCGplayer publicly shows only the latest sales.
- 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.
- Prices change continuously. Each run is a snapshot of TCGplayer at that moment. A listing can sell before you act on it.
- 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.