Card testing does not arrive once. It arrives as a run — the same buyer, or the same shape of buyer, trying again within minutes, because the whole point is to find a card that works. By the time anyone reviews the first attempt, the fourth has already been made.
That rhythm is what makes this worth automating, and it is also what decides the shape of the answer. You are not trying to judge a single order perfectly. You are trying to make the second attempt cheaper to refuse than it is to make.
Two jobs, joined by a tag
Detection and refusal want opposite things.
Detection wants time and context. Recognising a throwaway domain means holding a list; recognising a generated address means reading its shape. Neither is hard, but both are work you want done carefully rather than quickly.
Refusal wants the opposite. It happens inside Shopify's checkout, on Shopify's servers, under a budget measured in milliseconds, and it cannot look anything up. It can only answer questions about what is already in front of it.
So the two live in different rules, and a customer tag joins them. Rules2Tag decides who is suspicious and writes the tag. Ruleproof reads the tag and refuses the checkout. Neither app needs to know how the other works — only that they agree on the word.
What each rule actually does
The detection rules watch customers as they arrive and tag the ones that match:
- Customers using disposable email tags anyone signing up from a throwaway domain as
fraud-suspected. This is the cheapest signal there is. Someone using a ten-minute mailbox for something they want posted to them is telling you something. - Customers with automated email patterns tags generated-looking addresses as
bot-suspected— plus-aliases likename+1@, or a real-looking name with digits stapled on. Deliberately a different tag, because this signal is weaker and you may want to review rather than refuse.
The checkout rule does one thing: if the customer carries one of those tags, checkout stops with a message you wrote. One condition, which means it runs on the free plan, and which also means it is easy to reason about when something unexpected happens.
Watch it before you switch it on
Put the checkout rule in monitor mode first. It evaluates every checkout and records what it would have done, without affecting anyone. After a week you are not guessing about false positives — you are reading a list of the specific shoppers it would have turned away, and deciding whether that looks right.
This matters more here than for most rules, because the tags come from somewhere else. You are switching on a block whose trigger is another rule's judgement, and monitor mode is how you check that judgement against your own traffic before a real customer meets it.
The one thing to get exactly right
Both apps ship the same tag names — fraud-suspected and bot-suspected — so they line up without
anyone having to think about it. (There is a third, possible-fraud, reserved for things you want a
human to look at; the checkout rule deliberately does not block on it by default, because "review
this" and "refuse this" are different instructions.)
If you change them, change them everywhere. A tagging rule writing suspected-fraud and a checkout
rule watching for fraud-suspected produces no error, no warning and no sign of trouble. It produces
a fraud rule that quietly never fires, which is worse than not having one, because you will believe
you are covered.