GemRate Card Grading Population & Sales Data Scraper
Pricing
from $8.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
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
- Click Try for free / Start.
- In the Input tab, choose an Operation (e.g. Search cards by name, Top graded cards, Card population trend).
- Fill in the parameters that operation needs — every field's description notes which operations use it.
- (Optional) Add a text filter (contains) or a limit, and confirm the proxy.
- 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 agemrate_idfrom the results, then run Card grading details with it for the full per-grader breakdown.
What you can pull (operations)
| Operation | What you get | Key parameters |
|---|---|---|
| Search cards by name | Up to 10 matching cards across all graders | query |
| Search sets by name | Up to 10 matching sets | query |
| Card grading details | Full per-grader grade breakdown for one card | gemrateId |
| Set breakdowns | Every set for a grader / category / year, with gem rates | grader, category, year |
| Cards in a set | Every card in a set with individual gem rates and growth | grader, category, year, setName |
| Top graded cards | The Top 100 / 500 / 1000 most-graded cards | grader, category, count |
| Player / subject cards | All graded cards for a player or character | grader, category, playerName |
| Card population trend | A single card's graded population over time | grader, category, year, setName, playerName |
| Set population trend | A whole set's graded population over time | grader, category, year, setName |
| Historical replay | A set's grading data as it stood on a past date | grader, category, year, setName, date |
| Dashboard datasets | GemRate homepage grading trends and stats | dashboardDataset (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.
| Field | Type | Used by | Description |
|---|---|---|---|
operation | string | required | Which dataset to pull (see the operations table above). |
query | string | search, search-sets | Card or set name, e.g. Michael Jordan, Charizard, Topps Chrome 2024. Returns up to 10 matches. |
gemrateId | string | card-details | A card's gemrate_id from search results. |
grader | string | set/player/trend/replay/top-cards | psa, bgs, sgc, or cgc. Default psa. |
category | string | set-details, items, top-cards, player, trend, replay | Card category (see list above). |
year | string | set-details, items, trend, set-trend, replay | Set year, e.g. 2024. |
setName | string | items, trend, set-trend, replay | Set name exactly as GemRate shows it, e.g. Topps Chrome. |
playerName | string | player, trend | Player/subject (player op) or the card's name (trend op). |
parallel | string | trend | Parallel for the trend card, e.g. Base, Holo. Must match for cards that have parallels. |
cardNumber | string | trend | Card number, to disambiguate same-named cards. |
count | string | top-cards | 100, 500, or 1000. Default 100. |
date | string | replay | YYYY-MM-DD — the date to replay a set's data as of. |
dashboardDataset | string | dashboard | Homepage table to return; blank = grading_data. Full payload (all tables) also saved to the key-value store. |
search | string | list operations | Post-filter: keep only rows whose text contains this string (case-insensitive). |
limit | integer | list operations | Cap the number of rows returned. 0 = no limit. |
proxyConfiguration | object | all | Proxy 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):
| Field | Description |
|---|---|
operation | Which operation produced the row. |
name, description | Card / player / set name and full description. |
gemrate_id | GemRate's ID for a card (feed it into Card grading details). |
grader, matched_grader | Grading company for the row. |
category, year, set_name, parallel, card_number | Identifiers for the card / set. |
total, gems, gem_rate | Set-level total graded, gem count, and gem rate. |
card_total_grades, card_gems, card_gem_rate | Card-level total graded, gem count, and gem rate. |
total_population, population_type | Combined cross-grader population (search / card-details). |
rank | Rank within the Iconic Tracker. |
date | Date for trend / replay rows. |
scrapedAt | When 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_id→ Card grading details for the full per-grader breakdown. - Population trends need exact inputs: for Card population trend,
setName,parallel, andcardNumbermust 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.