work in progress cli wow tsm free forever

warcraftAuctionHouseInfo

A free replacement for the paid TradeSkillMaster Desktop App. Pulls WoW auction data from Blizzard's public API and feeds it straight into TSM's in-game AddOn — no subscription, no login, no server.

Not yet released

This project is under active development. No downloadable binary yet, the source repo is still private, and there are no screenshots or video to show because the tool doesn't exist yet. This page is a placeholder. Check back soon.

The problem

TradeSkillMaster is the best auction house tool in World of Warcraft. Most serious crafters, flippers, and gold-makers use it. It comes in two parts: the in-game AddOn that does all the useful work while you play, and the Desktop App that keeps its price data fresh.

The in-game AddOn is free. The Desktop App requires a monthly subscription. And all the Desktop App actually does is talk to a free public data service that Blizzard runs for developers, save a file into your WoW folder, and exit.

The solution

This project is a tiny command-line program that does the Desktop App's job for free. You sign up for a free Blizzard developer account, paste two codes into a config file, and schedule the program to run every hour. It fetches fresh auction data, computes the same price statistics TSM expects, and saves the file TSM's in-game AddOn already knows how to read.

From TSM's perspective, nothing changes. Your in-game price lookups, shopping operations, crafting profitability, and auctioning rules all keep working exactly the way they always have.

Why this exists

TSM's in-game AddOn is a genuinely great piece of free software. The paywall sits around the one part that's purely a data pipe — and it's a data pipe around information Blizzard publishes for free to anyone who asks. There's no technical reason that needs to cost money.

This project gives that part away. Forever. With no ads, no upsells, no "pro version," no accounts, and no server to keep online. It's small enough that one person can maintain it, and simple enough that anyone with a text editor can read and audit the whole thing.

It's also fully decentralized — there is no central server anywhere, no hosted database, no shared user pool. Every person who installs this runs their own copy with their own Blizzard key and their own local data. If this project's maintainer disappears tomorrow, every existing install keeps working unchanged. That's not a bug, it's the whole point.

What you get

  • Drop-in replacement for the TSM Desktop App. Works with the same in-game AddOn you already use.
  • One small file — a single executable, no installer, no runtime to download, no system changes.
  • Retail, Classic Era, and Hardcore supported from day one.
  • Zero cost, zero tracking — no accounts, no telemetry, no uploads. Your auction data never leaves your computer.
  • Stats that improve over time — day one gives you current prices and hourly averages. After a week you have seven-day history. After ninety days you have the full set of long-range statistics TSM power users rely on.
  • Public domain — released under CC0. Take it, fork it, rename it, ship your own version. No strings.
Demo & Screenshots

A walkthrough video and screenshots of the config and in-game results will live here once v1 ships.

How it works

Blizzard runs a public data service for developers. It speaks the same language every modern website uses — you ask it a question, it answers with a structured reply. Anyone can sign up for a free developer account in under five minutes and start asking questions.

One of the things you can ask is "what's currently for sale on this auction house?" Blizzard replies with the full list — every item, every listing, every price — updated about once an hour. This is exactly what the TSM Desktop App asks for on your behalf.

This tool does the same thing, but locally on your machine with your own key. It saves a running history of what it sees in a small database file next to itself, computes the same kinds of statistics TSM computes — the current floor price, a rolling average of reasonable sale prices, how many are listed, how rare an item is becoming — and writes it all out to the exact file TSM's in-game AddOn already loads every time you launch WoW.

Stats unlock progressively

TSM has price statistics that need weeks or months of history to mean anything — seven-day averages, fourteen-day averages, ninety-day averages. On your very first run, we don't have that history yet. So we tell TSM "we don't know yet" for those fields, and TSM handles it gracefully.

Then the database fills up. After twenty-four hours of running, the 24-hour averages come online. After a week, the 7-day averages unlock. After ninety days, you have the full suite. You don't have to do anything — just let it run on its schedule and watch the stats get richer over time.

Technical Details

The rest of this page is for engineers and technically curious users. You don't need any of this to use the tool.

