Overview
Where the money is right now: what you paid, what is still unsold, what you earned, and what has not reached the bank yet.
By event
| Event | Date | Tickets | Sold | Cost | Net | Profit | ROI |
|---|
Inventory & P&L
Each row is a batch of tickets. Every sale is summed, cost is allocated per ticket including buying fees, and quantity listed is checked against quantity left. Click a row to open its listings and sales.
Positions
| Event | Section | Qty | Cost/ea | Exposure | Gross | Fees | Net | Profit | Margin | ROI | Status |
|---|
Import from CSV
Paste an export from any marketplace or ticketing site. Column names are matched across common variants and languages, one file can hold many events, and unusable rows are reported rather than dropped silently.
Cashflow & payouts
When capital actually unlocks. Marketplaces pay after the event, not after the sale — a ticket sold in August can be money you cannot touch until October.
Expected payouts
| Expected date | Event | Marketplace | Qty | Net | Cumulative |
|---|
Repricer
Standing rules that run on their own: sit a set amount below the section floor, never below your cost guard, on a schedule. Any error or implausible reading freezes the listing instead of repricing blind.
Listings
| Listing | Section | Price | Floor | Δ | Rule | Status |
|---|
Bulk rules
Activity
Sales Tracker
Repeated snapshots of an event's public market. Comparing them shows how much quantity left, from which sections, and how the floor moved. We say exits, not sales: a listing that disappears may simply have been pulled.
Tracked events
| Event | Date | Marketplace | Qty on market | Exits | Floor now | Δ floor | Last snapshot |
|---|
Sales feed
| Seen | Section | Price | Qty | Value | Note |
|---|
The precision is in the classification, so this splits what others merge:
Reported — read from an actual sales record, not a board that changed. A seller account with invoice-level access sees real transactions, and nothing inferred outranks them. Capture an invoice page with the companion and tell it whether the rows are your own sales or the whole event's.
Confirmed — the listing is still up with fewer tickets. Sellers almost never hand-edit a quantity downward, so this is as close to a receipt as the public board gets.
Likely — the whole listing is gone. Sold out, pulled or expired look identical from outside, so it is counted separately rather than folded into one flattering total.
A seat that reappears at another price is a reprice and is dropped entirely. Matching on section + row + price — or the marketplace's listing id when the page exposes one — is what keeps two same-priced listings in one section from being confused.
Fulfillment
Transfer queue. The split plan is computed for you — flows that refuse to leave a single ticket last get a valid plan automatically — and the transfer OTP is read from your own mailbox instead of being typed in.
Transfer queue
| Created | Platform | Qty | Split plan | Recipient | OTP | Status |
|---|
How the OTP is fetched
IMAP_HOST, IMAP_USER and IMAP_PASS in the
environment, using a dedicated app password you can revoke on its own. The mailbox is
opened read-only, only recent messages from expected sender domains are scanned, and
a number counts as a code only when a word like "code" or "OTP" sits next to it — an order
reference is never mistaken for an OTP. Nothing is deleted, moved or marked as read.
Official seller API
StubHub and Viagogo publish the same seller API on two hosts, so one client drives both: pull your listings and sales, push price and quantity changes. This is the stable route — no page scraping, no breakage when a layout changes.
Connections
| Site | Endpoint | Mode | Status | Last pull |
|---|
Operations
| Backup | When | Size |
|---|
Getting access
Then set these in the environment and restart:
STUBHUB_CLIENT_ID, STUBHUB_CLIENT_SECRET,
STUBHUB_TOKEN_URL — and the VIAGOGO_ equivalents.
MARKETPLACE_SANDBOX=0 switches to production;
MARKETPLACE_WRITES=1 allows pushing changes.Both default to the safe side. The client starts in sandbox and read-only, because a wrong write against a live seller account cannot be undone. Watch a few pulls land correctly before you let it write.
Why ExternalId matters
Endpoint probe
Found a seller-portal endpoint that returns something useful? Open it while signed in, paste the response here, and this works out what it contains — which arrays are records, what each field means, and whether the set is sales or listings.
Paste a response
Before you paste
Rows imported this way land as reported sales, the same tier as invoice data, because they come from a record rather than from a board that changed. If the analysis says listings rather than sales, that is the tell: an offer has a price but no date, a trade has both.
Alerts
Only things that cost or make money: over-exposure, a ticket that will not open, stock unsold as the date closes, a payout that has not landed. Each condition fires once and then goes quiet until it changes or its cooldown passes.
Inbox
| Severity | What | Where | When |
|---|
Where alerts get sent
| When | What | Result | Detail |
|---|
Thresholds
Cross-listing
One pool of tickets, several marketplaces. When a sale lands, exposure elsewhere has to come down fast — a double sell costs a penalty, a refund and a strike. Reductions are ordered by net yield, so what stays live is what actually pays best.
Exposure by position
| Position | Available | Listed | Over by | Unexposed | Channels | Tolerance |
|---|
Action queue
| Position | Marketplace | Action | Qty | Net/ea | Why | Status |
|---|
Tickets & delivery
Seat-level tickets, a pre-flight check so a ticket that will not open is found days out instead of at the turnstile, and delivery links for static barcodes.
Delivery readiness most urgent first
| Seat | Barcode | Days to event | Risk | Reason |
|---|
Tickets
| Position | Section | Row / seat | Barcode | Type | Status | Last check |
|---|
Delivery links
| Created | Recipient | Tickets | Views | Expires | State | Link |
|---|
Rotating barcodes
Browser companion
A small extension that reads the ticket page you are already signed into and looking at, and sends it here. It runs only when you click Capture — no automated login, no proxy rotation, nothing running in the background.
Pairing
Pending captures
| Event | Date | Seat | Order | Barcode | Source | Captured |
|---|
Install
chrome://extensions and turn on Developer mode.2. Click Load unpacked and pick the
companion folder inside this project.3. Open the extension, expand Connection settings, paste the token above and the dashboard URL, then Save.
4. Go to a "my tickets" page on Ticketmaster, AXS, the Eventim chain, TicketOne, Vivaticket or See Tickets — or a marketplace event page on Viagogo, StubHub, Ticombo or Gigsberg — and hit Capture.
Retailer pages become inventory drafts; marketplace pages become Sales Tracker snapshots. On a marketplace, tell the extension whether the prices shown are gross or seller payout — comparing one against the other is how a tracker ends up lying to you.
Capture log
| When | Source | What | Rows |
|---|
Email import
Every purchase leaves an order confirmation behind. This reads your mailbox, recognises which ticketing site sent each message, and extracts event, date, venue, section, quantity and price. Results are drafts you confirm — parsing free-form email is heuristic, and a wrong figure entering the books quietly is worse than one you have to check.
Scan
| Provider | Event | Date | Section | Qty | Total | Cost/ea | Order | Confidence |
|---|
Recognised senders
| Group | Provider | Country | Site | Sender domains | Verified |
|---|
Marketplaces
Where you sell. Commission and payout delay drive net revenue, profit and every payout date, so these are the two numbers worth getting right — check them against your real contracts, the defaults are only a starting point.
Resale marketplaces
| Marketplace | Region | Commission % | Flat fee | Payout days | Connection | Account |
|---|
How connections work
Browser session is the next step — you sign in yourself and the tool works inside that session. There is no automated mass login with proxy rotation and CAPTCHA solving here: that stack breaks every time a platform updates its bot detection, and a repricer that dies quietly on a match day is worse than none.
Official API is the best case where a partner programme exists and you are accepted into it.
Ticketing accounts
Where you buy — Ticketmaster, AXS, the Eventim chain and the rest. Kept apart from marketplaces on purpose: different lifecycles, different failure modes.
Accounts
| Provider | Group | Country | Label | Proxy | Status |
|---|
Tax & VAT
VAT on tickets varies by country and event type, and in most countries also by the organiser's legal nature, your contractual role, and sometimes the ticket price or the region. Country notes record those cases instead of flattening them into a number that would be wrong.
Your role as seller
Rates by country and event type
| Country | Standard | Concerts | Sport | Theatre | Other |
|---|
exempt, or leave
blank for "to verify". Click a country to read its notes.