GemRate API & Scraper
The GemRate API returns gemrate.com's universal population report as JSON: for any sports or trading card it says how many copies PSA, Beckett (BGS), SGC and CGC have graded, at every grade.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
search finds cards by free text (player or character, year, set, card number, parallel) with each card's total graded, gem count and gem rate. card returns one card's full report: the combined population and gem rate, the count at every grade on GemRate's universal scale with the percent of copies graded higher, and for each grader the total, gems, gem rate, every grade including half grades and PSA qualified grades, the grader's own name for the card and its last population change. card_history shows how the population grew week by week over the last year. set_pop is a grader's pop report for a whole set, every card and parallel with its grade counts (PSA adds graded past month, 30-day gem rate and a recent cert number); sets lists a year's sets per category, set_search finds PSA sets by name, set_history the daily growth of a set, top_cards the most graded cards of all time, player every graded card of one athlete or Pokemon character, and iconic_cards GemRate's ranked Iconic Tracker of about 100 landmark cards across all four graders. universal_sets and universal_set cover the cards GemRate matched across all four graders, and grading_volume reports how many cards are being graded per day, week and month. No account - PSA's own population report now asks you to sign in. One ReefAPI key and the standard { ok, data, meta, error } envelope.
"Gem" is not the same grade at every grader
Gem counts and gem rates are the ones GemRate publishes. Each grade row in the API says is_gem and which universal grade it sits on, so populations from different graders can be added up correctly. Example: 1999 Pokemon Base Set Charizard #4, measured 2026-11-08 (134,949 copies graded, 1,043 gems, 0.77 %).
| Grader | Grades counted as gem | Charizard #4 total | gems | gem rate |
|---|---|---|---|---|
| PSA | 10 | 108,810 | 490 | 0.45 % |
| Beckett (BGS) | 9.5, 10 Pristine, 10 Black Label | 9,162 | 249 | 2.72 % |
| CGC | 10, 10 Pristine, 10 Perfect | 15,063 | 298 | 1.98 % |
| SGC | 10, 10 Pristine | 1,914 | 6 | 0.31 % |
On the universal scale a BGS 9.5 counts as Gem Mint, BGS 10 Pristine as Pristine and Black Label as Perfect; SGC and CGC 9.5 are Mint+. PSA totals include qualified grades (OC, MK and the like), which card lists separately. Counts move every day - each grader row carries last_population_change.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/gemrate/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "charizard base set"
}
}{
"ok": true,
"meta": {
"api": "gemrate",
"endpoint": "search",
"mode": "live",
"latency_ms": 1472.2,
"record_count": 10,
"bytes": 7740,
"cache_hit": false,
"pagination": {
"page": 1,
"has_more": true,
"page_size": 10
},
"upstream_requests": 1,
"via_cleared_exit": true,
"charged_credits": 2,
"version": "0.1.0",
"request_id": "223c1b3f72e442c6",
"queue_ms": 1.7,
"fetched_at": "2026-11-08T13:04:22.341Z"
},
"data": {
"query": "charizard base set",
"results": [
{
"gemrate_id": "ffb8699bb7f435eff4e9761f8e29358e351d777e",
"description": "1999 Pokemon Game Charizard-Holo Base 4",
"year": "1999",
"set_name": "Pokemon Game",
"name": "Charizard-Holo",
"card_number": "4",
"parallel": "Base",
"category": "tcg-cards",
"total_population": 134949,
"gems": 1043,
"gem_rate": 0.007729,
"gem_rate_percent": 0.77,
"graders_included": [
"psa",
"bgs",
"sgc"
],
"is_universal_match": true,
"image_front": "https://images.gemrate.com/i/r9bNDWLFxkZ8PTy0Cwu0s9XotSJbeq6nc0QzXlJinOOJf-FbBnsC8YlN-neBZCzyjiGtVOMpUx02Y1dI2wlynQzZSSyWraLMNQ",
"url": "https://www.gemrate.com/card/ffb8699bb7f435eff4e9761f8e29358e351d777e"
},
{
"gemrate_id": "2313fd2e0f24f642cbb8d1b7c76f5a4f242e4c5d",
"description": "2021 Pokemon Celebrations Classic Collection Charizard-Holo Base 4",
"year": "2021",
"set_name": "Pokemon Celebrations Classic Collection",
"name": "Charizard-Holo",
"card_number": "4",
"parallel": "Base",
"category": "tcg-cards",
"total_population": 75506,
"gems": 43445,
"gem_rate": 0.575385,
"gem_rate_percent": 57.54,
"graders_included": [
"psa",
"bgs",
"cgc"
],
"is_universal_match": true,
"image_front": "https://images.gemrate.com/i/f_KJCVCD9YR8BwEcA28BQAdfTILr_NULlK5Zke7g_ep_CujSth3pCjT4WnJzpv-eOJnc6T3ejOlScHAeC5P1fgWNa9fSY1zq9aY",
"url": "https://www.gemrate.com/card/2313fd2e0f24f642cbb8d1b7c76f5a4f242e4c5d"
},
{
"gemrate_id": "e1f028de9f9514637e4d7b4bf42fa07dcecf06c1",
"description": "2021 Pokemon Japanese Promo Card Pack 25th Anniversary Edition Charizard-Holo Base 001",
"year": "2021",
"set_name": "Pokemon Japanese Promo Card Pack 25th Anniversary Edition",
"name": "Charizard-Holo",
"card_number": "001",
"parallel": "Base",
"category": "tcg-cards",
"total_population": 39737,
"gems": 35909,
"gem_rate": 0.903667,
"gem_rate_percent": 90.37,
"graders_included": [
"psa",
"bgs",
"sgc"
],
"is_universal_match": true,
"image_front": "https://images.gemrate.com/i/KvUjmNouzM8Jjcz1qfdGHuScRDiJE0s2bhmf8qbqeguALgfYkDoylMAFr_FSS7EykE_rHodWXMjWOWjq0_qEFkipiVe1Jjz5GsI",
"url": "https://www.gemrate.com/card/e1f028de9f9514637e4d7b4bf42fa07dcecf06c1"
}
],
"count": 10,
"page": 1,
"has_more": true
}
}What the GemRate API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Find graded cards across PSA, BGS, SGC and CGC by free text (year, set, player or character, card number, parallel): each match with its GemRate id, total graded population, gem count, gem rate, which graders are included and the card image. 10 matches per page, up to 5 pages. | Pricing teams call search to find graded cards across PSA, BGS, SGC and CGC by free text (year, set, player or character,…. | query, page |
| card | One card's full population report across PSA, Beckett, SGC and CGC: combined population and gem rate, the count at every grade on GemRate's universal scale with percent of total and percent graded higher, and per grader the total graded, gem count, gem rate, every grade count including half grades, PSA qualified grades, the grader's own card name and set, the last population change and front/back images. | Marketplace operators call card to get one card's full population report across PSA, Beckett, SGC and CGC. | gemrate_id, query |
| card_history | How a card's graded population has grown: BGS and SGC weekly history for the last year with every grade count, gems and gem rate each week; PSA weekly total graded for the last year plus graded past month, prior month, past-month gem rate, 30-day momentum, last gem date and the most recent cert. | Catalog enrichment teams call card_history to get how a card's graded population has grown. | gemrate_id, query, grader, year, category, ... |
| set_pop | A set's population report from one grader (PSA, BGS, SGC or CGC): every card and parallel with total graded, gems, gem rate and the count at each grade. PSA rows add graded past month and prior month, 30-day gem rate and momentum, the last-year weekly trend, last gem date and a recent cert number. Filter by player/character name, sort, paginate. | Retail analysts call set_pop to get a set's population report from one grader (PSA, BGS, SGC or CGC). | year, category, set_name, grader, name, ... |
| sets | Every set a grader has graded for one year and category, with total graded, gems and gem rate per set (the set names to use in set_pop and set_history). | Pricing teams call sets to get every set a grader has graded for one year and category, with total graded, gems and gem rate…. | year, category, grader, query, sort, ... |
| set_history | A set's grading history: total graded and gems every day the population changed, with graded in the last 7, 30 and 365 days. PSA back to 2021 for sports and TCG; BGS (from late 2021) and SGC (from 2022) for sports sets. | Marketplace operators call set_history to get a set's grading history. | year, category, set_name, grader, days |
| top_cards | The most graded cards of all time at PSA, BGS, SGC or CGC, overall or in one category: rank, year, set, player or character, card number, parallel, total graded, gems and gem rate. | Catalog enrichment teams call top_cards to get the most graded cards of all time at PSA, BGS, SGC or CGC, overall or in one category. | grader, category, limit |
| player | Every graded card of one athlete or character at one grader (a full checklist with population): year, set, card number, parallel, total graded, gems, gem rate and, at PSA, the card id and a recent cert. Filter by year or set, sort, paginate. | Retail analysts call player to get every graded card of one athlete or character at one grader (a full checklist with population). | player, grader, category, year, set_name, ... |
| universal_sets | GemRate's Universal Pop Report sets (cards matched across PSA, BGS, SGC and CGC): each set with total graded, each grader's count and market share, checklist size and how many cards have grades. | Pricing teams call universal_sets to get gemRate's Universal Pop Report sets (cards matched across PSA, BGS, SGC and CGC). | category, year, query, limit, page |
| universal_set | One Universal Pop Report set: every card with its combined population and gem rate, the universal grade breakdown and each grader's total, gems, gem rate, grade counts, last graded and last gem date. | Marketplace operators call universal_set to get one Universal Pop Report set. | set_id, year, set_name, name, sort, ... |
| set_search | Find PSA sets by name across every year and category (e.g. '2023 prizm basketball'): year, category, the set name to use in set_pop / set_history and the set's total PSA graded. | Catalog enrichment teams call set_search to find PSA sets by name across every year and category (e.g. | query |
| iconic_cards | GemRate's Iconic Tracker: about 100 of the most iconic sports and TCG cards, ranked, each with its combined population and gem rate across PSA, BGS, SGC and CGC, the universal grade breakdown and every grader's total, gems, grade counts, last graded and last gem date. | Retail analysts call iconic_cards to get gemRate's Iconic Tracker. | category, name, sort, limit, page |
| grading_volume | How many cards are being graded: total graded all time, graded yesterday and in the last 7 and 30 days against the prior period, daily average, annual pace, the same per category, daily, weekly and monthly volume, and this week's most graded players, sets and cards (sports or TCG). | Pricing teams call grading_volume to get how many cards are being graded. | segment |
Call search from your stack
curl -X POST https://api.reefapi.com/gemrate/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"charizard base set"}'import os
import requests
REEF_KEY = os.environ["REEF_KEY"]
r = requests.post(
"https://api.reefapi.com/gemrate/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "charizard base set"
},
timeout=90,
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/gemrate/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "charizard base set"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.gemrate.search with {"query":"charizard base set"}.Who uses this API and why
- Price a graded card: how scarce is a PSA 10 or a BGS 9.5 next to the copies sold
- Decide whether to grade: a card's gem rate tells how often submissions come back a 10
- Low-pop hunting: sort a set by population or gem rate to find the hardest cards
- Watch supply: weekly population growth of a card or a set before buying
- Market reports: how many cards are graded per day, and this week's most graded players and sets
Questions developers ask before integrating
How many PSA 10s exist of a card?
card returns it: by_grader has one row per grader with the count at every grade, so the PSA row's grade 10 is the PSA 10 population (490 for the 1999 Base Set Charizard #4 on 2026-11-08). Find the card with search, or pass query to card directly and the best match is used and reported.
Is this the same number as PSA's own pop report?
It is GemRate's copy of each grader's published population, refreshed daily; data_last_updated and last_population_change say when. PSA's own report now requires a sign-in, GemRate's does not.
Can I get the population for a whole set?
Yes. set_pop takes the grader, year, category and set name and returns every card and parallel in the set with total graded, gems, gem rate and the count at each grade, sortable by population or gem rate. sets lists the set names a grader uses for a year, and every card's by_grader rows carry the grader's own set name.
Does it show how a population grows over time?
card_history returns weekly BGS and SGC history for the last year with every grade, and for PSA 52 weekly totals plus graded in the past month and prior month and the 30-day gem rate. set_history returns a set's total graded and gems every day it changed (PSA back to 2021). GemRate publishes no CGC history.
Which cards are covered?
Every card PSA, BGS, SGC or CGC has graded that GemRate tracks: baseball, basketball, football, hockey, soccer, golf, boxing and MMA, non-sport, and trading card games such as Pokemon, Magic: The Gathering, Yu-Gi-Oh! and One Piece. GemRate has counted over 120 million graded items.
Can I look up a cert number?
GemRate has no cert lookup, so this API does not offer one. PSA set rows and athlete rows include a recent cert number for the card. For a PSA cert, use the Card Ladder API's cert lookup.
What is the GemRate API?
GemRate API is a ReefAPI endpoint group for graded card population across psa, bgs, sgc and cgc: every grade, gem rate, set and athlete pop reports, as json. It returns live JSON through POST requests under /gemrate/v1.
Is the GemRate API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. GemRate calls use the same shared credit balance as every other ReefAPI engine.
Do I need a GemRate login or account?
No login to GemRate is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the GemRate data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the GemRate API use?
GemRate actions currently cost 2-5 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call GemRate from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call gemrate actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the GemRate API a GemRate scraper?
It is the managed alternative to a DIY GemRate scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same graded card population across psa, bgs, sgc and cgc: every grade, gem rate, set and athlete pop reports, as json back as clean JSON.
Why does my GemRate scraper keep getting blocked?
Most GemRate scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.