Dependency-light MTG collection tracker

I collect painted cardboard, so I built a dependency-light MTG tracker with AI instead of trusting another collection SaaS.

BY ERIC REICHESystems, automation, and deliberate friction

Moin.

I built an MTG collection tracker because apparently a spreadsheet needed infrastructure

Yes, I collect cardboard painted with images from some of my favourite pieces of entertainment. This is a perfectly normal thing to spend time and money on, and I will not be taking questions at this time.

I wanted to keep track of my Magic collection without handing the whole thing over to yet another card-collection SaaS. You know the deal: make an account, import your cards, hope the company stays alive, then pay somebody a monthly fee for the privilege of looking at your own cardboard.

So I made a small Node script that writes the collection into Google Sheets instead:

mtgfetcher on GitHub

It pulls card data and images, creates one tab per set, gives me checkboxes for cards I own, and rebuilds a dashboard for what is still missing. That is enough. The spreadsheet is readable without the script, the script is readable without a cloud platform, and if I stop caring about it for six months, nothing starts sending me “we miss you” emails.

The dependency budget

The point was not to build a replacement for every existing collection site. Those already exist, and some of them are good, but most just feel too clunky and inconvenient to really keep up to date.

I wanted the boring parts to have as few dependencies as possible:

  • card data comes from Scryfall
  • standalone Art and Scene Cards come from Wizards’ official gallery when Scryfall does not have them
  • EUR prices come from Cardmarket’s public downloadable feeds
  • the actual collection lives in a Google Spreadsheet
  • the code is a plain Node script, not a hosted service with an exciting funding round and a customer-success department

Google Sheets is still Google, obviously. I am trying to de-Google my life, not pretending I have already escaped the blast radius. But I already use Sheets, it is convenient on the phone, and it makes the tracker useful right now instead of becoming another six-month self-hosting project.

An .xlsx export is probably next. Then the data can leave Google Sheets without requiring a ceremonial migration weekend and three emergency coffees.

Why this became more stupidly specific than planned

The Hobbit release has regular cards, Art Cards, and Scene Cards. The regular cards are straightforward enough. The other two are not consistently represented by the normal card-data sources.

So the tracker has separate tabs for 54 Art Cards and 12 Scene Cards. The Scene Cards also get an image-only tab, three per row, because looking at twelve vertical fragments in a normal table is a good way to forget that they are meant to form scenes.

The pricing is similarly pragmatic. Cardmarket exposes public product and price-guide downloads, so the script uses those instead of scraping product pages or requiring API credentials. It pulls the feed once per run and reuses it. Downloading tens of megabytes twice because there are two tabs would have been a very authentic enterprise integration experience, but no.

Yes, I built it with AI

I used AI heavily for this. Not in the “I asked it for a generic todo app and declared victory” sense. I used it to write and test code, chase down pagination weirdness, map the official Wizards gallery, deal with Cardmarket naming differences, and keep the documentation from turning into a pile of tribal knowledge.

It was useful because the task had a lot of irritating little edges that do not deserve a human evening: a CSV continuation suddenly returning JSON, uppercase versus lowercase set codes silently breaking checkbox restoration, a Wizards page changing its bundle names, and the usual public-data-source nonsense.

The AI did not magically know any of that. It still needed real inputs, tests, source checks, and somebody to notice when a spreadsheet full of unticked boxes would be a bad outcome. I am that somebody. Mostly.

Prerequisites

You need to be comfortable typing stuff into a terminal and be able to figure out how to install Node.js. That is the whole list.

If that sounds hostile, it is not meant to be. I am just not trying to turn this into a hosted product with a setup wizard, telemetry, and a helpful chatbot asking whether I would like to upgrade. The README covers the Google access step and the config. The rest is ordinary “clone repository, install dependency, run script” work.

If you want one

The repository has setup instructions, Google OAuth notes, and a complete Hobbit example with the Art Cards, Scene Cards, Cardmarket EUR prices, and scene-image grid:

github.com/EricReiche/mtgfetcher

If you use a different set with weird extras, find a broken card match, or have a better way to keep the dependency budget low, open a thread on GitHub. I am open to making this more useful, as long as the solution does not end with “just run Kubernetes.”