# Pokemon TCG Cards & Sets Scraper (`ninhothedev/pokemon-tcg-scraper`) Actor

$0.35/1K 🔥 Pokemon TCG scraper! Cards, sets, rarities, illustrators & images from the full card database. No key. JSON, CSV, Excel or API in seconds. Build collection & deck apps ⚡

- **URL**: https://apify.com/ninhothedev/pokemon-tcg-scraper.md
- **Developed by:** [ninhothedev](https://apify.com/ninhothedev) (community)
- **Stats:** 2 total users, 1 monthly users, 90.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.35 / 1,000 results

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Pokemon TCG Cards & Sets Scraper

Scrape the **complete Pokemon Trading Card Game database** — every set, every card, every rarity, every illustrator — with **no API key, no login and no proxies**. Built on the free, community-maintained [TCGdex](https://tcgdex.net) database, available in 6 languages.

One card = one row. One set = one row. Clean, flat JSON/CSV/Excel that drops straight into a database, a deck builder or a price-tracking pipeline.

> **Not the same as our Pokemon (video game) scraper.** The [Pokemon Scraper](https://apify.com/ninhothedev/pokemon-scraper) returns **video-game species data** from PokéAPI — base stats, abilities, moves, evolution chains, types for the RPG series. **This actor is about the physical Trading Card Game**: printed cards, set releases, rarities, illustrators, card variants (holo / reverse / 1st edition), regulation marks and tournament legality. Different domain, different database, different fields. Use both together if you want species data *and* card data.

### What you get

#### Mode `sets` — the release history of the TCG

Every set from Base Set (1999) to the newest Scarlet & Violet expansion, with total / official / holo / reverse / 1st-edition card counts, serie, release date, logo, symbol and Standard / Expanded legality. Currently **218 sets**.

#### Mode `cards` — every card of a set

Give it set IDs like `swsh3` or `base1` and get all cards of those sets, enriched with the full card detail.

#### Mode `search` — cards by name

Query `Pikachu`, `Charizard` or any partial name and get every printing across every set — 204 Pikachu cards and counting.

### Sample output (card)

```json
{
  "type": "card",
  "card_id": "swsh3-1",
  "local_id": "1",
  "name": "Butterfree V",
  "set_id": "swsh3",
  "set_name": "Darkness Ablaze",
  "serie": "Sword & Shield",
  "rarity": "Holo Rare V",
  "category": "Pokemon",
  "illustrator": "Saki Hayashiro",
  "hp": 190,
  "types": ["Grass"],
  "stage": "Basic",
  "evolve_from": null,
  "attack_count": 2,
  "attacks": [
    { "name": "Dizzying Poison", "damage": null, "cost_count": 1 },
    { "name": "Blasting Wind", "damage": "130", "cost_count": 3 }
  ],
  "weaknesses": ["Fire ×2"],
  "retreat_cost": 1,
  "regulation_mark": "D",
  "variant_normal": false,
  "variant_holo": true,
  "variant_reverse": false,
  "variant_first_edition": false,
  "legal_standard": false,
  "legal_expanded": true,
  "dex_ids": [12],
  "image_url": "https://assets.tcgdex.net/en/swsh/swsh3/1/high.png",
  "url": "https://www.tcgdex.net/en/swsh/swsh3/1",
  "source": "tcgdex",
  "scraped_at": "2026-07-28T14:36:29Z"
}
```

### Sample output (set)

```json
{
  "type": "set",
  "set_id": "base1",
  "set_name": "Base Set",
  "serie": "Base",
  "release_date": "1999-01-09",
  "card_count_total": 102,
  "card_count_official": 102,
  "card_count_holo": 64,
  "card_count_reverse": 0,
  "logo_url": "https://assets.tcgdex.net/en/base/base1/logo.png",
  "legal_standard": false,
  "legal_expanded": false,
  "source": "tcgdex",
  "scraped_at": "2026-07-28T14:36:23Z"
}
```

### Input

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | select | `sets` | `sets`, `cards` or `search` |
| `setIds` | array | `["swsh3"]` | Set IDs for `cards` mode |
| `queries` | array | `["Pikachu","Charizard"]` | Card names for `search` mode |
| `language` | select | `en` | `en`, `fr`, `de`, `es`, `it`, `ja` |
| `enrichDetails` | boolean | `true` | Fetch full detail per set/card (rarity, illustrator, attacks…) |
| `maxItems` | integer | `200` | Hard cap on dataset rows (max 2000) |

```json
{
  "mode": "search",
  "queries": ["Charizard"],
  "language": "en",
  "enrichDetails": true,
  "maxItems": 200
}
```

### Use cases

- **Card collection apps** — build a complete card catalogue with images, rarities and set metadata without licensing a commercial API.
- **Price-tracking pipelines** — use `card_id`, `set_id` and `local_id` as stable join keys against marketplace price feeds (Cardmarket, TCGplayer, eBay).
- **Deck builders** — filter by `legal_standard` / `legal_expanded`, `regulation_mark`, `types`, `hp` and `retreat_cost` to validate tournament-legal decks.
- **TCG marketplaces** — auto-fill listings with official card names, set names, illustrators, rarity and high-resolution artwork.

### Pricing

Roughly **$0.5 per 1,000 items** on the pay-per-usage model. The actor runs on 512 MB, makes plain HTTPS calls to a free API and needs no proxy — a full 200-set catalogue run finishes in about a minute.

Set `enrichDetails` to `false` for a much cheaper shallow run when you only need IDs, names and images.

### Images

TCGdex asset URLs carry **no file extension** — the actor appends the right suffix for you, so `image_url` and `logo_url` are always directly usable (`.../high.png`). Other qualities (`low.webp`, `high.jpg`) follow the same pattern if you want to swap them client-side.

### Notes & limits

- Data comes from the free TCGdex community database. Coverage is best in English; other languages may miss descriptions or newer sets.
- The `search` mode matches partial names, so `Char` also returns Charmander and Charizard printings.
- Some promo cards have no artwork on the CDN — `image_url` is `null` in that case rather than a broken link.
- Every field is nullable. Missing data is `null`, never an invented value.

### Related actors

- [Pokemon Scraper](https://apify.com/ninhothedev/pokemon-scraper) — video-game species data (stats, abilities, moves, evolutions) from PokéAPI
- [Hearthstone Scraper](https://apify.com/ninhothedev/hearthstone-scraper) — Hearthstone card database
- [Scryfall MTG Scraper](https://apify.com/ninhothedev/scryfall-mtg-scraper) — Magic: The Gathering cards and prices
- [Steam Search Scraper](https://apify.com/ninhothedev/steam-search-scraper) — Steam store listings and prices

### Disclaimer

Pokemon and the Pokemon TCG are trademarks of Nintendo / Creatures Inc. / GAME FREAK inc. This actor is not affiliated with or endorsed by them. It reads publicly available data from the TCGdex open database for research, cataloguing and personal use.

# Actor input Schema

## `mode` (type: `string`):

What to scrape. 'sets' returns every Pokemon TCG set with card counts, serie, release date and legality. 'cards' returns all cards of the set IDs you list in 'Set IDs'. 'search' returns cards matching the card names in 'Search queries'.

## `setIds` (type: `array`):

Only used in 'cards' mode. TCGdex set IDs whose cards should be scraped, e.g. 'swsh3' (Darkness Ablaze), 'base1' (Base Set) or 'sv01'. Run the actor in 'sets' mode first to get the complete list of valid set IDs.

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

Only used in 'search' mode. Card names to look up, e.g. 'Pikachu' or 'Charizard'. Matching is partial and case-insensitive, so 'Char' also returns Charmander and Charizard cards.

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

Language of card names, descriptions, attack texts and set names. TCGdex is not equally complete in every language - English has the best coverage.

## `enrichDetails` (type: `boolean`):

Fetch the detail endpoint for every set/card. Required for rarity, illustrator, HP, types, attacks, weaknesses, variants, regulation mark and legality. Turn it off for a much faster but shallow run (IDs, names and images only).

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

Hard cap on the number of dataset rows (sets or cards) produced by this run. Keeps runtime and cost predictable.

## Actor input object example

```json
{
  "mode": "sets",
  "setIds": [
    "swsh3"
  ],
  "queries": [
    "Pikachu",
    "Charizard"
  ],
  "language": "en",
  "enrichDetails": true,
  "maxItems": 200
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "setIds": [
        "swsh3"
    ],
    "queries": [
        "Pikachu",
        "Charizard"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ninhothedev/pokemon-tcg-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 = {
    "setIds": ["swsh3"],
    "queries": [
        "Pikachu",
        "Charizard",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("ninhothedev/pokemon-tcg-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 '{
  "setIds": [
    "swsh3"
  ],
  "queries": [
    "Pikachu",
    "Charizard"
  ]
}' |
apify call ninhothedev/pokemon-tcg-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ninhothedev/pokemon-tcg-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/OsqzlZFJZs46eefC2/builds/HdguJGHKWkZvHPc0c/openapi.json
