Sushinet

Local Delivery Only Near You: Postcode-Restricted Delivery on Shopify

Offer your own local delivery to the postcodes you actually cover and hide it everywhere else at Shopify checkout — with wildcards, ranges, and a preview before it goes live.

use-caselocal deliveryshipping addressdelivery

Local delivery is the best thing a lot of small shops offer. You control the timing, the handling and the handover, and it is the one part of fulfilment that never gets lost in a depot.

It is also the easiest thing to accidentally sell to someone forty minutes away.

Once an out-of-area customer has booked and paid for a delivery you cannot make, every option is bad: drive it anyway and lose the margin, refund and disappoint, or spend the afternoon on the phone rearranging. The fix is to make sure the option was never offered.

How far Shopify's own local delivery gets you

Genuinely quite far, and it is worth using:

  • It creates the delivery method, ties it to a location, and prices it.
  • It defines a delivery area — either a radius around that location, or a list of postcodes.

If your coverage is a tidy circle around one shop, that is the whole job. Use it, skip the rest of this, and go and do something else.

Where it runs out

The native area is a circle or a per-location list, and real delivery rounds are usually neither:

  • Coverage follows roads, not radius. A village eight kilometres away up a fast road is easy; one four kilometres away across a river with no bridge is not. A radius takes the wrong one.
  • A few outliers you serve anyway. Three postcodes technically outside the circle that happen to sit on the driver's existing route.
  • Areas that vary. You go north on Tuesdays and south on Fridays, and the round is not one shape.
  • A list that is fiddly to maintain per location. Especially once more than one location is involved and the areas overlap.

None of these mean the native setting is wrong — they mean your coverage is a shape it cannot draw.

The fix: hide the local rate outside your postcodes

A checkout rule can hide a shipping option based on the delivery address:

Hide Local delivery when the postcode is not one of 2000, 2010, 201*, 2060...2069.

An address inside the list sees local delivery as normal. Anything outside simply does not — the option is absent, not greyed out with an explanation, which is what you want, because an option a customer can see but not use is an email waiting to happen.

The list takes the shapes a real area needs:

  • Individual postcodes — 2000, 2010.
  • Wildcards — 201* covers everything starting 201, for a whole district in one line.
  • Ranges — 2060...2069 covers both ends and everything between.

You can mix all three, so "most of one district plus four specific outliers on the route" is a short list rather than a hundred lines.

It is one condition, so it is a simple rule — you do not need to combine anything to express it.

The failure worth guarding against

The mistake that costs you is an over-broad wildcard. Nothing errors, nothing looks wrong, and the rule works perfectly for every address you tested — while quietly offering the van to a district you cannot reach. You find out from a customer.

So write the list the way your area is actually shaped rather than the way it is quickest to type, and check both directions before it goes live:

  1. Preview with an address inside your area. The local rate should appear.
  2. Preview with one outside. It should be gone.

Testing only the inside case is the trap: a list with a typo usually still works for the postcodes you thought of.

If you would rather see real evidence than test addresses, run it in monitor mode first. The rule records what it would have done to your actual incoming orders, changing nothing at checkout, so you can see whether real customers are landing inside or outside your list before you commit.

One thing to check first

If local delivery is the only shipping option you offer, hiding it for an out-of-area address would leave that checkout with no way to receive the order at all. The rule refuses to do that — every option stays visible rather than stranding the customer — but the real fix is to offer a postal rate alongside it, so there is something for the people you cannot drive to.

In short

Shopify's local delivery is the right tool for creating and pricing the rate, and a radius is the right tool when your coverage is a circle. When it is not — when the round follows roads, skips a river, or picks up a few streets on the way — a checkout rule expresses the real shape: hide the local option for any address outside the postcodes you genuinely serve, and nobody books a van you cannot send.

Do this without touching code

Ruleproof builds every rule on this page as a plain sentence, previews it on a test shopper, and watches it against your real orders before it changes one — then switches on.

Questions

Can I limit local delivery to specific postcodes on Shopify?

Yes, and there are two layers to it. Shopify's own local delivery lets you set a delivery area around a location, either as a radius or as a list of postcodes, and for a lot of shops that is genuinely enough — if your coverage is a tidy circle around one shop, use it and you are done. A checkout rule is what you want when the native shape stops matching reality: coverage that follows a river or a motorway rather than a radius, a handful of postcodes just outside the circle you do serve because they are on the driver's route anyway, or a run you only make in one direction. The rule names the postcodes you actually deliver to and hides your local rate for every address outside them, which means a customer twenty minutes past your limit is never offered the van in the first place, rather than booking it and needing a phone call afterwards.

Does it support postcode wildcards and ranges?

Both. A wildcard like 902* covers every postcode starting with those digits, which is the quickest way to take in a whole district without typing out its members, and a range like 90210...90299 covers everything between the two ends inclusive. You can mix the two in the same list alongside individual postcodes, so a delivery area that is mostly one district plus four specific outliers on the driver's route is a short list rather than a hundred lines. It is worth writing the list the way your area is actually shaped rather than the way it is easiest to type — a wildcard that quietly takes in a district you cannot reach is the failure that is hardest to notice, because nothing errors, a customer simply books a delivery you then have to unwind.

What happens to customers outside my delivery area?

They see your other shipping options as normal and simply never see the local rate — it is not greyed out, not shown with a message, just absent, exactly as it would be for a shop that never offered local delivery at all. That is the behaviour you want, because an option a customer can see but not use invites the email asking why. If local delivery is the only option you offer at all, be careful: hiding it for an out-of-area address would leave that checkout with nothing, so the rule refuses to apply rather than stranding the customer, and every option stays visible. The honest fix in that case is to add a postal rate alongside it, so there is something for the people you cannot drive to.

Is this the same as Shopify's local delivery setting?

No, and the two work well together rather than competing. Shopify's local delivery is what creates the delivery method, ties it to a location and prices it — you still need that, and this does not replace it. The rule is a second layer on top that decides who is actually offered it at checkout. The reason the second layer exists is that native delivery areas are defined per location as a radius or a postcode list, and the shape of a real delivery round is often neither: it follows roads, avoids a bridge, includes a village that is technically out of radius, or covers different areas on different days. When your coverage stops being a circle, the rule is what expresses the real thing.

How do I check the postcodes before customers see it?

Preview it against a test shopper with an address inside your area and confirm the local rate appears, then against one outside and confirm it is gone. Doing both matters more than it sounds, because a list with a typo or an over-broad wildcard usually fails in only one direction — it keeps working perfectly for the addresses you tested and quietly offers the van to a district you cannot reach. If you want evidence from real traffic rather than a test address, run the rule in monitor mode first: it records what it would have done to your actual incoming orders without changing anything at checkout, so you can see whether real customers are landing inside or outside the list before you switch it on.

Related guides

Ready to try it?

Ruleproof builds every rule on this page as a plain sentence, previews it on a test shopper, and watches it against your real orders before it changes one — then switches on.

← All checkout rule guides · See what Ruleproof does