GemRate Card Grading Population & Sales Data Scraper avatar

GemRate Card Grading Population & Sales Data Scraper

Pricing

from $8.00 / 1,000 results

Go to Apify Store
GemRate Card Grading Population & Sales Data Scraper

GemRate Card Grading Population & Sales Data Scraper

Card-grading population data from GemRate — PSA, Beckett, SGC, CGC — plus eBay sales trends. Search cards and sets, pull set/player breakdowns, top cards, population trends, historical replays, and dashboard data. Pick an operation, get structured JSON. Read-only.

Pricing

from $8.00 / 1,000 results

Rating

0.0

(0)

Developer

Amram Englander

Amram Englander

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

GemRate Card Grading Population Scraper

Pull trading-card grading population data from GemRate — covering PSA, Beckett (BGS), SGC, and CGC. Search cards and sets, get per-grader gem rates and population counts, list every card in a set, track population growth over time, replay historical snapshots, rank the most-graded cards, and export the site's full cross-grader pop reports — all as clean, structured JSON. No login, no coding.

Looking for eBay sales/price trends instead? Use the companion GemRate eBay Card Sales Trends Scraper.

What does the GemRate Card Grading Scraper do?

GemRate is the trading-card industry's population-data hub: how many copies of a card exist at each grade, across each grading company. It has no public API, so this Actor wraps the data behind the GemRate web app and returns it as structured rows you can download or pipe anywhere.

You pick one operation (search, set breakdown, top cards, population trend, pop reports, and more — 13 in total), fill in a few fields, and the Actor returns the matching data. It runs on the Apify platform, so you get a scheduler, a REST API, webhooks, integrations (Make, Zapier, Google Sheets, Slack), proxy rotation, and run monitoring out of the box. No GemRate account is required — the data is publicly accessible.

Why use this scraper?

  • 📈 Card investment & market research — gem rates and populations are the supply side of card value. Find the scarcest high-grade cards, spot over- or under-graded sets, and quantify true rarity before you buy or sell.
  • 🔢 Population tracking — watch a card's or set's graded population grow month over month to anticipate price moves and grading waves.
  • 🏆 Top-cards & set intelligence — pull the most-graded cards in any category, or every card in a set with its individual gem rate and recent growth.
  • 🃏 Cross-grader comparison — see PSA vs. BGS vs. SGC vs. CGC side by side for a single card, or across hundreds of iconic cards and sets at once.
  • ⚙️ Automate it — schedule runs to keep a population dataset fresh and feed it into a sheet, a database, a dashboard, or an alert.

Useful for card investors, dealers, breakers, set-registry collectors, marketplaces, pricing tools, and content creators who need grading data programmatically.

How to use it

  1. Click Try for free / Start.
  2. In the Input tab, choose an Operation (e.g. Search cards by name, Top graded cards, Card population trend).
  3. Fill in the parameters that operation needs — every field's description notes which operations use it.
  4. (Optional) Add a text filter (contains) or a limit, and confirm the proxy.
  5. Click Save & Start. When the run finishes, open the Output / Storage tab and download the data as JSON, CSV, Excel, or HTML — or pull it via the API.

💡 New to GemRate IDs? Run Search cards by name first (e.g. Michael Jordan), copy a gemrate_id from the results, then run Card grading details with it for the full per-grader breakdown.

What you can pull (operations)

OperationWhat you getKey parameters
Search cards by nameUp to 10 matching cards across all gradersquery
Search sets by nameUp to 10 matching setsquery
Card grading detailsFull per-grader grade breakdown for one cardgemrateId
Set breakdownsEvery set for a grader / category / year, with gem ratesgrader, category, year
Cards in a setEvery card in a set with individual gem rates and growthgrader, category, year, setName
Top graded cardsThe Top 100 / 500 / 1000 most-graded cardsgrader, category, count
Player / subject cardsAll graded cards for a player or charactergrader, category, playerName
Card population trendA single card's graded population over timegrader, category, year, setName, playerName
Set population trendA whole set's graded population over timegrader, category, year, setName
Historical replayA set's grading data as it stood on a past dategrader, category, year, setName, date
Dashboard datasetsGemRate homepage grading trends and statsdashboardDataset (optional)
Iconic Tracker~105 iconic cards with the site's fullest cross-grader breakdown (per-grader grade-by-grade pops, gem rates, percentiles, monthly trend, price links, rank)
Universal Pop Report~391 sets with cross-grader market share (per-grader grades + share %, checklist size, % graded)

Graders

psa (PSA) · bgs (Beckett / BGS) · sgc (SGC) · cgc (CGC)

Categories

