Refusing orders to addresses you cannot deliver to
Shopify's shipping zones are built from countries and regions, so "not these postcodes" has no native home outside local delivery. A rule at checkout can do it — and the thing to understand before you build one is when it speaks, because it is later than you would like.
Shipping zones cannot do this. A zone in Shopify is "a group of countries or regions" — the documentation never mentions postcodes, and there is no level below province or state. If an address falls outside every zone, the shopper gets Shopify's own wording: "Your order cannot be shipped to the selected address." Not your sentence, and no explanation of why.
One exception, and it is a good one: local delivery. If these are addresses near you rather than far away, local delivery is postcode-level natively — a list of postcodes up to 3,000 characters, wildcards allowed, or a radius up to 160 km. If your question is "which addresses do I drive to", stop here and use that.
For posted orders, refusing a postcode or a PO box means a rule at checkout. That is possible, and the rest of this page is about the two things that decide whether it does what you actually want.
It speaks later than you think
A rule that looks at the address cannot say anything until there is an address, and that follows from the mechanism rather than from any Shopify statement. For most shoppers it means checkout, after items and contact details; for a signed-in shopper with a saved address it means the moment checkout opens. On the cart page, with no destination given, there is nothing for the rule to check.
That is a real cost. Somebody in a postcode you do not serve fills in most of a checkout before anything tells them. If those addresses are a meaningful share of your traffic, say it earlier in your own words — on the product page, in the cart, in the shipping policy — and treat the rule as the backstop rather than the announcement.
The message does not always arrive
Two failures worth knowing before you promise anybody a tidy experience, both acknowledged by Shopify:
A signed-in shopper whose address is already filled in can be blocked without seeing why — when the rule pins its message to the address field. The order is correctly refused and the explanation does not render. Shopify has called that a platform limitation with no date for a fix, and in the same breath named the way around it: pin the message to the order as a whole instead. A rule built here does that.
In Google Pay, and in Apple Pay started from a product or cart page, the block works and the message does not show inside the payment sheet. Shopify's staff reproduced the Google Pay case and called it a bug; they have also said the redirect that does show the message exists only for Apple Pay started from the checkout page. For Shop Pay we have not seen it confirmed either way.
So the rule protects you in both cases. What it does not reliably do is explain itself, which means some shoppers simply fail and leave. Worth knowing when you decide how many postcodes are worth refusing.
Addresses you cannot serve, reaching checkout anyway? Describe the rule you need →
And when the rule breaks, the order goes through
A checkout rule that errors or times out lets the order proceed. Shopify's API has a switch for the opposite behaviour, and rules built here are set to let orders through — deliberately: refusing every checkout while your own rule is unhealthy costs you all the good orders to prevent the occasional bad one.
The consequence is worth stating plainly rather than burying: on the rare occasion a rule fails, an order you would have refused can land. Catching that one by hand is cheaper than an outage that turns everybody away — unless a wrong delivery is genuinely dangerous in your shop, in which case say so, because then the trade goes the other way.
Which route is yours
| Your situation | What to do |
|---|---|
| Deciding where you will drive an order yourself | Native — local delivery postcode list or radius |
| Whole countries or regions you do not post to | Native — leave them out of your shipping zones |
| Specific postcodes, posted orders | A checkout rule |
| PO boxes your courier will not accept | A checkout rule matching the address line |
| The same, on Plus, without code | Checkout Blocks address validation |
| A message that always shows | Not reliable today — two acknowledged gaps |
About PO boxes specifically
There is no address-type flag in Shopify: a PO box is just text somebody typed into the first address line. A rule matches on that text, which works and is fragile in a way worth naming — "P.O. Box", "PO BOX", "Postbus", "Boîte postale", and every local variant your customers use. A list that only catches the English spelling will look like it is working while letting the others through.
If your courier refuses them, this is still worth doing. Just expect to add spellings for the first few months rather than setting it once.
What Shopivibe does
You describe it as you would explain it to somebody covering the phones: "We do not post to these postcodes, and our courier will not take PO boxes. Turn those away with a sentence that tells them why."
What you get is the rule and the wording.
What no rule at checkout can give you is a note each time it fires. A refusal at checkout tells the shopper and nobody else — there is no event, no webhook, no record you can be sent. If knowing matters more than stopping, the honest alternative is the other way round: let the order through and have it flagged to you afterwards, while it still exists to be flagged.
Two things to say plainly. The timing is Shopify's, so a rule cannot speak before an address exists — what it can do is be the backstop under an earlier, friendlier warning. And checkout rules are built for you, not switched on — a person here takes it on straight away and has it working in your store within 24 hours.
Shopivibe solves the problem in your store and keeps what it adds maintained, including when Shopify changes something underneath. Shopivibe is free during early access, with 3,500 credits included. Credits beyond the included 3,500 cost $0.06 each.
Know which addresses you cannot serve? Describe the rule and the message →
Checked against Shopify's documentation and the App Store on 21 September 2026.