Promo codes
Single-use promo codes for your online store
Promo codes for an online store work best when each one belongs to one person and works once. DealCraft gives every winner of your game their own code, your checkout checks it before payment and marks it used after, and the whole promotion stays inside the budget you set.
From win to order in 4 steps
A customer wins and gets a code
The server picks the result of the wheel, scratch card or mystery box. A winning play issues a fresh code with the prize, its expiry and any minimum purchase already attached. Nobody else gets the same code.
The cart checks it
When the customer types the code, your checkout asks what it is worth without spending it: the prize, the currency, the minimum purchase and whether it is still usable. A typo or an expired code is refused here, before payment.
Payment marks it used
Mark the code used only after the payment goes through. Marking it earlier would burn the code on every abandoned checkout. Two tills trying the same code at once produce exactly one use.
A cancelled order gives it back
If the order is cancelled before the customer received anything, undo the use. The code works again and its cost goes back into the promotion budget.
Three kinds of promo code and where each fits
- One public code
- One word like SALE20 for everybody. Easy for a banner or an influencer, but anyone who sees it can use it as often as your shop allows, and it ends up on coupon sites.
- A list of unique codes
- Hundreds of different codes you load into your shop's own coupon system and send one per customer, for example in an email. Good when you already know who gets a code.
- A code from a game
- A code made at the moment someone wins, carrying its own prize, expiry and minimum purchase. Good when you want a prize to feel earned and the total cost to stay capped.
What you control
Each setting travels with the code, so the checkout and the dashboard read the same rules.
- Expiry
- Seven days by default, set per game. A code that expires unused releases its budget and returns its prize to the pool.
- Minimum purchase
- Per prize, in the code's currency. Your checkout enforces it; the WooCommerce plugin does it for you.
- Budget cap
- The most the codes may give away. Every issued code reserves its value, so the promotion cannot spend more than you set.
- Maximum winners
- A lifetime count that never goes down, so a busy day cannot hand out more codes than you planned.
- Email confirmation
- Optional. The winner confirms an email with a one-time code first, and the checkout refuses the promo code until they do.
- Staff link with a PIN
- For a counter or a phone order: staff open a PIN-protected link, type the code and mark it used, with no developer needed.
Why a public code leaks
A public code is a password that everybody knows. It gets shared in group chats, saved by browser extensions and posted on coupon sites, so it reaches people who were going to pay full price anyway.
A single-use code cannot travel that way. If someone posts it, the first person to use it spends it and everyone after is refused at the cart. The discount goes to the customer you meant it for.
Check at the cart, use after payment
The order of the two calls matters. Checking a code tells the cart what it is worth and changes nothing, so a customer can try it, leave and come back.
Marking it used spends it, so do that once the payment is captured. If the order is then cancelled before anything was delivered, undo the use and the code is back. A retry with the same request id after a timeout gets the same answer instead of a refusal.
Codes people can read aloud
A code is twelve characters in three groups of four, like 7KMR-4QXP-9TWD. The letters I, L, O and U are left out, so a code read over the phone or copied from a receipt has no lookalikes, and an I, L or O typed by mistake is read as 1 or 0.
The last character is a check character. A single mistyped character makes the code fail the check, so the cart says the code is wrong instead of looking up somebody else's.
What to avoid
A code with no expiry is a discount you owe forever. Keep the window short enough that the prize is a reason to order this week.
A large discount with no minimum purchase invites people to buy the cheapest item with it. Put a minimum on the prizes that need one.
Marking a code used at the cart instead of after payment burns it when the customer abandons checkout, and that customer will not come back to a refused code.
Questions
- Is there a free plan?
- Yes. The free plan includes 200 plays a month and needs no credit card. Paid plans start at $29 a month when you need more plays.
- Which shops can check the codes?
- The WooCommerce plugin and the Shopify app check codes at checkout. Any other cart checks them through the API with a secret key, and a shop without a developer uses the dashboard or the PIN-protected staff link.
- Can I upload my own list of codes?
- No list is needed: DealCraft makes a fresh code for every win. If you want a list for your shop's own coupon system, the free coupon code generator makes one in your browser.
- What happens to the code when an order is cancelled?
- Undo the use and the code works again, with its cost back in the promotion budget. If the reward should end for good, cancel it instead; its cost then leaves the budget too.
- What if a customer types the code wrong?
- The check character catches a single mistyped character, so the cart refuses the code and asks again. An I, L or O typed by mistake is read as 1 or 0, and dashes, spaces and lower case do not matter.
- What happens when a code expires?
- The cart refuses it. Its reserved budget is released and the prize goes back into the pool for the next winner. The winner count does not go down.
Give every winner their own code
Create a free account, add your prizes, set the budget cap and the code expiry, and connect your checkout with the plugin, the app or the API.
Start free