Raffles
Raffles let customers purchase entries at the register for a chance to win a prize. Each raffle automatically creates a sellable product in your catalog — cashiers ring it up like any other item and entries accumulate until the scheduled draw. Winners are selected randomly and can be drawn manually or on an automatic schedule.
Enabling Raffles
The Raffles feature requires a feature flag to be active:
- Navigate to Settings > Edit Settings.
- Scroll to the Promo & Loyalty section.
- Enable Enable Raffles.
- Save settings.
Once enabled, the Raffles link appears in the admin navigation and entry products become visible in the POS catalog.
The feature flag can also be enabled at the platform level for a store by a super-admin under Platform > Stores.
How Raffles Work
- An admin creates a raffle with a name, prize description, entry price, and draw schedule.
- The system automatically creates a product (e.g., "Weekly Ounce Draw Entry") in a Raffles category with a fixed SKU (
RAFFLE-{id}). - Cashiers add this product to a sale at the register. Each unit quantity sold creates one entry for the attached customer.
- Entries accumulate until the draw date arrives.
- A winner is selected randomly from all active entries — either manually by an admin or automatically by a background job that runs every 15 minutes.
- After the draw, recurring raffles (weekly, biweekly, monthly) can be reset to start a new round. One-time raffles remain in a
drawnstate.
Entries are only created when a customer is attached to the sale. If a sale has no customer, the raffle entry product is sold normally but no entry is recorded.
Creating a Raffle
Navigate to Raffles in the admin panel and click New Raffle.
Basic Settings
| Field | Required | Description |
|---|---|---|
| Name | Yes | Identifies the raffle. Also used as the POS product name (e.g., "Weekly Ounce Draw"). |
| Prize | Yes | Short description of the prize shown in the raffle list and on the detail page. |
| Description | No | Optional longer description for internal reference. |
Pricing & Limits
| Field | Required | Description |
|---|---|---|
| Entry Price | Yes | Cost per entry, charged at the POS. Must be greater than $0. |
| Max Entries Per Customer | No | Cap on how many entries a single customer can hold. Leave blank for unlimited. |
Draw Settings
| Field | Required | Description |
|---|---|---|
| Draw Frequency | Yes | Weekly, Biweekly, Monthly, or One Time. |
| Draw Day | Conditional | Day of the week the draw occurs. Required for weekly and biweekly raffles. |
| Next Draw Date | No | Specific datetime for the next draw. Auto-calculated from frequency and day if left blank. |
For monthly raffles the draw is scheduled for the first day of the next calendar month (offset by the draw day setting). For one-time raffles the next draw date is used as-is; it is not recalculated after a draw.
Active Toggle
Check Active to make the raffle live. When active, the POS entry product is visible in the catalog and new entries can be created. Deactivating a raffle hides the entry product at POS but does not delete existing entries.
Click Create Raffle to save.
The POS Entry Product
When a raffle is created or its price/name/active state changes, the system automatically syncs a linked product:
- Name:
{Raffle Name} Entry - SKU:
RAFFLE-{id}(unique, used for barcode scanning) - Category:
Raffles(created automatically if it does not exist) - Stock: Set to 999,999 — treated as unlimited
- Price: Matches the raffle entry price
- Active: Mirrors the raffle's active state
If you need to adjust the product description or other catalog fields, use the Edit Product link on the raffle detail page.
Managing Entries
The raffle detail page shows a paginated table of all entries. Each row includes:
- Entry number (sequential, assigned atomically to prevent duplicates)
- Customer name and phone (denormalized from the customer record at time of purchase)
- Purchase date and time
- Status:
Active(in the draw pool) orWinner(already drawn)
Entries are created automatically when a qualifying sale completes. They cannot be manually added or removed through the admin UI.
Running a Draw
Manual Draw
- Open the raffle detail page.
- The Draw section appears when the raffle is active and has at least one active entry.
- Click Draw Winner.
- A fullscreen slot-machine animation runs, cycling through all entries before landing on the winner.
- The winner's name and entry number are revealed and the raffle moves to
drawnstatus.
The animation fetches all current active entries via JSON and cycles them randomly before revealing the pre-selected winner. The actual winner selection happens server-side before the animation begins.
Automatic Draw
The system runs a background job (RaffleAutoDrawJob) on a 15-minute cron schedule. The job finds all active raffles whose next_draw_at is in the past and have at least one active entry, performs the draw, and — for recurring raffles — immediately resets for the next round.
If a scheduled draw time passes while no entries exist, the job skips that raffle without drawing.
Resetting for the Next Round
After a draw completes on a recurring raffle, an admin must manually confirm the reset:
- The winner banner appears on the raffle detail page.
- Click Reset & Start New Round.
- Confirm the prompt.
The reset action:
- Clears the winner fields
- Deletes all entries for the completed round
- Resets the entry count to zero
- Recalculates the next draw date based on frequency and day
One-time raffles do not show the reset button. They remain in drawn status permanently.
Resetting is irreversible. All entries from the completed round are permanently deleted.
Raffle Statuses
| Status | Meaning |
|---|---|
active | Accepting entries; eligible for draw. |
drawing | Draw is in progress (brief transitional state). |
drawn | Winner has been selected. Awaiting reset (recurring) or closed (one-time). |
cancelled | Raffle was cancelled. No further draws. |
Best Practices
- Attach customers at the register. Entries are only created when a customer is on the sale. Train cashiers to look up or create a customer record before ringing up a raffle entry.
- Set an entry cap when appropriate.
Max Entries Per Customerprevents one customer from dominating the pool without limiting overall participation. - Use one-time raffles for special events. One-time draws are useful for grand prize giveaways where you do not want automatic recurrence.
- Let the auto-draw run for recurring raffles. Scheduling draws at 6 PM on the configured day means the 15-minute job will catch them within 15 minutes of the cutoff without any manual action.
- Review entries before drawing manually. The entry count and list are visible on the detail page — confirm the pool looks correct before clicking Draw Winner.
- Do not delete a raffle with entries unless intended. Deletion removes the raffle, all its entries, and the linked POS product. The action prompts for confirmation but cannot be undone.
What's Next?
- Promo Games -- Spin-to-win and scratch card promotions triggered by sales.
- Sale Campaigns -- Date-range and BOGO discount campaigns.
- Feature Flags -- Enable or disable raffles and other optional features.