PSA Population Report Scraper — Set Pop, PSA 10 & Gem Rate
Pricing
from $3.49 / 1,000 psa pop cards
PSA Population Report Scraper — Set Pop, PSA 10 & Gem Rate
Scrape PSA population report by set name or pop URL — a PSA pop API alternative for card flippers. Export per-card grade census, PSA 10 pop, gem rate, and set-monitor deltas as JSON.
Pricing
from $3.49 / 1,000 psa pop cards
Rating
0.0
(0)
Developer
Andrej Kiva
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
a few seconds ago
Last modified
Categories
Share
Disclaimer: Unofficial tool for publicly accessible PSA population data. PSA, Professional Sports Authenticator, and Collectors are trademarks of their owners. Not affiliated with, sponsored by, or endorsed by PSA or Collectors Holdings. For informational, research, aggregation, and market-intelligence use only. Respect applicable terms of use and law.
PSA population report scraper for Pokémon TCG, Topps Chrome, and other graded-card sets. Use it as a PSA pop scraper, PSA pop API alternative, and set census export: paste a pop set URL, a heading ID, or a set name such as Surging Sparks. Dataset rows are one card variety each — PSA 10 pop, PSA 9, full grade ladder, gem rate, and optional monitor deltas. Fast HTTP JSON (GetSetItems) — no login field, no headless browser, no paid PSA Cert API. Call from Python, Node.js, cURL, or Apify MCP.
Built for card flippers who decide whether to submit raw copies, dealers watching gem-rate compression, and scheduled set monitors. The official cert API does not return population; this Actor reads the same public set-census JSON the pop report table uses.
Collectibles suite
| Actor | Focus |
|---|---|
| PSA Population Report Scraper ◄── you are here | Set-level PSA pop census and gem rate |
| Whatnot Listings Scraper | US live-commerce listings and shops |
| eBay Active Listings Scraper | Live eBay BIN / auction asking prices |
| eBay Sold Listings Scraper | Completed eBay sold comps |
| eBay Sold Price Intelligence | Recommended price and demand score |
| Goldin Auctions Scraper | High-end sports cards / TCG hammer + sold |
| PriceCharting Scraper | Guide prices for games, TCG, and comics |
Suite next step: after a set pop census, run eBay Sold Listings Scraper on the same titles for sold comps, then eBay Sold Price Intelligence for a recommended price. For live-show inventory, chain Whatnot Listings Scraper.
When to use this Actor
- You need a PSA population report scraper / PSA pop API alternative that returns flat JSON rows
- You want bulk set pop (every card in Surging Sparks or Topps Chrome), not a single cert paste
- You track PSA 10 pop, gem rate, half-grades, and qualifiers for submit / buy decisions
- You scrape PSA pop with Python, Node.js, or MCP and export JSON / CSV
- You run a daily set monitor and want deltaPop10 / gemRateChange on a schedule
When not to use this Actor
- Single-slab cert verification — this Actor is a set census, not a cert lookup
- Guide prices / sold comps — use PriceCharting Scraper or eBay Sold Listings Scraper
- US live-commerce firehose — use Whatnot Listings Scraper
- Official PSA Public API replacement — cert fields still need PSA's cert API; pop is not in that API
- Buyer PII or submission accounts — public grade counts only
Key features
- Set URLs — paginate every card in a pop heading (full grade ladder)
- Set names —
Surging Sparksand2023 Topps Chromeresolve immediately; other names search public pop URLs - Heading IDs — reuse IDs stored from a previous run
- Gem-rate fields —
pop10,pop9,total,gemRateon every row - Monitor mode — named Key-Value store of previous pops; later scheduled runs attach deltas
- Changed-only option — bill only spec IDs whose pop10 / total / gem rate moved
- Flipper filters — max PSA 10 pop, min/max gem rate, subject / variety contains
- MCP / AI ready — call from assistants via Apify MCP
Input
| Field | Description |
|---|---|
setNames | Set search strings (e.g. Surging Sparks, 2023 Topps Chrome) |
startUrls | PSA pop set page URLs |
headingIds | Numeric heading IDs from the URL |
maxItems | Row cap (default 500; 0 = unlimited). Large Chrome sets can exceed 60k cards |
maxSets | How many URL matches to scrape per set name (default 1) |
isPsaDna | PSA/DNA autograph line instead of standard grades |
includeSetTotal | Emit a set_total row for the set-wide census |
monitorMode | Persist snapshots; attach deltaPop10 / gemRateChange |
emitChangedOnly | With monitor mode, push only cards whose pop moved |
proxyConfiguration | RESIDENTIAL recommended on Apify |
Set URL example:
{"startUrls": [{ "url": "https://www.psacard.com/pop/tcg-cards/2024/pokemon-ssp-en-surging-sparks/285178" }],"maxItems": 500,"includeSetTotal": true,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Named set + daily monitor:
{"setNames": ["Surging Sparks"],"maxItems": 500,"monitorMode": true,"monitorStoreName": "ssp-en-pop","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Output
| Field | Description |
|---|---|
recordType | card or set_total |
specId | PSA spec ID for the card / variety |
cardNumber | Printed number |
subject | Player or Pokémon name |
variety | Reverse Holo, SIR, Refractor, … |
setName / setYear / setCategory | Set metadata from the URL |
headingId / setUrl | Pop heading and canonical set URL |
pop10 / pop9 / pop8 / total | Flattened census |
gemRate | PSA 10 / total |
psaPop | Full ladder (auth through grade10, half-grades, Q) |
deltaPop10 / deltaTotal / gemRateChange | Monitor deltas |
changed | True when pop10, total, or gem rate moved |
scrapedAt | UTC timestamp |
{"recordType": "card","specId": 12168745,"cardNumber": "240","subject": "Hydreigon EX","variety": "Special Illustration Rare","setName": "Pokemon Ssp EN Surging Sparks","setYear": "2024","setCategory": "tcg-cards","headingId": 285178,"pop10": 3334,"pop9": 4610,"total": 8849,"gemRate": 0.376766,"psaPop": {"auth": 1,"grade8": 785,"grade8_5": 20,"grade9": 4610,"grade10": 3334,"total": 8849}}
Use cases
| Use case | What you get |
|---|---|
| Submit / raw buy | PSA 10 pop + gem rate for every card in a hot TCG set |
| Chrome / sports set census | Full grade ladder for Topps Chrome (raise maxItems) |
| Gem-rate compression | Schedule monitorMode and watch deltaPop10 |
| SIR / parallel scarcity | varietyContains + maxPop10 |
| Comps after pop | Chain eBay sold listings on the same subject |
Integration examples
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('crawloop/psa-pop-report-scraper').call({setNames: ['Surging Sparks'],maxItems: 500,monitorMode: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.slice(0, 5));
Python
from apify_client import ApifyClientclient = ApifyClient(token)run = client.actor("crawloop/psa-pop-report-scraper").call(run_input={"startUrls": [{"url": "https://www.psacard.com/pop/tcg-cards/2024/pokemon-ssp-en-surging-sparks/285178"}],"maxItems": 500,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items[:5])
cURL
curl "https://api.apify.com/v2/acts/crawloop~psa-pop-report-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"setNames":["Surging Sparks"],"maxItems":500}'
MCP and AI assistants
Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store ID / name.
Example prompts:
- "Run PSA Population Report Scraper for Surging Sparks and return the 20 lowest gem-rate SIRs as JSON"
- "Scrape 2023 Topps Chrome pop with PSA Population Report Scraper, cap at 500 rows, and summarize PSA 10 vs total"
- "Chain PSA Population Report Scraper then eBay Sold Listings Scraper for Hydreigon EX SIR comps"
FAQ
Does this replace the PSA Cert API?
No. Cert lookup is a different product. Population is not returned by the public cert API. This Actor scrapes set census rows.
Why not one cert number?
A flipper watching Surging Sparks needs every card's gem rate on a schedule. One-cert lookups do not retain. Use monitorMode on the set.
How big is Topps Chrome?
The 2023 baseball Chrome heading is tens of thousands of varieties. Leave maxItems at 500 for a sample, or set 0 only when you want the full dump.
Do I need a PSA login?
The HTML pop pages redirect to Collectors sign-in. This Actor calls the public GetSetItems JSON used by the table, so the input form does not ask for a password.
Related Actors
| Actor | Role |
|---|---|
| Whatnot Listings Scraper | Live-commerce listings and shops |
| eBay Sold Listings Scraper | Marketplace sold comps |
| PriceCharting Scraper | Guide prices, optional POP on product pages |
| Goldin Auctions Scraper | High-end hammer |