How to combine event ticket exports into one spreadsheet
By the Analistable team · Updated · 5 min read
Export orders at ticket level from each event or platform, rename columns to one shared set, add Event and Platform columns, and convert prices to the same basis (gross, fees, net). Append the exports, then pivot for revenue per event and count distinct lower-cased emails to find repeat attendees across events.
Part of our guide: How to answer questions across multiple spreadsheets
Order level or ticket level?
Ticketing platforms usually offer two exports: orders (one row per purchase) and attendees or tickets (one row per ticket issued). For combining events, the ticket-level export is the better base: an order of four tickets becomes four rows, so headcounts and ticket-type mixes are correct, and order-level totals can still be rebuilt by grouping on order ID.
Whichever you choose, use the same level for every event. Mixing order rows from one platform with ticket rows from another double-counts revenue or undercounts people, and the error is easy to miss once the data is stacked.
Step 1: map columns and money
| Column | Notes |
|---|---|
| Event | Added per export, e.g. "Leeds Meetup Sept" |
| Platform | Which ticketing system the row came from |
| Order ID | Unique within a platform only; combine with Platform as the key |
| Ticket type | Map names to a standard list (Early bird, Standard, VIP, Comp) |
| Buyer email | Trimmed and lower-cased |
| Gross price, Fees, Net | Same currency, same treatment of VAT |
| Status | Valid, Refunded, Cancelled |
Platforms differ on what "price" means: some report the face value, others what the buyer paid including booking fees, and some net of their own fees. Put each figure in its own column so revenue comparisons are like for like, and note whether VAT is included.
Step 2: append and de-duplicate people
- Load each export (Power Query, or the free combine tool linked on this page), rename columns to the shared set and add Event and Platform.
- Append everything into one table.
- Filter out Refunded and Cancelled tickets for attendance and revenue, but keep them in the table for refund analysis.
- Add a clean email column:
=LOWER(TRIM([@[Buyer email]])). - Count distinct clean emails per event, and events per clean email, to find repeat attendees.
Buyer email is not always the attendee: one person often buys for a group. If the export includes attendee names or emails per ticket, use those for repeat-attendance analysis and buyer email for purchasing behaviour.
Worked example: three events
| Event | Platform | Tickets | Gross (£) | Fees (£) | Net (£) | Unique buyers |
|---|---|---|---|---|---|---|
| Leeds Meetup Sept | Platform A | 120 | 1800 | 108 | 1692 | 95 |
| Manchester Workshop | Platform B | 45 | 4050 | 202.5 | 3847.5 | 40 |
| Online Summit | Platform A | 300 | 6000 | 360 | 5640 | 280 |
| Total | 465 | 11850 | 670.5 | 11179.5 |
Unique buyers can't be summed across events: someone who went to two events is one person, not two. Counting distinct emails across the combined table gives the real number — say 380 rather than the 415 you get by adding the event columns. The difference of 35 comes from buyers who went to more than one event. Those repeat buyers are usually the most valuable list you have.
SELECT lower(trim(buyer_email)) AS email,
COUNT(DISTINCT event) AS events,
SUM(net) AS net_spend
FROM tickets
WHERE status = 'Valid'
GROUP BY 1
HAVING COUNT(DISTINCT event) > 1
ORDER BY events DESC, net_spend DESC;From sales to attendance
Ticket exports tell you who bought; check-in data tells you who came. Joining the two on ticket ID or attendee email gives no-show rates by event and ticket type — free tickets tend to have higher no-show rates than paid ones. The join itself is covered in comparing event registrations with attendance.
Analistable can hold the ticket exports from every event, plus the check-in lists, and answer "repeat attendees across all events this year" or "net revenue by ticket type" in plain English. Files are loaded into DuckDB in your browser rather than uploaded, which is helpful when exports contain attendee names and emails. The guide to answering questions across spreadsheets shows the kinds of question that work well.
Pitfalls
- Order IDs collide across platforms: order 1001 on one platform is unrelated to order 1001 on another. Key on Platform plus Order ID.
- Comp and guest-list tickets: keep them with a zero price so headcounts are right, but exclude them from average ticket price.
- Partial refunds: a refunded booking fee or a downgrade changes net revenue without changing the ticket count. Take the refund amount from the export rather than assuming a full refund.
- Currency: international events may sell in several currencies. Convert at a stated rate, or report by currency.
- Time zones: order timestamps may be in UTC; convert before analysing sales by day or hour.
Keeping the combined table up to date
For a series of events, set up the combine once and reuse it. Save each event's export into one folder with a consistent name (2026-09 Leeds Meetup - Platform A.csv), and let Power Query's From Folder pick up new files on refresh, splitting the file name into Event and Platform. Because each platform has its own layout, the usual pattern is one folder and one renaming query per platform, appended at the end.
Re-export an event after it has finished rather than relying on an export taken during sales; late refunds, transfers and name changes only show up in the final version. If you keep marketing consent in the export, carry it through to the combined table and respect it: a buyer who opted out on one platform shouldn't receive emails because they also appear, opted in, on another without a fresh choice. Where consent differs between platforms, the most recent choice should normally win; check with whoever owns your data protection policy.
Frequently asked questions
- How do I find people who attended more than one event?
- Combine the ticket exports, lower-case and trim the email column, then count distinct events per email. Anyone with two or more is a repeat attendee.
- Why don't my combined revenue figures match the platform payouts?
- Payouts are usually net of platform and payment fees, and may exclude refunds or include adjustments. Compare net revenue, after fees and refunds, to the payout, and check the payout date range matches the orders.
- Should I use buyer or attendee email?
- Attendee email for attendance and repeat-attendee analysis, buyer email for purchasing and marketing analysis. Group bookings mean the two often differ.
- Can I combine ticket exports from different platforms?
- Yes. Rename each platform's columns to one shared set, put gross, fees and net in separate columns, add a Platform column, and key on Platform plus Order ID because order numbers can repeat across systems.