The pipeline
Every 30 minutes our scanner does this:
- Pulls active listings from eBay's Browse API for cards on our watch list
- Filters out wrong-set / wrong-grade matches using title parsing
- Looks up our internal market value for each (cardId, grade) tuple
- Computes margin:
marketValue − listingPrice − estimatedFees - Writes a row to
EbayDealfor anything with positive margin - Marks listings inactive when they end or 404
What "market value" means
For PSA 10 we use the 30-day median of recent eBay sold listings. When we have ≥ 8 sold rows in our cache, we use that. When we have fewer, we estimate as raw market × grade multiplier (8× for PSA 10 — see the grade multipliers article).
The lightbox always tells you which source is being used — green "eBay Sold · N sales" badge means real data; amber "Est." means we're using the multiplier.
Why deals don't refresh instantly
Vercel cron runs every 30 minutes. We can't poll eBay continuously (rate-limited at ~5000 req/day), so 30 min is the practical floor. Pro plan users see the latest 30-min snapshot; Free plan refreshes every 6 hours.
What's NOT in the Sniper
- Raw cards — we don't surface raw deals because raw pricing is noisy and our deal criteria require a reliable market median
- Bulk lots — we filter these out aggressively because the title parser can't decide which card is being valued
- International listings — US eBay only right now