HomeBlogThe John-John Scam Explained — Free Product Fraud on Shopify
Tutorial2026-05-208 min read

The John-John Scam Explained — Free Product Fraud on Shopify

The "John-John scam" is the specific Shopify abuse pattern where fraudsters target free-product promotions with fake names like "John John" on $0 carts. Here's the fix.

The John-John Scam Explained — Free Product Fraud on Shopify

There's a particular implementation of $0-cart and matching-name fraud that's so common on Shopify that it has a nickname: the John-John scam.

Fraudsters target merchants running free-sample or free-trial promotions: they submit $0 orders with placeholder data — a fake first name ("John"), the same fake last name ("John"), a real shipping address (often a reshipping operation), and a real but disposable email. The merchant fulfills the order because the system sees a valid customer requesting a free product as promoted. The fraudster repeats with different fake names ("Jane Jane," "Bob Bob," "Test Test") to acquire many free products.

This guide covers the specific mechanic, why standard fraud apps miss it, and the Shopify-specific defenses that close the hole.

The specific mechanic

The John-John scam works like this:

  1. A merchant runs a "free sample" or "free trial" promotion — a specific product offered at $0 with the buyer paying only shipping (sometimes including free shipping)
  2. The promotion is publicly accessible — discoverable through coupon-aggregator sites, social media, or just by reading the merchant's marketing
  3. A fraudster (or coordinated group) submits the order with placeholder data: fake first name ("John"), the same fake last name ("John"), real shipping address (often a reshipping op), real but disposable email
  4. The merchant fulfills the order because the system sees a valid customer with a valid address requesting a free product as promoted
  5. The fraudster repeats with different fake names to acquire many free products

The scale can be significant. Coordinated communities exist that share scripts for hitting specific merchants' promotions at scale, sometimes acquiring hundreds of free products from a single store in a short window. The cost — product, shipping, fulfillment time — is real and rarely budgeted in the original promotional plan.

Why "John-John" specifically

The naming comes from the most common form of the abuse using identical first and last names. There's a particular reason for this:

The fraud is typically automated. A script fills in checkout form fields. Generating realistic name pairs (matching cultural conventions, plausible spelling, regional plausibility) requires sophistication the typical free-product abuser doesn't bother with. Generating a simple repeated name ("John John") is trivial.

So the fraudster's automation literally just types whatever placeholder they programmed in both name fields. "John John" is the prototypical case, but the pattern is first name == last name — any name that's the same first and last.

Why standard fraud apps miss it

Most fraud apps weren't built for this specific case:

No payment to score. The order is $0. Standard fraud-scoring relies heavily on payment-network signals (AVS, CVV, card BIN reputation). With no payment, these signals don't exist. The fraud score for a $0 order is meaningless.

Customer information looks valid. The email validates as a real format. The shipping address is real. The phone number, if provided, is in a valid format. Nothing in the standard customer-validation pipeline would flag this order.

The order doesn't look "high risk" by aggregate metrics. No anomalous IP geolocation, no suspicious cart value (it's $0 — what's there to be suspicious about?), no payment method issues.

The result: fraud apps configured without specific pattern detection wave these orders through. The fraud is invisible until the fulfillment team notices the volume of $0 orders being shipped.

The Shopify-specific implementation

The good news: Shopify gives you the tools to catch this specifically. Three implementation paths:

Option 1: Block at checkout (Shopify Plus)

For Shopify Plus stores, a checkout extension can validate cart subtotal and customer name fields at checkout completion. If both conditions match — subtotal $0 (excluding fees) and first name == last name (case-insensitive, trimmed) — the extension prevents order creation.

Customer sees an error message: "Order cannot be placed due to suspected fraud." Most fraud-prevention apps that support Shopify Plus include this check.

Option 2: Auto-cancel after creation (all plans)

