Now shipping 1.8.0

Walk into your next card show with a plan, not a hope.

mgz-pkmn turns a list of cards you want into a printable binder with thumbnails, market prices, and your negotiation floor. Built for collectors who'd rather show up informed than wing it on convention center Wi-Fi.

From the maker

Why I built this.

I'm Matt β€” a collector who writes software. mgz-pkmn started with my own binders: I'd map out the collection I wanted, then get the order wrong, miscount, miss a card, and never quite see where the gaps were. What I wanted was one clean list β€” the cards I'm chasing, with current prices β€” to carry into a show and set in front of a vendor.

So I built it, in the hours around a full-time engineering job. Becoming a parent pulled me further into the hobby, not out of it β€” and into the community around it.

It's collector-first, and built by a real collector for real collectors. The market's been pulled around by speculation and big money, and plenty of people got priced out of their own hobby. This is the opposite bet: make Pokemon accessible to everyone β€” whatever your age, budget, or reason for collecting.

It's MIT-licensed and built in the open β€” and yes, there's an Exeggutor or two hiding in it.

Exeggutor, Southern Islands 13
Exeggutor Β· Southern Islands

Everything you need at the table.

One pipeline, three open data sources, every output format that's useful for prepping a card show.

  • Multi-source pricing

    Layered lookup across pokemontcg.io (TCGPlayer + Cardmarket), TCGdex for international cards, and PriceCharting for region-exclusive products. Always negotiating from the same data the seller sees.

  • Built for wishlists

    Bulk syntax like top:5 Charizard cards or all Pikachu prints, inline price filters, language tokens. Describe what you're hunting, not every card name.

  • Negotiation comps

    Every row carries 80, 85, 90, and 95 percent of market. Your floor and ceiling are on the page when you sit down at the table.

  • See what you're hunting

    Thumbnails embedded directly in the spreadsheet and PDF binder. Recognize the right printing across a glass case at ten feet.

  • Print and go

    xlsx with totals and per-tag sections, PDF binder pages (3Γ—3 standard or 6Γ—4 condensed), set-completion checklist, structured JSON report. Take the formats you actually use.

  • Multilingual

    Japanese, Korean, Simplified and Traditional Chinese, German, French, Spanish, Italian, Portuguese, and more β€” automatic fallback when a card isn't indexed in English-only sources.

Three steps from idea to show floor.

Designed for the buyer's workflow first β€” but the same pipeline produces a seller's inventory sheet when you bring binders to the table.

  1. 01

    Write your wishlist

    Plain text. One card per line. Use shortcuts like top 5 Mew | base set under $50 or all charizard cards | japanese β€” the parser does the rest.

  2. 02

    Run the tool

    pkmn lookup input.txt -o cards.xlsx --pdf binder.pdf --checklist checklist.pdf. Or open the web app β€” swipe through cards one at a time, walk a whole set, or paste a wishlist into Search. Same pipeline, no install.

  3. 03

    Walk in informed

    Open the xlsx for live reference, hand the printable binder to the vendor, tick cards off the checklist as you find them. Negotiate from facts.

What you actually walk out with.

Every run produces the same three artifacts β€” pick the format that fits the moment. Screenshots below are rendered from the tracked sample outputs in output/.

Screenshot of the generated cards.xlsx workbook showing card rows with thumbnails, set, number, market price, comparison columns, and a totals row.

Spreadsheet

cards.xlsx

Per-tag sections, thumbnails inline, market price and your 80 / 85 / 90 / 95 % comps on every row β€” with a totals row at the bottom.

  • Screenshot of a single page from the generated binder.pdf showing a 3Γ—3 grid of PokΓ©mon TCG cards with prices.

    Binder PDF

    binder.pdf

    Printable 3Γ—3 binder page β€” thumb, set, number, price. Hand it across the table.

  • Screenshot of a single page from the generated checklist.pdf listing cards by set with checkbox marks.

    Checklist PDF

    checklist.pdf

    Tick boxes by set, in collector-number order. Drop it in your binder and shop.

For vendors & shops

Run a shop or a table at shows?

Right now mgz-pkmn is built for collectors β€” there's no vendor or storefront tooling yet, and I haven't started any. Before I build something nobody asked for, I'm trying to learn whether it's wanted at all. If you sell cards and a tool like this would help your booth or shop, I'd genuinely like to hear from you. Nothing's built β€” this is just me asking.

Tell me you're interested

Where it's going.

Roadmap organized by area β€” lookup, outputs, cache, web, devops. Speculative ideas live in the full roadmap; the committed work is below.

  • 1.7 β€” Shipped

    Collector-facing web surfaces: swipe triage, browse-a-set, saved searches, wishlists, collections, and printable binders.

    View milestone β†’
  • 1.8 β€” In flight

    Make it honest β€” every surface that explains the app brought back in sync with what it ships, plus the first end-to-end smoke tests and a collector-facing front door.

    View milestone β†’
  • 1.9 β€” Next up

    Web workspace rethink: a real library identity (saved searches vs. wishlists vs. collections), a mobile-first IA, and export / filter / pricing-column upgrades.

    View milestone β†’

