Setting up your workspace
Three pieces turn the empty workspace into your operations hub: a mailbox we can read confirmations from, an AI key to parse them, and your existing spreadsheet. All three live under Settings (admin only); your dashboard shows a checklist until they’re done.
1. Your purchases mailbox
The workspace polls a mailbox over IMAP and turns order-confirmation emails into inventory automatically. The golden rule: use a dedicated inbox, not your personal one. Create a fresh address that only receives order confirmations, and auto-forward them into it from wherever they land. On a general inbox, every unrecognized email gets considered for AI extraction — slower, costs tokens, and fills your review queue with noise.
- In Settings → Mailboxes, use the Gmail or Outlook / Hotmail preset to fill the server details.
- Gmail needs an App Password — your normal password will not work. Google Account → Security → 2-Step Verification → App passwords, then paste the generated 16-character password here.
- Sale-confirmation mailboxes are different: those are fine on a personal inbox, because their sender allowlist (prefilled with the marketplaces) filters everything else out before extraction.
2. Your AI API key
Email parsing and spreadsheet conversion run on a model of your choice, using your own API key so your data flows through your own account: Anthropic (Claude), OpenAI, Google Gemini, or any OpenAI-compatible endpoint. Create a key with the provider — extraction needs a funded API account — and paste it in Settings → AI; the built-in test button confirms it works.
3. Import your spreadsheet
The Import center reads your existing sheet — any layout, any language. Upload the file (or paste a Google Sheets link) and choose how it is read:
- Convert with AI (the default): the AI first explains how it reads your sheet and asks about anything it cannot tell — what a status word means, whether a price is per ticket or per row, which account holds the tickets. Answer in your own words, then it converts every row on the server, in batches, and rows it could not read are shown in the preview rather than dropped. Best for a first import or a sheet with its own logic. It uses your own AI key: roughly one model call per thirty rows.
- Fill in the template: download the CSV from the Import page, put one purchase line per row and upload it back. Its layout is fixed, so it imports instantly and without AI. A layout you confirmed before is recognised whichever way you choose.
Either way the preview shows exactly what will be written, one line per ticket, before you commit.
Tested with made-up stock and sales first? Settings → Danger zone deletes every event, ticket, purchase and sale in one go, after two confirmations, and keeps your users, settings and accounts, so you start live with an empty ledger.
Retailers often write event names in capitals with the venue and city tacked on. Every new event has that tail moved into its own venue and city fields, whether it arrives by import, by email or by hand, and Settings → Event names lets you pick one spelling (title case or sentence case) for the name itself. A button there cleans up the events you already have.
- Ambiguous events (same artist, nearby dates) are grouped into cards — one decision per event, not per row.
- Seat details inside event names (“Ajax - FC Sion Vak 422 Rij 27, Stoel 157-158”) are split automatically: the name becomes the event, the section, row and seats become tickets. And if an import still lands wrong, you can delete the phantom event — or single tickets — from the event page; events with recorded sales are protected from deletion.
- Rows with errors don’t block the rest: tick “Skip the rows with errors” and import everything else, then fix the stragglers in the sheet and re-import.
- Re-imports are safe: rows already in the ledger are recognized and skipped, so importing an updated copy of a living spreadsheet never duplicates anything.
Optional: market data & notifications
A TickSights API key (Settings → Market data) adds live resale prices and sales velocity to your events. A Discord webhook gets you sale notifications and a daily digest.
