How are you enforcing “one-time per customer” rules for free samples and limited products in Shopify?

Topic summary

A Shopify app developer is seeking feedback on enforcing strict “one-time per customer” purchase limits for free samples and limited-edition products to prevent abuse by resellers and repeat claimants.

Current limitations:

  • Native Shopify tools only offer per-order quantity limits or email-based discount restrictions
  • Existing solutions (theme-level hiding, post-purchase tagging) are easily bypassed via new accounts or direct cart links

Proposed enforcement approach:
The developer outlines a checkout-blocking system that would:

  • Match customers across multiple identifiers (shipping address, phone, email, postal code + name)
  • Display clear messaging when limits are reached
  • Block only the restricted SKU while allowing other purchases

Key questions posed:

  1. Do merchants actually enforce hard “one per customer lifetime” rules or rely on softer limits?
  2. Which matching criteria work best in practice (email only, email + phone, shipping address)?
  3. Should enforcement block at checkout or auto-cancel orders afterward?
  4. For high-demand products: how to balance anti-reseller protection without penalizing legitimate customers?
  5. Is lifetime restriction acceptable, or should limits reset periodically?

The discussion remains open for merchant and developer input on real-world implementation strategies.

Summarized with AI on November 24. AI used: claude-sonnet-4-5-20250929.

Hi everyone,

I’m a Shopify app developer working with merchants who want stricter “one-time” rules for specific SKUs – usually:

  • Free samples
  • First-time intro offers
  • High-demand / limited products where resellers or scalpers are a concern

I’d like to sanity-check some patterns and hear how others are handling this in real life.


Context / typical cases

Examples:

  • A free sample product:

    • The sample itself is free (or heavily discounted)
    • The merchant charges custom S&H
    • They expect it to be “one per customer, ever”
  • A limited / high-demand SKU:

    • Product drops with limited inventory
    • Brand wants to prevent resellers from buying multiple units under different accounts
    • They want “one per customer” or “max N per customer over time”, not just “max N per order”

Native tools and most apps tend to give you something like:

  • “One use per discount code / per customer” → basically “one per email”
  • Tag-based flows (e.g. tag customer as sample-claimed after first order)
  • Per-order quantity limits (e.g. max 1 per order) but nothing across multiple orders

That’s fine up to a point, but as soon as people are motivated enough they can:

  • Come back with a different email/account
  • Place multiple orders for the same SKU
  • In the worst case, keep farming free samples or eating all the inventory on a drop

Patterns I’ve seen so far

Roughly three layers:

  1. Theme-level hiding

    • Require an account + login to claim the sample or buy the limited product
    • Tag the customer once they’ve ordered the sample/limited SKU
    • In Liquid, hide the add-to-cart button for that product if the tag is present

    Nice UX, but:

    • Doesn’t stop direct add-to-cart links or other apps adding the product
    • Doesn’t stop someone using a different account / email
  2. After-the-fact filtering (cancel/tag repeat orders)

    Using Flow, Mechanic, or a custom app:

    • Trigger on order created
    • If the order contains the sample or limited SKU and the customer is already tagged (e.g. sample-claimed, drop-purchased):
      • Tag the order as “repeat sample” / “repeat limited”
      • Auto-cancel or send it to a review queue before fulfillment

    This doesn’t prevent the order from being placed, but it does keep your fulfillment team from shipping multiple free samples or extra limited units to the same person.

  3. Checkout-level validation (“one-time ever” / “max N over time”)

    For merchants who really care about enforcing fairness or cost control, there seems to be a need for logic that runs at checkout:

    • When the sample or limited SKU is in the cart:
      • Look up past orders for that customer using multiple identifiers, e.g.:

        • same normalized shipping address (street + postal/ZIP code)
        • OR same phone number
        • OR same full name + postal code
        • OR the same Shopify customer account
      • Optionally count how many times this SKU (or group of SKUs) has been purchased before

      • If a previous sample / max count is reached, block checkout and show a clear message like:

        “It looks like you’ve already redeemed this offer.
        This product is limited to one per customer, but you can still order [other products / full-size items] here: [link].”

    This keeps a second free sample or extra limited units from ever becoming an order, while still allowing the customer to buy other products.


Questions for those of you dealing with free samples or resellers/scalpers:

  1. Do you actually enforce a hard “one-time only” rule (or “max N per customer”) for specific SKUs, or do you mostly rely on:

    • “one per email”
    • per-order quantity limits
    • and accept some abuse?
  2. If you enforce more strictly, what do you match on in practice?

    • Email only?
    • Email + phone?
    • Shipping address / household?
    • Something else?
  3. Operationally, what do you prefer:

    • Hard blocking at checkout with a friendly explanation, or
    • Letting the order through but auto-tagging/canceling repeat purchases with automation?
  4. For limited / high-demand products specifically:

    • Where do you draw the line between “protecting against resellers” and “not punishing legitimate fans/customers”?
    • Is a strict “one per lifetime” rule acceptable, or do you prefer “max N per customer over a period”?
  5. If an app let you define per-SKU “one-time-only” or “max N per customer” rules using multiple matching conditions (email, phone, address, account, etc.), what would it absolutely need to do (or avoid doing) to fit into your workflow?

Full disclosure: I’m currently building an app in this space (focused on per-SKU “one-time per person/household” and similar rules via Checkout Validation). The goal of this thread is not just to pitch that, but to understand where other stores draw the line between:

  • enforcing strictly vs
  • letting some repeat orders slide,

and which edge cases (free samples, drops, resellers, etc.) actually matter most in practice.

it’s clear says that the Query you ask from the Chatgpt.

We developers don’t have enough time to read though all. So, would you like to explain only the pain point not the 3000 characters long story.

Thanks

@The_ScriptFlow

Thanks for the feedback.

Short version of my question:

I’m working with merchants who want to enforce “one-time per customer” rules for specific SKUs (free samples, limited products, anti-reseller use cases).

I’d like to know, from people actually running this in production:

  • Do you enforce anything stricter than “one per email”, and if so what do you match on? (address/phone/account/etc.)
  • Do you prefer blocking at checkout, or letting the order through and auto-cancelling/tagging repeat cases with automation?

Any concrete workflows or examples would be super helpful.

@The_ScriptFlow

This is really helpful – thanks a lot for sharing real-world patterns.