Sushinet

Block PO Box Deliveries — Without Blocking Your Wholesale Accounts

Stop checkout for PO Box addresses your courier won't deliver to, while letting tagged wholesale accounts through — a tagging rule keeps the exemption list honest.

recipe

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 tag wholesale.

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:

  1. Preview the rule against a shopper with the tag and a PO Box address. Checkout should clear.
  2. Preview against a shopper without it, same address. Checkout should be stopped, with your message.
  3. 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.

Questions

Why block PO Boxes at all?

Because most express and signature-required courier services will not deliver to one, and the order does not fail at the point of sale — it fails days later, in a warehouse, after it has been picked, packed and paid for. That is the expensive kind of failure: you have already spent the labour, the customer has already had the confirmation email, and now someone has to write to them, arrange a new address, and either re-ship or refund. Catching it at checkout costs a customer fifteen seconds and a clear message. Catching it in fulfilment costs you a pick, a pack, a conversation and often the margin on the order.

Won't a PO Box block catch legitimate customers?

Some, yes, and that is exactly why the exemption is half of this recipe rather than a footnote to it. Plenty of genuine buyers use a PO Box because they have no safe street delivery, and a rule that stops all of them is a rule you will switch off within a week. The useful version blocks the addresses your courier genuinely refuses while letting through the accounts you have already decided to serve differently — wholesale customers on a freight arrangement, corporate accounts with a mail room, anyone whose delivery you handle outside your normal courier. The block is only tolerable because the exemption exists.

How does the checkout know which customers are exempt?

From a customer tag on the account. The tag is the part that decays: a wholesale roster maintained by hand is accurate on the day it is written and slightly wrong every day after, because accounts get approved, companies get acquired and staff leave without anyone updating a list nobody owns. So the first half of this recipe is a tagging rule that derives the tag from something observable — an email domain, a spend threshold, a customer segment — and keeps it current on its own. The checkout rule then reads a tag that is actually true rather than one that was true in March.

What does the customer see when they're blocked?

A message you write, shown at checkout before they pay, rather than a generic error. This matters more than it sounds, because a blocked checkout with no explanation reads as a broken shop and the customer leaves. A blocked checkout that says "our courier can't deliver to PO Boxes — please enter a street address" reads as a shop that knows what it's doing, and the customer fixes the address and completes the order. The rule is only as good as the sentence attached to it, and the sentence is the part most people leave until last.

More recipes

This recipe uses two apps

Each does one half of the job, and neither can do the other's — which is why this is a recipe and not a feature. Both have a free plan, so the whole thing can be built and watched before it costs anything.

Pricing · ← All recipes