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.
Deliveries
| Event | Route | Qty | From account | Buyer | Proof | Status | Transfer |
|---|
Mobile means the holding account transfers to the buyer's email, and the proof is a screenshot taken inside that account. E-ticket means handing over a file or barcode that already exists. The two share nothing, which is why the route is decided by the position's transfer mode rather than guessed at delivery time.
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.
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
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 |
|---|
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.
Connected mailboxes
| Mailbox | Host | Folder | Status | Last scan |
|---|
Gmail needs an App Password. Google refuses your normal password over IMAP: turn on 2-step verification, then Google Account → Security → App passwords → generate one, and paste the 16-character code here. The connection is proved with a real login before it counts as working.
AYCD Inbox — live OTP & order mail
Inbox-)
and the dashboard pulls a one-time code for any account’s mailbox on demand,
through AYCD’s cloud — no master inbox needed.One operational note, stated plainly: a request only returns while your AYCD Inbox app is open and logged in — it holds the mailbox connections and does the fetching; the cloud is just the broker. If a code never arrives, that is almost always AYCD Inbox being closed, and the message says so.
Scan AYCD for order & sale email
This scrapes the mailboxes AYCD holds for your accounts — one targeted task per sender, through the Inbox API above — and feeds the orders and Viagogo sales into the same drafts and ledger the Gmail scan uses. It only returns while your AYCD Inbox app is open and logged in; if it is closed, the scan says so per mailbox rather than looking empty.
Scan
| Provider | Event | Date | Section | Qty | Total | Cost/ea | Order | Confidence |
|---|
Senders not recognised
When a scan skips mail because the sender is not a known ticketing site, the domains show here. Nothing is ever auto-accepted — a wrong figure entering the books quietly is worse than a missed one. If a domain really is an order sender, map it to the right provider and every future scan will read it.
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 | Status | Account |
|---|
Connect Viagogo & StubHub directly
Official seller API — optional
How partner access works — most brokers do not need this
api.support@stubhub.com or affiliates@viagogo.com describing your
selling volume, and they issue a client id and client secret. Paste them
above. The token endpoint is already known, so there is nothing else to configure.Sandbox first. A new connection starts in sandbox and read-only. Writing to a live seller account cannot be undone, so listing stays switched off until you turn it on deliberately, per site.
Where the secret lives. Encrypted with the key held in
VAULT_KEY, which
is never written to disk. Only the site, the environment and the last test result are
stored in clear — someone reading the data directory learns nothing worth stealing.
Ticketing accounts
Where you buy — Ticketmaster, AXS, the Eventim chain and the rest. Kept apart from marketplaces on purpose: different lifecycles, different failure modes.
VAULT_KEY (set in the environment,
never written to disk — lose it and the stored credentials are unreadable, which is the
point), then handed to the real login flow. It is never shown in this table and never
returned by any API response. Ticketmaster, the Eventim chain (TicketOne) and Vivaticket
sit behind bot management that refuses a server login, so those sign-ins finish in your
browser companion or by email import — the row says which, honestly, and only turns
green on a real session. AXS uses a token, linked in its own panel below.Accounts
| Provider | Country | Region | Label | Proxy | Connection | Status |
|---|
AXS — refresh your orders & tickets
| Account | Token | Last refresh |
|---|
api.axs.com answers JSON and
is not behind a challenge, so with your account’s token the dashboard reads your
own orders and tickets straight from AXS — /v1/users/orders and
/v1/users/tickets, the same endpoints the AXS apps call. Each order
becomes a position, its seats become tickets, and anything AXS reports as listed or
sold updates your books.Getting the token. Sign in at axs.com, open your browser’s devtools → Network, click any request to
api.axs.com, and copy the
Authorization header value (it starts with Bearer). Paste it
here. The token is a credential and is sealed in the vault, never written in clear.It expires. AXS tokens are short-lived, so a refresh that returns “token expired” is normal — paste a fresh one. That is the honest cost of not storing your password and not fighting their login.
Bulk import from CSV
One row per account. The provider
column takes either the key (tm_uk) or the display name
(Ticketmaster UK). region is your own sub-label (a desk, a
city) and is kept — it is not the country, which comes from the provider.
Anything unrecognised is reported by row rather than filed under a made-up id.
Reachability / diagnostics
Can this dashboard reach the site?
| Site | Result | Guarded by | HTTP | ms | What it means |
|---|---|---|---|---|---|
| Not checked yet. | |||||
What was found when this was built. Ticketmaster returns
{"response":"block"} to its own sign-in endpoint from a datacenter IP,
and served fine from a home connection — that difference is why residential
proxies matter, and it is exactly what the column above measures. AXS sits behind
a Cloudflare JavaScript challenge. The Eventim chain, TicketOne included, runs
Akamai Bot Manager, whose sensor cookie comes from browser fingerprinting rather
than headers. Vivaticket runs Imperva.So sign-in is not automated here, and that is deliberate. Getting past any of those means defeating a commercial bot-management product: it breaks on their next release, it risks the accounts themselves, and a repricer that dies quietly on a match day is worse than none. The routes that do work are on this page — the per-row Sign in hands off to your browser companion, email import reads your own mailbox and needs nobody's permission, CSV always works, and the seller API on the Marketplaces page is a real integration rather than a workaround.
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.Settings
Set once, then left alone.
Discord webhook
| When | What | Result | Detail |
|---|