# Pokémon TCG Price Monitor & Alerts (TCGplayer, Cardmarket) (`kempt_horizon_yzk/pokemon-tcg-price-monitor`) Actor

Track Pokémon card prices by set, card name and rarity. TCGplayer market/low/mid/high per printing plus Cardmarket trend, change since last run, and price or %-move threshold alerts. Data via the free pokemontcg.io API. $0.002/card, $0.01/alert.

- **URL**: https://apify.com/kempt_horizon_yzk/pokemon-tcg-price-monitor.md
- **Developed by:** [Kempt Horizon Data](https://apify.com/kempt_horizon_yzk) (community)
- **Categories:** E-commerce, Automation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Pokémon TCG Price Monitor & Alerts: TCGplayer and Cardmarket Prices by Set, Card and Rarity

Track **Pokémon card prices** as clean JSON, CSV or Excel. Pick sets, card names or rarities and get **TCGplayer market, low, mid, high and direct low prices for every printing** (holofoil, reverse holofoil, normal and more) plus **Cardmarket trend and average prices**. Each run remembers the last prices, so every card shows the **change since your last run**, and you can get **alerts** when a card crosses a price or moves by a percentage.

Data comes from the free **pokemontcg.io API**. No login and no key needed (an optional free key raises rate limits).

### For AI agents (MCP / API) quick reference

- **Use when:** you need current Pokémon TCG card prices, price changes over time, or alerts for a watchlist of sets, cards or rarities.
- **Don't use for:** graded card (PSA, BGS) prices, sealed product prices, or other card games. For new sets and sealed products, use the [TCG New Release Tracker](https://apify.com/kempt_horizon_yzk/tcg-new-release-tracker).
- **Minimal input:** `{"sets": ["sv3pt5"], "cardNames": ["Charizard ex"]}`. At least one of `sets`, `cardNames` or `rarities` is required.
- **Output:** dataset items with `type` `card` (cardId, name, setName, number, rarity, `printings[]` with market/low/mid/high/directLow/previousMarket/change/changePercent, `cardmarket`, links, image) or `alert` (cardId, printing, market, previousMarket, changePercent, reason).
- **Price:** $0.001 per run + **$0.002 per card** + **$0.01 per alert**. 50 cards cost about $0.10. Pay per event only, limited permissions, so agentic payments (x402, Skyfire, Apify AGI token) work.
- **MCP:** add `https://mcp.apify.com?tools=kempt_horizon_yzk/pokemon-tcg-price-monitor` to your MCP client.

### What can this Pokémon price tracker do?

- ✅ **Filter by set** (IDs like `sv3pt5` or names like `151`), **card name** (with `*` wildcards) and **rarity** (Special Illustration Rare, Hyper Rare and more)
- ✅ **TCGplayer prices per printing**: market, low, mid, high and direct low
- ✅ **Cardmarket prices**: trend, average sell, low, and 1, 7 and 30 day averages
- ✅ **Change since last run** for every printing, kept in a key-value store on your account
- ✅ **Alerts** when a printing crosses above or below a price, or moves by a set percentage
- ✅ **Only changed** mode skips (and never charges for) cards whose prices did not move
- ✅ Separate watchlists with their own price history through `stateKey`

### Who uses it?

Collectors watching chase cards, resellers and local game stores pricing inventory, content creators tracking market movers, and AI agents that need fresh card prices.

### How much does it cost?

| Event | Price |
|---|---|
| Actor start | $0.001 |
| Card price record | **$0.002** |
| Price alert | **$0.01** |

A daily watchlist of 100 cards costs about $0.20 a day, less with **Only changed** turned on. Set `maxItems` or a **maximum cost per run** to cap spend.

### How to use it

1. Click **Try for free** and enter a set, a card name or a rarity.
2. Optionally set a price range and alert thresholds.
3. Click **Start** and download results as JSON, CSV, Excel or HTML, or read them with the API.
4. For alerts, add a **Schedule** and connect Slack, email, Zapier, Make or a webhook through Apify integrations.

### Input example

```json
{
  "sets": ["sv3pt5"],
  "rarities": ["Special Illustration Rare"],
  "alertChangePercent": 15,
  "onlyChanged": true,
  "stateKey": "151-sir-watch",
  "maxItems": 100
}
```

### Output example

```json
{
  "type": "card",
  "cardId": "sv3pt5-6",
  "name": "Charizard ex",
  "setName": "151",
  "number": "6",
  "rarity": "Double Rare",
  "printings": [
    { "printing": "holofoil", "market": 8.02, "low": 5.75, "mid": 8.99, "high": 229.02, "directLow": 9.44, "previousMarket": 7, "change": 1.02, "changePercent": 14.57 }
  ],
  "cardmarket": { "trendPrice": 7.3, "averageSellPrice": 6.88, "avg7": 7.28, "avg30": 6.85 },
  "tcgplayerUrl": "https://prices.pokemontcg.io/tcgplayer/sv3pt5-6",
  "imageUrl": "https://images.pokemontcg.io/sv3pt5/6.png",
  "changedSinceLastRun": true
}
```

### FAQ

**Do I need an API key?** No. You can add a free pokemontcg.io key for higher rate limits.

**How fresh are the prices?** As fresh as pokemontcg.io, which updates TCGplayer prices daily. Cardmarket prices can lag.

**How does change tracking work?** Each run stores the latest prices in a named key-value store on your account. The next run compares against it. Use a different `stateKey` for each watchlist.

Built and maintained by **Kempt Horizon Data**. Found a bug or need a field? Open an issue on the Actor's Issues tab.

# Actor input Schema

## `sets` (type: `array`):

Set IDs (e.g. sv3pt5, me5, base1) or set names (e.g. 151, Pitch Black). At least one set, card name or rarity is required.

## `cardNames` (type: `array`):

Optional exact card names. Use \* as a wildcard, e.g. Charizard\*.

## `rarities` (type: `array`):

Optional, e.g. Special Illustration Rare, Illustration Rare, Hyper Rare, Ultra Rare, Double Rare.

## `minPrice` (type: `number`):

Optional. Only cards with at least one printing at or above this TCGplayer market price.

## `maxPrice` (type: `number`):

Optional.

## `alertAbovePrice` (type: `number`):

Optional. Creates an alert item when a printing's market price crosses up to this value.

## `alertBelowPrice` (type: `number`):

Optional. Creates an alert item when a printing's market price crosses down to this value.

## `alertChangePercent` (type: `number`):

Optional, e.g. 15 alerts when a printing moved 15% or more up or down since the previous run.

## `onlyChanged` (type: `boolean`):

Skip (and don't charge for) cards whose prices did not change since the last run. Price history is always kept in a key-value store so change and alerts work.

## `stateKey` (type: `string`):

Optional name for the price history, so several watchlists keep separate memories.

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

Maximum cards to save (and pay for) per run.

## `apiKey` (type: `string`):

Optional free key from dev.pokemontcg.io for higher rate limits. Works without one.

## Actor input object example

```json
{
  "sets": [
    "sv3pt5"
  ],
  "cardNames": [
    "Charizard ex"
  ],
  "onlyChanged": false,
  "maxItems": 20
}
```

# Actor output Schema

## `cards` (type: `string`):

No description

## `all` (type: `string`):

No description

## `summary` (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 = {
    "sets": [
        "sv3pt5"
    ],
    "cardNames": [
        "Charizard ex"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("kempt_horizon_yzk/pokemon-tcg-price-monitor").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 = {
    "sets": ["sv3pt5"],
    "cardNames": ["Charizard ex"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("kempt_horizon_yzk/pokemon-tcg-price-monitor").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 '{
  "sets": [
    "sv3pt5"
  ],
  "cardNames": [
    "Charizard ex"
  ],
  "maxItems": 20
}' |
apify call kempt_horizon_yzk/pokemon-tcg-price-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kempt_horizon_yzk/pokemon-tcg-price-monitor"
        }
    }
}
```

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/LcDPwoqjnk4glTxu1/builds/nH4tPQtdjL1URLYH3/openapi.json
