Your courier will not deliver an express or signature-required parcel to a PO Box. Shopify will happily accept the order anyway, and you find out in the warehouse.
The naive fix — block every PO Box — is worse than the problem, because a meaningful share of PO Box orders are from customers you actually want and can actually serve. So the block only works if the exemption works, and the exemption only works if somebody keeps it current.
That second part is where the second app comes in.
Why Shopify can't do this alone
Shopify validates that an address is well-formed. It has no opinion about whether it is deliverable by the service the customer just chose. There is no native setting that says "refuse this address shape", and nothing in checkout that says "unless this particular buyer".
Theme-level validation does not help either: checkout is not your theme, and the address is entered inside Shopify's checkout, where your JavaScript does not run.
Step 1 — the block, written as a sentence with an exception
In Ruleproof:
Stop checkout when the address is a PO Box — except when the customer is tagged
wholesale.
Write it as one rule with an exception, not as two competing rules. Two rules that disagree about the same checkout are a source of bugs you will spend an afternoon on; one rule with a stated exception is a sentence you can read back to yourself and know is right.
Run it in monitor mode first. For a rule that stops orders, the question is not "does it work" but "how many real customers would it have stopped, and were they the ones I meant". Monitor mode answers that against your own traffic before anybody is turned away.
Step 2 — stop maintaining the exemption list by hand
Now the failure this recipe actually exists to prevent.
The rule above is only correct while the wholesale tag is correct. A tag applied by hand is accurate on the day someone writes it and drifts every day after — new accounts get approved and never tagged, and the first anybody hears about it is a wholesale buyer emailing to ask why they cannot check out.
In Rules2Tag, derive the tag from something observable instead:
When a customer's email ends with
@acme-trade.com→ add the tagwholesale.
Or from a spend threshold, or a segment, or whatever your actual approval criterion is. The point is that the criterion is written down and evaluated continuously, rather than living in someone's memory.
Then backfill it, so the tag covers the accounts you already have rather than only the ones created from today.
The failure mode to test for
Note the asymmetry here, because it is the opposite of the VIP recipe and it is the reason this one deserves monitor mode.
If the tag is missing or misspelled, this rule fails loudly and in the unsafe direction: a legitimate wholesale customer is blocked from paying you. Nobody has to notice a missing option — they hit a wall, and you hear about it.
So test the exemption, not the block:
- Preview the rule against a shopper with the tag and a PO Box address. Checkout should clear.
- Preview against a shopper without it, same address. Checkout should be stopped, with your message.
- Run monitor mode for a few days and read the list of orders it would have stopped. If a name on that list surprises you, your tagging rule is wrong — fix it before switching the block on.
The message is half the rule
A checkout blocked with no explanation reads as a broken shop. Write the sentence the customer sees as carefully as the rule itself:
Our courier can't deliver to PO Boxes. Please enter a street address — we'll get it to you faster anyway.
It tells them what happened, why, and what to do. That turns a lost order into a corrected address.
What each app is doing
| Where it runs | What it decides | |
|---|---|---|
| Rules2Tag | On your store, continuously | Who counts as wholesale |
| Ruleproof | Inside Shopify's checkout | Whether this order may complete |
The exemption list is the thing that decays, and the checkout rule cannot maintain it — it runs inside checkout with no ability to look anything up. That division is the whole recipe.
Both apps have a free plan, and the checkout rule is one of the two Ruleproof's free plan runs live on a real store, so you can prove this on your own traffic before paying for anything.