Setting Up Lifetime / Once-Per-Customer Limits
Lifetime limits (also called "once per customer" limits) let you cap how many times a customer can purchase a product — not just per order, but across all their orders, forever. This is the feature you need for limited-edition drops, sample kits, introductory offers, or any product that should only be purchased once (or a fixed number of times) per customer.
This guide is a step-by-step walkthrough for Customer Purchase Limits. For the full configuration reference — including guest handling options, usage tracking, product/customer eligibility, and exclusion rules — see Setting up customer purchase limits in Shopify with DC Order Limits.
Note: Lifetime limits are for tracking purchases across orders. If you just want to restrict who can buy (e.g., only VIP customers) without tracking quantities, use a basic Order Limit with an exclusion tag — no purchase history tracking needed. See Using exclusion rules.
This guide walks you through setting up lifetime limits, explains how tracking works under the hood, and covers the most common pitfalls.
How lifetime tracking works
DC Order Limits tracks each customer's purchase history using a Shopify customer metafield. Every time a customer completes an order containing a limited product, the app increments their count. On subsequent visits, the app checks this count before allowing the purchase.
Key points:
- Tracking persists across sessions, devices, and browsers — because it's stored on the customer record, not in cookies or sessions
- Logged-in customers are tracked from the moment they land on the store — the app knows who they are right away
- Customers who aren't logged in are identified at checkout — entering an email at checkout links the order to their customer record, and the limit enforces against it
You do not need storefront customer account pages. As long as customers identify by email at checkout, the limit enforces. The "Block and require login" guest handling option is there if you want the limit enforced from the cart page instead of at checkout.
Setting up a basic lifetime limit
To create a "one per customer, for life" rule:
- Go to Order Limits in your DC Order Limits dashboard
- Click Create rule and select Customer Purchase Limit
- Set Maximum Quantity to
1(or your desired lifetime cap) - Under Product Eligibility, select the products this limit applies to (specific products or product tags)
- Under Grouping, choose how products are counted (see Grouping options below)
- Under Guest Customer Handling, choose an option: "Allow" enforces the limit at checkout when the customer identifies by email, "Block and require login" enforces it from the cart page
- Save the rule
Once saved, any customer who has already purchased the product will be blocked from buying it again — even on a return visit days or weeks later.
Grouping options
Grouping determines how the app counts products toward the limit:
| Grouping | How it counts | Example |
|---|---|---|
| Any Item | All products in the rule share one counter | Max 2 total: buying Product A + Product B = 2/2 used. Cannot buy Product C. |
| Per Product | Each product has its own independent counter | Max 1 per product: buying Product A doesn't affect Product B. Can still buy 1 of each. |
| Per Variant | Each variant (size, color) has its own counter | Max 1 per variant: buying Blue/Small doesn't affect Blue/Large or Red/Small. |
For most "once per customer" use cases, use Per Product grouping. This gives each product its own independent lifetime counter, so purchasing one product doesn't consume the limit for unrelated products.
How customers are identified (and what login changes)
Lifetime tracking requires identifying the customer. The app needs to know who is buying so it can check their history and update their count after purchase.
- Logged-in customers → identified from the moment they land on the store. The limit enforces from the cart page. ✅
- Customers who aren't logged in → identified at checkout, when they enter their email. The order links to their customer record and the limit enforces at checkout. ✅
Merchants do not need storefront customer account pages. As long as customers identify by email at checkout, the limit enforces.
If you want the limit enforced before checkout, set Guest Customer Handling to "Block and require login". This ensures:
- Limits are enforced from the moment the customer lands on the store — no surprises at checkout
- The customer sees a clear message asking them to log in or create an account
⚠️ Bypass risk: Because lifetime tracking is tied to customer identity, a shopper can evade limits by checking out with a different email address or a different account. For high-value limited drops and anti-reseller protection, "Block and require login" forces every purchase through an account, making it harder to circumvent.
"I set a lifetime limit of 2 per variant, but when my customer tries to remove the item from their cart, they see the limit error."
This can happen when the cart validation fires during cart updates. If you experience this, check that your theme's cart page isn't triggering a full validation on item removal. Contact support if the issue persists.
⚠️ The most common mistake: using Order Limits instead
"I set a limit of 1, but customers keep coming back and buying again. Why isn't it blocking repeat purchases?"
If you used a Quantity & Price Limit (Order Limit), the limit only applies to the current cart. Once the order is placed, the counter resets. A customer limited to 1 per order can come back tomorrow and buy 1 again.
For lifetime tracking, you need a Customer Purchase Limit — this is the only rule type that checks purchase history across all past orders. See Which Limit Type Should I Use? for a full comparison.
Time-based limits (monthly, yearly)
Customer Purchase Limits track lifetime totals by default, but you can create time-based limits (e.g., monthly spending caps or yearly purchase allowances) by combining the limit with a Shopify Flow reset:
- Set up your Customer Purchase Limit as normal (e.g., max $3,000 spending or max 5 units)
- In Shopify Flow, create a scheduled workflow that triggers on a recurring schedule (e.g., 1st of each month, or January 1st each year)
- Use the DC Order Limits reset action in the Flow to clear all customer purchase counts for that rule
This effectively turns a lifetime limit into a monthly, quarterly, or yearly limit. Common use cases:
- Membership spending caps — e.g., $225-tier members can spend up to $3,000/month. Create separate rules per membership tag, reset monthly via Flow.
- Employee purchase programs — e.g., max 4 items from Group A and max 5 from Group B per year. Create one rule per product group, reset annually via Flow.
- Promotional offers — e.g., one free sample per customer per quarter. Reset quarterly.
For a step-by-step Flow setup guide, see Resetting Customer Purchase Limits with Shopify Flow
Note: We don't currently support automatic rollover of unused allowances (e.g., carrying $200 of unspent budget into the next month). Resets clear the counter to zero.
Combining lifetime limits with customer tags
You can combine lifetime limits with customer tags to create rules that target specific customer groups. First, decide what you're trying to achieve:
| Goal | What you need |
|---|---|
| Limit tagged customers — e.g., VIPs can only buy 1, everyone else buys normally | ONE rule targeting the tag |
| Restrict product to ONLY tagged customers — e.g., only VIPs can buy at all | TWO rules — block all + limit tagged |
Option 1: Limit tagged customers only (simple)
If you want to limit how much tagged customers can buy — while letting everyone else purchase normally — you only need one rule:
| Type | Customer Purchase Limit |
| Products | Select the product(s) |
| Customer eligibility | Customers with Specific Tags → VIP |
| Max quantity | 1 |
| Guest handling | Block and require login |
Result:
- Customers with the VIP tag → limited to 1 (lifetime)
- Customers without the tag → no limit, can buy freely
- Guests → blocked until they log in
Option 2: Restrict product to ONLY tagged customers
If you want to restrict a product so only customers with a specific tag can buy it (and everyone else is blocked), you need two rules:
- Rule 1 (block non-VIPs): Quantity & Price Limit, max 0, all customers, exclude tag
VIP - Rule 2 (limit VIPs): Customer Purchase Limit, max 1, customers with tag
VIP, block guests
Result:
- Guests → blocked
- Logged-in without tag → blocked (Rule 1)
- Logged-in with VIP tag → limited to 1 (Rule 2)
See Why Customer Tag Rules Require Login for the full two-rule pattern explanation.
Troubleshooting
Having issues with your lifetime limits? See our dedicated troubleshooting guide:
→ Troubleshooting: Why My Order Limits Aren't Working
The guide covers common issues like:
- Customers can buy again after a previous order
- When limits enforce for customers who aren't logged in
- Grouping issues (Product A affecting Product B)
- Time-based limits not resetting
- Shopify Bundles compatibility