RivalRetail identifies sports cards and Pokémon cards from a single photo — set, number, parallel, even the slab and grade — and shows real sale comps, not guesses. Raw card? Pre-grade it before you pay to submit it.
Free plan · 25 scans a month · no card required · already a customer? Log in
An actual scan. One photo, 438 ms.
Snap the card with your phone, or upload a photo. Raw cards, slabs, holos, parallels — straight-on and well-lit is all it asks.
The scan reads the card itself: name, set, number, year, rarity — plus the parallel (1st Edition, refractors) and the grading label if it's slabbed.
You get comps from real completed sales, matched to that exact version — a PSA 10 1st Edition is not priced like a raw unlimited, and we never pretend it is.
Submitting a raw card for grading costs money and takes weeks. Photograph it here first and get an estimate in about 20 seconds — corners, edges, surface and centering scored separately, then a final grade and condition.
You get back the same annotated image the vision model works from: every corner and edge marked with its own score, so you can see why it landed where it did instead of taking a number on faith.
Works on any card — you don't have to add it to your collection first.
Try pre-gradingA real pre-grade, from one photo.
An estimate — not a guarantee of what PSA/BGS/CGC would assign.
Everything the scanner does, your code can do. Send a photo, get structured JSON back: identification, parallel, grading, and a priced comp — one request.
Pre-grading is an endpoint too — POST /gradings takes a photo and returns
sub-grades and a final grade. Build any of it into your shop's intake flow, a show-floor
tool, or your own app. Keys are per-account with plan-based limits, so you always know
your spend.
curl -X POST https://api.rivalretail.com/scan \ -H "X-API-Key: your_key" \ -F "file=@card.jpg" # → { "identified": { "name": "Raichu", "set_name": "Fossil", "parallel": {"name": "1st Edition"}, "grading": {"company": {"name": "PSA"}, "grade": {"value": "10"}} }, "price": { "price_cents": 60000, "grade": "PSA10", "comps": […real sales…] } } # raw card? pre-grade it the same way curl -X POST https://api.rivalretail.com/gradings \ -H "X-API-Key: your_key" -F "file=@raw.jpg" # → {"grading_id": 12} ...then poll: # GET /gradings/12 # → {"status": "done", "final_grade": 8.0, # "condition_label": "Near Mint", …}