Ticket Sales & Door Scanning — Complete Guide
FuriosaCRM includes a complete ticketing system that lets you sell tickets directly from your event pages, accept payments via Stripe, send QR-coded e-tickets by email, and scan attendees in at the door — even when you’re offline. This guide covers the entire ticketing workflow from creating your first event to checking in the last guest.
Overview
The ticketing system is built around four core concepts:
- Events — Each event has its own ticket shop, ticket types, promo codes, and order management.
- Ticket Types — Multiple ticket types per event (e.g. General Admission, VIP), each with its own price, capacity, and optional pricing tiers.
- Orders — When a customer purchases tickets, an order is created containing individual tickets with unique QR codes.
- Scanner — A mobile-friendly web app that scans QR codes at the door and works offline after initial setup.
Payments are handled via Stripe Connect, which means ticket revenue goes directly to your connected Stripe account. FuriosaCRM can optionally add a service fee that is either absorbed by the organiser or passed to the customer.
Creating an Event
To create a new event, navigate to Events in the sidebar and click Create Event. The event wizard guides you through four steps:
Step 1: Event Details
- Event Name — The title displayed on your ticket shop page and on printed tickets.
- Event Date & Time — When the event takes place. The ticket shop automatically shows an “Event Ended” message after this date.
- Venue Name & City — Displayed on the ticket shop and in confirmation emails.
- Description — A rich-text description shown on the public ticket shop page.
- Cover Image — A banner image displayed at the top of your ticket shop (recommended 1200×600px).
Step 2: Ticket Types
Add one or more ticket types with the following settings:
- Name — e.g. “General Admission”, “VIP”, “Early Bird”
- Price — Set in your event’s currency. Enter 0 for free tickets.
- Quantity — Total number of tickets available for this type.
- Min/Max Per Order — Control how many tickets a single customer can buy (defaults: min 1, max 10).
- Description — Optional text shown below the ticket name (e.g. “Includes backstage access”).
Step 3: Pricing Tiers (Optional)
Pricing tiers let you automatically change the price of a ticket type based on quantity sold. For example, the first 100 tickets might be £25 (Early Bird), then the price rises to £35 (Standard), then £45 (Final Release).
To configure tiers, edit a ticket type and enable Pricing Tiers. Each tier has:
- Tier Name — Displayed on the ticket shop (e.g. “Early Bird”)
- Price — The price for tickets in this tier
- Quantity Threshold — After this many tickets sell, the next tier activates
The ticket shop automatically shows the current active tier name alongside the ticket type and switches to the next tier as thresholds are reached.
Step 4: Settings
- Currency — GBP, EUR, USD, and more. Set once per event.
- Fee Mode — Choose whether the platform service fee is absorbed by you or passed to the customer.
- Platform Fee Percentage — The service fee percentage (set by your admin).
- VAT — Enable VAT and set the rate if applicable. VAT is calculated on the subtotal plus service fee.
- Contact Details — Your organisation name, support email, and phone number. Displayed in the ticket shop footer and on confirmation emails.
Stripe Connect Setup
Before you can sell tickets, you need to connect your Stripe account. Navigate to Stripe Connect in the sidebar. If you don’t have a Stripe account yet, you’ll be guided through creating one.
- Click Connect Stripe Account.
- You’ll be redirected to Stripe’s onboarding flow where you enter your business details, bank account, and identity verification.
- Once complete, you’ll be redirected back to FuriosaCRM with your account connected.
Once connected, your Stripe account ID is shown on the settings page and all ticket revenue (minus Stripe’s processing fees and the platform service fee) is deposited directly into your connected bank account.
The Ticket Shop
Each event has a public ticket shop page at /tickets?event=ID. The page displays:
- Cover image and event details (name, date, time, venue)
- Event description
- Available ticket types with prices and remaining quantities
- Quantity selectors with min/max enforcement
- A compact sticky order summary showing the total and item count
Order Summary
The order summary appears as a sticky bar at the bottom of the screen as soon as a customer selects at least one ticket. It shows the total price and number of tickets, with a Continue to Checkout button. Customers can tap the summary to expand a detailed breakdown including line items, discounts, service fees, and VAT.
Checkout Flow
When the customer clicks Continue to Checkout, they proceed to the checkout form:
- Customer Details — First name, last name, email (required), and phone (optional).
- Promo Code — Customers can enter a promotional code for a discount.
- Payment — Apple Pay / Google Pay (via Stripe Payment Request API) or standard card entry. For free tickets, the payment section is hidden.
- Confirmation — After successful payment, a confirmation screen shows the order reference number. A confirmation email with PDF ticket attachments is sent immediately.
Promo Codes & Discounts
Create promo codes to offer discounts on your events. Navigate to your event and click the Promo Codes tab.
Creating a Promo Code
- Code — The code customers enter at checkout (e.g. EARLYBIRD, VIP50). Case-insensitive.
- Discount Type — Percentage (e.g. 20% off) or Fixed Amount (e.g. £10 off).
- Discount Value — The percentage or fixed amount.
- Max Uses — How many times the code can be used in total. Leave blank for unlimited.
- Min Order Amount — Minimum order subtotal required before the discount applies.
- Expiry Date — Optional date after which the code stops working.
Promo codes are validated in real-time when the customer clicks Apply. The order summary updates immediately to reflect the discount. If the code is invalid, expired, or has reached its usage limit, the customer sees an appropriate error message.
E-Tickets & QR Codes
When an order is confirmed, FuriosaCRM automatically generates individual e-tickets for each ticket purchased. Each ticket includes:
- A unique QR code containing the ticket’s check-in code
- The event name, date, time, and venue
- The ticket type and holder’s name
- The order reference number
Tickets are sent as PDF attachments in the confirmation email. Each PDF contains one ticket per page, so a customer who buys 3 tickets receives a 3-page PDF. The email is sent using Amazon SES with proper sender authentication.
Order Lookup
Customers can look up their order at any time using the order reference number. The lookup page shows the full order details and allows them to re-download their tickets.
Linking Pages to the Ticket Shop
FuriosaCRM’s page system supports three modes: Signup, Pre Sale, and Gen Sale (General Sale). When switching to Pre Sale or Gen Sale mode, you have two options:
- Display Custom Page — Shows your custom page blocks (the default behaviour). Useful for showing event info, countdowns, or marketing content.
- Link to Event Tickets — Automatically redirects visitors to the ticket shop for a selected event. Choose an active event from the dropdown.
To configure this, go to My Pages, select a page, and click the mode you want to switch to (e.g. “Gen Sale”). A modal will appear asking you to choose between the two options. If you choose “Link to Event Tickets”, select the event you want to link to.
If the linked event is no longer active (e.g. it has ended or been deactivated), the page automatically falls back to displaying the custom page blocks instead of redirecting to an inactive ticket shop.
Managing Orders
View all orders for an event on the Orders tab in the event detail page. Each order shows:
- Order number and status (confirmed, pending, cancelled)
- Customer name and email
- Ticket types and quantities
- Total amount paid
- Check-in status for each ticket
- Payment timestamp
You can search orders by customer name, email, or order number. The event dashboard shows real-time statistics including total revenue, tickets sold, check-in rate, and remaining capacity.
Door Scanning
FuriosaCRM includes a dedicated ticket scanner that runs on any smartphone browser. The scanner uses the device camera to read QR codes from attendees’ e-tickets and validates them against the event’s ticket database.
Setting Up the Scanner
- Navigate to your event detail page in the admin panel.
- Find the Scanner URL in the event settings. This is a unique URL containing a secure scanner key.
- Share the URL with your door staff — they simply open it on their phone’s browser. No app installation required.
- On first load, the scanner will download all tickets for offline use. This requires an internet connection.
- Grant camera permission when prompted.
How Scanning Works
When a QR code is scanned, the scanner displays a full-screen result:
- Green “ADMIT” — The ticket is valid and has not been used. The guest should be let in.
- Red “DO NOT ADMIT” — The ticket has already been scanned, is invalid, or doesn’t exist. The guest should not be admitted.
The result screen stays visible until the door staff taps to dismiss it, ensuring they have time to make the admission decision before moving to the next attendee. This prevents accidental double-scans.
Manual Entry
If a QR code is damaged or won’t scan, door staff can manually enter the 16-character ticket code using the manual entry field at the bottom of the scanner. This performs the same check-in validation as a QR scan.
Offline Mode
The scanner is designed to work reliably even with poor or no internet connectivity:
- Ticket data is stored locally using IndexedDB in the browser. All validation happens locally against the downloaded ticket database.
- Check-ins are queued — When offline, successful check-ins are saved to a sync queue that automatically uploads when connectivity returns.
- Service Worker caching — The scanner page itself is cached so it loads instantly even without internet.
- Online/offline indicator — The scanner shows a clear status indicator (green for online, amber for offline) so door staff know whether they’re connected.
Scanner Statistics
The scanner shows real-time (or locally-tracked when offline) check-in statistics:
- Total tickets for the event
- Number checked in
- Number remaining
- Check-in percentage
Event Settings & Configuration
Event Status
Events can be in one of three states:
- Draft — Not visible to the public. Use this while setting up your event.
- Active — Live and accepting orders. The ticket shop is accessible.
- Paused — Temporarily hidden. Existing orders remain valid.
Preview Mode
When an event is in Draft status, you (and your team members) can preview the ticket shop by visiting the ticket shop URL while logged in. The page shows a “Preview Mode” banner and disables checkout so you can verify everything looks correct before going live.
Capacity Management
Each ticket type has its own capacity (quantity). The ticket shop automatically:
- Shows remaining tickets in real-time
- Disables the add button when a ticket type sells out
- Shows a “Sold Out” badge for exhausted ticket types
- Prevents overselling by validating stock at checkout time
Tickets are temporarily reserved during the checkout flow (typically 15 minutes) to prevent overselling during high-demand sales. If the customer doesn’t complete payment within the reservation window, the tickets are released back to the pool.
Security & Best Practices
- Scanner URLs contain a unique key — Each event has a cryptographically random scanner key. Only share the scanner URL with trusted door staff.
- QR codes are unique per ticket — Each ticket has a unique 16-character hex code that can only be used once.
- Referrer protection — The scanner page includes
no-referrermeta tags to prevent scanner keys from leaking to third-party CDNs. - Payment security — All payments are processed by Stripe with PCI-compliant card handling. Card details never touch FuriosaCRM servers.
- Rate limiting — Checkout submissions are rate-limited to prevent abuse.
- Webhook verification — Stripe webhook signatures are verified in production to prevent spoofed payment confirmations.
- Reservation timeouts — Unpaid reservations are automatically released to prevent stock being held indefinitely.
Troubleshooting
Customer says they didn’t receive their tickets
Check the order status in the admin panel. If the order is confirmed, the email was sent via Amazon SES. Ask the customer to check their spam/junk folder. You can look up the order by reference number and verify the email address is correct.
Scanner won’t read QR codes
- Ensure the browser has camera permission (check the address bar for the camera icon).
- Try switching cameras using the camera toggle button if the device has multiple cameras.
- Make sure there is adequate lighting — QR scanners need reasonable contrast.
- Use the manual entry option as a fallback.
Scanner shows “DO NOT ADMIT” for a valid ticket
This usually means the ticket has already been scanned. Check the check-in statistics. If the ticket was scanned in error, you would need to reset it from the admin panel order view.
“Payment system could not load” error
This means the Stripe.js library failed to load, usually due to an ad blocker or network issue. Ask the customer to disable ad blockers or try a different browser.