# TCGplayer Card Price Scraper (`gio21/tcgplayer-scraper`) Actor

Scrape TCGplayer card prices: product name, set, collector number, rarity, lowest price and market price in USD, plus listing count. Search any game (Pokemon, Magic, Yu-Gi-Oh, Lorcana, One Piece and more).

- **URL**: https://apify.com/gio21/tcgplayer-scraper.md
- **Developed by:** [Gio](https://apify.com/gio21) (community)
- **Categories:** E-commerce
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## TCGplayer Card Price Scraper

Extract card prices and per-seller listings from [TCGplayer](https://www.tcgplayer.com), the largest US marketplace for trading card games. Two modes:

- **Products (default):** one record per product with lowest price, lowest price with shipping, market price, median price and live listing count.
- **Seller listings (`includeListings`):** one record per individual seller listing, with seller name, rating, verified/gold/direct badges, condition, printing, language, price, shipping, total price and quantity, sorted cheapest first.

Supports Pokemon, Magic: The Gathering, Yu-Gi-Oh!, Disney Lorcana, One Piece, Flesh and Blood, Digimon and Star Wars Unlimited, or all of TCGplayer at once.

### Features

- Search one or many queries per run, in one game or all games
- Lowest price, lowest price with shipping, market price and median price (USD) per product
- Per-seller listings with condition, printing (Normal/Foil/Holofoil...), language, shipping and seller reputation
- Filter listings by condition, printing and language
- Sort by best match, price (asc/desc), best selling, newest, or name
- Set, collector number, rarity, product image and live listing count
- Fast direct API access, automatic pagination

### Input

| Field | Type | Description |
|-------|------|-------------|
| `query` | string | Card or product to search (e.g. "Charizard ex"). |
| `queries` | array | Several searches in one run (takes precedence over `query`). |
| `game` | select | pokemon, magic, yugioh, lorcana, onepiece, fleshandblood, digimon, starwarsunlimited, all. |
| `sortOption` | select | `best-match`, `price-asc`, `price-desc`, `best-selling`, `newest`, `name-az`. |
| `maxItems` | integer | Max records (products or listings). `0` = no limit. Default `100`. |
| `includeListings` | boolean | `true` = one record per seller listing. Default `false`. |
| `condition` | select | Listing filter: Mint, Near Mint, Lightly Played, Moderately Played, Heavily Played, Damaged, Unopened. |
| `printing` | string | Listing filter, e.g. "Normal", "Foil", "Holofoil", "Reverse Holofoil". |
| `language` | select | Listing filter: English, Japanese, Korean, German, ... |
| `maxProducts` | integer | Products to open for listings (listings mode). Default `10`, max `50`. |
| `maxListingsPerProduct` | integer | Listings cap per product, cheapest first. Default `50`. |

#### Example input (products)

```json
{ "query": "Charizard ex", "game": "pokemon", "sortOption": "price-asc", "maxItems": 100 }
```

#### Example input (seller listings, Near Mint English)

```json
{ "query": "Charizard ex 199/165", "includeListings": true, "condition": "Near Mint", "language": "English" }
```

### Output

Product mode:

```json
{
  "productId": 88600,
  "name": "M Charizard EX",
  "set": "XY - Evolutions",
  "number": "13/108",
  "rarity": "Ultra Rare",
  "lowestPrice": 12.63,
  "lowestPriceWithShipping": 13.62,
  "marketPrice": 50.86,
  "medianPrice": 48.00,
  "currency": "USD",
  "listingsCount": 207,
  "game": "pokemon",
  "imageUrl": "https://tcgplayer-cdn.tcgplayer.com/product/88600_in_400x400.jpg",
  "url": "https://www.tcgplayer.com/product/88600"
}
```

Seller listings mode (one record per listing):

```json
{
  "productId": 124025,
  "name": "M Charizard EX",
  "set": "XY - Evolutions",
  "seller": "Game On Circleville",
  "sellerRating": 100,
  "sellerSales": 44120,
  "verifiedSeller": true,
  "goldSeller": true,
  "directSeller": false,
  "condition": "Near Mint",
  "printing": "Holofoil",
  "language": "English",
  "price": 39.66,
  "shippingPrice": 0,
  "totalPrice": 39.66,
  "quantity": 2,
  "marketPrice": 50.86,
  "currency": "USD",
  "url": "https://www.tcgplayer.com/product/124025"
}
```

### Common use cases

- Track card prices and market trends over time
- Find the cheapest seller for an exact card, condition and printing
- Price a collection or set for buying and selling
- Cross-market arbitrage: compare TCGplayer (USD) against local marketplaces
- Feed pricing tools, spreadsheets and dashboards

### Pricing

Pay per result: a small fee to start the run plus a per-record fee (a record is one product, or one seller listing in listings mode). Errors are never charged.

### FAQ

**Does it include singles and sealed products?** Yes, results include both. Search a specific card and number to narrow to singles.

**How are listings sorted?** Cheapest first by price + shipping, so the first record per product is the true lowest total price.

**Is this affiliated with TCGplayer?** No. This is an independent tool for extracting publicly available data. Please respect TCGplayer's terms of service.

# Actor input Schema

## `query` (type: `string`):

Card or product to search for (e.g. "Charizard ex", "Black Lotus"). For several searches in one run, use 'Search queries' below instead.

## `queries` (type: `array`):

Optional list of search queries to run in one go. When set, it takes precedence over the single 'Search query' field.

## `game` (type: `string`):

Which trading card game to search, or all of TCGplayer.

## `sortOption` (type: `string`):

How to order the search results.

## `maxItems` (type: `integer`):

Maximum number of records to return (products, or individual seller listings when 'Include seller listings' is ON). Set 0 for no limit.

## `includeListings` (type: `boolean`):

When ON, opens each matched product and returns one record per individual seller listing (seller name, rating, verified/gold badges, condition, printing, language, price, shipping, quantity), sorted by total price. Each listing counts as one result.

## `condition` (type: `string`):

Filter seller listings by card condition. Only used when 'Include seller listings' is ON.

## `printing` (type: `string`):

Filter seller listings by printing/finish, e.g. "Normal", "Foil", "Holofoil", "Reverse Holofoil", "1st Edition Holofoil". Leave as "any" for all printings. Only used when 'Include seller listings' is ON.

## `language` (type: `string`):

Filter seller listings by card language. Only used when 'Include seller listings' is ON.

## `maxProducts` (type: `integer`):

How many matched products to open for seller listings. Only used when 'Include seller listings' is ON.

## `maxListingsPerProduct` (type: `integer`):

Cap on seller listings returned per product, cheapest first. Only used when 'Include seller listings' is ON.

## Actor input object example

```json
{
  "query": "Charizard ex",
  "game": "pokemon",
  "sortOption": "best-match",
  "maxItems": 100,
  "includeListings": false,
  "condition": "any",
  "printing": "any",
  "language": "any",
  "maxProducts": 10,
  "maxListingsPerProduct": 50
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "Charizard ex",
    "game": "pokemon"
};

// Run the Actor and wait for it to finish
const run = await client.actor("gio21/tcgplayer-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "query": "Charizard ex",
    "game": "pokemon",
}

# Run the Actor and wait for it to finish
run = client.actor("gio21/tcgplayer-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "Charizard ex",
  "game": "pokemon"
}' |
apify call gio21/tcgplayer-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gio21/tcgplayer-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/112dZB7TIjOynmKBv/builds/Vc1Djkp630OaCriNh/openapi.json
