Punch cards
A punch card rewards repeat buyers automatically. Every qualifying order is a punch; once a customer fills the card — reaches N orders — they get a reward and the card resets. It then repeats, so a punch card is an ongoing loop rather than a one-time bonus.
How it works
- Set orders per card (
N, minimum 2) and the reward a completed card grants. - Each paid, eligible order adds one punch. Progress within the current card is
orders ÷ N; a customer who has placed 7 orders on a 5-order card has completed one card and is 2 punches into the next. - Completion is idempotent and derives from the order ledger, so webhook replays never double-grant. If an order is refunded or cancelled it stops counting, and progress self-corrects on the next recalculation.
Reward on a completed card
A punch card can grant any of:
| Reward | Behavior |
|---|---|
| Bonus points | Points land on the customer’s balance |
| Free product | Granted via a Shopify Function discount |
| Amount off | Fixed-value discount code |
| Percentage off | Percentage discount code |
| Free shipping | Free-shipping discount code |
Discount-type rewards are issued exactly once per completed card through the same battle-tested discount path redemptions use, and the customer gets the completion email automatically.
Punch card vs. order-count milestone
They look similar but solve different jobs:
- Order-count milestone — a one-time bonus the first time a customer reaches a threshold (e.g. “200 points on your 3rd order”).
- Punch card — a repeating card that resets and runs again every cycle (e.g. “every 5th order is free, forever”).
Use a milestone to celebrate a one-off moment; use a punch card to build a durable buy-again habit.
Where it shows up
Punch-card progress appears on the storefront widget and the customer account hub as a “{filled}/{N}” progress row, so shoppers always see how close the next reward is. Configure it under Ways to earn → Digital punch card.