Stack

  • Language: Go 1.22+, pure-Go toolchain (no CGO). Single static Windows binary with no runtime dependency.
  • Storage: SQLite via modernc.org/sqlite — pure Go, no system libraries, trivial cross-compile.
  • Auth: OAuth2 client credentials grant against oauth.battle.net/token. Bearer token cached in-memory per run.
  • Data source: Blizzard Game Data APIs — connected-realm auctions endpoint, region commodities endpoint (retail), classic auction house endpoints (Alliance/Horde/Neutral).
  • Output: Lua file dropped into Interface/AddOns/TradeSkillMaster_AppHelper/AppData.lua, written atomically via temp-file-and-rename.
  • Config: TOML. Client ID, client secret, realm list, WoW install path(s).
  • Scheduling: Out of scope for v1 — user wires up Windows Task Scheduler. Binary is stateless between runs beyond SQLite.

Data flow per run

  1. Load config. Parse TOML into typed structs, validate realm slugs and paths.
  2. Acquire OAuth2 bearer token from oauth.battle.net/token.
  3. For each configured realm: fetch the connected-realm auctions endpoint (retail) or the classic auction house endpoint, plus the region-wide commodities endpoint once per region for retail.
  4. Normalize each auction row to {itemString, buyoutPerUnit, quantity}. Skip bids-only listings. Collapse stack listings into per-unit prices.
  5. Compute per-item statistics from the current snapshot: min buyout, market value (mean of the lowest 15% of per-unit prices — TSM's documented method), total auctions, total quantity.
  6. Insert snapshot rows into SQLite with scanned_at = now(). Prune rows older than 91 days at the start of each run.
  7. Query rolling windows from SQLite (24h, 7d, 14d, 90d) to compute historical averages per item. Emit zero for windows without sufficient history.
  8. Serialize to Lua matching the LoadData format TSM_AppHelper's loader accepts.
  9. Write atomically via temp file + os.Rename. Exit zero with a summary log line.

Item string encoding

TSM identifies items with a compact string format. Simple items are i:<itemId>. Gear with bonus IDs (warforged, socketed, crafted tiers) extends to i:<itemId>::<bonus1>:<bonus2>:.... Dragonflight-era crafting quality uses modifier tuples. Battle pets are p:<speciesId>:<level>:<quality>.

Blizzard's auction response includes item.id, item.bonus_lists[], item.modifiers[], and item.pet_species_id. The encoder walks these and produces the canonical TSM string. v1 implements the simple and bonus-ID paths; pets and full crafting modifier support are deferred to v1.1.

Clean-room interop

Every World of Warcraft AddOn ships as human-readable Lua — WoW's client loads .lua and .xml files off disk at runtime with no compilation step. That makes TSM's code source-visible but not open source. TradeSkillMaster reserves all rights; this project does not copy any TSM Lua into its codebase.

Instead, the AppData.lua file format is documented from observation of real Desktop-App-generated output, in our own words, in a spec file that lives alongside the code. A fresh Go serializer is written from scratch to produce matching output. No TSM strings, identifiers, or code fragments appear in this repo.

This is the same legal pattern used by OpenOffice for reading .doc files, by Samba for speaking SMB, and by Wine for running Windows executables on Linux — interoperability reverse engineering is explicitly protected under DMCA §1201(f) in the United States and under Article 6 of the EU Software Directive.

Scope

In scope for v1
  • → Retail + Classic Era + Hardcore
  • → Simple items and bonus-ID gear
  • → Full TSM field set (zero-filled where history insufficient)
  • → Atomic file writes, 91-day retention
  • → CLI flags for dry-run, scan-only, and output redirection
Out of scope (v1)
  • → Battle pets, crafting quality modifiers
  • → GUI / tray app
  • → Auto-update mechanism
  • → Multi-user or hosted mode
  • → Sale-rate estimation (requires cross-user telemetry — permanently out of scope)

CC0 1.0 — Public Domain.

Not affiliated with or endorsed by Tradeskillmaster.com. TSM and TradeSkillMaster are trademarks of their respective owners. World of Warcraft is a trademark of Blizzard Entertainment, Inc.

Built by ESDF.gg