Skip to content
PullValue

Methodology

Last reviewed: July 9, 2026 · Applies to every number on this site

Data source and cadence

PullValue indexes Courtyard's public recent-pulls feed every 5 minutes. We record only genuine pack openings (mint events) — marketplace sales and burns are excluded so they cannot distort EV. For each pull we store the card, its grade, its FMV estimate at index time, the best live instant offer we observe, the pack it came from, and the timestamp.

This is a sample, not a census, and the sample is not neutral. The feed returns only its most recent entries — measured, about 50 — and the limit parameter does not extend that. So each visit captures whatever happened in the preceding couple of minutes and nothing before it. Anything that occurred between visits is not delayed, it is gone.

The consequence worth knowing: that window stretches when Courtyard is quiet and shrinks when it is busy, so we systematically under-sample the busiest periods — the drops and rushes most likely to contain unusual pulls. Every figure on this site rests on the pulls we did capture, and the sample size beside each one is the honest count of those. It is not a count of everything that happened.

The formulas

EV = mean FMV of all indexed pulls for a pack. Calibrated EV = the same mean with exponential decay weighting (≈5-day half-life), so recent pulls dominate and pool changes show up quickly. Cash-out EV = calibrated EV × the observed buyback ratio (the mean of live offers ÷ FMV; we default to 0.90 when too few offers are indexed). EV ratio = calibrated EV ÷ pack price. Hit rate = share of pulls ≥ pack price. Median = 50th-percentile pull value. Dilution = share of total pulled value contributed by the top 2% of pulls. Trend = change in hourly-bucketed EV over 7 days.

Verdicts

Rip Advisor scores each pack 0–100 from: net cash-out ROI (dominant), median-to-price ratio, 7-day trend, sample-size confidence, and a dilution penalty. BUY requires a positive net ROI and a score ≥ 65; SKIP triggers below 42 or at net ROI worse than −18%. Below 5 indexed pulls there is no verdict at all. Between 5 and 29 you get an explicitly labelled early read — a lean, never a buy call — because a sample that small can swing hard. The optional AI briefing receives these computed numbers as fixed inputs and explains them; it cannot invent data.

Two gates can remove a BUY that the score earned. A pack that has not qualified as a reliable signal cannot carry one at all. And a BUY has to survive losing its single most influential pull: we recompute the decay-weighted EV with the largest weighted contributor removed, and if the buy case does not clear the price without it, the verdict drops to CAUTION and the score is capped at 64 so the number and the label agree. That is a one-observation jackknife, not a tuned threshold — it is a statement of what BUY has to mean.

Confidence

The 0–100 confidence score is data quality, not a probability of profit. A pack can score 95 and still be a bad buy: the score says we know the numbers well, not that the numbers are flattering. Six components, weighted: sample adequacy (30%), data freshness (20%), source reliability (15%), historical coverage (15%), price reliability (10%), distribution stability (10%).

A component we could not measure is not scored zero. Its weight is redistributed across the components we could measure, so the score always describes what was actually checked. Scoring a missing input as zero would punish a pack for a query we did not run.

Sample adequacy uses the effective sample size, not the raw pull count. The figure it sits beside is a decay-weighted mean, so the honest question is how many pulls that number rests on. We compute Kish's effective sample size — (Σw)² / Σw² over the same exponential weights as the EV itself — and score that. A pack with 186 indexed pulls whose recent weighting concentrates them into an effective 59 is scored, and labelled, on the 59; both numbers are shown wherever they differ. Tier thresholds are unchanged (under 5 effective is insufficient, under 30 is emerging); what changed is that they now apply to the number the score actually describes.

Pool signals & health score

The lifecycle stage is a rule over observables: below 5 pulls we say nothing (no data); 5–29 is a building sample; no pulls for 14+ days is stale data (state unknown); EV up ≥10% in 7 days with recent pulls above lifetime is a recovery signal — never a confirmed restock; recent pulls ≥7% below lifetime on a top-heavy pool after an observed chase left is a chase-drained signal; ±5% drift bounds separate depleting from healthy.

Pool health (0–100) starts at 50 and moves with: cash-out EV ratio (±25), recent-vs-lifetime drift (±15), floor cover (±10), a concentration penalty (up to −10), and observed chase-removal impact (up to −10). The result is then shrunk toward 50 by sample-size and freshness confidence — thin or stale data converges to "we don't know", never to an extreme score.

What this cannot know: remaining inventory, pool manifests, or restocks. The dilution and chase-removal terms measure how dependent the observed average is on rare hits — not what remains in the pool.

Known limitations

Pack prices are set manually (the public feed doesn't include them) and verified against the store. FMV is Courtyard's estimate and can diverge from eBay or TCGplayer prices in either direction — our cash-out and spread metrics exist precisely because sticker FMV isn't an exit price. Observed odds describe the past pool, not a guarantee about the next pack. Shipping costs vary by location and are flagged, not deducted. History-based features (trends, odds shifts) need days of data before they populate.

Corrections

Found a number that looks wrong? Contact us — verified errors are corrected in the pipeline, not papered over, and this page's review date is updated when the methodology changes.

Get instant +EV alerts

Pro · $15.91/mo billed yearly

Start Pro