Bonafan User Guide
How to open your first raffle sale after installing, and what happens automatically after the draw. Create products in Shopify as usual; in Bonafan you only choose which variant, how many winners and how long entries stay open.
1. Before you start (Shopify side)
Enable customer accounts
The entry page on your store domain (/apps/bonafan/…) lets fans log in with their store account and enter with one click. Enable account login under Settings → Customer accounts in Shopify admin.
Email-verified entry (no store account required) is available on Growth and above.
Create the product and variants
Create the product in Products as usual, with variants (sizes etc.), prices and inventory. Make sure the inventory covers the number of winners.
- Note the variant ID: open the variant and copy the number at the end of the URL (…/variants/1234567890). The Variant ID field also accepts gid://shopify/ProductVariant/1234567890.
- Optionally tag raffle products with bonafan-target so Shopify Flow can detect purchases by non-winners.
(Optional) Detect non-winner purchases with Shopify Flow
While a product page is published, Shopify cannot stop non-winners from buying through the normal cart. Winner checkouts created by Bonafan carry the tag bonafan-raffle-<raffle id>; our setup guide includes a Flow recipe that flags orders without that tag. Keeping the product unpublished during the raffle is the first line of defence.
2. Create a raffle (Bonafan dashboard)
- Title
- Shown on the entry page and in the winner email.
- Variant ID or price
- One is required. With a Variant ID the winner's checkout contains that product at its Shopify price and the entry page shows the price. Without it, enter a price to create a custom line item.
- Winners / fan priority slots
- How many people win, and how many of them are chosen with fan-score weighting. The rest are drawn uniformly so first-time customers still have a chance.
- Fan multiplier
- How much more likely a loyal fan (score 20) is to win compared with a first-time customer. 5 means 5×; 1 means everyone is equal.
- Entry opens at (optional)
- Entries are not accepted before this time (scheduled opening). Leave blank to open immediately.
- Entry closes at
- The draw runs automatically within 5 minutes after closing. You can also close or draw manually from the dashboard.
- Payment deadline (hours)
- How long winners have to pay after the invoice email. Unpaid wins are cancelled and passed to the next entrant automatically.
You can edit the title, deadline, winner count and so on until the draw runs. After the draw the raffle is locked (test raffles can be deleted before drawing).
4. What happens automatically after closing
Draw
Runs within 5 minutes after the deadline. Duplicate entries from the same person are merged, and blocklisted customers are excluded at draw time.
Winner notification
A Shopify draft order is created per winner and an invoice email is sent in your store name, including the payment deadline.
Payment and reminder
When the winner pays through the invoice link, the order is created and marked paid in Bonafan. Winners still unpaid at the halfway point receive the invoice again.
Forfeit and promotion
Unpaid wins are cancelled after the deadline and their draft orders invalidated. The same number of runners-up are promoted and notified, until every slot is paid.
Result tags
Customers who entered via login get bonafan-won-<raffle id> or bonafan-lost-<raffle id> tags once the raffle is settled.
5. Can I use unreleased or unpublished products?
Yes — it is the recommended setup. A raffle only needs a variant ID; the product does not have to be published to the Online Store. Winner checkouts are draft orders (invoice links), which work for draft and unpublished products.
- Create the product as a draft or unpublished from the Online Store so regular visitors cannot add it to the cart before release.
- Create the raffle in Bonafan and, if needed, schedule the opening with "Entry opens at".
- After winners have paid, publish the remaining stock for general sale (and remove the bonafan-target tag).
- Inventory must be available when winners pay. Zero stock or "do not sell when out of stock" will make the invoice checkout fail.
- The price used is the Shopify price at the time the draft order is created (right after the draw). Finalise prices before the draw.
- Draft products are easy to overlook in admin — remember to publish on release day (winner checkouts work regardless).
6. Plans and limits
The raffle engine (fan scores, weighting, promotion, blocklist) is the same on every plan. Plans differ in scale and entry method.
During the beta
- Billing has not started. Nothing is charged on any plan while Bonafan is in beta.
- A new install starts on the Free limits below. Those limits are enforced during the beta too.
- If the limits are too tight, or you want to try email-verified entry, get in touch and we will switch you to an unlimited pilot plan.
- Before paid plans begin we will let you know in advance and give existing stores a transition period.
| Item | Free | Starter | Growth | Unlimited |
|---|---|---|---|---|
| Entries per month | 100 | 1,000 | 10,000 | Unlimited |
| Entries per raffle | 100 | 1,000 | 10,000 | 40,000 |
| Winners per raffle | 20 | 50 | 200 | 1,000 |
| Raffles open at once | 1 | 3 | 10 | Unlimited |
| Blocklist | 100 | 1,000 | Unlimited | Unlimited |
| Email-verified entry | — | — | ✔ | ✔ |
When a limit is reached, the dashboard shows an error on creation and fans see "Entries have reached the limit". Winner notifications arrive within about 30 minutes of the draw on Free.
7. FAQ
- How do I test it?
- Create a raffle with 1 winner closing in a few minutes and enter with your own account. After closing you will receive the invoice email and can walk through payment and promotion. Test raffles can be deleted before the draw.
- A winner did not receive the email
- Check the winner in the entries list. Failed notifications show the reason and a "Resend" action that puts them back in the queue. Winners can also open the payment link from their result page.
- What if a winner does not pay?
- The win expires after the deadline and the next entrant is promoted and notified automatically. No action needed.
- How do I keep resellers out?
- Add their customer ID to the blocklist. Entries are still accepted but excluded at draw time, so they cannot learn what triggers detection.
- How do I notify losers?
- After settlement, entrants receive the customer tag bonafan-lost-<raffle id>. Build a customer segment on that tag and send from Shopify Email (10,000 emails/month free) in your store name.
- Several variants (sizes) in one drop?
- Create one raffle per variant (Free allows one open raffle at a time).
Support
Need help with setup? Contact bonafan098@gmail.com.