PokeInvest Pokemon Card Prices
Hosted MCP server (https://www.pokeinvest.io/mcp) for Pokemon card prices from real completed sales on eBay, TCGplayer and Goldin: raw and every PSA, CGC, BGS and TAG grade, plus grading populations, price history and live eBay listings. Free, no key needed for light use.
Hosted MCP Server
npx add-mcp 'https://www.pokeinvest.io/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
Price & Population Data API
A price for every grade at every grading company — a median of completed sales, with the sale count, window and trend behind each number — plus PSA populations. Keyed by the card ID in every PokeInvest card URL, so there's no matching step.
Prices: every grade, every grader, with the evidence
Not a formula. Each figure is the median of real completed sales at that exact grade and grading company, published only when there are three or more inside the window. Sale counts, window, newest sale and the change against the previous window ride along, so your model knows how much to trust each number.
GET https://www.pokeinvest.io/api/prices/pi_16322
X-API-Key: your_key
{
"pokeinvest_id": "pi_16322",
"name": "Gengar EX #108",
"set_name": "Pokemon Fire Red & Leaf Green",
"currency": "USD",
"ungraded": { "median_usd": 949.5, "sales": 32, "window_days": 90,
"newest_sale": { "usd": 1050.0, "date": "2026-09-25" }, ... },
"graded": [
{ "grader": "PSA", "grade": "10", "median_usd": 26525.0, "sales": 4, "window_days": 365,
"low_usd": 21000.0, "high_usd": 32000.0,
"newest_sale": { "usd": 27500.0, "date": "2026-08-30" }, "change_vs_previous_window": null },
{ "grader": "PSA", "grade": "9", "median_usd": 8700.0, "sales": 16, "window_days": 90,
"change_vs_previous_window": 0.58, ... },
{ "grader": "CGC", "grade": "Pristine 10", ... },
{ "grader": "BGS", "grade": "9.5", "median_usd": 6550.0, "sales": 20, ... }
],
"population": { "psa_total": 3300, "psa_10": 105, "cgc_total": 428, "psa_last_updated": "2026-09-20" }
}
- Measured, and labelled as such — every number under
gradedorungradedcame from sales we can show you. No vendor figures, no estimates: a grade we have not seen sell is absent, not guessed. - Tiers above 10 are separate — BGS Black Label, CGC Pristine 10 and a plain 10 are different prices, because they are.
- Recomputed every night from 2.6 million completed sales, behind a gate that refuses to publish a price that moved on thin evidence. 55,000+ cards carry measured prices today (246,000 card-and-grade prices) and the count grows nightly; the rest return estimates only.
Populations: the same key, the same IDs
GET https://www.pokeinvest.io/api/population/pi_46078
X-API-Key: your_key
{
"pokeinvest_id": "pi_46078",
"tcgplayer_id": "146698",
"name": "Mewtwo GX #78",
"set_name": "Pokemon Shining Legends",
"population": {
"psa_10": 2628, "psa_9": 6132, "psa_8": 3806,
"psa_7": 792, "psa_6": 272, "psa_5": 162,
"psa_4": 89, "psa_3": 63, "psa_2": 28, "psa_1": 97,
"total": 14072
},
"gem_rate_pct": 18.68,
"psa_last_updated": "2026-01-04"
}
- Look cards up however you already track them — by our
pokeinvest_id, or straight by TCGplayer product id. Both resolve on both endpoints, and both come back on every response so the data joins to whatever you already have. - IDs that don't move — a
pokeinvest_idis never reused and never renumbered. If we ever merge two records the old ID keeps resolving, so nothing you've stored goes stale. - Honest freshness — populations refresh era by era; every response carries that card's last-updated date so you always know what you're looking at.
- Simple errors — 401 bad key, 404 unknown card, 429 past your monthly cap. Nothing exotic.
Population history: every grade, over time
A dated snapshot of the PSA population report, taken weekly. A point is written only when a card's counts changed, so a flat card has few points and that is the truth, not a gap. Series begin September 2026.
GET https://www.pokeinvest.io/api/population-history/pi_46078
X-API-Key: your_key
{
"pokeinvest_id": "pi_46078",
"name": "Mewtwo GX #78",
"set_name": "Pokemon Shining Legends",
"grader": "PSA",
"points": [
{ "date": "2026-09-07", "total": 13990, "psa_10": 2628, "psa_9": 6132, "psa_8": 3806, ... },
{ "date": "2026-10-11", "total": 14102, "psa_10": 2651, "psa_9": 6180, "psa_8": 3831, ... }
]
}
Price history: our price, per grade, over time
The price we published for a card at each grade, as a dated series back to January 2022, computed from the verified sales with the same rule the nightly uses: the median of the shortest window holding three or more sales. A point is written only when the price or the sale count changed. Filter with ?grade=PSA+10.
GET https://www.pokeinvest.io/api/price-history/pi_46078?grade=PSA+10
X-API-Key: your_key
{
"pokeinvest_id": "pi_46078",
"name": "Mewtwo GX #78",
"set_name": "Pokemon Shining Legends",
"currency": "USD",
"grades": {
"PSA 10": [
{ "date": "2024-03-10", "price_usd": 138.0, "sales": 5, "basis": "median", "window_days": 90, "low_usd": 120.0, "high_usd": 150.0 },
{ "date": "2024-03-24", "price_usd": 142.5, "sales": 6, "basis": "median", "window_days": 90, ... },
...
]
}
}
Sales: the completed sales behind every price
Date, price, grader and grade, platform, listing. The same rows the card page shows as its receipts; sales held out as the wrong card, a lot, a proxy or damaged are not here. Up to 500 newest; filter with ?grade=PSA+10 or ?days=90.
GET https://www.pokeinvest.io/api/sales/pi_16322?grade=PSA+10
X-API-Key: your_key
{
"pokeinvest_id": "pi_16322",
"name": "Gengar EX #108",
"currency": "USD",
"count": 4,
"sales": [
{ "date": "2026-08-30", "price_usd": 27500.0, "grader": "PSA", "grade": "10",
"platform": "eBay", "sale_type": "marketplace",
"title": "2004 Pokemon EX Fire Red Leaf Green Gengar ex #108 PSA 10", "url": null },
{ "date": "2026-07-12", "price_usd": 26000.0, "grader": "PSA", "grade": "10",
"platform": "Goldin", "sale_type": "auction", "url": "https://goldin.co/item/..." }
]
}
- Every language — Japanese, Chinese and Korean sets are in the same catalogue with the same IDs; 9,600 Japanese cards carry a measured price today and 17,700 carry a PSA population.
- Auction links are permanent — Goldin, Fanatics, Heritage, MySlabs and Pristine keep lot pages up. eBay retires ended listings and redirects them to a catalogue page, so its link is withheld rather than sent wrong.
Free
Every endpoint · 1,000 calls a month · no card · key issued instantly
For apps, Discord bots, spreadsheets and AI agents. Link "Prices by PokeInvest" where the data is shown.
$29/month
Every endpoint · 10,000 calls a month · resets on the 1st · cancel anytime
Card checkout via Stripe. Your key arrives by email within a minute of paying.
Need every card at once instead? The bulk CSV export is $79/mo or $790/yr. Lending, insurance, marketplace or fund? Data licensing from $500/mo. How our data compares to other Pokémon card APIs.
Use it inside Claude, ChatGPT or Cursor (MCP)
No code. Add this URL as a connector and ask "what's a PSA 10 Umbreon VMAX alt art worth?" or "any deals on Base Set Charizard?". Every answer comes from our sales data with a link to the card page.
https://www.pokeinvest.io/mcp
- Claude — Settings → Connectors → Add custom connector → paste the URL. Cursor — Settings → MCP → Add server, type "streamable HTTP". ChatGPT — Settings → Connectors → Add (developer mode).
- Tools — search_cards, get_card_prices, get_population, get_price_history, get_population_history, get_sales, get_deals.
- Limits — 300 tool calls a day without a key. Send a free key as a Bearer token for 1,000 a month, or a paid key for 10,000.
Building with Claude, Cursor, Lovable or a bot
An agent can get its own key with one request and read the whole API from one text file. No dashboard, no approval queue.
curl -X POST https://www.pokeinvest.io/data-api/free -d [email protected]
{ "api_key": "pk_live_...", "calls_per_month": 1000, "resets": "first of the month",
"docs": "https://www.pokeinvest.io/data-api", "llms": "https://www.pokeinvest.io/llms.txt",
"example": "curl -H \"X-API-Key: pk_live_...\" https://www.pokeinvest.io/api/prices/pi_16322" }
- Paste this into your agent — "Use the PokeInvest Data API (read https://www.pokeinvest.io/llms.txt). Get a free key by POSTing my email to /data-api/free, then send it as X-API-Key."
- OpenAPI spec — pokeinvest.io/openapi.json drops straight into a custom GPT's actions, Postman, or any SDK generator. Find IDs without a key — GET /api/search?q=charizard+base+set+4.
- Stable IDs — every card has one ID (pi_16322, or the number in its PokeInvest URL) across prices, populations, history and sales. No name matching.
- Attribution — show "Prices by PokeInvest" linking to pokeinvest.io wherever the data appears. That is the whole price of the free tier.
Questions
How are the prices computed?
Every completed sale we collect is filed to a card and a grade — the grading company has to be named in the listing; a "PSA 10 potential" is a raw card — and sales that are lots, other-language printings or damaged copies are set aside. A price is the median of what is left at that grade: the last 90 days for ungraded cards and for grades with five or more recent sales, the last year otherwise. It is published only with three or more sales inside its window. Medians, never averages, so one mispriced sale cannot move a number.
How fresh is the population data?
Populations are rescraped era by era. Current sets refresh every few weeks; older sets can go a few months between refreshes. That's why every response includes psa_last_updated for the exact card — no guessing.
Which cards are covered?
24,000+ English Pokémon cards with PSA population data, out of 52,000+ tracked cards. Cards without population data return the card with null population fields rather than an error.
How do I find a card's ID?
It's the number in the card's PokeInvest URL, and it's visible on every card page. Every API response echoes it back too.
How do I cancel?
Self-serve: manage your subscription here — we email you a secure billing link where you can cancel, change your card, or grab invoices. Your key keeps working until the end of the period you've paid for. Or just reply to any email from us and say cancel.
Need more than 10k calls or different data?
Email [email protected] — pricing endpoints, higher limits, and bulk exports are all conversations I'm happy to have.