Full roadmap (the committed minors plus the speculative Backlog) lives in the repo.

Recently shipped.

The last few releases at a glance β€” straight from the changelog.

Full changelog β†’
  1. v1.8.0

    Added
    • Web: The app now opens on Swipe, the gentlest way in for a collector (#792, #813, #814). The discovery bar reads Swipe β†’ Browse β†’ Search and opens on Swipe by default, Swipe picked up a card-deck icon to match the stack you flip through, and the Help modal was rebuilt around a plain-language intro and a real sample card that points newcomers to Swipe first β€” with an accuracy pass over Browse's By PokΓ©dex # view, the one-tap Want / Own quick actions, and the eBay-comps / hide-owned / lookup-timer settings.
    • Web: The guided Tour drives the app through every surface instead of narrating it (#317, #824). As it advances the Tour switches discovery modes live (Swipe β†’ Browse β†’ Search), opens a self-contained sample card-detail modal with working ←/β†’ navigation and the Want / Own quick actions, and points at the Backpack's Binders, Searches, and Recent β€” adapting from 8 steps signed out to 10 signed in and restoring the visitor's starting mode when it closes.
    • API + Site: A reason-branched welcome drip on Resend (#821, #825, #826, #827). The marketing signup now asks why you're here β€” Collector, Show prep, or Builder β€” and POST /api/v1/subscribe creates a Resend contact and fires a New Signup event so a three-email track tailored to that reason begins, consolidating email onto the vendor that already relays magic links and retiring the paid Buttondown drip (ADR-0028 supersedes ADR-0014).
    Changed
    • Docs: The collections, wishlists, and roadmap docs were brought back in line with the shipped app (#793, #802, #818). The collections and wishlists guides now describe the one-tap Own / Want quick actions, the Backpack's Binders tab, and the New β–Ύ create menus instead of the retired bookmark/heart picker, and the roadmap tracks the current v1.x cadence β€” the v1.10–v1.15 themed minors and the Backlog pool β€” with no committed v2.
    Fixed
    • Site: The Buy Me a Coffee greeting shows once per session, not on every page (#822, #823). The floating widget no longer re-opens its "thanks for stopping by" bubble on every navigation across the multi-page site; a one-time greeting gated on a session flag replaces the auto-open, and clicking it still opens the panel.
  2. v1.7.0

    Added
    • Web + API: One-tap Want / Own quick actions save a card to your defaults with no setup (#763, #766, #767, #771, #782, #756, closes #759, #760). Every account now gets a default wishlist and a default personal collection provisioned automatically, so marking a card wanted or owned from search, browse, or swipe is a single tap. The multi-select bar switched to the same Want / Own toggles, owning a card clears its active want by default, and Browse's create entry points line up with the owned/chasing model. ADR-0027 records the direction.
    • Web + API: Binders became first-class inventory containers (#705, #680, #719, #695, #721, #775, #777). Binders now model and present owned cards through a unified create/edit modal with physical-binder identity, a cover-color picker, set-name autocomplete with quick binder-create from Browse, a New menu that files collections into binders, smart collections backed by a shared binder-filing picker, and wishlists that file into binders too.
    • Web: Collection and wishlist detail views grew real management tools (#709, #731, #778, #783, #784, #785, #779, #780, #718, #753, closes #723, #772). Open a collection to view its cards in a collection-aware detail modal with save actions and ownership badges, edit owned quantity per card, add or remove a card from a specific list inline, see which collection or wishlist is the default, bring search's export options into the detail views, view a card's library locations, delete a saved search, and rely on one unified delete affordance across the library.
    +6 more in the changelog β†’
    Changed
    • API: Bulk lookups run with bounded concurrency and cancel cleanly on disconnect (#674, #675, #673). The /bulk SSE endpoint now runs lookups with bounded concurrency, cancels queued work when the client disconnects while keeping SPA progress monotonic, and memoizes the upstream session per API key to keep connections warm.
    Fixed
    • Web: Collection prices track owned quantity (#791). Each row shows a per-row line total so a collection's value reflects how many copies you own.
    • Web: Clearer card-detail save actions and pickers (#748, #733, closes #732). Card-detail save actions read more clearly, and smart collections are hidden from the save/promote pickers where they can't be written to.
    • Web: Consistent library symbols and naming (#619, #706). The library symbol system is aligned across surfaces, and the Library panel is renamed "Backpack" to match its icon.
    +2 more in the changelog β†’
  3. v1.6.1

    Fixed
    • DevOps: Release pipeline now tags and publishes version-bump PRs reliably (#652, closes #651). Dropped the post-publish step that attached the build to the GitHub Release β€” it fails under immutable releases and was blocking the milestone close and marketing-site rebuild β€” and the release process no longer overwrites the release-please PR body, which had stopped v1.6.0 from tagging and publishing to PyPI.

Newsletter

Get the next release in your inbox.

Tell us why you're here and we'll send a short welcome that fits β€” then the odd note when a new version ships. No spam, unsubscribe anytime.

I'm here as a…