Hours into minutes.
The one number every other figure on the site comes from, worked the way I'd put it in front of a finance committee, because a figure you can't reproduce is a figure nobody has to believe.
Multiply by ten and it's 11½ hours down to 80 minutes: the difference between a weekend and a lunch break, which is what actually changes what I'm willing to buy.
A photograph of a binder page, read and priced.
The hard part was never the arithmetic. It was reading the cards. Sleeves glare, foil nameplates defeat ordinary OCR, and a set code is four characters that decide the price. So the scanner sends the photo to Claude vision, which reads each card’s name, set code and foil treatment, and everything downstream is deterministic.
About three cents of vision per binder page, on Sonnet. Pricing and re-pricing need no key at all, which matters: the expensive step runs once, and every later pass over the same workbook is free.
Scan
Pick the seller’s binder photos and hit Scan. Claude reads name, set code and foil treatment per card, then each card resolves against two databases. Anything uncertain shows in orange for a click rather than guessing quietly.
Export to Excel
Every candidate printing of every card is priced at the lowest verified TCGplayer listing across all five conditions, then written into a workbook with per-row dropdowns and a proof link per row.
The seller corrects it
Picking a different printing or condition updates the price instantly, by formula, with no internet needed. Wrong card entirely? They type the right name or set code into the row. Nothing to install on their end.
Re-price the returned file
Run it again on what comes back: typed corrections re-resolve, broken rows self-heal, every price refreshes to current market, and the seller’s choices survive. The offer block recomputes live.
Exact set code, then a partial code with wildcards, then a garbage code degraded to name search, then a name merge across both databases. A fuzzy name rescue needs 0.8 similarity unless the card’s printed text corroborates it.
A blank row beats a confidently wrong one on a buylist.
YGOPRODeck supplies names, sets and printings, but its per-card set lists lag reality and ship placeholder rarities. A free mirror of TCGplayer’s catalogue is built into a full set-code-and-rarity index, cached a week, and becomes the fallback source of truth whenever the first source is missing or wrong.
Rarity names reconcile across both: apostrophe variants, and one database’s “Prismatic Collector’s Rare” for the other’s “Collector’s Rare.”
Prices come from TCGplayer’s internal listings endpoint, which is unofficial and can break without notice. The repo documents the fix rather than pretending the risk isn’t there.
Each module ships an offline self-test, and a built executable can be verified per dependency before it ever touches a seller’s binder.
The workbook a seller receives is not a quote. It's a model they can argue with.
Pick the printing you actually pulled, set the condition honestly, and the price moves under your hands. Drop a card below the pricepoint and it stops being priced at all. It becomes weight, sold by the thousand.
Watching a card cross that line is the clearest explanation of the pricepoint I have: set Infinite Impermanence to Lightly Played. At $1.15 it is a card. At 98¢ it is bulk.
The live tool reads the lowest verified TCGplayer listing per printing and prices each of the five conditions from its own listing, with no flat ladder. Read the source.