Analytics & Traffic
How traffic, channels, campaigns and conversion are measured in Kickets — for organizers and the Kickets team.
The Analytics tab inside each event shows real visitor traffic to your public event page, broken down by marketing channel and campaign, with a conversion percentage to paid orders. Everything is aggregated and anonymous — no visitor IDs, sessions, IPs or user-level data are ever exposed in the UI or in exports.
Organizer Guide
What the Traffic section shows
Open any event → Analytics tab → Traffic card. You'll see five KPIs across the top:
Channels and campaigns (UTM)
Every link you share should include UTM parameters so we can tell where your buyers came from. Use the UTM Link Builder in the Analytics tab to generate them quickly.
Example link:
https://kicketsctrl.com/e/your-event?utm_source=instagram &utm_medium=social &utm_campaign=launch_week
That URL feeds two breakdowns:
Visitors who arrive without UTM tags are grouped as direct / (none).
Choosing a date range
Use the range buttons in the top-right of the Traffic card:
Conversion % is always computed against the same window as the views: paid orders divided by tracked page views inside the range.
Exporting traffic data (CSV)
Click Export CSV in the Traffic card to download an aggregated report. The file contains:
- A header with the selected range, currency, and generation timestamp.
- One row per channel: Source, Medium, Views, Visitors, Orders, Revenue, Conversion %.
- One row per campaign: Campaign, Views, Visitors, Orders, Revenue, Conversion %.
The export never contains visitor IDs, session IDs, user IDs, IP addresses, or raw page-view rows. It is safe to share with collaborators or paste into a spreadsheet.
What we don't track
- No personal identifiers in the dashboard or in exports.
- No cross-event browsing — each event has its own traffic feed.
- Marketing pixels (Meta, GA4, GTM, TikTok) only fire after the visitor accepts the consent banner.
Sales Intelligence
Below the Traffic card, the Sales section shows the commercial picture of your event in real money — not page views. All figures are computed server-side from confirmed paid orders and refunds, so what you see here always matches what the Kickets finance team sees.
Reservations that haven't been paid yet are not counted in revenue. They show up in Inventory as reserved so you can see committed inventory.
Refund Analytics
The Refunds section breaks down what was returned to buyers and why. It does not expose any buyer identity — just totals, splits and reasons.
Refunds flow through your accounting automatically — you don't need to log them anywhere else.
Inventory Analytics
The Inventory section is the commercial view of what's left to sell. It is a different thing from the door / scanner occupancy panel — that one is about who's physically inside the venue.
Refunded units are returned to available automatically — you don't need to re-open the tier yourself.
Live updates
Sales, Refunds and Inventory numbers update on their own while you're looking at the page. There's no Refresh button to babysit on launch night.
- New paid orders trigger a refresh within about a second.
- A polling fallback runs every 15 seconds, so even on flaky networks you're never more than 15 seconds behind.
- Each card shows a small Updated HH:MM:SS timestamp so you can confirm freshness at a glance.
The Traffic card is the one exception — it updates when you change the date range or click Refresh, because page-view rollups are heavier than order rollups.
Export Center
At the bottom of the Analytics tab is the Export Center — one place to download every report for this event as CSV. All exports use the same format (UTF-8, Excel-safe, RFC 4180 escaping) and include a header with the event, date range and generation timestamp.
Buttons you don't have permission to use are shown as “Not available for your role” rather than hidden, so you can see what exists and request access from the workspace owner. PDF exports are marked “Coming later” — until then, open the CSV in Numbers, Excel or Google Sheets and print to PDF from there.
Promoter Playbook
What to look at, and when
Analytics only helps if you check it at the right moments. Here is the rhythm that works for most events on Kickets.
Tag every link you share
The single biggest unlock in Analytics is also the simplest: never share a raw event URL. Use the UTM Link Builder at the top of the Analytics tab to generate a tagged link for every place you post.
utm_source=instagram&utm_medium=bioutm_source=instagram&utm_medium=storyutm_source=newsletter&utm_medium=email&utm_campaign=announcementutm_source=meta&utm_medium=cpc&utm_campaign=launch_weekA tag you didn't set will simply show up as direct / (none), which means “I have no idea where this buyer came from.”
Who can see what
Analytics respects the role you were granted in this workspace. The matrix below is what each role sees on this Analytics tab.
| Role | Sales / Refunds | Inventory | Traffic | Buyers | Scan audit |
|---|---|---|---|---|---|
| Owner / Admin | ✓Yes | ✓Yes | ✓Yes | ✓Yes | ✓Yes |
| Finance | ✓Yes | ✓Yes | —No | ✓Yes | ✓Yes |
| Event manager | —No | ✓Yes | —No | —No | ✓Yes |
| Marketing | —No | —No | ✓Yes | —No | —No |
| Support (read-only) | —No | —No | —No | ✓Yes | —No |
| Scanner / Door ops | —No | —No | —No | —No | —No |
See Security for the full role model and how to invite teammates.
Frequently asked questions
Why is my Sales number different from Stripe?
Kickets reports gross revenue including VAT. Stripe reports net of refunds. Net revenue in Kickets is the figure that should match your Stripe balance for the period.
Why do reservations not count toward revenue?
Reservations are 10-minute holds, not sales. They release automatically if the buyer doesn't complete checkout. You can see them under reserved in Inventory.
Why is Traffic empty on a brand new event?
Traffic only starts recording once the event is published and the first visitor accepts the consent banner. Until then the page exists but isn't broadcast.
Where did the “Export PDF” button go?
We removed it because the implementation was incomplete. PDF exports will return in a future release. For now, open any CSV in Numbers / Excel / Google Sheets and print to PDF.
Technical Reference
Data model
RPC: get_event_traffic_metrics(event_id, days)
The Traffic UI is fed by a single Postgres RPC that returns:
A FULL OUTER JOIN ensures channels with traffic but no sales (and sales without traffic) are both surfaced.
Known limitation: paid_at vs created_at
The RPC currently uses orders.created_at as the paid-order timestamp. This is acceptable today because orders are only created after a successful Stripe charge, so created_at ≈ paid time.
When full Stripe webhook finalization ships (orders may be created pre-payment and finalized async), we will add an orders.paid_at column populated by the webhook and switch the RPC + UI to use:
COALESCE(paid_at, created_at)
Privacy and PII boundaries
- UI: never renders visitor_id, session_id, user_id, or IP.
- CSV export: only aggregated channel/campaign rows + range, currency, timestamp metadata.
- Pixels: gated by consent. See the consent banner in Trust & Data Protection.