basketball-cards, baseball-cards, boxing-wrestling-cards-mma, football-cards, golf-cards, hockey-cards, soccer-cards, tcg-cards (Pokémon / Yu-Gi-Oh! / MTG), non-sport-cards, multi-sport-cards, misc-cards, packs, tickets.

Example recipes

Top 100 PSA-graded Pokémon cards of all time:

{
"operation": "top-cards",
"grader": "psa",
"category": "tcg-cards",
"count": "100"
}

Every 2024 PSA basketball set, with gem rates:

{
"operation": "set-details",
"grader": "psa",
"category": "basketball-cards",
"year": "2024"
}

All of one player's graded cards:

{
"operation": "player",
"grader": "psa",
"category": "basketball-cards",
"playerName": "Michael Jordan"
}

A single card's population over time (for cards with parallels, set parallel to match — look it up with Cards in a set first):

{
"operation": "trend",
"grader": "psa",
"category": "tcg-cards",
"year": "1999",
"setName": "Pokemon Game",
"playerName": "Charizard-Holo",
"parallel": "Base"
}

Every card in a set, with individual gem rates (match setName to how it reads on GemRate):

{
"operation": "items",
"grader": "psa",
"category": "baseball-cards",
"year": "2024",
"setName": "Topps Chrome"
}

That whole set's graded population over time:

{
"operation": "set-trend",
"grader": "psa",
"category": "baseball-cards",
"year": "2024",
"setName": "Topps Chrome"
}

The same set's grading data as it stood on a past date (historical replay; date is YYYY-MM-DD):

{
"operation": "replay",
"grader": "psa",
"category": "baseball-cards",
"year": "2024",
"setName": "Topps Chrome",
"date": "2025-01-01"
}

Full grade breakdown for one specific card — a two-step flow. First search to get the card's gemrate_id:

{
"operation": "search",
"query": "Michael Jordan"
}

Then pass that ID into card-details (copy the gemrate_id from any search result row):

{
"operation": "card-details",
"gemrateId": "PASTE_gemrate_id_FROM_SEARCH"
}

The full cross-grader Iconic Tracker (no parameters needed):

{
"operation": "iconic-tracker"
}

The Universal Pop Report — set-level cross-grader market share (also no parameters):

{
"operation": "universal-pop-report"
}

Search for sets by name (same as card search, but returns sets):

{
"operation": "search-sets",
"query": "Topps Chrome 2024"
}

Dashboard datasets — leave dashboardDataset blank for the main grading-trend table, or pick one (category_df, player_data, set_data, card_data). Either way the full payload is also saved to the run's key-value store under DASHBOARD:

{
"operation": "dashboard",
"dashboardDataset": "set_data"
}

Input reference

Set operation, then the parameters that operation needs. Everything else is optional.

FieldTypeUsed byDescription
operationstringrequiredWhich dataset to pull (see the operations table above).
querystringsearch, search-setsCard or set name, e.g. Michael Jordan, Charizard, Topps Chrome 2024. Returns up to 10 matches.
gemrateIdstringcard-detailsA card's gemrate_id from search results.
graderstringset/player/trend/replay/top-cardspsa, bgs, sgc, or cgc. Default psa.
categorystringset-details, items, top-cards, player, trend, replayCard category (see list above).
yearstringset-details, items, trend, set-trend, replaySet year, e.g. 2024.
setNamestringitems, trend, set-trend, replaySet name exactly as GemRate shows it, e.g. Topps Chrome.
playerNamestringplayer, trendPlayer/subject (player op) or the card's name (trend op).
parallelstringtrendParallel for the trend card, e.g. Base, Holo. Must match for cards that have parallels.
cardNumberstringtrendCard number, to disambiguate same-named cards.
countstringtop-cards100, 500, or 1000. Default 100.
datestringreplayYYYY-MM-DD — the date to replay a set's data as of.
dashboardDatasetstringdashboardHomepage table to return; blank = grading_data. Full payload (all tables) also saved to the key-value store.
searchstringlist operationsPost-filter: keep only rows whose text contains this string (case-insensitive).
limitintegerlist operationsCap the number of rows returned. 0 = no limit.
proxyConfigurationobjectallProxy settings. Residential Apify Proxy is the default and recommended (clears Cloudflare).

Output

Every result is one dataset row, tagged with the operation that produced it and a scrapedAt timestamp. Because each operation returns a different shape, the Output tab has a ready-made table view per operation — open the view selector and pick the one named after what you ran (Cards, Sets, Card grading details, Trends over time, Iconic Tracker, or Universal Pop Report). Every field is always in the JSON/CSV download regardless of the view.

The exact fields depend on the operation. A Search cards row looks like this:

