Skip to main content
Strategy

Per-Checkout vs Per-Customer Limits on Shopify: Why Most Apps Don't Stop Resellers

Jahangir AlamMay 12, 2026Updated September 26, 20269 min read

Shopify's native quantity limit resets with every new checkout. Place an order at the limit, complete it, start another — and the counter is back to zero. For limited drops, this is the single biggest gap in Shopify's order management. Resellers know it. Bots know it. Merchants discover it the hard way, usually right after a drop sells out in five minutes to the same three people.

OrderRules per-customer vs per-checkout comparison — 1-per-customer enforced across orders, real customer table showing allowed vs blocked attempts including reseller patterns

This piece explains what "per checkout" really means in practice, why Shopify's native limit works that way, which apps in the order-limits category enforce true per-customer rules, and how cross-order tracking actually works.

Already know you need per-customer limits and want the setup steps? Skip to the per-customer order limits guide for the configuration walkthrough. This piece is the conceptual explainer behind it.

The Problem: Shopify's Native Limit Resets Per Checkout

Shopify lets you set a per-product purchase limit — for example, "maximum 2 per order." That rule is attached to the product or variant and validated when the cart is built. As long as a single checkout has 2 or fewer of that item, the order proceeds. When the order completes, the customer can start a new checkout. The product still allows 2 per order. So they buy 2 more.

There is no built-in cross-checkout aggregation. Shopify's checkout layer has access to the current cart, the current customer (if logged in), and the products in the cart. It does not, by default, have access to "how many of this product has this customer bought in the last 30 days." That information lives in the orders table — which Shopify does not query during checkout validation.

This isn't a bug. Shopify's native limit was designed for inventory protection and high-volume safety: stop the cart from accepting 10,000 units at once. It was never designed as an anti-reseller feature.

What "Per Checkout" Means in Practice — A Reseller's Playbook

If you sell limited drops on Shopify with the native limit of "2 per order," here is the playbook a reseller runs:

  • 9:59 AM — drop announced for 10:00 AM
  • 10:00:00 — opens product page, adds 2 to cart, checks out, pays
  • 10:00:45 — same browser, opens product page again, adds 2, checks out, pays
  • 10:01:30 — third checkout, same drill
  • 10:02:15 — fourth checkout
  • 10:03:00 — fifth checkout

In three minutes, one person bought 10 units of a drop that was supposed to be "2 per customer." Same Shopify customer account. Same email. Same shipping address. Same credit card. The native limit fired correctly on each checkout — and let all five through. By the time the genuine fan refreshes their browser at 10:05, the drop is sold out.

Community threads from sneaker drops, streetwear releases, and collectible launches document this pattern repeatedly. The merchant frustration is universal: "I set 2 per customer, why did one customer buy 10?" The answer is that the rule said "2 per checkout," not "2 per customer."

What "Per Customer" Means — Tracking Across Orders

A per-customer limit caps the cumulative purchase total for a single shopper, across all their orders, over a configured time period. The rule is no longer "2 per checkout" — it's "2 per customer per drop" or "2 per customer ever" or "1 per customer per week."

For this to work, the app has to do three things Shopify's native limit doesn't:

  1. Identify the customer across multiple checkouts
  2. Maintain a ledger of how many units each customer has purchased over the configured period
  3. Validate against the ledger at every checkout — server-side, so it can't be bypassed by direct checkout URLs

This is the architectural difference between a per-checkout app and a per-customer app. It is also why most order-limit apps are per-checkout: they integrate with Shopify's existing per-product validation and never maintain a customer ledger.

Which Shopify Apps Are Per-Checkout vs Per-Customer

Of the major Shopify order limit apps, only a small subset enforce true per-customer limits at the checkout layer. The breakdown:

