PSA Auction Prices Realized Scraper - Sold Comps avatar

PSA Auction Prices Realized Scraper - Sold Comps

Pricing

Pay per event

Go to Apify Store
PSA Auction Prices Realized Scraper - Sold Comps

PSA Auction Prices Realized Scraper - Sold Comps

Scrape PSA Auction Prices Realized (APR) — sold-comp price data for PSA-graded sports, Pokemon, and TCG cards. Captures price, date, auction house, grade, and sub-grades when available. Card ID schema is joinable with PSA Population data for full scarcity-plus-price analysis.

Pricing

Pay per event

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

4 days ago

Last modified

Share

PSA Auction Prices Realized Scraper

Scrape PSA Auction Prices Realized (APR) — sold-comp price data for PSA-graded sports cards, Pokemon, and trading card games. Returns sale price, date, auction house, grade, cert number, and sub-grades when available.

The output schema is joinable with PSA Population Report data via card_id, enabling full scarcity-plus-price analysis.

What you get

Each record represents one sold lot:

FieldDescription
apr_idUnique PSA APR sale record ID
card_idPSA internal card spec ID (joinable with pop data)
cert_numberPSA cert number of the specific copy sold
categoryCard category (sports / pokemon / tcg / non-sport)
sportSport tag (baseball / basketball / football / etc.)
yearCard year
brandBrand / manufacturer
set_nameSet name
card_numberCard number within the set
player_or_subjectPlayer name or card subject
parallel_or_variantParallel or variant (refractor / autograph variant / etc.)
gradePSA grade label (PSA 10 / PSA 9 / etc.)
grade_numericNumeric grade value
qualifierGrade qualifier flag (OC / PD / MK / etc.)
auction_houseWhere the comp sold (eBay / Goldin / Heritage / PWCC / etc.)
listing_typeListing type (auction / fixed-price / best-offer)
sold_priceFinal sale price
currencySale currency (USD)
sold_atSale timestamp (ISO 8601)
autographTrue if autographed card
memorabiliaTrue if card contains memorabilia (jersey / patch / etc.)
source_urlOriginal auction listing URL
image_urlCard image URL from the APR listing

Sub-grade fields (subgrade_centering, subgrade_corners, subgrade_edges, subgrade_surface) are populated when the Include Sub-Grades option is enabled.

Modes

Search PSA APR by player name, set, or keyword:

{
"mode": "search",
"searchQuery": "mike trout rookie",
"maxItems": 100
}

APR Archive Walk

Walk all APR data by category or sport:

{
"mode": "apr_walk",
"category": "pokemon",
"maxItems": 500
}

Category options: sports, pokemon, tcg, non-sport (blank = all)

Sport filter (within sports category): baseball, basketball, football, hockey, soccer, golf, boxing

Specific Card URLs

Fetch sales data for specific PSA spec pages directly:

{
"mode": "card_urls",
"cardUrls": [
"https://www.psacard.com/spec/psa/887339"
]
}

Filtering options

  • Grade Filter — restrict to a specific grade (e.g. "10", "9", "8.5")
  • Year From / Year To — filter cards by production year
  • Include Sub-Grades — capture centering / edges / corners / surface sub-grades (costs one extra fetch per card)

Joining with PSA Population data

The card_id field is the PSA spec ID — the same identifier used by PSA's pop report. Joining APR output to pop data gives you scarcity context alongside realized prices:

SELECT
apr.card_id,
apr.set_name,
apr.player_or_subject,
apr.grade,
apr.sold_price,
apr.sold_at,
pop.psa_10_count,
pop.total_graded
FROM apr_sales AS apr
JOIN psa_population AS pop
ON apr.card_id = pop.spec_id
AND apr.grade_numeric = 10

Notes

  • PSA APR is behind Cloudflare. The actor uses a residential proxy with Cloudflare bypass — a residential proxy entitlement is required.
  • Sale history is fetched from PSA's JSON API. Each card spec gets a paginated API call.
  • maxItems limits total output records (sale events), not the number of card specs scraped.
  • Default timeout is 4 hours. Large APR archive walks may require extended run time.