MetaStack / Case 02 of 03 The card scanner / Priced against doing it by hand

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.

Source on GitHub ↗
01The claim, worked Pricing one hundred cards
Step
By hand
With the scanner
Price the card · 20s × 100
33m 20s
Log it in Excel · 20s × 100
33m 20s
Build the offer
2m 00s
Scanner processing
3m 00s
Audit sweep
5m 00s
Total
68m 40s
8m 00s
0%
Of the time removed
8.6×
Faster per hundred cards
0m 40s
Saved per hundred

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.

02How it works Claude vision · two catalogues · Excel

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.

1 Machine

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.

2 Machine

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.

3 Human

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.

4 Machine

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.

Resolution, layered

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.

Two catalogues, one index

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.”

Said plainly

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.

03The offer block Two cells decide the offer

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.

Sample binder · five priced cards, plus 908 already sorted to bulk Change a cell, the offer recomputes
Bulk totals by tier in the real workbook: commons, rares and bulk-binder foils at $5 per thousand, everything else at $30 per thousand.
Priced cards
Sorted to bulk
Card value at market
What the seller is offered

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.

← What runs the store Next: Eleven cents, every order →
← Home matt@matthewbraner.com © 2026 Matthew Braner