AppPer-Customer EnforcementNotes
OrderRulesYes — at checkout via Shopify FunctionsKeyed to Shopify Customer ID. Login required; guest checkout blocked while customer limits are on.
DC Customer Order LimitsYes — at checkoutLifetime limits and Shopify Flow integration. $14/mo Pro pricing.
KOR Order LimitsTag-based only (Pro plan)Requires manual customer tagging — weaker than ledger-based tracking.
Avada Order LimitsNo — per-checkout onlyLargest install base, but doesn't track across orders.
MinMaxifyNo — per-checkout onlyPer-product min/max — same gap as native.
MinCartNo — per-checkout onlyCart-level rules, no customer ledger.
Pareto Order LimitsNo — per-checkout onlyFree plan, basic per-product rules.
LIMITER (MageComp)No — per-checkout onlyAnnual billing, only 4 reviews.

See the full hub comparison of Shopify order limit apps for ratings, pricing, and use-case recommendations across all eight. For the dedicated comparison of the two apps that do enforce per-customer limits, see OrderRules vs DC Customer Order Limits.

There is also a category of niche, single-purpose apps — Limit Once (Wandelic) and UR: Limit 1 Item Per Customer (UnReact) — that handle the per-customer rule type but only the per-customer rule type. They cover one drop, on one product, with one rule. For anything more complex, they're a dead end.

The Three Ways Per-Customer Limits Are Identified

When an app says it enforces per-customer limits, the next question is: how does it know the customer? The answer determines how bypass-proof the rule is.

Shopify Customer ID — for logged-in shoppers, the customer ID is the strongest identifier. It cannot be spoofed by clearing cookies, switching browsers, or using incognito mode. A customer who logs in is uniquely identified, and OrderRules' ledger keys off this ID.

Email address — for guest checkouts, some apps fall back to the email entered at checkout. A reseller running multiple guest checkouts on the same email gets caught. The bypass is using different emails per checkout — which is easy enough to be a real concern for adversarial drops.

Shipping address — even with different emails, repeat orders to the same shipping address are detectable, and some merchants review for this pattern ("10 fake email accounts, all shipping to the reseller's apartment") after the fact.

OrderRules takes the strictest route: customer limits require login, so guest checkout is blocked while they're on and every counted order is tied to a customer ID. That's the right call for adversarial use cases (sneaker drops, collectibles, scalper-bait products) — see the anti-scalping playbook for the full threat model.

Why Guest Checkout Breaks Per-Customer (and How to Fix It)

The most common source of "the per-customer limit didn't work" complaints is guest checkout abuse. A reseller using different email addresses on each guest checkout looks like a different person every time — unless the app forces login.

OrderRules forces login: while customer limits are on, guest checkout is blocked and the customer must sign in. The customer ID becomes the source of truth. This is the right setting for limited drops, exclusive collections, and any scenario where reseller arbitrage is the dominant threat. Because it applies store-wide, weigh it against checkout friction on a general-retail store.

DC Customer Order Limits offers similar behavior on its Pro tier. The remaining per-checkout-only apps do not have a meaningful answer here — by design, they don't track across orders, so guest checkout is irrelevant to them.

When Per-Checkout Is Actually OK

Not every limit needs to be per-customer. For some use cases, per-checkout is appropriate and per-customer is overkill:

  • Inventory safety caps — "no more than 100 of this SKU in one order" to prevent accidental bulk orders. Per-checkout is the right rule — Shopify B2B catalogs can set a per-variant max for company buyers. (OrderRules product caps are different: a shared total across all shoppers per day, week, or month.)
  • B2B case-pack quantities — "must order in multiples of 6" or "minimum 12 per SKU." Per-checkout is fine because the rule is about the order shape, not the customer history.
  • Minimum order value for wholesale — "$500 minimum cart total." Per-checkout makes sense — the rule is on cart total, not per buyer. OrderRules doesn't set cart-total minimums; Shopify's Checkout Blocks app handles order value limits on every plan, for all customers or B2B only.

The decision point is whether the rule cares about who is buying or what is in the cart. If "who" matters, you need per-customer. If only "what" matters, per-checkout is sufficient.