{
"operation": "search",
"name": "Michael Jordan",
"description": "1990 Fleer Michael Jordan Base 26",
"set_name": "Fleer",
"year": "1990",
"parallel": "Base",
"card_number": "26",
"category": "basketball-cards",
"matched_grader": "psa",
"gems": 10612,
"gem_rate": 12.08,
"total_population": 87870,
"population_type": "Universal",
"gemrate_id": "f84b6798d8ee0d1088039299380ced3d439dddd2",
"scrapedAt": "2026-05-31T13:46:44.288Z"
}

An Iconic Tracker row is far richer — it carries the per-grader grade-by-grade breakdown for all four graders plus percentile and trend fields (abbreviated here):

{
"operation": "iconic-tracker",
"rank": 1,
"name": "Mickey Mantle",
"set_name": "1952 Topps",
"year": "1952",
"psa_card_total_grades": 2156,
"psa_card_gems": 6,
"psa_card_gem_rate": "0.0028",
"total_grades": 3490,
"total_gem_rate": 0.0031,
"cardladder": "https://www.cardladder.com/...",
"scrapedAt": "2026-05-31T13:55:00.000Z"
}

You can download the dataset in JSON, CSV, Excel, or HTML, or pull it via the API. For the Dashboard datasets operation with no specific dataset chosen, the full payload is also saved to the run's key-value store under the DASHBOARD key.

Data fields

Common fields across operations (each operation also includes its own extra columns — download JSON/CSV for the complete record):

FieldDescription
operationWhich operation produced the row.
name, descriptionCard / player / set name and full description.
gemrate_idGemRate's ID for a card (feed it into Card grading details).
grader, matched_graderGrading company for the row.
category, year, set_name, parallel, card_numberIdentifiers for the card / set.
total, gems, gem_rateSet-level total graded, gem count, and gem rate.
card_total_grades, card_gems, card_gem_rateCard-level total graded, gem count, and gem rate.
total_population, population_typeCombined cross-grader population (search / card-details).
rankRank within the Iconic Tracker.
dateDate for trend / replay rows.
scrapedAtWhen the row was captured.

About gem rate: GemRate reports it differently per endpoint — set and card breakdowns use a 0–1 fraction (e.g. 0.92 = 92%), while search rows use a 0–100 percentage. Read it accordingly when you analyze the output.

Filtering & limiting

The list-style operations accept optional post-processing so you can trim a large dataset:

  • search — keep only rows whose text contains a string (case-insensitive).
  • limit — cap the number of rows returned.

For anything more (sorting, numeric thresholds), download the dataset and sort/filter it in your spreadsheet, database, or via the API — gem-rate scaling varies by endpoint, so doing it downstream is more reliable.

How much does it cost to scrape GemRate?

The two search operations use a lightweight API call — fast and very cheap. The other operations run a real browser (to clear GemRate's Cloudflare protection from Apify's network), so they use more compute — typically a few seconds and a fraction of a compute unit per run, at 2–4 GB. Runs are still short; cost scales with how many runs you do. On the Apify free tier, the monthly credits cover regular use.

Tips & advanced options

  • Two-step card lookup: Search cards by name → copy a gemrate_idCard grading details for the full per-grader breakdown.
  • Population trends need exact inputs: for Card population trend, setName, parallel, and cardNumber must match GemRate exactly, or the trend comes back empty — look them up with Cards in a set first.
  • Incremental monitoring: schedule Set population trend on your watchlist and route new rows into a sheet or Slack alert.
  • Whole-market exports: Iconic Tracker and Universal Pop Report take no parameters and return the broadest cross-grader datasets on the site in one run.
  • Proxy: keep the default residential Apify Proxy — the browser-based operations need it to clear Cloudflare. Datacenter proxies and no-proxy will be blocked for those operations.

FAQ, disclaimers & support

Do I need a GemRate account or login? No. GemRate's data is publicly accessible — just pick an operation and run.

Why does a set return no rows? Set names must match GemRate exactly. Match setName, year, and category to how they appear on the site (use Search sets by name or Cards in a set to confirm the spelling).

What's the difference between gems and gem rate? gems is the count of cards graded gem-mint (PSA 10 / BGS 9.5 etc.); gem rate is that count as a share of all graded copies. See the gem-rate note above for the scale per endpoint.

Is this affiliated with GemRate? No. This is an independent, read-only Actor built on top of GemRate's public site. The endpoints are unofficial and may change without notice. Use the extracted data in line with GemRate's Terms of Service and applicable law.

Something looks off / I want a new field or operation. Open an issue on the Actor's Issues tab with the input you used. Custom fields or a tailored version can be added on request.