How to use BuzzHive
Everything you need to set up your account, sell tickets, run the door, and get paid. The whole flow takes about 10 minutes for your first event. If you get stuck anywhere, jump to Contact support at the bottom.
1. Your account
Your account is what lets you create events, see orders, and get paid. If you signed up through a link from the BuzzHive team, your account is already created. Otherwise, head to buzzhive.info/promoter/signup and fill in your name, email, and password.
The person who creates the account is automatically the owner — the highest role. Owners can do everything: manage events, manage the team, manage billing, view payouts. You can add additional team members later (see Add team members).
2. Connect Stripe (so you can get paid)
We use Stripe Connect for payments and payouts. You'll connect your Stripe account (or create one in 2 minutes) the first time you log in. Until this is complete you can't sell tickets — Stripe needs to know where to send your money.
| 1 | Log in. If onboarding isn't done, you'll be sent to /promoter/onboarding. |
| 2 | Click Start Stripe onboarding. You'll be taken to Stripe. |
| 3 | Enter your business details, ID, and a bank account or debit card for payouts. Stripe walks you through it. |
| 4 | When Stripe says "Done," you'll be redirected back here. The dashboard will show "You're in" and you can start selling. |
3. Create an event
From your dashboard, click + New event (top right, or in the Getting Started card). Fill in:
Basics (required)
- Title — what attendees see at the top of the sales page
- Date — show date
- Doors / start time — what time guests arrive (defaults to 8:00 PM)
- Venue — name of the place
- Address, city, state — for the sales page and ticket email
Details (optional but recommended)
- Lineup — performers, format:
Artist 1 · Artist 2 · Artist 3 - Description — short blurb. Markdown isn't supported, but line breaks are.
- Age restriction — e.g.
21+,All Ages,18+
Flyer image (recommended)
Upload a JPEG, PNG, or WebP. Up to 5 MB. Portrait (4:5) or square (1:1) looks best. Without a flyer your event page is plain text — flyers double click-through to checkout.
Sales window
- Sales start — when tickets become buyable. Leave blank to start immediately.
- Sales end — when sales close. Leave blank to keep selling up to door time.
- Max capacity — total tickets across all tiers (a hard cap). Leave blank if each tier caps itself.
Visibility
- Status: Draft — only you can see it (use this while you set up tiers)
- Status: Published — live and selling
- Status: Sold out — hides the buy button but the page stays up
- Status: Cancelled — page shows the event was cancelled
- Enable ticket sales — emergency off-switch; uncheck to pause sales without changing status
- Show on marketplace homepage — controls whether your event appears at buzzhive.info alongside other promoters
Click Create event and you'll be sent straight to ticket types.
4. Add ticket tiers
Every event needs at least one ticket tier (GA, VIP, Early Bird, etc.). You can have as many tiers as you want — they show up on the public sales page as a stack of buy buttons.
| 1 | From an event's edit page, click Manage ticket types →. |
| 2 | Fill the row at the bottom: |
- Name — what buyers see (e.g.
General Admission,VIP) - Price ($) — in dollars, e.g.
25.00 - Quantity — how many to sell. Enter
0for unlimited. - Min/order — fewest a buyer can take in one order (usually
1) - Max/order — most a buyer can take in one order (usually
10)
Click + Add. Repeat for each tier.
Tier-locked door timing (scan windows)
Each ticket tier has two optional scan window fields: Scan window opens and Scan window closes. They control when tickets of that specific tier are valid at the door. Leave both empty (the default) and the tier can be scanned any time — same as every existing tier.
When set, the door scanner enforces them automatically. If someone tries to enter on an Early-Bird ticket before the window opens, the bouncer sees an amber "Not yet valid — opens 9:00 PM" warning instead of the green "Welcome" splash. After the window closes the scanner shows a red "Window closed at 10:00 PM" warning. The bouncer can still wave the person through manually if they choose — the system just informs them, it doesn't physically lock the door.
Classic use cases:
- VIP first hour: VIP tickets valid 8–9pm, GA opens at 9pm.
- Early-bird priority: Early-bird tickets must enter by 10pm or the door price kicks in.
- Multi-day festivals: Day-1 wristbands only valid Friday, Day-2 only Saturday.
- After-hours entry: Late-night tickets only valid after midnight.
Editing & removing tiers
- Click Deactivate to hide a tier from the sales page without deleting it. The numbers stay so you can re-activate later.
- Click Delete to remove a tier entirely. Only allowed if no tickets have been sold — otherwise deactivate instead.
See who bought each tier (Tier sales)
On any event's edit page, click Tier sales in the top action row. You'll land on a page that groups every paid buyer for that event by which ticket tier they purchased. Each tier renders as a collapsible card showing the tier name, price, buyer count, active ticket count, refunded count (when nonzero), and tier revenue. Expand a tier to see the full buyer table — name, email, phone, quantity in this tier, status, paid date.
Built for events with many tiers where each tier needs different operational treatment. If your event has separate Early Bird, GA, VIP, Car Pass, RV Pass, Ferry Arrival, Ferry Departure, and Dinner tickets, you can finally see exactly who bought what — instead of one lumped "tickets sold" number.
Each tier card has an Email these buyers → button that opens the Outreach composer pre-scoped to that single tier. Use it to send tier-specific instructions — ferry boarding details to ferry-pass holders, gate codes to RV-pass holders, dinner seating to dinner-ticket holders — without spamming the rest of the event audience. Refunded buyers and other tiers are excluded automatically.
Discount codes
Each event has its own set of discount codes. From the event edit screen, click Discount codes (top-right or in the sidebar) to open the manager. You can create as many codes as you like.
For each code you set:
- Code — case-insensitive when buyers enter it. 2–48 characters,
letters / numbers / dash / underscore. Examples:
EARLYBIRD,VIP_25,RADIO5. - Type — percentage off (e.g. 20% off) or fixed dollar amount off (e.g. $5 off).
- Value — the number. For percent, 1–100. For fixed, dollars (the system stores it as cents internally).
- Max uses — optional cap on total redemptions across all buyers. Leave blank for unlimited.
- Expires at — optional date/time after which the code stops working. Leave blank for no expiration.
- Applies to — optionally restrict to specific ticket tiers. Leave all unchecked to apply to every tier in the event.
- Internal notes — for your own reference (e.g. "Sent to mailing list 6/1"). Buyers never see this.
How it works for buyers:
- A "Have a discount code?" field appears on the event's public sales page, right above the buy button.
- Buyer enters the code along with their name and email and clicks the buy button.
- If the code is valid for the cart, the discount is applied and Stripe charges the discounted total. If the code is invalid (expired, used up, wrong ticket type, etc.) the buyer is bounced back to the event page with a specific error message.
How the math works:
- Percent codes apply to each applicable ticket's face value individually. E.g. 20% off applies to each GA ticket separately.
- Fixed-amount codes apply once per order, capped at the applicable subtotal (you'll never go negative).
- If a code is scoped to specific tiers and the buyer's cart doesn't contain any of those tiers, the code is rejected with a clear error.
- Platform fee is calculated on the post-discount subtotal. A fully-comped order (100% off) waives the platform fee entirely.
- Deactivate hides a code from new buyers but keeps it in your records. Existing orders that already used the code are unaffected.
- Delete is only allowed for codes that have zero uses. Once a code has been redeemed, deactivate it instead so the order history stays intact.
- Each order's receipt (and the buyer-side order confirmation page) shows the code used and the dollars off, so you have a clean audit trail.
5. Publish & share
Once you have at least one active tier, head back to Edit event and set the status to Published. Save.
You now have a public sales page at:
https://buzzhive.info/e/your-event-slug
Click View public page on the edit screen to see exactly what buyers see. Share that URL anywhere — Instagram bio, Facebook event, text blast, your own website.
Summer Block Party · Aug 12
becomes summer-block-party-aug-12). To change it, edit the event, change the
title, and save — or contact support to set a custom slug.
6. Customize the look of your event page
Your event page can take on one of ten completely different visual identities — we call them vibes. Pick a vibe to set the whole feel of the page (colors, typography, layout, hover effects). Then fine-tune with the per-event fields below (custom URL, palette colors, fonts, accent color, etc.). Every customization field is optional — leave it blank to use the vibe's defaults.
Vibes (the big choice)
On the event edit page, the very first card is the Vibe picker — a grid of ten visual templates, each tuned for a specific scene. Click one card and save. That's it. The page is instantly transformed. You can change the vibe any time without losing any content; only the look changes. Each card also has a small "Preview" pill that opens a live popup of your real event page rendered with that vibe — useful for shopping vibes without committing.
- Standard — clean, dark, neutral. The BuzzHive default. Works for any event.
- The Substation — industrial basement club. Brutalist sans, single neon accent, lineup-heavy layout. Built for venue-anchored DJ nights and warehouse rooms.
- Sub Bass — deep bass / dubstep. Purple + cyan glitch type, heavy condensed display, cyberpunk-adjacent. Built for dubstep / deep bass / trap nights.
- Berlin — Berghain-style techno. Stark pure-black + white, lowercase Helvetica, hairline dividers, zero decoration. The most refined aesthetic on the platform.
- Junglist — drum & bass / 90s rave revival. Neon green + cyan, hard offset shadows like a flyer stapled to a wall, lightning-bolt accents. Built for warehouse parties.
- House — classic Chicago / Detroit house. Warm 70s-80s palette (burgundy + amber), vinyl-record visual in the hero. Built for boogie / disco-house nights.
- Headliner — multi-day festival. Photo-forward, premium, gold-foil gradient title, starfield background, lineup formatted as a poster hierarchy (first act gets headliner treatment). Built for festivals and premium-ticketed shows.
- Forest — boutique outdoor festival. Moss green + warm gold + sage, sacred-geometry mandala behind the hero, organic rounded corners. Built for Cascadia / APOG / forest-flavored events.
- Playa — Burning Man / regional burn aesthetic. Desert dust palette, sand-grain texture, stenciled type with deep shadow, asymmetric hand-drawn borders. Built for regional burns, theme-camp fundraisers, decompression parties.
- DnB — drum & bass / sound-system basement. Urban camouflage palette (deep void + olive + warning red), CRT scanline overlay, fog drift, bass-pulse title, tactical-readout ticket panel, glitch-on-hover CTA. Built for jump-up, neuro, liquid, and amen-break basement nights.
Custom URL
Each event lives at a clean URL like buzzhive.info/baytek-summer-rave.
The slug auto-fills from your event title when you first create it, but you can rename
it on the edit page any time — useful for shorter, more memorable links you can paint on
a flyer. Lowercase letters, numbers, and hyphens only. We block any slug that would
collide with a system route (like admin, contact, or another
event's URL).
Color palette editor
Below the vibe picker is a Customize colors card. Each vibe exposes 3-4
editable color knobs that match its identity — for example, DnB lets you tune the camo
background, warning-red accent, olive highlight, and text color; Berlin keeps it pure with
three greyscale knobs (background, ink, and a mid-grey hairline). Use the color square or
type a hex code (e.g. #ec6b1c). Per-row Reset reverts a single
color; per-vibe Reset all wipes every override for that vibe in one click.
Switching vibes preserves the color work you did on the previous one — your overrides are
scoped per vibe.
Fonts
The Customize fonts card lets you pick a font for your title and section headings (body copy stays as the vibe default so the page remains readable). Choose from 36+ bundled fonts grouped by feel:
- Display / Headline — Bebas Neue, Anton, Oswald, Righteous, Russo One, Black Ops One, Bungee, Staatliches
- Graffiti / Street Art — Rubik Spray Paint, Rubik Wet Paint, Rubik Burned, Rubik Glitch, Rubik Puddles, Rubik Marker Hatched, Bungee Shade, Bungee Inline, Faster One, Frijole, Sigmar, Modak
- Retro / Arcade — Press Start 2P, Monoton, Audiowide, Major Mono Display, Orbitron
- Serif / Editorial — Playfair Display, Cormorant Garamond, Abril Fatface, UnifrakturMaguntia (blackletter)
- Handwritten / Marker — Permanent Marker, Pacifico, Caveat
- Modern Sans — Space Grotesk, Syne, Rubik Mono One, Unbounded
All the bundled fonts are free Google Fonts — no downloads, no licensing to worry about. For full custom typography, pick the Upload my own .woff2 file… option and supply a font file (woff2 format only, max 500 KB) plus a display name. Need to convert a .ttf or .otf to .woff2? Drop it into transfonter.org first, then upload the woff2 export.
Accent color
Tints the buy button, the "MAY 30 · 10PM" eyebrow text above your title, and links on the
event page. Pick a hex color with the swatch picker, or type it in the box (e.g. #ec6b1c
for the BuzzHive orange, #10b981 for green, #ec4899 for pink). Leave
blank to use the default orange.
Flyer display style
Two modes you can switch between any time:
- Clean — just the image (default): shows your flyer at its natural aspect ratio with a subtle rounded border and drop shadow. Works great for portrait or square flyers.
- Framed — 4:5 box with blurred backdrop: forces your flyer into a 4:5 portrait frame. If the flyer doesn't fill the box, a blurred copy of itself fills the leftover space. Useful for landscape flyers when you want to preserve the column proportions on the page.
Buy button text
Override the default "Continue to checkout" label with anything you want (up to 80 characters). Good for vibes: "Cop tickets", "RSVP", "Reserve your spot", "Lock it in". Keep it short or it'll wrap on mobile.
Promoter blurb
Optional short message (up to 1000 characters) that appears above the ticket form, styled with a left border in your accent color. Use it to welcome buyers, plug your next show, set vibe expectations, mention the dress code, anything. Line breaks are preserved.
Custom CSS (power user)
For promoters who know CSS. Lets you write your own styles to override the defaults — change fonts, layouts, colors, anything. By default, this field is hidden on your account. To unlock it, email our contact form with your promoter name and we'll enable it.
- Always wrap your selectors under
.event-customto scope them to just this event page (e.g..event-custom h1 { ... }) so they don't accidentally break the rest of the platform. - Test your CSS in an incognito window before publishing — bad CSS won't crash the page but might make it look broken.
- Available CSS variables you can use:
--event-accent(your chosen accent color),--evt-bg,--evt-surface,--evt-text,--evt-text-muted,--evt-text-soft.
Where to see your changes
After saving the edit form, click View public page at the top of the edit screen (it only appears for published events). What you see there is exactly what buyers see. Test on mobile too — most ticket buyers are on phones.
7. Add team members
You can give people access to your account at three different permission levels. Only the owner can manage the team.
Roles
- Owner — full access. Can manage events, team, billing, see payouts. Every account has at least one owner.
- Admin — can manage events, view orders, issue refunds. Cannot manage the team or billing.
- Scanner — can only sign in to the door scanner. Cannot see orders, sales, or anything else. Perfect for door staff you don't want poking around your numbers.
Invite someone
| 1 | Go to Team in the sidebar. |
| 2 | In the Invite a team member form, enter their name, email, and pick a role. |
| 3 | Click Send invite. The page will show a one-time password. |
| 4 | Copy that password right away — it's only shown once. Send it to your team member along with the login URL. |
| 5 | They log in at /promoter/login with their email and that temp password, then change it from Settings. |
Changing roles, deactivating
On the Team page, each row has options to change role or deactivate the user. Notes:
- You can't demote yourself if you're the only owner. Promote someone else first.
- You can't deactivate the only active owner — the account would be locked out.
- Deactivated users keep their data; their access just turns off. Re-activate any time.
Soundcloud + Spotify previews
Drop a Soundcloud or Spotify link anywhere in your event description or lineup field — we auto-detect it and turn it into an embedded player on the public event page. No special field, no setup. Just paste the URL in normal text.
Buyers can audition the artists without leaving the page — huge for music events where the decision to buy hinges on "do I know this DJ?" Up to 6 embeds per event so the buy button stays above the fold on mobile.
What we support:
- Soundcloud — track URLs, set/playlist URLs, user pages
- Spotify — tracks, albums, artists, playlists, episodes, shows
Where they appear: in a dedicated "Hear the artists" section below your event details and above the waitlist (if any tier sold out). The section uses neutral dark styling so it reads cleanly against every vibe template.
Live show-day dashboard
On event-day, every event's manage page shows a Live show button in the action bar. Tap it to open a big-number dashboard designed to be propped on your phone at the merch table or door. It auto-refreshes every 30 seconds so you can glance at it during the show without doing anything.
What it shows: a huge "tickets scanned" hero number, plus stat cards for sold / remaining / pending / gross / your payout / cash on hand (from your last door close). At the bottom: a live activity feed of recent sales and scans, merged by timestamp, so you can watch ticket sales and door-scans happen in real time.
Tips:
- The page is meant to be looked at from 6 feet away. Don't try to scroll while you're scanning tickets — leave the dashboard in someone else's hands while you work the door.
- The "Live" badge pulses each time the data refreshes. If it stops pulsing, your phone went to sleep or the tab was backgrounded — the page resumes polling automatically when you switch back.
- Any team member with scanner-or-above role can open the live page. Share with your staff so multiple people can see the same view.
Close the door (end-of-night reconciliation)
On event-day (and any day after), every event's manage page shows a Close door button in the action bar. Click it to record an end-of-night register close:
- Tickets scanned (auto-snapshot) — pulls from the scanner at close time, no typing needed.
- Cash tickets sold at the door — how many tickets your door staff sold for cash tonight (separate from online sales).
- Expected cash $ and Actual cash $ — the variance auto-updates as you type, color-coded red for short and green for surplus.
- Notes (optional) — explain comped guests, lost change, shift splits, or anything else that justifies the variance.
Multiple closes per event are allowed — useful for festival shift handoffs or mid-show counts. Each save is a new row in the history.
No alerts, no judgment. BuzzHive records the variance as-is. The numbers are for YOUR records — we don't flag, email, or audit. Trust-based by design.
Install BuzzHive as a phone app
BuzzHive is a Progressive Web App — you can install it to your phone's home screen for a one-tap, full-screen launch experience that looks and feels native, without us shipping anything to the App Store. The door scanner is the killer feature for this: bouncers tap the BuzzHive icon and they're scanning tickets in under two seconds.
To install:
- Android Chrome: open /promoter/scan on your phone. An "Install BuzzHive Scanner" banner appears at the top with an Install button. Tap it. Done.
- iPhone (Safari): open /promoter/scan, tap the Share icon at the bottom, scroll down, tap "Add to Home Screen." The icon shows up on your home screen like any other app.
- Desktop (Chrome / Edge): the address bar shows a small install icon when you're on a BuzzHive page. Click it to add to your app drawer.
What you get once installed: a BuzzHive icon on the home screen, a full-screen launch (no browser address bar or tabs), faster cold-start loads, and scanner-as-its-own-app behavior. Note that v1 still needs an internet connection to validate tickets — offline scan is on the roadmap.
8. Scan tickets at the door
The scanner runs in any modern phone browser — Safari on iPhone, Chrome on Android. It uses the camera to read QR codes off attendees' phones (or printed tickets). No app to install.
| 1 | On show night, have door staff open buzzhive.info/promoter/scan on their phone. |
| 2 | They sign in with their account (owner, admin, or scanner role all work). |
| 3 | Pick the event from the list. |
| 4 | Tap Allow when the browser asks for camera permission. |
| 5 | Point the camera at the QR code. The screen flashes green for Valid, orange for Already scanned, red for Invalid. The scanner auto-resumes after 1.5 seconds so you can keep moving guests through. |
Manual entry
If a QR won't scan (cracked screen, glare, etc.), tap the Manual entry field below the camera and type the ticket code (it's printed under the QR on every ticket).
Walk-up sales: print a QR for the door
For people who show up without a ticket, you can print a QR code that links straight to your event's sales page. Tape it at the entrance — walk-ups scan it with their phone camera, land on the event page, pick a "Day of event" ticket type, pay through Stripe, and you scan them in like any other buyer.
| 1 | Open your event in the promoter dashboard and click Print door QR in the toolbar (next to View public page). |
| 2 | A pop-up shows a big QR code with the event title and URL. Click Print — your browser's print dialog opens with the QR centered on a clean page. |
| 3 | Print, cut it out, and tape it at the entrance. Walk-ups scan, buy, walk in. |
Page-view funnel
Right above the sales velocity card on every event's manage page, you'll see a Page-view funnel card with three columns: last 24 hours, last 7 days, and all-time. Each column shows three numbers stacked: unique visitors → started checkout → completed (paid). Plus the conversion rate ("X% of visitors bought") in orange and the cart-abandon rate if applicable.
Use it to diagnose where your show is leaking sales:
- Many views, few started checkouts: the page isn't selling the show. Try a stronger flyer, sharper description, or a tighter line-up summary.
- Many started, few paid: cart-abandonment problem. The buyer got to checkout but bailed — usually because the price + fee + Stripe form caught them off guard. Make sure the public price already reflects what they'll pay.
- Few views overall: no one knows the event exists yet. This is a marketing problem — turn on Outreach, email your lists, or share the link in more channels.
Views are deduped per-browser-session with a 30-second cooldown so refreshes don't inflate counts. Search-engine bots are filtered. Social-media unfurl bots (Facebook/Slack previews) DO count, because those represent real human shares. View tracking is anonymous — no buyer identity is stored on view rows.
Sales velocity & sellout projection
Every event's manage page shows a live Sales velocity card up top with momentum stats and a cumulative-sales chart. No setup required — it appears automatically once you have at least one paid order.
What the card shows
- Tickets sold — running count across all your active tiers.
- Capacity — sum of your tier quantities (or the event-level Max capacity if you set one). Shows
∞if any tier is unlimited. - Tickets / day (7d avg) — your average daily sales over the last 7 days that had orders. The momentum number.
- Projected sellout date — when, at your current 7-day pace, you'll hit capacity. Color-coded:
- Green — you're on pace to sell out before doors
- Amber — at this pace you'll have empty seats day-of
- Status badge in the top corner: ON PACE, SLOW, SOLD OUT, UNCAPPED, or EARLY.
The chart
A cumulative line chart showing tickets sold over time, with a green dashed capacity reference line and an orange dashed projection line extending from today to your projected sellout date. The further your live line tracks toward capacity, the closer you are to a sellout. If the projection line never hits capacity before the event date, that's your cue to push harder on promotion — turn on Outreach and work your email lists.
Where your buyers come from
Two places on the dashboard show a Where your buyers come from card: your main Dashboard (aggregated across all your events) and every event's Edit page (scoped to that one show). Both rank the top 8 US states your paid buyers came from with horizontal bars sized to the top state, and show unique buyer count, order count, and revenue per state.
The state is derived two ways. If we've manually classified a buyer (admin override), that wins. Otherwise we auto-infer from the buyer's phone area code at order time. If we can't determine a state, the buyer lands in an Unknown row at the bottom — that bucket shrinks as buyers repeat-purchase or leave more signals.
The card is mostly useful for two decisions: where to run your next show (heavier states are stronger markets) and where to focus your promotion (concentrate your Outreach and email pushes on the geography where you already have demand). It doesn't appear on events with zero paid orders yet.
Artist referrals & leaderboard
When you book a five-artist bill, you're really booking five promoters. Each artist has their own audience, but they can't promote your show effectively if you can't show them how much they're moving the needle. Artist referrals give each performer (or street-team member) a personal share link. Sales through their link show up on a leaderboard you and they can both watch in real time.
Setting up referrers
- From an event's manage page, click Referrers in the top action bar.
- Add each artist on the bill — name + optional reward notes ("5 tickets = $25 venmo, 10 = comp next show").
- BuzzHive auto-generates a url-safe slug and gives you a copy-able share link like
buzzhive.info/e/your-event?r=maya. - Send each artist their personal link via DM. Tell them to drop it in their stories, link in bio, and any group chats.
What the artist sees
Every referrer gets a public stats page at buzzhive.info/r/{event-slug}/{artist-slug}.
It shows them — and only them — their tickets-sold count, orders, leaderboard rank, and the
reward notes you set up. There's a big Copy link button so they can re-share
without bothering you. No customer PII is exposed; just their own numbers.
The leaderboard
Back on your Referrers page you see a ranked list of every referrer with tickets attributed, orders, and revenue. Plus a summary row at the top: total referrers, attributed tickets, attributed orders, attributed revenue. Use this to:
- Reward your top movers. Pay out comps, Venmo bonuses, or guest list spots based on real performance numbers.
- Plan your next bill. If Maya brought 30 tickets last show, book her again. If someone brought zero despite three weeks of "I'll share it!", that's data.
- Compare across shows. Track which artists consistently mobilize their audience and which don't.
How attribution works
When a buyer clicks an artist's link, the referrer slug is stored in their browser session. When they complete checkout — within minutes or days, on the same device — the order is tagged to that referrer. If a buyer comes in via multiple links, the most recent one wins. If they come in via no link at all, the order is unattributed (NULL) and just doesn't appear on the leaderboard.
Email your buyers
BuzzHive ships three email tools for promoters — all free, all included:
- Per-event Email buyers — fast path for "send to everyone who paid for THIS show." Linked from each event's edit page.
- Outreach (sidebar link) — full audience control: pick paid buyers, abandoned-cart contacts, your full contact list, an uploaded email list, or any addresses you type by hand. Sends can scope across all your events.
- Email lists (sidebar link) — bring your own audience. Upload CSV exports from Eventbrite, mailing list signups, door-cash leads, anyone whose email you already legally have, and turn them into a campaign that points at your BuzzHive event pages.
Per-event "Email buyers"
From any event's edit page, click Email buyers in the top action bar. You'll land on a composer where you write a subject + message and send to every confirmed (paid) buyer for that single event. Best for day-of-show reminders, lineup changes, "see you tonight" hype, post-event thank-yous. Max 3 sends per event per 24h.
Outreach (the full toolkit)
Open Outreach from the sidebar. Pick one of five audiences:
- Paid buyers — everyone who completed checkout, across all your shows or scoped to one. The headline broadcast tool: new show announcements, year-end recaps, free comp invites for VIPs.
- Didn't follow through — buyers who started checkout but never paid (their order is in pending or failed). Use this for win-backs ("hey, ticket still available, here's a 15% code"). People who later DID pay are automatically excluded so they don't get a "you forgot to pay" message after paying.
- Pick from list — searchable list of every contact who's ever placed an order with you (paid + abandoned). Click-to-select individuals. Great for "I want to invite these 5 friends-of-friends to a guest list" or curated VIP outreach.
- Email list — send to one of your uploaded email lists (Eventbrite exports, door-cash leads, mailing list signups). This is how you market your BuzzHive show to your existing audience that has never bought through BuzzHive before.
- Type emails — paste or type any addresses (comma, semicolon, space, or newline separated). Useful for offline contacts (flyer leads, DM follow-ups) where the buyer isn't in your system yet.
Email lists (bring your own audience)
You've already got an audience — people who came to past shows but bought through Eventbrite, friends from the door, mailing-list signups from your Linktree. BuzzHive lets you upload those contacts as a named email list, then send campaigns to that list pointing at your BuzzHive event pages. This is the single most important free marketing tool in the platform.
Creating a list
- Open Email lists in the sidebar.
- Click New list, give it a name (e.g. "House Heads", "2024 Past Buyers", "Newsletter").
- Open the list. You can add contacts two ways:
- Upload CSV — drop in an export from Eventbrite, Mailchimp, Google Sheets, anywhere. BuzzHive auto-detects the email and name columns (looks for headers like
email,Email Address,first name, etc.). - Paste — paste a block of
email,namelines, or just plain emails one per line, or even Outlook-style"Jane Smith" <jane@example.com>.
- Upload CSV — drop in an export from Eventbrite, Mailchimp, Google Sheets, anywhere. BuzzHive auto-detects the email and name columns (looks for headers like
- Tick the I have permission to email these contacts box. This is a CAN-SPAM requirement and BuzzHive logs the attestation against your account.
- Submit. Invalid addresses are skipped with a warning; duplicates are silently deduped.
Sending to a list
From a list's detail page, click Send a campaign → and you'll land in Outreach with that list preselected. Write your subject + message, optionally scope it to one event (Outreach prepends the event context block automatically), and send. Every send is logged in Past campaigns.
Unsubscribes (this is important)
Every email you send via BuzzHive — including list campaigns — has a one-click unsubscribe link. When someone unsubscribes:
- They're marked unsubscribed in every list you own that contains their email.
- They're added to BuzzHive's global suppression list, so they're also filtered out of Paid buyers / Didn't follow through / Pick from list audiences across all your future sends.
- You can still see them in the list (status shows as unsubscribed), you just can't re-mail them. Don't try to work around this — it's federal law (CAN-SPAM in the US, CASL in Canada, similar elsewhere).
Permission — what counts
Examples of audiences you can upload:
- People who bought a ticket to your past shows on Eventbrite / Dice / your old door system
- People who signed up to your mailing list at a show or on your Linktree
- People who said "yes please" when you asked if you could put them on your list
Examples of audiences you cannot upload:
- Scraped emails from other promoters' Facebook events
- Lists you bought from a vendor
- Random Instagram followers who never gave you their email
BuzzHive is the messenger here — if your audience reports your sends as spam, your sender reputation tanks and so does every other promoter's. Be honest about who opted in.
BuzzHive can promote your show too
BuzzHive can send a curator-framed recommendation ("Upcoming shows in [your state] we think you'd like") from BuzzHive to every past buyer on the platform whose attended-events state matches your show's state. That gets your event in front of people who:
- Have bought tickets through BuzzHive before in your state (so they're already on the platform + already going to shows there)
- Aren't already buying a ticket to your event (no one gets a "go to this show!" email about a show they're already going to)
- Aren't globally unsubscribed
The recommendation is from BuzzHive (not you), so your sender reputation isn't on the line, and recipients have a clear unsubscribe path through the global suppression list they always control.
Click + conversion tracking
Every Use my event page as the email send is automatically tracked end-to-end. The "Get Tickets" button in each email is wrapped with a one-use link that:
- Records a click the moment the recipient taps it (and a second time if they come back — we count repeat clicks separately).
- Drops a 7-day attribution cookie in the recipient's browser. If they complete checkout within that window — on any device tied to the same session — the resulting order is tagged with the campaign that drove the click.
- Surfaces all of it on the Campaigns monitor as a clicks → orders → revenue funnel below each card. Card stays clean (delivery stats only) until there's something real to show.
Bottom line: you can finally see which sends actually moved tickets, not just which sends were "delivered." Plain custom-message sends aren't tracked yet (they don't have a dedicated CTA link to wrap) — use the event-page mode whenever you want to measure the marketing.
"Last sent" on your lists
The Email lists index now shows a Last sent tag on every list — "3d ago" / "12h ago" / "Never sent" — so you can tell at a glance which lists are stale and worth re-engaging. Updates automatically every time you send a campaign that targets the list.
Two ways to compose any email
Both Outreach and the per-event Email buyers tool let you pick HOW the email looks. The toggle at the top of the composer offers two modes:
- Write a custom message — the classic flow. Type your subject and body. Best when you need to say something specific (lineup change, doors update, post-event thank-you).
- Use my event page as the email — BuzzHive renders the chosen event AS the email: cover image, title, date, venue, lineup, a "Get Tickets" button, and a "From $X" price tag. You don't write a subject or body. You CAN add an optional one-line personal note (up to 500 chars) that appears in an orange call-out above the event card. Best when you want to send your audience an inbox-ready version of your event page with two clicks instead of writing copy.
Use the event-page mode for any "go look at this show" send. Use the custom-message mode for anything that's about the show but not the show itself (logistics, reminders, follow-ups).
How sends work (both tools)
- Subject up to 200 chars, body up to 10,000 chars, plain text with preserved line breaks.
- BuzzHive prepends an event context block when a send is scoped to an event (auto-skipped when it's a cross-event broadcast).
- The send goes via BuzzHive's mail infrastructure — branded, authenticated, and unlikely to land in spam the way a bulk send from your personal Gmail might.
- Every email includes a one-click unsubscribe link. Unsubscribed contacts are silently filtered out of all future sends across both tools.
- Each send is logged in the Past campaigns sidebar so you can see exactly what you've sent and when.
- Don't like an old entry cluttering the monitor? Hover any campaign card and click Delete — it only removes the history row, emails already delivered stay delivered. There's also a small × on the per-event "Past sends" sidebar for the same purpose.
Limits + etiquette
- Per-event tool: max 3 sends per event per 24 hours.
- Outreach tool: max 5 outreach sends per 24 hours total (separate counter from the per-event limit).
- Mass emails should feel valuable to the recipient. "Doors at 9pm, parking out front" = valuable. "We sell t-shirts btw" = unsubscribes.
- The "From" name is BuzzHive, but the message body identifies your promoter brand, and reply-to is set to your contact email so buyers can respond directly to you.
- Invalid addresses you type into the manual mode are skipped with a warning — your send still goes through to the valid ones.
Run Up — free promo tool (coming soon)
Run Up is a free promo tool we're building for promoters. The idea is simple: tell it about your show and it generates ready-to-post captions plus an image for your event, tuned to the underground audience — then you copy-paste it straight to your own social accounts. Your event, your channels, your voice.
It's not live yet. When it's ready it'll show up right in your promoter dashboard, free like everything else here. Until then, lean on Outreach and your email lists to get the word out.
9. View orders & refunds
The Orders page in the sidebar shows every order across every event you've ever run — paid, refunded, pending, the lot. Each row gives you:
- Order # and order token (e.g.
TIX-9A79-QK3R) — click either to open the order detail page - Buyer's name, email, and phone
- The event the order is for
- How many tickets were sold in that order
- Total paid
- Status (Paid, Pending, Refunded, Failed, etc.)
- When it was paid, and when the ticket email was last sent
- Per-row action button: Resend (paid orders), Remove (pending or failed), or nothing (refunded)
Use the search box up top to find a buyer by name, email, or order token. Filter dropdowns let you narrow to a specific event or status. Orders are paginated 50 per page.
The dashboard's Recent orders card still shows your 8 most recent paid orders for a quick glance — click All orders → to jump to the full list.
Download CSV exports
Below the filter form on the Orders page you'll see two download buttons. Both honor whatever search + event + status filters you've set above, and the file opens in Excel, Numbers, Google Sheets, or any other spreadsheet app.
- ↓ Export orders — one row per order. Useful for accounting, bookkeeping, or building your own sales reports. Columns include order ID + token, status, all timestamps (created / paid / refunded / email sent), buyer info, the event title + date + venue, ticket count, the full money breakdown (subtotal, discount code + amount, service fee, total paid, platform fee, your payout), and the campaign that attributed the sale (if it came from an Outreach email click).
- ↓ Export attendees — one row per ticket. Useful for door staff and will-call lists. Columns include the ticket code, ticket type, ticket status (valid / scanned / refunded / voided), face value, scan timestamp, plus the parent order's buyer info and event details.
Tip: on any single event's manage page, the ↓ Attendees (CSV) button in the top action row downloads just that event's paid-ticket attendee list. That's the fastest way to get a clean door list for one show.
Order detail page
Clicking any order # in the listing opens its detail page at
/promoter/orders?id=N. It mirrors the admin view and shows everything in one
place: event, buyer info, the full list of tickets in the order (with their codes and
scan status), payment status, full receipt breakdown including your payout, and any
paid/refunded/email-sent timestamps. The action button at the top-right is status-aware
— Resend tickets on paid, Remove order on failed
or pending, nothing on refunded.
What "pending" orders are (and how they get cleaned up)
When a buyer clicks "Continue to checkout" on your event page, the system creates a pending order and reserves their tickets immediately so two people can't grab the last seat at the same time. The buyer is then sent to Stripe to actually pay.
If they finish paying → status flips to Paid and they get their ticket email.
But sometimes buyers close the tab, get their card declined, change their mind, or just time out mid-checkout. When that happens, the order would otherwise sit in Pending status with its tickets held — meaning that inventory is "held" even though no money came in. There are three layers that resolve this for you:
Heads up: if a buyer is still mid-checkout on Stripe's page when you hit Remove on their pending order, their payment will fail. Only use Remove on pending orders you're confident are abandoned.
All three paths are safe by design — they only touch pending or failed orders and never touch a paid order. Inventory math uses a floor at zero so you can't accidentally go negative. Refunded orders cannot be removed (real revenue + Stripe history must stay in the books).
Win-back emails for abandoned checkouts
Whenever the 5-minute cleanup cron auto-fails a pending order (path #1 above), the platform automatically emails the buyer a friendly "Didn't finish checking out?" reminder with the event details and a button back to the event page. This is a cart-recovery tool — some buyers really did just get distracted and will complete the purchase once reminded. It runs on every event by default; you don't need to enable anything.
- The order was just failed by the cron (not by you manually clicking Remove — that's an intentional removal, not an abandonment)
- The event hasn't happened yet and its sales window is still open
- At least one of the originally-requested ticket types still has inventory
- The buyer hasn't received a win-back for this event in the last 24 hours
- The buyer hasn't unsubscribed from win-back emails
You'll see a winback_sent_at timestamp on a failed order in the database if a
reminder was sent for it. If you're curious why a particular buyer didn't get a reminder,
check the server's PHP error log for entries starting with winback skip order=...
reason=... — the reason will be there (event past, sold out, rate-limited,
buyer unsubscribed, etc.).
Issuing a refund
Open the order detail page (click any paid order from your Orders list) and click the red Refund button at the top. You'll see a confirmation dialog showing the buyer's name, email, and the amount that will be refunded. Click OK and the refund fires immediately through Stripe.
The refund happens in real time. Within a few seconds (via Stripe webhook) the order's status flips to Refunded, and within 5–10 business days the money lands back on the buyer's card.
Refunding an order automatically:
- Marks the order as refunded
- Voids the associated tickets (they can't be scanned at the door)
- Returns the inventory to the tier so someone else can buy the spot
- Sends the buyer a refund confirmation email
Co-promoter splits
Running an event with one or more partner promoters? Click Co-promoter splits in the event action bar. Add each partner by name + email + share %. The page shows what's owed to each on every paid order — viewable on both a gross basis (% of buyer total) and a payout basis (% of what actually landed in your Stripe).
v1 = manual settlement. BuzzHive doesn't route the money. Stripe still pays the FULL destination charge to your account (the same way it always has), and you pay each co-promoter their share off-platform — Venmo, Zelle, cash, whatever you've agreed on. This page is the running ledger you both reference.
Why manual? Routing through Stripe Connect to multiple destinations would require each co-promoter to onboard separately AND would break the merchant-of-record protections we have on destination charges (you keep that protection in the current design). If a real multi-promoter customer pulls hard for automation later, we'll revisit.
Artist performance contracts
Every event has an Artist contracts button in the action bar. Click it to draft a performance agreement: enter the artist's name, email (optional), the fee, load-in + set times, and any additional terms (hospitality, comp tickets, kill fee, payment method). Event details (title, date, venue) auto-fill from your event.
One click generates a plain-language working agreement — written for collaborators, not lawyers. The artist receives the contract as an email and replies "accepted" to confirm. Or you can hit Print / Save PDF on the contract preview to get a clean single-page PDF for wet-signature at the door.
v1 has no e-signature flow. Acceptance is informal — the artist's email reply, or a signed printed copy. Cancellation marks the contract as cancelled but preserves the record.
The contract is yours — BuzzHive doesn't disburse the fee or hold any money for it. It's a record of the agreement between you and your artist.
Carbon offset at checkout
Every public event page's checkout form now shows a small opt-in checkbox: "Add a $1 carbon offset 🌱". When a buyer ticks it, an extra $1 is added to their total — and that $1 flows entirely to a verified climate partner, NOT to you and NOT to BuzzHive as profit.
Your payout doesn't change. The $1 carbon offset is purely additional money the buyer chooses to add. BuzzHive holds the accrued offset funds on its platform balance and remits monthly to the climate partner. You see the carbon offset as a line item on the order receipt, but it doesn't affect your numbers.
Marketing angle: BuzzHive is currently the only ticketing platform that actually retires carbon credits on tickets. Promoting that on your event page can shift the type of audience you attract — particularly for outdoor festivals and climate-conscious crowds.
Refunds: if a buyer's order is refunded, the offset portion of their payment returns to them automatically. You're never on the hook for offset money on a refunded order.
Buyer-to-buyer transfers
When a buyer can't make a show, they don't have to ask you for a refund — they can transfer their tickets to a friend directly. On their order receipt page (the link in their ticket email), paid orders show a "Transfer to a friend" form. They enter their friend's email + name, click Transfer, and the platform handles the rest:
- Original QR codes are voided immediately — they will not scan at the door.
- Fresh QR codes are minted in the friend's name.
- The friend gets an email with the new tickets.
- The order's buyer name + email update to the new owner.
Anti-scalper by design: transfers are FREE, no price field, no marketplace listing. The platform doesn't facilitate resale. All tickets on an order transfer together (no partial transfers in v1).
You can see the history: the order detail page (Orders → click any order) shows the transfer chain if the order has ever been transferred. Useful for disputes or just keeping track of who's actually walking in.
Waitlist when sold out
The moment a ticket tier sells out on your event page, a Join the waitlist section automatically appears at the bottom of the event page. Buyers can leave their email + name + how many tickets they wanted. They go into a per-tier queue ordered by when they signed up.
When a spot opens up — via a refund you issued, an abandoned-cart auto-cleanup, or you manually removing an order — we immediately email the next person in line for that tier. The email has a 1-hour countdown and a button that drops them back on your event page with a "You've been notified" banner. If they don't claim within 1 hour, we automatically email the next person on the list. The queue keeps moving without you doing anything.
To see your waitlist, open any event and click the Waitlist button in the top action row. The page shows everyone signed up, grouped by tier, with their current status: Waiting, Notified (email sent, 1-hour window live), Bought (converted after notification), Expired (didn't claim in time), or Removed (you took them off).
The waitlist is also a great pre-launch sales signal — even before any tier sells out, you can artificially close a tier briefly to gauge demand. Just be careful not to annoy buyers who are actively trying to purchase.
10. Get paid
Stripe handles your payouts on whatever schedule you set in your Stripe dashboard — daily, weekly, or monthly. Default is 2 business days after each sale, but new accounts may have a longer hold while Stripe verifies.
The Payouts page shows:
- Your lifetime gross sales, earnings, and platform fees
- A log of every payout Stripe has sent
- A direct link to your Stripe dashboard for the deeper view
11. Resend ticket confirmation emails
If a buyer didn't get their tickets, deleted the email by mistake, or can't find the QR codes on show day, you can resend the original email yourself in one click.
| 1 | Open Orders from the sidebar. |
| 2 | Find the buyer's order — use the search box (name, email, or order token like TIX-9A79-QK3R), or scroll the list. |
| 3 | Click the Resend button at the right end of that row. |
| 4 | Confirm the popup. The ticket email goes back out to the address on the order, and the row briefly highlights green to confirm. |
12. Billing & pricing
BuzzHive is built free-first, and there's only one plan: free, for everyone. Every feature documented in this guide — webhooks, custom event pages, the door scanner, multi-user teams, refunds, CSV exports, all of it — is included. There's no paid upgrade, no Pro tier, no subscription. You pay only the per-ticket fee on tickets you actually sell.
One free plan
- $0/month — no setup cost, no contracts, no subscription
- Every feature documented in this guide is included
- Unlimited events, unlimited ticket types per event
- Per-ticket platform fee of 2% + $0.99, charged only on tickets you actually sell
- Stripe processing (2.9% + $0.30) is separate — same as everywhere
13. Settings
The Settings page is where you change:
- Your promoter display name (what buyers see)
- Public contact email (shown on your promoter page and ticket emails)
- Your password
14. Webhooks
Webhooks let your event activity flow into your own tools in real time — no manual checking, no exports, no waiting. Every time a buyer pays, gets refunded, or a ticket is scanned at the door, we POST a signed JSON payload to a URL of your choosing. You can wire that into:
- Discord — get a channel ping every time someone buys a ticket
- Zapier / Make / n8n — pipe into Google Sheets, Notion, Airtable, your CRM, anywhere
- Your own server — sync into your existing tools
Setting up a webhook
| 1 | Go to Webhooks in your sidebar. |
| 2 | Scroll to Add a webhook. Enter the URL where you want us to POST event payloads. |
| 3 | Add an optional description (so you remember what this hook is for) and pick which events to subscribe to. |
| 4 | Click Create webhook. You'll see a signing secret on the next page — copy it now. After you leave the page, only a fingerprint shows; you'd need to rotate to a new secret if you lose it. |
| 5 | Click Send test event at the top right of the webhook page. Check your endpoint received a webhook.test payload. If it did, you're live. |
Event types you can subscribe to
order.paid— when a buyer completes checkout and payment is captured. The payload includes order id, token, buyer info, totals, and your payout amount.order.refunded— when an order is refunded (full or partial). Payload includes the refund amount and the order's new status.ticket.scanned— when someone's QR is scanned at the door. Payload includes the ticket code, the event, the attendee name, and the timestamp.event.published— when you flip an event from draft to published. Useful for auto-posting "show on sale" announcements.event.cancelled— when you cancel an event. Useful for auto-removing it from external listings.
Payload format
Every payload is a JSON object with this shape:
{
"event": "order.paid",
"data": { ...event-specific fields... },
"promoter_id": 5,
"timestamp": "2026-05-20T18:30:00+00:00"
}
And these HTTP headers:
Content-Type: application/jsonX-Webhook-Event: order.paid(the event type, same as the JSONeventfield)X-Webhook-Signature: sha256=<hex>(HMAC-SHA256 of the raw body, signed with your secret)X-Webhook-Delivery: 12345(delivery row id — useful for idempotency)User-Agent: BuzzHive-Webhook/1.0
Verifying the signature (recommended)
Anyone could POST to your URL pretending to be us. To check it's really
from BuzzHive, recompute the HMAC on your end using your secret and
compare to the X-Webhook-Signature header. Here's how:
PHP:
$body = file_get_contents('php://input');
$sigHeader = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';
$expected = 'sha256=' . hash_hmac('sha256', $body, $YOUR_SECRET);
if (!hash_equals($expected, $sigHeader)) {
http_response_code(401);
exit('bad signature');
}
Node.js:
const crypto = require('crypto');
const expected = 'sha256=' + crypto
.createHmac('sha256', YOUR_SECRET)
.update(req.rawBody)
.digest('hex');
if (expected !== req.headers['x-webhook-signature']) {
return res.status(401).send('bad signature');
}
Retry policy
If your endpoint returns anything outside the 2xx range, or doesn't respond within 15 seconds, we retry with exponential backoff: 1 min → 5 min → 15 min → 1 hr. After 5 failed attempts the delivery is marked Abandoned. You can always retry a failed/abandoned delivery manually from the Deliveries tab on the webhook page.
Discord example (quickest win)
Want a Discord ping every time someone buys a ticket? Easiest path:
| 1 | In Discord: Server Settings → Integrations → Webhooks → New Webhook. Name it something like "BuzzHive Orders", pick a channel, copy the webhook URL. |
| 2 | Note: Discord webhooks expect a specific payload shape, so you'll likely want to pipe through Zapier / Make / n8n to format the message. Or set up a tiny script (Cloudflare Worker, Vercel function, etc.) that receives our payload and forwards a formatted message to Discord. |
| 3 | For a no-code option: use Zapier's "Webhooks by Zapier" trigger with our URL → "Discord" action to post the formatted message. Free tier works for low volume. |
Managing webhooks
- Pause: uncheck "Active" on the edit page. Stops new deliveries without deleting the config.
- Rotate secret: generate a new signing secret. Your receiver must update to the new secret immediately or signatures will start failing.
- Delete: removes the webhook and all queued/historical deliveries. Cannot be undone.
- Test: fires a sample
webhook.testpayload right now so you can verify your endpoint is reachable + signature checks pass. - Delivery log: every send attempt is logged with the response status, error (if any), and attempt count. Failed deliveries have a Retry button.
15. Troubleshooting
Buyer says their QR code doesn't work
- Ask which event and what the order number or buyer email is.
- Open Orders, search for them, confirm the order has a green Paid badge.
- Click Resend on their row to send the email again.
- If the buyer still can't open the email, ask them to go to
buzzhive.info/order.php?token={order_token}directly — you can copy the token straight from the row.
The scanner says "Camera not supported"
- Make sure the browser is on
https://— cameras don't work on plain http. - iPhone: must use Safari (Chrome on iOS can't access the camera). Android: Chrome works fine.
- Check that the browser has camera permission. iPhone: Settings → Safari → Camera → Allow.
An event is published but the buy button is missing
- Check that Enable ticket sales is checked on the event edit page.
- Check that at least one ticket tier is marked Active.
- Check the sales window: if Sales start is in the future, the buy button won't appear until then.
- Check that you've completed Stripe onboarding — without it, no payment can be processed.
I never got the Stripe payout notification
- Check the Payouts page first — it shows payouts Stripe has confirmed.
- Log into your Stripe dashboard for the most up-to-date status. Stripe sometimes holds funds while verifying.
- Make sure the bank account on your Stripe profile is still valid — closed accounts will pause payouts.
16. Contact support
For anything not covered above — broken pages, refund requests, weird payout questions, feature requests — reach out via the contact form. Include your promoter name and the relevant event or order number and we'll get back to you within one business day.
Last updated June 16, 2026. Spotted something out of date? Email our contact form.