Discounts
Reward shoppers with magic discounts that apply themselves at checkout, or static codes that auto-apply the moment someone subscribes.
Formtoro can reward shoppers for completing a form. There are two ways to do it, and the difference matters — so it's worth understanding both before you pick one.
Magic vs. static discounts
| Magic discount | Static code | |
|---|---|---|
| What the shopper does | Nothing — it just works | Sees the code in the form; it's also applied for them |
| When it applies | Automatically at checkout | Auto-applied to the cart as soon as they subscribe |
| The reward | Granted per customer — nothing to leak or share | One shared Shopify code, visible to everyone |
| Applies to | The whole form | The discount display element that shows it |
| Where it lives | Form settings → Discount (no visible element needed) | A discount display element placed in the form |
| Backed by | A saved reward from your Discounts page | A discount code you create and manage in Shopify |
Magic discount (recommended)
A magic discount is granted to the shopper the moment your form captures their first accepted email or phone number. There's no code to copy and nothing to remember:
- The shopper submits their email or phone.
- Formtoro grants that customer access to the reward on a secure Shopify customer record (creating the customer if they're new).
- At checkout, Shopify recognizes the customer — because they're logged in or entered the same email or phone — and applies the discount automatically. Where possible, the reward shows up as early as the cart page.
Because access is granted per customer, the reward can't leak on a coupon site, and you control exactly one redemption per customer if you want to.
To set one up, open Form settings → Discount in the builder and pick one of your saved rewards under Magic discount. If the list is empty, create one on the Discounts page first.
The discount the buyer sees in their cart is labeled Sign Up Discount by default — set a custom Reward message on the reward (up to 24 characters) to change it.
Static code
A static code is a discount code you already manage in Shopify (e.g.
WELCOME10), shown inside the form on a discount display element. The code
belongs to that element, so you set it there:
- Add a discount display element — from the block picker, or with Add code block under Static codes in Form settings → Discount (it's added to your form's last step).
- Select the element. Its Discount section opens at the top of the inspector — or double-click the element on the canvas to jump straight into the code field.
- Type your code in Static code customers will see. It searches your store's active Shopify codes as you type, and you can also enter a code by hand.
Form settings → Discount lists every static code in the form under Static codes, with a warning on any that's missing or not found in Shopify. Click a row to jump to that element.
Static codes are friendlier than they used to be: as soon as the shopper subscribes, Formtoro auto-applies the code to their cart — they don't have to copy and paste anything, though they still can (the copy button is optional). See the fields reference for the element's display options.
A static code is still one shared code: it's visible to everyone who completes the form, and it only works if the matching discount exists and is active (or scheduled) in Shopify. The builder warns you when it isn't — see issue flags below. If you see the warning and then create the code in Shopify, switch back to the builder or click Check again under the field. The builder checks the code again and the warning clears.
Which should you use? Prefer a magic discount for signup rewards — it's per-customer, unshareable, and needs no Shopify code to keep in sync. Use a static code when you want a code shoppers can see, save, or share.
Free gift with purchase
Instead of a code, you can offer a product: an Add to cart element is a button that puts one item in the shopper's cart.
- Add it from the block picker, or with Add product block under Static codes in Form settings → Discount (it's added to your form's last step).
- Select the element and click Select product to pick the product variant.
- To make the item free, create a Shopify discount for it — for example, a Buy X Get Y reward or an automatic discount in Shopify that makes it free on orders over $50. The button only adds the item. It doesn't change the price.
The item is never added automatically: it only goes in the cart when the shopper clicks the button. If the item has a price, the builder shows a warning asking you to state the terms on the same step, for example "Free with orders over $50. Otherwise it's charged at full price." Add a text block that says this clearly. Shoppers need to know what they'll pay before they add it.
While the item is being added, the button shows Adding…. Then it shows Added ✓. If the item can't be added (it's sold out or was deleted), it shows Unavailable and the rest of the form keeps working. You can change all three labels. If the item is already in the shopper's cart, clicking doesn't add a second one.
If the same step shows a static code, the code is applied to the cart along with the gift. On themes built on Dawn or Horizon, the cart drawer and cart count update right away. Other themes may show the item only the next time the shopper loads a page.
The Discounts page
The Discounts page is your reward library. Each reward is defined once and can be attached to many forms. At the top, a status panel confirms the Formtoro discount function is installed on your store, that your active rewards are synced to Shopify, and how many grants were issued in the last day and week. Each row shows the reward's value, its status (active or archived, plus a Not synced warning if it hasn't reached Shopify), and how many forms use it.
Reward types
When you create a reward, pick a Reward type:
| Reward type | What the customer gets |
|---|---|
| Percentage / fixed amount off | e.g. 10% off, or $5 off, eligible products in the cart |
| Buy X Get Y | Buy N qualifying items, get up to M items discounted or free |
| Free shipping | 100% off their delivery options |
| Shipping discount | Free, a percentage off, an amount off, or a flat rate on shipping |
| Product + shipping | One reward granting both — e.g. "10% off and free shipping" |
Product rewards
For percentage and fixed-amount rewards, you also choose What gets discounted:
- Every eligible item in the cart — the default.
- One unit of the most expensive item or one unit of the least expensive item — the reward is pinned to exactly one unit, compared by per-unit price. It never spreads to other items and never grows when the customer buys more. Example: with a $200 jacket and two $50 tees in the cart, a 50% reward on the most expensive item takes $100 off the jacket and nothing off the tees.
An Applies to section limits the reward to specific products, collections, or variants; single-item targeting only compares items that pass that filter.
Shipping discounts
The Shipping discount type covers four rewards:
- Free shipping — 100% off eligible delivery options.
- Percentage off shipping — each eligible option discounted by a percent.
- Amount off shipping — a fixed amount off each option, never below free.
- Flat-rate shipping — the customer pays exactly the rate you set (e.g. $4.95); options already cheaper are left alone. A flat rate of $0 is free shipping.
Three restrictions can narrow it, and they all apply together:
- Excluded shipping rates — delivery options with these titles are never discounted (matched exactly, ignoring case — e.g. add "Express" so an overnight upgrade doesn't become a giveaway).
- Countries — restrict the reward to specific destination countries.
- Maximum rate — only discount rates at or below a cost you set.
If the restrictions leave no eligible option, the customer simply sees their normal shipping rates — never a partial or misleading discount.
Product + shipping combines a product benefit with a shipping benefit in a single reward — one grant unlocks both, and each applies independently at checkout.
Limits, expiration, and stacking
- Limit to one redemption per customer — a customer can hold only one active grant for the reward.
- Grant window (days) — each customer's grant expires this many days after it's issued. Leave blank for no per-customer expiry.
- Expiration date — the whole reward stops applying after this date. Leave blank and it remains active indefinitely.
- Combines with other Shopify discounts — by default a reward stacks with product and shipping discounts but not with other order discounts. Three checkboxes let you change that.
Checkout rules
The Rules section adds optional checkout-time conditions on top of the grant — the customer must hold a grant and satisfy the rules. Conditions can reference the customer (number of orders, total spent, tags, first order) and the cart (subtotal, item count, specific products, ship-to country, currency), combined with AND/OR logic.
Test before you rely on it
Every reward has a Testing and diagnostics panel. Simulate a checkout — customer recognized or not, order history, cart contents, delivery options and their costs — and run it against your configuration to see exactly whether the discount would apply, which rule matched, and why not if it didn't. If a reward shows Not synced, the panel's Sync to Shopify button re-provisions it and reports what failed.
Attaching a discount to a form
- When creating a form — the create-form wizard has a discount step where you pick a static code or a magic discount before the form is generated.
- In the builder — open Form settings → Discount. Pick the magic discount there; for a static code, use Add code block (or click an existing code) to jump to the element that holds it.
As always, changes take effect when you Save version with the version set live — a form that's Draft or Paused grants nothing.
What the builder checks for you
The issues panel flags discount problems before shoppers see them, including: a magic discount pointing at an archived reward, a magic discount on a form that captures no email or phone (so it could never be granted), a static code that doesn't match any active discount in your Shopify store, an empty discount display element, and a form that sets up both a magic discount and a static code — which usually means customers get two discounts that stack unexpectedly. Most flags come with a one-click fix or a jump to what needs changing — Edit code and Set code take you straight to the element's code field.
Archiving
Archive reward (in the reward's danger zone) is a soft delete. If the reward is still used by published forms, Formtoro warns you first: those forms stop granting new rewards until you attach a different one and save a new version. Grants already issued to customers are unaffected.
Next steps
- Building forms — where the Discount settings and issues panel live.
- Fields reference — the discount display element's options.
- Analytics & submissions — see how discounts affect revenue and attribution.
- Klaviyo integration — subscriber profiles carry the granted discount, so your flows can reference it.