TCGPlayer Card Prices
Pricing
Pay per event
TCGPlayer Card Prices
Get structured trading-card price data from TCGPlayer by free-text card name — market price, lowest price, listing counts, per-seller listings — across Magic, Pokemon, Yu-Gi-Oh, and every game on the platform. No login, no API key.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
🎯 What this scrapes
TCGPlayer is the biggest secondary marketplace for Magic: The Gathering, Pokemon, Yu-Gi-Oh, and dozens of other trading-card games, but its public search page is a client-rendered shell with no usable price data in the HTML. This Actor talks to the same JSON search endpoint TCGPlayer's own site calls: give it a card name and it returns every matching product's market price, lowest price, listing count, and (optionally) individual seller listings, spanning every game on the platform through one shared search — instead of you hand-checking each card's page one at a time.
🔥 What we handle for you
- 🛡️ Browser fingerprint rotation —
curl-cffiimpersonates real Chrome / Firefox / Safari TLS handshakes on every session, as defense-in-depth. - 🔁 Retries with exponential backoff on
408 / 429 / 5xx— up to 5 attempts per page,Retry-Afterhonoured. - 🎯 One search endpoint, every game — no need to tell us which game a card belongs to; the result tells you.
- 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable ids, JSON / CSV / Excel export straight from the Apify Console.
- 💰 Pay-Per-Event pricing — you only pay for products that hit your dataset. No data, no charge.
💡 Use cases
- Card resellers and arbitrageurs tracking price deltas across marketplaces.
- Deck-pricing tools that total a decklist's live market value.
- Collection-value trackers that revalue a user's card collection on a schedule.
- Price-alert services watching for a target card dropping below a threshold.
⚙️ How to use it
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
searchQueries | array | yes | ['charizard'] | Free-text card-name queries, e.g. "charizard" or "black lotus". No game pre-selection needed — the game each result… |
maxResultsPerQuery | integer | no | 50 | Caps how many products are fetched per query, paged in batches of pageSize. |
pageSize | integer | no | 10 | Number of products requested per page from TCGPlayer's search API. |
includeListings | boolean | no | False | When enabled, attaches up to 5 seller listings per product, sorted by price ascending. |
proxyConfiguration | object | no | {'useApifyProxy': True} | Apify Proxy routing. No anti-bot defenses were observed on this endpoint during recon, so no proxy group is pinned by… |
Example input
{"searchQueries": ["charizard"],"maxResultsPerQuery": 5,"pageSize": 5,"includeListings": true,"proxyConfiguration": {"useApifyProxy": true}}
📤 Output
Every row is one dataset item.
| Field | Type | Notes |
|---|---|---|
product_id | integer | TCGPlayer's numeric product id. |
product_name | string | Product display name. |
product_line | string | Game the product belongs to, e.g. Pokemon, Magic: The Gathering. |
set_name | string | Card set name. |
set_code | string | Short set code. |
rarity | string | Card rarity. |
market_price | number | Headline market price in USD. |
lowest_price | number | Lowest current listing price in USD. |
lowest_price_with_shipping | number | Lowest listing price including shipping. |
total_listings | integer | Total live seller listings for this product. |
foil_only | boolean | Whether this product listing is foil-only. |
product_url | string | Canonical TCGPlayer product page URL. |
custom_attributes | object | Per-game metadata passthrough, varies by game. |
listings | array | Up to 5 seller listings, only when includeListings=true. |
searched_query | string | The searchQueries entry that produced this row. |
scraped_at | string | ISO-8601 UTC timestamp at fetch time. |
Example output
{"product_id": 15870,"product_name": "Charizard (Base Set)","product_line": "Pokemon","set_name": "Base Set","set_code": "BS","rarity": "Rare Holo","market_price": 312.45,"lowest_price": 249.99,"lowest_price_with_shipping": 254.98,"total_listings": 87,"foil_only": false,"product_url": "https://www.tcgplayer.com/product/15870/pokemon-base-set-charizard","custom_attributes": {"number": "4/102","rarityDbName": "Rare Holo","releaseDate": "1999-01-09"},"listings": null,"searched_query": "charizard","scraped_at": "2026-09-22T10:00:00Z"}
💰 Pricing
Pay-Per-Event — you pay only when these events fire:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.20 | One-off warm-up charge per run |
product-scraped | $0.003 | Per product row written to the dataset |
Example: 1 000 products at the rates above ≈ $3.20. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.
🚧 Limitations
- One-shot price snapshot per run — no historical/time-series pricing or trend charts.
- Buylist (vendor-side) pricing is not covered — only marketplace sell-side prices.
- Seller listings are capped at 5 per product — this is a price-check tool, not a full order-book mirror.
- Targets TCGPlayer's US storefront (shippingCountry: US) — no international storefront support in v1.
❓ FAQ
Do I need an account or API key?
No. This Actor calls TCGPlayer's public search endpoint directly — no login, no API key, no scraping the HTML page.
Does this cover games other than Magic and Pokemon?
Yes. Every game TCGPlayer lists — Yu-Gi-Oh, Digimon, One Piece, Flesh and Blood, and more — comes back through the same search; the game each result belongs to is on the product_line field.
Can I get individual seller listings, not just the market price?
Yes — set includeListings to true and each product row carries up to 5 seller listings (price, condition, shipping, seller rating) sorted cheapest first.
What if my search matches nothing?
The run still succeeds — you get zero rows for that query and a status message saying what was searched. That's a completed search with no matches, not an error.
💬 Your feedback
Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.