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 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 fully tracked — the app knows who they are from the moment they land on the store
  • Non-logged-in customers can be identified at checkout when they enter their email address — but the limit only kicks in at that point, meaning they can browse and add to cart first (see why this matters)

Setting up a basic lifetime limit

To create a "one per customer, for life" rule:

  1. Go to Order Limits in your DC Order Limits dashboard
  2. Click Create rule and select Customer Purchase Limit
  3. Set Maximum Quantity to 1   (or your desired lifetime cap)
  4. Under Product Eligibility, select the products this limit applies to (specific products or product tags)
  5. Under Grouping, choose how products are counted (see Grouping options below)
  6. Under Guest Customer Handling, select "Block and require login."
  7. 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.

Why login matters (and what to do about guests)

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 → fully tracked from the moment they land on the store. The app reads and writes to their customer metafield. ✅
  • Non-logged-in customers → the app can identify them when they enter their email at checkout (Shopify looks up their customer record at that point). However, the limit only kicks in at checkout — the customer can browse your store, add restricted products to their cart, and only get blocked when they enter their email. This creates a confusing experience. ⚠️

This is why we strongly recommend setting Guest Customer Handling to "Block and require login" for lifetime limits. This ensures:

  1. Limits are enforced from the moment the customer lands on the store — no surprises at checkout
  2. Every purchase is tied to a customer account that can be tracked
  3. 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 (account/email), a shopper can evade limits by using a different email address or checking out as a guest without a matching customer record. For high-value limited drops and anti-reseller protection, "Block and require login" is essential — it forces every purchase through an account, making it much 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:

  1. Set up your Customer Purchase Limit as normal (e.g., max $3,000 spending or max 5 units)
  2. In Shopify Flow, create a scheduled workflow that triggers on a recurring schedule (e.g., 1st of each month, or January 1st each year)
  3. 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 tiered programs. For example, to restrict a product so only tagged VIP customers can buy it (once):

  1. Rule 1 (block non-VIPs): Quantity & Price Limit, max 0, all customers, exclude tag VIP  
  2. Rule 2 (limit VIPs): Customer Purchase Limit, max 1, customers with tag VIP  , block guests

See Why Customer Tag Rules Require Login for the full two-rule pattern.

Troubleshooting

Symptom Likely cause Fix
Customer can buy the product again after a previous order You're using an Order Limit, not a Customer Purchase Limit Switch to Customer Purchase Limit — it's the only type that tracks history
Buying Product A blocks Product B Grouping is set to "Any Item" Change grouping to "Per Product" so each product has an independent counter
Guest customers aren't being blocked Guest handling is set to "Allow" or "Apply limit" Set to "Block and require login" for strict enforcement
Limits work in-store but not via Shopify Bundles Known limitation — Shopify Bundles may not pass variant data correctly for lifetime tracking Contact support for workarounds; see Using DC Order Limits with Shopify Bundles
Yearly/monthly limits aren't resetting No Shopify Flow reset is configured Set up a scheduled Flow workflow to reset counts on your desired interval
Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us