For non-Plus stores, the order can't be blocked at checkout but can be auto-cancelled within seconds of creation:

  • A Shopify Flow workflow or fraud app's order-creation listener evaluates each new order
  • If the order matches the pattern (subtotal $0, names match), the workflow cancels automatically
  • The customer receives a cancellation notification (generic "your order has been cancelled" message)

Fraudster gets cancellation instead of fulfillment. Merchant doesn't ship the product.

Option 3: Hold for review

For merchants who want to handle case manually or who have legitimate $0-cart cases:

  • Order auto-tagged on creation but not auto-cancelled
  • Workflow alerts the team that a flagged order is awaiting review
  • Team manually approves or cancels based on the specific case

Slowest option but safest if you have legitimate exception cases.

Legitimate $0-name-matching exceptions

A small number of legitimate cases produce $0 subtotals with identical first/last names:

Single-name cultures. Some cultures use a single name that might be entered as both first and last on Western-style forms. Customers might enter "Bambang Bambang" or similar. Rare but real.

Internal test orders. Your own team running checkout tests might use placeholder names. Exclude orders from known team email domains.

Pre-arranged $0 promotions. Specific marketing campaigns might intentionally generate $0 orders. These should have a specific discount code or campaign tag that the rule can exempt.

For each: set up explicit exception paths. The rule should auto-flag everything *except* documented legitimate cases, not auto-flag everything matching the pattern without nuance.

Beyond the basic pattern

Sophisticated free-product abusers have learned that matching names trigger detection, so some moved to nearly-matching names ("John Johns," "Test Tester"). Harder to catch with single equality, still detectable:

  • Name similarity scoring. First/last names with edit distance < 2 (one letter different) usually still placeholders
  • Vowel ratio anomaly. Real names have characteristic vowel ratios; "asdf asdf" or "qwerty qwerty" have unusual ratios
  • Common-placeholder lists. Maintained list (test, demo, sample, x, a, etc.) catches a long tail

Diminishing returns. The basic equality rule catches the majority; additions catch the next layer.

Other related patterns

The free-product abuse ecosystem has produced several adjacent patterns:

The repeating-address abuse. Same shipping address receiving multiple $0 orders with different names. Easier to catch than identical names — the address is more stable.

The disposable-email abuse. $0 orders from emails on known disposable-email domains (10minutemail.com, mailinator.com, etc.). Detection rule combines with the disposable-email list you should already have configured.

The IP velocity abuse. Multiple $0 orders from the same IP in a short window, even with different names and addresses. IP-velocity rules catch this when names don't.

The Discord-coordinated abuse. Members of specific Discord servers coordinating attacks on specific stores. Orders look unrelated individually; collectively they share device-fingerprint or behavioral patterns.

Each has its own detection mechanic. Layered combination catches most of the abuse ecosystem.

A practical implementation in Shieldy

If you run any free-product promotions on Shopify and want to close the John-John hole specifically:

  1. Settings → Auto-block fraud orders → enable
  2. The rule: "if order subtotal == $0 AND first_name == last_name THEN auto-cancel"
  3. Add exception: orders with discount code tied to legitimate campaigns
  4. Add exception: orders from your team email domain
  5. Run for two weeks
  6. Monitor cancellations to confirm no legitimate exceptions slipping through
  7. Optionally tighten with similarity-scoring additions

Total setup: under an hour. Defense closes a specific, well-known abuse channel.

A practical close

The John-John scam is one of the cleanest cases in fraud prevention where a specific, simple rule closes the entire abuse channel. Most fraud isn't this neat.

Use the simplicity as opportunity. The hour you spend configuring this rule can save your free-product promotions from a category of abuse that, left unaddressed, turns a marketing campaign into an inventory drain.

Shieldy bundles the John-John defense under "Auto-block fraud orders" — one toggle to enable. Combined with disposable-email blocking and IP velocity rules, it eliminates the casual layer of free-product abuse entirely.

Protect your Shopify store today

Install Shieldy free — block fraud, bots, and VPNs in under 5 minutes.

Install on Shopify — Free