How to prevent multiple sample orders to a household?

Hi folks, we offer a free sample with free shipping of our natural pain relief balm. We use apps like Order Limit and discount code for shipping to limit to “One Per Shopify Customer”. However, many people will create multiple customer records by using multiple email addresses and ordering multiple samples. We are scaling our database of customers from 100,00 to 1,000,000 so cost per transaction pricing can be a challenge.

Is there a straightforward way to remove duplicate orders per household?

Can this be integrated into a single process that verifies postal addresses and tags duplicates and/or incorrect addresses?

Is this solvable with some combination of CRM/Salesforce/Hubspot? Appreciate any help or thoughts on best direction to explore.

Thank you!

Hi

DId you ever get an answer on this at all?

Also, how did you set up only 1 order only per email address for that one product? I am struggling right now on this topic

Thanks in advance

Kirsty

This will require an app, since for privacy you cannot compare customer records in liquid which is used for the front end. There are address verification/validation apps on the apps store but those lean towards ensuring delivery by minimizing shipping mistakes and not meant for preventing purchasing.

For @hikroo 's post about salesforce/hubspot or other third party CRMs this is something you need to bring up to those services support.

Each platform has apis but you’d need to research if they can: compare a new address to ALL existing order addresses and/or do so with a shrinking margin of error against even subtle changes i.e. adding Apt #A to an address, spelling street instead of Str.,etc

And then that needs to further connect to shopify to cancel/flag orders if your not doing so already through those third party UIs.

Fastest and deeper root problem fix ,for the business ,is to just set a purchase amount threshold, or other metric that offsets the cost/risk of samples so it doesn’t matter how many samples someone wants for “free”.*Also see subscriptions with the first order being free :wink: .*Let them get as many as they want to the point they start giving them away free for you to their local social circle.

After all there must be a factual ROI attached to these free samples that either necessitates continuing to offer them, or clearly indicates they are a marginal/large drain that’s continued only for the sake of some tradition or a business delusion assuming they are worth it.

tl;dr Business is doing X but they need to prevent X from happening at scale, so why do X at all? Growing pains indicate a change of clothes is needed after all.

A super fast fix, but extremely cynical route not easily swallowed, is to just require government ID. There are plenty of ID verification apps/services available.

A more manual free fix for big abusers can be done using shopifys own fraud filter app to flag orders by address.

A scriptable automation app like usemechanic could build an index of addresses to then quickly reference for auto-rejection or tagging https://apps.shopify.com/mechanic. Contact me if you want to explore such an approach.

A robust fix would need an app that can disambiguate, fuzzy match , addresses to be unique to prevent word attacks subtle changes being treated as completely different addresses as noted above(str vs street). Or outright integrate to a service for address verification, or geoip.

A streamlined custom solution could be done using the carrier service api which would stop those orders at checkout time itself instead of having to wait for it to complete as an order.

The slow deeper root problem fix in a shopify perspective is account merging based on address.

1 Like

The slow deeper root problem fix, in a shopify perspective , is account merging/grouping based on address.

https://community.shopify.com/c/shopify-discussions/merge-two-customer-accounts-into-one/td-p/199735

https://community.shopify.com/c/shopify-discussions/merge-customers/td-p/912491

Some Shopify discount settings have a condition of 1 customer at a time which behind the scenes means one per email. Which would be used in tandem with a purchase limit app on the frontend.

But of course if your already using 1 native automatic discount you would need to use a discount app.

Hi Paul. Looking for a way to do two things:

  1. limit to 1 purchase of a specific product per household

  2. Want to be to enforce that a product can only be bought with a coupon code

Any way to do this with mechanic?

Hi @hikroo

You’re running into the exact limitation of “one per Shopify customer” = “one per email”.
At any real scale that’s just too weak, especially for free samples.

I think about this problem in three parts:

  1. What you can realistically enforce at checkout
  2. How strict you actually want to be at a “household” level
  3. How to wire it together with apps / automation

  1. There’s no perfect, zero-abuse solution

A truly bulletproof “one per household” rule would require:

  • Normalizing and fuzzy-matching every address
  • Comparing incoming orders against your entire history
  • Handling small variations like “St” vs “Street”, apartment numbers, etc.

At that point you’re effectively building an address-verification / anti-abuse system, which is heavy and not something Shopify exposes natively in Liquid (as Brian pointed out).

So I’d treat this as: reduce abuse to an acceptable level, not eliminate it 100%.


  1. A more realistic approach: combine multiple identifiers

Instead of just “one per email”, you can:

  • Require accounts for the free sample (so you have a consistent customer ID)
  • On each new sample order, look at prior orders where ANY of these match:
    • same normalized shipping address (street + postal code)
    • OR same phone number
    • OR same full name + postal code
    • OR same customer account

That gives you a much stronger signal that “this household has already had their free sample”, without needing a perfect fuzzy match engine.

From there you can choose what to do when there’s a match:

  • Hard block at checkout with a message
  • Or auto-tag / auto-cancel the order and follow up manually

  1. Implementation patterns in Shopify

There are two common patterns I’ve seen:

A. After-the-fact filtering (Flow / Mechanic / custom app)

  • Let the order be created.
  • Use something like Mechanic, Flow, or a custom app to:
    • Look up past orders for the same address / phone / name+postal
    • If it’s a duplicate sample:
      • Tag the order and/or customer
      • Auto-cancel, or send it to a review queue

This is simpler to build, but you do pay the payment/ops cost of handling those orders.

B. Blocking at checkout (checkout validation / custom app)

  • Add logic at checkout that:
    • Checks the cart for your sample SKU(s)

    • Looks up past orders by multiple identifiers (email, phone, address, etc.)

    • If a match is found, prevents checkout and shows a friendly message like:

      “It looks like your household has already claimed a free sample.
      This offer is limited to one per household, but you can still order the full-size balm here: [link].”

This keeps your ops clean because the second sample is never actually created as an order.


  1. Where CRM tools fit (Salesforce / Hubspot)

CRMs are good for:

  • Building a single customer profile across multiple orders / channels
  • Segmenting people who have already had a sample vs not

They’re not great at:

  • Real-time decisioning in the middle of Shopify checkout
  • Doing address fuzzy-matching and then pushing a “block this order” decision back into Shopify

So you can absolutely use CRM data for follow-up and segmentation, but I wouldn’t rely on them as the primary “gatekeeper” for free samples.


  1. Full disclosure: what I’m working on

I’m currently working on a Shopify app that does exactly this kind of “one-time per person / household” rule specifically for selected SKUs using checkout validation.

It doesn’t try to be a full fuzzy address-verification system, but it:

  • Checks prior orders using multiple identifiers (email, phone, shipping address, etc.)
  • Lets you mark certain products (like free samples) as “one-time only”
  • Blocks repeat attempts at checkout with a clear message, while still allowing those customers to buy paid products normally

For a lot of merchants that’s a practical middle ground between:

  • “email only” (too weak), and
  • “build a full custom anti-abuse / address-matching system”.

If you share your current plan level and how strict you want to be (hard block vs just tagging), people here can probably suggest a concrete setup that fits your stack.