Mastiff

How to Limit One Product Per Customer Across Orders (Lifetime Limits) in Shopify

Updated August 2026

Short answer: Shopify's native cart rules and discount codes cannot enforce a true lifetime "one per customer, ever" limit across separate orders. To do that, you need an app that checks a customer's past order history at checkout, not just what's in their current cart.

Why Shopify behaves this way

Shopify Functions — the mechanism modern limit and validation apps run on — evaluates the current cart at checkout. It was built to answer questions like "does this cart violate a rule," and a cart, by definition, only contains what the shopper has added right now. It has no built-in memory of what that same customer bought last week or last year. So any app built purely on cart validation, no matter how well it handles quantity limits inside one order, resets to zero the moment a customer starts a new checkout.

This is the exact gap merchants keep running into: they set a "limit 1 per customer," a customer buys one, comes back the next day, opens a fresh cart, and buys another one. The app did its job — inside that cart. It just never checked whether the customer already owned one from a prior order.

A cart-only app allows a repeat order on day 2; an order-history app blocks it. Cart-only app checks what is in the cart right now Monday — cart: 1 unit no past orders in cart → allowed Order #1 placed app forgets the cart Tuesday — new cart: 1 unit ✗ app sees an empty history Order #2 goes through — the limit never fired Order-history app checks what this customer already bought Tuesday — new cart: 1 unit same customer returns Looks back at order history finds Monday’s order #1 ✓ Checkout blocked lifetime limit of 1 enforced
The gap in one picture: a cart resets every visit, so a cart-only rule resets with it. Only an order-history check can count Monday against Tuesday.

The options, honestly compared

Discount-code workaround. The old fix, still floating around in forum threads: create a one-time-use discount code and require it for the item, or set an automatic discount with a usage limit per customer. This can work as a rough deterrent, but it's manual to set up per product, easy for customers to route around with a second email or account, and it's not really enforcement — it's friction. It also does nothing to stop a guest checking out under a different email.

Cart-level limit apps. Most "limit purchase quantity" apps on the Shopify App Store, including several of the popular ones, only block within a single cart or single checkout session. They're genuinely useful for stopping someone from buying 10 of a capped item in one go, and they're often cheaper or simpler if that's all you need. But they share the same blind spot described above: nothing stops the same customer from placing a second order tomorrow.

Apps that check order history at checkout. The only way to actually enforce "one per customer across all their orders" is for the checkout validation to look up the customer's past orders — not just the cart — before deciding whether to allow the purchase. This is a materially different (and more complex) build than cart-only validation, which is why it's less common among the apps merchants find first.

Only order-history enforcement covers both one-cart caps and lifetime caps, automatically. Caps one cart /checkoutCaps across separateorders (“ever”)Automatic — no manualcodes Discount-code workaroundCart-level limit appOrder-history enforcement
✓ = enforced automatically at checkout  ·  ✗ = not covered. The discount-code trick deters but enforces nothing.

Where our app fits

Mastiff Order Limits is built for this specific case. It enforces limits across multiple separate orders using the customer's order history, not just the current cart, and it runs at checkout via Shopify Functions cart validation. It supports per-customer, per-order, per-cart and per-variant limits, plus sell-in-multiples (case pack) rules and minimum/maximum order value rules, so you can combine a lifetime cap on one product with ordinary cart rules elsewhere in the same store.

If your actual problem is "stop the same customer from ever buying more than one of this," this is the layer that solves it — a cart-only app won't, no matter how it's configured.

Order Limits

What to know before you set it up

Be honest with yourself about a few limits of this whole category of solution, not just this app:

If those trade-offs are acceptable — which for most "one per customer, ever" use cases they are — order-history-based enforcement at checkout is the correct mechanism, and it's what to look for by name when comparing apps, regardless of which one you choose.