About MTG-ATX

This is a free, local-first search engine for trading-card inventory across Austin-area game stores — singles, sealed boxes, accessories, and more, in one place.

Why I built it

I was annoyed I couldn't find singles easily across local sites where I wanted to support local mtg stores. I also was trying to find lord of the ring sidewinders, and couldn't!

Our anti-scalping philosophy

This tool exists to connect players with real local inventory at the store’s own price — not to help anyone snipe and flip. We always link straight to the store so you buy from them directly; we don’t mark anything up, take a cut, or run a marketplace. We surface what’s actually on the shelf so the cards end up in decks, and so local shops get the sale instead of a reseller. National prices (Mana Pool, TCGplayer) are shown only as a fair reference point.

FAQ

Why can't I add all items to a cart for some stores?
It depends on the store’s website. Stores on Shopify support a one-click link that drops your whole list into their cart at once, so you’ll see an “Add all to cart” button for them. Other platforms don’t offer that: WooCommerce stores can only add one item at a time (so you get a “+ Cart” link per card), and Square and TCGplayer Pro stores have no add-to-cart link at all, so we send you straight to the product page. It’s a limitation of each store’s e-commerce platform, not a bug on our end.
Why do some cards show only a “View” link instead of an add-to-cart button?
Those listings come from a store’s TCGplayer Pro or Square storefront, which don’t expose a way to add a card to the cart from outside their site. The “View” link opens that exact product page, where you can add it to the cart there. (A single store can even use two platforms at once — e.g. Shopify for sealed product and TCGplayer Pro for singles.)

How the crawlers work — and how they stay polite

We index each store’s public catalog and try hard to be a good guest on their servers:

  • Public data only — each store’s sitemap and public product pages, the same pages a shopper sees.
  • One store at a time-ish — a small, capped number of stores in parallel, each a different host.
  • Gentle pacing — low request concurrency, delays between requests, and automatic back-off if a store signals it’s busy.
  • Stalest-first refresh — we re-check the least-recently-updated products rather than re-scraping everything constantly.
  • A clear User-Agent — so any store admin can see it’s us and reach out.
  • Inventory counts only when shown — we read the “N in stock” a store already displays; the cart-availability check is used sparingly and never places an order.

If you run a store and want to be included, indexed differently, or removed — just say the word.

Run a store? We’d love to help.

If you’re a local shop and want help getting your inventory online and listed here, reach out — happy to help you get set up at no cost.

What it costs to run

Hosting and data cost real money each month. If you find this useful and want to chip in, it genuinely helps keep it free and ad-free.

Contact

Questions, a store to add, a bug, or just hello — drop a message below (it opens your email app), or email us directly.

Opens your email app, pre-addressed — no need to copy anything down.

Roadmap

MTG ATX Inventory keeps growing. This is the single living roadmap; completed work is tracked in the changelog on the status page.

Open items

  • Code coverage hardening: improve meaningful automated coverage from the current 54.39% statements/lines, 80.70% branches, and 76.28% functions without padding the suite with assertion-free or implementation-coupled tests. First, publish per-file coverage and add a no-regression ratchet in CI. Second, cover the highest-risk untested paths: search and bulk route orchestration, store and marketplace crawler entrypoints, database migrations/rollback behavior, owner-only status/auth boundaries, and the major client-page state transitions. Target at least 90% lines and branches for those critical modules. Third, raise global floors in stages—60% statements/lines, then 70%; 82% then 85% branches; 78% then 82% functions—only after the corresponding tests exist. Generated code and framework-only glue may be excluded only through a documented review.
  • Anti-scalper verification: verify that the configured Cloudflare rate-limit rule on `/api/*` actually fires and is visible in operational checks.
  • Noble Knight Games (Fitchburg, WI): add the physical store as the directory expands beyond the current metros. Catalog ingestion via sitemap and product structured data is researched but remains on hold.
  • Home Town Cards singles: connect the owner-provided API when it becomes available; until then, keep the status canary watching the current endpoint.
  • More physical-store discovery connectors: continue expanding coverage toward every real game store while keeping physical stores clearly separate from marketplace-only sellers.
  • Product identity and history: bridge TCGplayer product IDs to exact printings using Scryfall or MTGJSON identifiers for clean names, exact images, and price-history joins.
  • TCGplayer-Pro product-name cleanup: safely remove collector numbers embedded in product names after exact-printing identity is reliable.
  • Discord news aggregator: create a browsable feed of public local-store announcements, especially for stores whose Discord posts are their only machine-visible inventory or preorder signal.
  • Search latency: profile slow searches end to end and repair the remaining hot paths.

Have an idea, a store to add, or a bug to report? See the contact section above.