The PokeTop10 Founder Story — How a Spreadsheet Became a Pokémon TCG Analytics Platform
PokeTop10 was built by Sean LeBlanc, a software developer who became an active Pokémon TCG investor in late 2022 and quickly discovered that the existing tools — eBay search, YouTube channels, hobby forums, and aggregator sites — gave inconsistent, often contradictory price signals. This article describes how the platform came into being, the specific data problems it was built to solve, and the editorial principles that guide its development.
The first card that started it
Late 2022. A trip to a Target during a slow afternoon turned into an impulse purchase: a Crown Zenith Elite Trainer Box at the trading-card aisle, the first Pokémon product Sean had bought in over twenty years. The price was about $50. The intent was nostalgia, not investment.
The ETB opened on a kitchen counter. Crown Zenith ETBs guarantee a Lucario VSTAR promo (the SWSH291 stamp version), so that one was expected. The pull that turned curiosity into obsession came from the booster packs themselves — a Mewtwo VSTAR Galarian Gallery (GG44/GG70), a Special Illustration Rare alt-art from the Galarian Gallery secret-rare subset. Not the iconic GG70 Charizard VSTAR chase, just a beautifully composed alt-art with the kind of background lighting that holds attention longer than expected. That night turned into a research session: looking up what other ETBs cost, watching opening videos, finding out that Crown Zenith was already trending up off MSRP, and finding out the set had been released only a few months earlier and was already getting hard to find at retail.
By the next weekend, Sean had bought a sealed Crown Zenith booster bundle, an Astral Radiance ETB, and started reading every Pokémon-investing forum thread available. Three weeks after that, roughly forty hours of YouTube content from various Pokémon "investment" channels had been consumed. By the end of the first month, a serious problem had crystallized: investment decisions were being made based on those YouTube videos, with no way to tell whether any of the advice was actually working.
Why the YouTube hype didn't hold up
The Pokémon investing YouTube ecosystem in late 2022 was a strange beast. There were genuinely thoughtful channels — and there were channels that were, in retrospect, obviously running pump-and-dump on their own holdings. The disturbing thing was that on the surface, the two were indistinguishable. Both used the same framing: charts, "analysis," confident predictions about which sets would be "the next Evolving Skies." Both pointed at sealed products and said "buy this."
The first signal that something was off: a channel pumped a specific tin in three videos over a week, the price climbed 40%, and then the same channel pivoted to a different product the following week — never with any acknowledgment of whether their previous calls had paid off, never with any track record. It was advice in a vacuum, accountability-free.
The second signal: "Pokémon investing" advice had almost no losers in it. If everything was going up, fine. But by mid-2023 several products YouTubers had been recommending hard in 2021-2022 were down 40-60% from their peaks, and somehow no one talked about it. The Hidden Fates "reprint scare" had cratered sealed prices for that product in early 2023, and channels who had recommended Hidden Fates as a "lock" simply stopped mentioning it. Cards that had been "must-buys" at $200 were $90 a year later, and the channels that called the buys never circled back.
To be fair, not everyone in the space was dishonest — many were and are sincere collectors who just got caught up in a bull run. But the gap between confident predictions and any kind of accountability was enormous. There was no Bloomberg for this market. No place to go and just see the data, without an angle, without someone trying to sell on what to do with it. The only way to fill the gap was to build the missing infrastructure.
The first version was a spreadsheet
The earliest version of what eventually became PokeTop10 was a Google Sheet with about thirty rows. Each row was a sealed product owned or being tracked. The columns were: name, set, MSRP, current price, 7-day change, 30-day change, cost basis, gain/loss. Sunday updates were manual: check eBay sold listings, pick what looked like a fair median, type it in.
The spreadsheet was useful for about two months. Then it started becoming painful. More products got added. Single-card tracking crept in. Some weeks the update got skipped because it was a forty-minute chore. The numbers being typed in were inconsistent because eBay sold listings include scams, joke listings, bundles, opened products listed as "sealed," and statistical outliers in both directions. Two consecutive Sundays could give wildly different "median sold" prices for the same product depending on which listings happened to be sampled.
Sean's background as a developer made the next step obvious: solving the same data-collection problem every week and getting worse at it as the dataset grew was a software problem, not a discipline problem. Code arrived in early 2023. The very first version was a Python script that scraped eBay sold listings for a fixed list of products and dumped the results to a CSV. That ran for a week before it became obvious that real data sources were needed, not scraping. eBay has a Browse API for active listings; an API key was straightforward. PokemonTCG.io had a public API for card metadata. JustTCG eventually emerged as the right primary source for single-card pricing — after a few competitors were tried and rejected because their data was either thin, locked behind expensive enterprise tiers, or worse than what could be computed independently.
By the summer of 2023 the spreadsheet was retired. The Python script had grown into a Cloudflare Worker. A tiny static HTML page rendered a top-10 winners and losers table — that's where the "PokeTop10" name came from. Sean was the only user. The site got checked every morning over coffee.
The data-quality lessons that shaped the methodology
The data-quality problem turned out to be enormous. There had been a vague sense that eBay listings included junk; the actual scale was a surprise. Examples that came up in the first six months:
- Sealed listings that weren't sealed. Booster Box listings where the photos clearly showed an opened, resealed product. Sometimes sellers didn't even bother — they used the word "sealed" in the title because it boosted search ranking.
- Bundle listings priced as singles. A "Crown Zenith ETB" listing for $400 that, on closer inspection, was three ETBs sold together. The eBay API doesn't distinguish, so naive averaging would pull this in as a single ETB price and triple the apparent value of the product.
- Wrong-product listings. Sellers using popular search keywords in titles for unrelated products. "Pokémon Crown Zenith collection lot" returning a $25 listing of fifty random commons.
- Joke listings. A booster box listed at $99,999 by someone who clearly didn't intend to sell it. These don't usually transact, but they pollute the active-listing data and skew automated pricing.
The trimmed-mean methodology now used everywhere came directly from these problems. Instead of taking a simple average of recent sold listings, the system computes a 5th-to-95th percentile range, drops everything outside it, and averages what's left. That alone removed about 80% of the obvious garbage. Keyword filters were added next — listings with words like "opened," "empty," "wrapper," "no cards," "sleeve," "joke," "test" get dropped before the percentile filter even runs. The resulting prices are much closer to what a buyer or seller would actually transact at in normal conditions. They're not perfect — no aggregated price ever is — but they're honest, and they're auditable.
The single-card pricing problem was harder. PokemonTCG.io served as the primary card price source for about a month before being abandoned because their pricing tiers conflate Near Mint and Lightly Played in ways that produced systematically wrong results for cards where condition matters. JustTCG has a strict NM-condition policy that turned out to match how serious collectors actually price cards, so it took over as the primary card-pricing source. eBay Browse remains the secondary cross-check for sealed product specifically — JustTCG handles English and Japanese singles cleanly, but eBay is still the ground truth for booster boxes, ETBs, and other physical sealed product where condition variance can be huge.
API rate limits were the next lesson. eBay's Browse API gives a generous monthly quota, but it's not unlimited. The quota got burned through twice in the first three months by inefficient queries. Batching, caching, and intentional scan-timing emerged as operational disciplines. The current architecture has multiple daily cron triggers — full snapshots at 04:00 UTC and 16:00 UTC plus quick refreshes at 09:00, 14:00, and 23:00 UTC — that together stay well within the API limits while covering the catalog at the cadence the data actually needs. That's the kind of operational detail that doesn't make for a good marketing page but is the actual difference between a tool that works reliably and one that breaks every other day.
The signals came from frustration
The proprietary signals — Trend Score, Breakout Radar, CSIS, Set Heat Index — were not on any roadmap. They came out of specific problems that kept recurring during day-to-day use of the tool.
Trend Score happened because comparing two cards that were each "up" by similar percentages over 30 days gave no useful signal about which was the better setup. Raw percentage change wasn't enough because it didn't account for volatility, where the price was in its historical range, or what supply was doing. The composite score detailed in the methodology guide emerged as the answer. The first version was bad. The second version was worse. The third version started actually working when the volatility adjustment got added, because that filtered out the junk-tier cards that swing 30% on a normal week and were dominating the "top movers" list with noise.
CSIS — the sealed grading score — happened because there was no way to rank a $130 ETB and a $750 booster box on the same scale. They're answering different questions about the market, but for a buyer trying to decide "across all sealed products, which is most interesting right now," a unified score was missing. Pure percentage change wouldn't do it; absolute price wouldn't do it. A normalized score was needed that accounted for value (where the price sits in its all-time and 30-day range), momentum (weighted blend of 7-day and 30-day moves), supply (out-of-print proximity weighted heaviest), risk (volatility), and significance (absolute dollar magnitude of recent moves). The implementation is a percentile-rank composite — each product type ranked independently, with weights summing to one. Letter grades A through F overlay the percentile bins. The full formula and weighting table live in the methodology guide.
Breakout Radar happened because cards that were obviously about to move kept being missed. A card on Tuesday with a Trend Score of 65 would seem boring, then hit 85 by Friday. The pattern was always the same: acceleration was the leading indicator, not the level itself. Cards going from 40 to 70 over two weeks were better setups than cards sitting at 80 for two months. So the model got built to look for the acceleration signature alongside six other inputs — volatility compression, price near 30-day resistance, consecutive positive timeframes, coiled-spring near all-time low, cross-set correlation when other cards in the same set are trending up, and a Google Trends component when the SerpAPI key is configured. It filters out cards under $5 as noise, awards points across those signals, and publishes the daily top 20. The full input list is documented in the methodology guide.
The signals have been wrong, and that's part of the methodology
The signals are not perfect. Several specific instances illustrate where they failed and what changed in response:
The Hidden Fates reprint scare of 2023. Hidden Fates ETBs were one of Sean's early sealed positions. They were OOP, the price had been climbing, the early Trend Score was strong, and at the time of the position add they were trading around $200. Then in February-March 2023 a credible reprint rumor circulated, the price tanked roughly 30% in a few weeks, and the position bled while the signals couldn't see the rumor. CSIS would have flagged the Risk dimension if it had existed yet; it didn't. The position eventually recovered, but the lesson was clear: quantitative signals don't see news. Qualitative checks needed to be built into the workflow alongside.
The high-Trend-Score card that fell 40%. Sometime in mid-2024 a Special Illustration Rare with a Trend Score of 92 — about as high as the metric goes — appeared in the daily candidate list. Strong momentum, strong volume signal, strong position in range. A position got added. About a month later, Pokémon Company announced a new set release that significantly diluted demand for that character archetype, and the card dropped 40% in six weeks. The signal had no way to see the announcement. The position got held — it eventually recovered most of the loss — but the experience underlined how much qualitative homework still matters even when the quantitative score is screaming buy.
The breakout that didn't. Breakout Radar was trusted early in its life before validation data existed. Top-3 candidates would be acted on the same day they appeared. The hit rate, when finally measured carefully, was better than random — but only by a measurable margin, not a huge one. The validation infrastructure now lives in a D1 database table that records every prediction and compares it against actual subsequent prices at 7-day and 30-day windows, with an "expected value vs random baseline" calculation rolling continuously. The rate that matters is the one over the most recent 90 days, and it varies with the broader Pokémon market regime — better in uptrends, worse in corrections. Treating it as a fixed number was always wrong. Position sizing on an unvalidated signal is a lesson learned the hard way.
Why this is free
The most common question is some version of "what's the catch." The honest answer: there isn't one. PokeTop10's analytics — Trend Score, Breakout Radar, CSIS, Set Heat Index, the dashboard, the card explorer, the sealed explorer, the basic portfolio tracker — are free and will stay free. The site is supported by affiliate revenue: when readers click through to TCGPlayer or eBay from the site's links and buy something, PokeTop10 earns a small commission at no cost to the buyer. That commission funds the API quotas, the Cloudflare bills, ongoing development time, and continuing data work.
The only paid features are operational scaling for power users — Pro tier ($3.99/month) gives unlimited card scans (free is 30/month), unlimited price alerts (free is 3), CSV export, and a few other quality-of-life features for collectors with large portfolios. That's it. There's no paywall on the analytics. There's no "premium" Trend Score. The signals on the dashboard are the same signals Pro subscribers see. Gating the analytics has been considered repeatedly and rejected each time — the analytics are the thing that most needs to be used, and putting a paywall on them would defeat the entire reason the site exists.
The commitment behind the platform is that data integrity comes ahead of commercial considerations. Affiliate links don't influence which products show up on the dashboard. PokeTop10 doesn't take payment from anyone for placement. Sealed products are ranked by CSIS regardless of whether they have an active TCGPlayer affiliate. If a Breakout candidate looks off, readers are encouraged to push back via contact; the math is auditable. One annoyed user who got an honest answer is better than a thousand happy ones who got a fluffed one.
What's next
The roadmap as of April 2026:
- PokeFolio v2 features — variant tracking (different print runs, different printings of the same card), grading status (raw vs PSA 9 vs PSA 10), and per-card cost basis with proper FIFO lot accounting. The current portfolio is good for casual collectors; the goal is for it to be defensible for someone with a real five-figure collection.
- Investor tier — a $6.99/month tier with Alpha Attribution (which holdings actually drove a portfolio's returns versus just riding the market), Concentration Risk warnings, a Backtester for testing strategies against historical data, Rotation Radar for sealed product cycle analysis, and an Insurance PDF export for high-value collections.
- More long-form analysis — set retrospectives like the one recently published on Evolving Skies, era-level breakdowns, periodic state-of-the-market posts. The signals show what's happening; the writing explains why.
- Transparent backtest results — published periodically, showing how Breakout Radar's hit rate is tracking, how top-grade CSIS products have performed quarter-over-quarter, where the signals have failed, and what got changed in response.
An invitation to use the tools and push back
For readers who have made it this far: the tools were built for exactly this kind of careful, skeptical user. Try the portfolio tracker. Browse the Sealed Explorer with skepticism and the Card Explorer with curiosity. Read the methodology before trusting any number on the site, and report when something looks wrong.
Every email that comes through contact gets read. If a bug, a price that looks off, a feature that ought to exist, or a signal that fired and then failed in a way worth flagging surfaces during use — write in. PokeTop10 is better than it was a year ago because users wrote in. It will be better than it is today for the same reason.
The original spreadsheet is still in a folder on Google Drive somewhere. About 30 rows of Crown Zenith and Astral Radiance products from late 2022, with prices that are now wildly out of date, manually typed by a developer trying to figure out what he was doing. Everything that has followed has been an attempt to do better than that. The work continues.
← Back to All Guides