Methodology & Data Sources
How PullMeter collects prices and calculates rarity tiers, the demand meter, expected value and market movers. Every number on this site traces back to a source listed here.
Data sources
- Card data, images and prices: the Pokémon TCG API (v2), which provides TCGplayer price fields (market, low, mid, high and direct low) per printing, along with an
updatedAtdate. We fetch all cards for the 24 most recent English booster sets on every run. Prices currently reflect the source's update of Oct 15, 2026. - Pull rates: only published, cited samples are used, currently TCGplayer's Scarlet & Violet (8,000+ packs) and 151 (1,500+ packs) pull-rate articles, both updated Feb 27, 2025. Everywhere else, odds are user inputs labeled as assumptions.
- Grading fees: official PSA and CGC pricing pages, checked October 23, 2026. We couldn't verify BGS and SGC fees, so they're user inputs.
- Sports market figures: Sports Illustrated / Card Ladder and Grand View Research.
- Not used (not freely available): grading population (pop) reports, sales volume, search interest, listing counts and sealed product prices. We don't estimate or invent these.
Daily snapshots & market movers
Every build saves data/history/YYYY-MM-DD.json with each card's main-printing market price. Movers compare today's snapshot with the most recent earlier one. Tracking started October 23, 2026 (1 snapshot so far). 7-day and 30-day deltas appear once that much history exists. We never back-fill or estimate past prices.
Rarity tiers
Each card gets one of five tiers: Common, Uncommon, Rare, Ultra-Rare, Grail. They're calculated in three steps from data we actually have:
- Base tier from printed rarity, using the table below.
- Price percentile within its set: the share of priced cards in the same set with a market price at or below this card's. If the card is at or above the 98th percentile and worth at least $20, it becomes Grail. Otherwise, if it's at or above the 90th percentile and its base tier is below Ultra-Rare, it moves up one tier.
- Pull odds (only where cited): for sets with cited odds, per-card odds = rarity rate ÷ number of cards of that rarity. If a card's chance is below 0.5% per pack and it's at or above the 95th price percentile, it becomes Grail. The simulator applies the same rule to the odds you enter, and labels the result as based on your inputs.
Grading population data is not used, because we found no legitimate free API for it. Sports cards: the tier logic is built to work with sports card data (for example base, parallel, numbered and 1/1 cards), but no sports card data is connected yet, so it's coming soon.
| Printed rarity (data source) | Base tier |
|---|---|
| Common | Common |
| Uncommon | Uncommon |
| ACE SPEC Rare | Rare |
| Black White Rare | Rare |
| Double Rare | Rare |
| Futuristic Rare | Rare |
| Pikachu Rare | Rare |
| Rare | Rare |
| Rare Holo | Rare |
| Shiny Rare | Rare |
| Amazing Rare | Ultra-Rare |
| Holo Rare V | Ultra-Rare |
| Holo Rare VMAX | Ultra-Rare |
| Holo Rare VSTAR | Ultra-Rare |
| Hyper Rare | Ultra-Rare |
| Illustration Rare | Ultra-Rare |
| LEGEND | Ultra-Rare |
| MEGA_ATTACK_RARE | Ultra-Rare |
| Mega Hyper Rare | Ultra-Rare |
| Rare BREAK | Ultra-Rare |
| Rare Holo EX | Ultra-Rare |
| Rare Holo GX | Ultra-Rare |
| Rare Holo LV.X | Ultra-Rare |
| Rare Holo ex | Ultra-Rare |
| Rare Prime | Ultra-Rare |
| Rare Secret | Ultra-Rare |
| Rare Ultra | Ultra-Rare |
| Shiny Ultra Rare | Ultra-Rare |
| Special Illustration Rare | Ultra-Rare |
| Ultra Rare | Ultra-Rare |
Rarities not listed here default to Rare.
Demand meter (based on price momentum)
The demand meter is not a sales-volume measure. It uses only signals we actually have:
- Momentum (weight 0.7): % change in market price since the previous snapshot, mapped to 0–1 as
clamp(0.5 + change% ÷ 20). A drop of 10% or more scores 0, a flat price scores 0.5, and a rise of 10% or more scores 1. - Listing floor (weight 0.3): the cheapest current listing compared with the market price,
clamp((low ÷ market − 0.8) ÷ 0.4). When the cheapest listing sits at or above recent sale prices, sellers aren't undercutting, which is a mild sign of demand.
Score = 0.7 × momentum + 0.3 × floor. Low < 0.35 ≤ Medium < 0.6 ≤ High < 0.8 ≤ Hot. Until a card has at least two snapshots, it shows "Not enough data yet." The formula is built to take more inputs, such as sales volume, search interest and listing activity, once we connect sources for them. Their weights would then be rebalanced and documented here.
Expected value (EV)
Hit EV per pack = Σ (cited rate per pack × average market price of cards in that rarity). The simulator adds commons, uncommons, rares and reverse holos using editable pack-structure assumptions, and runs a Monte Carlo simulation to show the full distribution. Cards without a price count as $0.
Limitations
Market prices can lag behind fast moves, may exclude some sales, and reflect raw Near Mint copies. Prices are estimates and may be delayed. This is information only, not financial advice. Spot an error? Contact us, and we'll correct it.