Setting Up True Per-Customer Limits on OrderRules

The configuration steps are documented in the per-customer order limits guide, but the short version:

  1. Install OrderRules from the Shopify App Store
  2. Go to Customer Limits and create a rule
  3. Pick the limit type — order count, total quantity, or total spend
  4. Pick the period — daily, weekly, monthly, yearly, rolling 30 days, or lifetime
  5. Confirm login is required — guest checkout is blocked while customer limits are on
  6. Test with a customer account — place one order at the limit, then try a second

The enforcement happens through Shopify Functions, which validates checkout server-side. Shop Pay, Apple Pay, Google Pay, and direct checkout URLs all hit the same validation — meaning there's no client-side bypass. For the technical detail on how Shopify Functions checkout validation works, see how OrderRules uses checkout validation functions.

The Bottom Line

If your problem is "one person bought 10 of something I set to 2 per order," the issue isn't that your limit failed — it's that you set a per-checkout rule when you needed a per-customer rule. Shopify's native limit is per-checkout. Most order-limit apps are per-checkout. Only OrderRules and DC Customer Order Limits enforce true per-customer limits at the checkout layer.

For limited drops, anti-reseller setups, exclusive releases, and any product where fair distribution is part of the brand promise, per-customer is the rule type that matches the merchant intent. For everything else — inventory caps, B2B case packs, cart minimums — per-checkout is fine.

Want to see the full app-by-app breakdown? Read the Shopify order limit apps comparison hub. For the dedicated comparison between the two apps that enforce per-customer at checkout, see OrderRules vs DC Customer Order Limits. And for the broader anti-scalping framework that uses per-customer limits as one layer of defense, see the anti-scalping guide.

Frequently asked questions

Per-checkout limits apply to a single order — once that order completes, the customer can start a new checkout and hit the limit again. Per-customer limits track purchases across orders for the same person and cap the total. Shopify's built-in quantity limit is per-checkout. Apps differ: OrderRules and DC Customer Order Limits enforce true per-customer limits at checkout via Shopify Functions. Avada, MinMaxify, MinCart, Pareto, and LIMITER are per-checkout only. KOR offers tag-based limits (weaker, requires Pro).

Shopify validates the cart and checkout against the rules attached to each product or variant — but it has no built-in customer purchase history aggregation at the checkout layer. Once an order completes, the next checkout starts from zero. There's no native 'this customer has already bought N this month' check. That requires an app that maintains its own customer ledger and validates against it server-side.

Yes. With a per-checkout limit of 2 units, a reseller places one 2-unit order, then immediately places another, and another. Five orders take five minutes. Same email, same shipping address, same person. The limit was technically 'enforced' each time. The drop is gone. Community threads from limited-drop merchants document this exact pattern repeatedly.

Only OrderRules and DC Customer Order Limits enforce true per-customer limits at the checkout layer via Shopify Functions. KOR offers tag-based limits on its Pro plan (requires customer tagging — a weaker form). Avada, MinMaxify, MinCart, Pareto, and LIMITER all enforce per-checkout only. Niche apps like Limit Once (Wandelic) and UR: Limit 1 Item Per Customer (UnReact) handle a single per-customer rule type but lack other rule types.

By Shopify Customer ID. Per-customer limits require a logged-in buyer, so OrderRules blocks guest checkout while customer limits are on — the customer ID is the source of truth and can't be spoofed by clearing cookies or switching email addresses. The cumulative count is checked server-side at every checkout validation.

Yes. OrderRules counts purchases against a Shopify customer account, so customer limits require login and guest checkout is blocked while they're on. That closes the classic bypass — a reseller using a different email on each guest checkout — but it applies store-wide, so it fits best where buyers already expect to have an account: drops, members-only stores, B2B, and employee shops.

Comparing apps?

See how OrderRules stacks up against every other Shopify app in this category.

Ready to take control of your orders?

Try OrderRules Free