
Website Content Crawler
scrape.ly/store/querystone/website-content-crawlerAIDeveloper tools
1 monthly user

Scrape TCGplayer card and sealed-product prices for Pokemon, Magic, Yu-Gi-Oh!, One Piece, Lorcana and more: market, median and lowest price, cheapest seller listings with shipping, recent sales and price history.
Get TCGplayer prices for any trading card or sealed product in seconds: market price, listed median, lowest price, the cheapest seller listings with shipping, the latest sales and (optionally) the price history. Works for Pokemon, Magic: The Gathering, Yu-Gi-Oh!, One Piece, Disney Lorcana, Flesh and Blood and every other game on TCGplayer. No login, no API key, and $2.00 per 1,000 products.
charizard, black lotus), or paste TCGplayer URLs: search pages keep their filters, a set's price guide page gives every product of that set, product pages give that exact product.| Field | What it does |
|---|---|
searchQueries | Card or product names to search, one per line. |
startUrls | TCGplayer search URLs (filters kept), set price guide URLs, product URLs or bare product IDs. |
maxItems | Products per search (default 20; 0 = all, TCGplayer shows up to 9,999 per search). |
sortBy | best-match, best-selling, a-z, price-high-low, price-low-high. |
game, setName, rarity, productType | Filters. Names as shown on TCGplayer ("Magic: The Gathering", "SWSH: Crown Zenith") or short forms ("mtg", "Crown Zenith"). |
minPrice, maxPrice | Market price range in USD. |
listingConditions, listingLanguages | Only seller listings in these conditions or languages. |
maxListingsPerProduct | Cheapest listings per product (default 3, 0 = none, no upper limit). |
includeSalesHistory | Latest sales and price points per printing (default on). |
priceHistoryRange | none, month, quarter, semi-annual or annual. |
shipToCountry | Country the listings and shipping prices are for (default US). |
{
"searchQueries": ["charizard", "black lotus"],
"game": "Pokemon",
"maxItems": 50,
"sortBy": "price-high-low",
"maxListingsPerProduct": 5,
"includeSalesHistory": true,
"priceHistoryRange": "quarter"
}
One row per product. The main fields:
| Field | Description |
|---|---|
productId, productName, url, imageUrl | The product and its TCGplayer page. |
productLine, setName, setCode, rarityName, number, releaseDate | Game, set, rarity, card number and release date. |
marketPrice | TCGplayer market price (based on recent sales). |
medianPrice | Listed median price. |
lowestPrice | Lowest listed price before shipping. |
lowestPriceWithShipping | Cheapest listing including shipping. |
totalListings | Number of listings. |
listings[] | Cheapest seller listings: seller, rating, sales, programs, location, condition, printing, language, price, shipping, total, quantity. |
sales | Latest sales: count, last sale date, average, min/max and each sale (date, price, shipping, condition, variant). |
pricePoints | Market price and listed median per printing (normal, foil). |
priceHistory[] | Optional: market price, quantity sold and low/high sale per period, per variant and condition. |
customAttributes | Card details such as card type, HP, stage, energy type, attacks, weakness, card text. |
searchQuery, page, position, sortBy, scrapedAt | Where and when the product was found. |
Example (one product from a real run, listings and sales trimmed):
{
"productId": 679554,
"productName": "Mega Charizard Tin Case",
"url": "https://www.tcgplayer.com/product/679554/pokemon-miscellaneous-cards-and-products-mega-charizard-tin-case",
"imageUrl": "https://product-images.tcgplayer.com/fit-in/437x437/679554.jpg",
"productLine": "Pokemon",
"setName": "Miscellaneous Cards & Products",
"setCode": "MCAP",
"marketPrice": 234.49,
"medianPrice": 234.49,
"lowestPrice": 210,
"lowestPriceWithShipping": 229.5,
"totalListings": 9,
"listings": [
{
"sellerName": "Example Card Shop",
"sellerRating": 100,
"sellerSales": "1883",
"sellerState": "OK",
"sellerCountry": "US",
"condition": "Unopened",
"printing": "Normal",
"language": "English",
"price": 229.5,
"shippingPrice": 0,
"totalPrice": 229.5,
"quantity": 1
}
],
"sales": {
"totalSales": 5,
"lastSaleDate": "2026-10-02T20:21:53.6+00:00",
"avgPrice": 234.77,
"priceRange": {"min": 225, "max": 249.69},
"recentSales": [
{"date": "2026-10-02T20:21:53.6+00:00", "price": 234.35, "shipping": 0, "total": 234.35, "condition": "Unopened", "variant": "Normal", "quantity": 1}
]
},
"pricePoints": {"normal": {"marketPrice": 234.49, "listedMedian": 234.49}},
"searchQuery": "charizard",
"page": 1,
"position": 2,
"sortBy": "best-match",
"shipToCountry": "US",
"scrapedAt": "2026-10-21T18:05:11Z"
}
The dataset has three views: Products, Seller listings (one row per listing) and Sales and price points. A run summary (saved products, matches per search, empty searches and errors) is stored as OUTPUT in the key-value store.
You pay $2.00 per 1,000 products ($0.002 per product). Seller listings, sales, price points and price history are included in that price. Platform usage (compute and datacenter proxy) is billed on top and is small: a 1,000-product run with sales data used about $0.01 of usage in our tests.
You never pay for searches that find nothing, invalid URLs or products that could not be loaded. Set a maximum charge per run and the scraper stops cleanly when it is reached.
Is it legal to scrape TCGplayer? The scraper reads the public prices and listings that anyone can see on tcgplayer.com without an account. Check TCGplayer's terms and your local laws for your use case, especially before republishing data.
Do I need a TCGplayer account, API key or my own proxy? No. No login, cookies or API key are used. The default datacenter proxy works; requests that keep failing are retried over US residential proxies automatically.
How many products can I get?
TCGplayer search shows up to 9,999 products per search. For more, split the search by game, set or rarity, or use several queries. With the relevance sorts TCGplayer repeats some products across pages; duplicates are removed, so a search can return fewer unique products than its match count. Use the a-z sort for complete coverage of large searches.
Why is a field empty? TCGplayer does not have every value for every product: new or unlisted products have no market price or listings, sealed products have no card number or rarity, and the median is only shown for some products. Empty values are left out or null rather than guessed.
How many sales do I get?
TCGplayer shows the 5 latest sales to visitors who are not logged in, so sales.recentSales holds up to 5 sales. For sales volume over time, turn on the price history: it includes the quantity sold and number of sales per period.
Can I schedule it or use the API? Yes. Schedule runs to track prices daily or weekly, and start runs and read results through the API or the client libraries.
Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
searchQueriesarrayOptionalSearch queries
Card or product names to search on TCGplayer, one per line (for example 'charizard', 'black lotus', 'blue-eyes white dragon'). Each query is scraped on its own.
startUrlsarrayOptionalTCGplayer URLs
TCGplayer search page URLs (filters in the URL are kept), price guide pages of a set, or product page URLs. A bare product ID such as 177707 also works.
maxItemsintegerOptionaldefault 20Max products per search
How many products to save for each search query or search URL. 0 means all. TCGplayer search shows at most 9,999 products per search, so that is the maximum; split bigger searches by game, set or rarity.
sortByenumOptionaldefault "best-match"Sort by
Order of the search results.
Narrow the search. Leave empty to search everything.
gamestringOptionalGame / product line
Only products of this game or product line, for example 'Pokemon', 'Magic: The Gathering', 'YuGiOh', 'One Piece Card Game', 'Disney Lorcana'. Short names like 'mtg' work too.
setNamestringOptionalSet
Only products from this set, for example 'Crown Zenith' or 'SWSH: Crown Zenith'. Works best together with a game.
raritystringOptionalRarity
Only cards of this rarity, for example 'Secret Rare', 'Mythic', 'Ultra Rare'. Needs a game.
productTypeenumOptionalProduct type
Only this product type.
minPricenumberOptionalMin market price (USD)
Only products whose market price is at least this.
maxPricenumberOptionalMax market price (USD)
Only products whose market price is at most this.
listingConditionsarrayOptionalListing conditions
Only seller listings in these conditions (affects the listings and the cheapest price with shipping).
listingLanguagesarrayOptionalListing languages
Only seller listings in these card languages, for example 'English', 'Japanese'.
startPageintegerOptionaldefault 1Start page
Search result page to start from (50 products per page). TCGplayer serves 200 pages per search.
What to load for each product.
maxListingsPerProductintegerOptionaldefault 3Seller listings per product
How many of the cheapest seller listings (price plus shipping) to include with each product. Up to 3 come with the search at no extra request; more are loaded 50 per request. 0 leaves listings out.
includeSalesHistorybooleanOptionaldefault trueInclude recent sales and price points
Adds the latest sales (date, price, shipping, condition, variant) and the market and median price per printing (normal and foil).
priceHistoryRangeenumOptionaldefault "none"Price history
Adds the market price history for each variant and condition over this period.
shipToCountryenumOptionaldefault "US"Ship-to country
Country the listings and shipping prices are for. TCGplayer shows only sellers that ship there.
proxyobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter proxies work for TCGplayer. If a request keeps failing, it is retried over US residential proxies.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| productId | number | TCGplayer product ID |
| productName | string | |
| url | string | |
| imageUrl | string | |
| productLine | string | null | |
| setName | string | null | |
| setCode | string | null | |
| rarityName | string | null | |
| number | string | null | |
| marketPrice | number | null | |
| medianPrice | number | null | |
| lowestPrice | number | null | |
| lowestPriceWithShipping | number | null | |
| totalListings | number | null | |
| listings | array | |
| sales | object | null | |
| pricePoints | object | null | |
| customAttributes | object | null |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Product | One TCGplayer product saved to the dataset, with its prices, seller listings and sales data. | $0.002 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('shelfbright/tcgplayer-scraper').call({
"searchQueries": [
"charizard"
],
"maxItems": 20,
"proxy": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run shelfbright/tcgplayer-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=shelfbright/tcgplayer-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Paste TCGplayer product URLs (or product IDs) to track exact cards: prices, the 10 cheapest listings, recent sales and 3 months of price history.
Search 'dragon' in Magic: The Gathering, Mythic rarity, market price $20-$500, Near Mint listings only.
Paste any TCGplayer search page; its game and rarity filters are kept.
Listings and shipping prices as a buyer in Canada sees them.
Sealed products only, best sellers first, without sales data for a quick price check.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.