Local delivery for a food store isn't one feature — it's a specific combination: deliver to nearby areas (not nationwide), require a minimum order so small deliveries don't lose money, only take orders while the kitchen is open, and offer pickup for everyone else. Shopify can do most of this, but there's a native limitation that quietly breaks it for a chunk of your customers — and almost no setup guide warns you about it.
This is the setup, told as one scenario, with the catch made obvious and the fix that makes your delivery rules hold for every customer, not just the ones paying with Shop Pay.
Quick answer: setting up local delivery for a Shopify food store
Turn on Shopify's native local delivery (zones by radius or postal code, with a per-zone fee and minimum), add local pickup, and switch off nationwide shipping — then enforce your delivery minimum, opening hours, and capacity at checkout with a Shopify Function so they hold across every wallet. The catch: native local delivery only works with Shop Pay, so Apple Pay, Google Pay, Amazon Pay, and PayPal customers don't get it. OrderRules closes that gap — its checkout enforcement runs on every payment method — and adds the hours, minimums, capacity, and scheduled pickup that native local delivery leaves out.
The scenario
Picture a burger shop that delivers to three nearby suburbs and offers pickup, with no nationwide shipping. It needs, in order:
- Delivery zones — the areas it will actually drive to.
- A delivery minimum — so a single $6 order doesn't cost money once the driver's paid.
- Opening hours — orders only while the kitchen is on.
- Pickup — for customers who'd rather collect.
- No shipping — so nobody orders a burger to be posted across the country.
- Capacity control — so a rush doesn't bury the kitchen.
Shopify handles zones, a fee, and a minimum natively. The other four — and one big catch on the first three — are where this guide earns its keep.
Step 1 — Set your local delivery zones
In Shopify, native local delivery is set per location. You define a zone two ways:
- By radius — up to 100 miles / 160 km around the location (it can include neighboring regions, but not other countries).
- By postal code — paste a list of the postcodes you serve (up to 3,000 characters).
You can create up to 10 zones per location, each with an optional delivery fee and up to 3 price-based rules (e.g. free delivery over $40), plus a minimum order amount for delivery. A radius is faster to set up; postcodes are more precise when a delivery boundary runs down the middle of a suburb — most shops start with a radius and switch to postcodes once they know exactly which streets they'll drive to. For most food shops that's enough to define where you deliver and what it costs.
If you need distance-based rates, hand-drawn map zones, or driver routing and dispatch, that's a separate layer — apps like Zapiet (zones, rates, scheduling) or EasyRoutes (route optimization and driver tracking) add it. OrderRules doesn't do zone geofencing or dispatch; it does the rules that sit on top.
The catch nobody warns you about: express wallets
Here's the limitation that breaks local delivery for real customers. Shopify's own help page says it plainly:
"Local delivery works with Shop Pay, but doesn't work with other accelerated checkouts such as Apple Pay, Google Pay, Amazon Pay, or PayPal."
When a shopper taps Apple Pay or Google Pay at the start of checkout, local delivery simply doesn't appear — checkout defaults to shipping (which, for a local-only food store, may not exist). On a phone, where most food orders happen and express wallets are everywhere, that's a lot of customers dropped or confused.
And it's a silent failure. You test checkout with a card, local delivery shows up, everything looks fine — meanwhile the Apple Pay customers who never saw a delivery option just close the tab. You don't get an error to investigate; you get a quieter conversion rate. That's what makes this limitation worth designing around up front rather than discovering months later.
Shopify's documented native workaround is blunt: deactivate those express checkouts if local delivery is core to your business. (A 2026 change lets customers use Apple Pay inside the Shop Pay flow, but standalone Apple Pay / Google Pay / PayPal / Amazon Pay buttons still bypass local delivery — the limitation is not fixed.)
The better fix doesn't cost you a payment method. A Shopify checkout validation Function runs on every payment path — Shopify's docs are explicit that this "includes express checkouts, such as Shop Pay, PayPal, Google Pay, and Apple Pay." So instead of turning off wallets, you enforce your delivery rules (minimum, hours, eligibility) at checkout where every wallet has to pass through. That's the mechanism behind the next three steps.
Step 2 — Set a delivery minimum that actually holds
Native local delivery has a per-zone minimum, but it rides the same Shop-Pay-only limitation. To make a minimum that holds for every customer, enforce a minimum order value with a checkout Function. A shopper paying with Apple Pay who's under your $20 delivery minimum gets blocked at checkout, same as everyone else — no leaky path. See the minimum order value guide. OrderRules does this on the Pro plan.
Step 3 — Enforce your opening hours at checkout
This is the one native local delivery just doesn't do: it has no concept of opening hours and will take a delivery order in the middle of the night. Add store hours so checkout closes when the kitchen is off, with a clear "we're closed, back at 11" message instead of an order you'll refund. Because it runs at checkout via a Function, it holds across every wallet. See how to set store hours and display vs. enforcement.
Step 4 — Add pickup
Turn on local pickup per location. Native pickup shows customers a processing time ("ready in about 1 hour") — but it does not let them choose a pickup date or time slot, and there's no per-slot capacity. If you want customers to book a pickup window (and cap how many collect in each), add a scheduling app; OrderRules offers a delivery/pickup date and time-slot picker with per-slot caps on the Advanced plan. See delivery time slots.
Step 5 — Turn off nationwide shipping
If you only deliver locally and offer pickup, make sure a customer can't accidentally choose shipping. Remove or empty your shipping rates (or the shipping delivery profile) so the only options at checkout are local delivery and pickup. Nothing frustrates a local customer more than a "shipping" line on a hot-food order — and nothing burns you more than accepting one.
Step 6 — Cap delivery capacity and cutoffs
Native local delivery has no capacity controls, so a viral Friday can hand your kitchen more deliveries than it can cook or drive. Add:
- Per-day and per-slot capacity caps, so a delivery window sells out instead of overbooking. (See delivery capacity limits.)
- An order cutoff and prep lead time, so late orders roll to the next window. (See cutoff times.)
Both enforce at checkout across every payment method — the recurring theme of this whole setup.
Native Shopify vs. what you'll add
| Capability | Native Shopify local delivery | What you add |
|---|---|---|
| Delivery zones (radius / postcode) | Yes (10 zones, 100 mi) | — (or Zapiet for advanced zones) |
| Per-zone delivery fee + minimum | Yes | Minimum that holds across all wallets (OrderRules) |
| Works with Apple/Google Pay, PayPal | No — Shop Pay only | Checkout-Function enforcement (all wallets) |
| Opening-hours enforcement | No | Store hours (OrderRules) |
| Delivery/pickup time slots + capacity | No | Slot picker + caps (OrderRules) |
| Scheduled pickup (customer picks a time) | No (only "ready in X") | Pickup scheduling (OrderRules) |
| Distance-based rates / driver routing | No | Zapiet / EasyRoutes |
The pattern: native gets you the map; you add the rules (and the routing, if you need it).
Delivery radius, minimums & fees: getting the numbers right
The settings are easy; the numbers are what make local delivery profitable. Rules of thumb for a food store:
- Radius — set it to what your drivers can reach with hot food on time, not the maximum Shopify allows. A tight 3–5 km radius usually beats a 20 km one: faster deliveries, better food, fewer refunds. Start small and widen only if you can keep delivery times honest.
- Minimum order — set it above the point where a delivery loses money once the driver's paid. If a run costs you $8, a $12 minimum barely breaks even; many food shops land at $20–30. The minimum only works if it's enforced at checkout for every wallet (Step 2).
- Delivery fee vs. free-over-threshold — a flat fee covers the driver; a "free delivery over $40" rule nudges customers to add an item and lifts your average order. Shopify allows up to three price-based rules per zone, so you can do both.
- Different rules per zone — charge more, or require a higher minimum, for the farthest suburb. It keeps distant deliveries worthwhile without punishing your core area.
Model these against your real average order value and driver cost before launch — the gap between a $15 and a $25 minimum is often the gap between local delivery paying for itself and quietly draining margin.
Delivery + pickup: offer both
Offer both and let customers self-select — pickup is your friend. Every pickup order is one you don't pay a driver for and one that doesn't consume delivery-slot capacity, so pickup is a pressure valve on a busy night:
- Nudge pickup with a small perk — a discount or a free side for collecting takes load off delivery capacity at peak.
- Give pickup its own prep time — native pickup shows a "ready in X"; add scheduling if you want customers to book a slot and cap how many collect at once.
- Keep hours consistent — the same store-hours rule closes checkout for both delivery and pickup, so neither takes orders while you're shut.
The result: every customer gets delivery or pickup — never a shipping option you don't offer, and never an order outside your hours or capacity.
Where OrderRules fits — and where it doesn't
To be clear about scope: OrderRules is the rules layer that enforces your minimum order value, opening hours, capacity caps, cutoffs, scheduled delivery/pickup, and per-customer limits at checkout — across every payment method, which is exactly where native local delivery falls down. It does not draw delivery zones or calculate distance-based rates (native local delivery or Zapiet do that), and it does not route or dispatch drivers (EasyRoutes and similar do that). Use it alongside those — it's the piece that makes your delivery rules actually stick.
Your own drivers or a dispatch app?
Someone has to carry the food, and local delivery gives you two options:
- Your own drivers — cheapest for a tight radius, and you control the customer's last impression. Fine when volume is low and the area is small.
- A dispatch / routing app — as you grow, an app like EasyRoutes batches orders into efficient routes and gives customers live tracking (the experience they got used to on the delivery apps).
Either way, keep the division of labor straight: the routing app moves orders; OrderRules controls which orders you accept — in-hours, above the minimum, within capacity — so the ones reaching your driver are always deliverable. It's the same rules-layer split covered in how to start a food delivery business on Shopify.
Local delivery on your store vs. on the marketplaces
You could run local delivery through DoorDash or Uber Eats instead — but they take 15–30% of every order and won't enforce your hours or capacity. Running it on your own Shopify store keeps that margin and gives you the controls above; the common play is to use the apps for discovery and drive repeat customers to your own store. See own Shopify store vs. food-delivery marketplaces for the full trade-off, and run a ghost kitchen on Shopify if you're delivery-only.
Common mistakes to avoid
- Not knowing about the wallet limitation. You test with a card, it works, and you never see the Apple Pay customers who couldn't check out. Enforce eligibility at checkout.
- A delivery minimum only in native settings. It leaks through express wallets. Enforce it with a Function.
- No hours enforcement. Taking (and refunding) 3am delivery orders.
- Leaving shipping on. Local customers pick "shipping" for hot food, or you accept an order you can't post.
- No capacity cap. One busy night buries the kitchen and the driver.
- Too wide a radius. Cold food and late deliveries hurt your reviews faster than a small delivery area ever will.
- Only testing with a card. Always place a test order with Apple Pay to catch the express-wallet gap before your customers do.
Quick setup checklist
For a local-only food store, the whole setup in one list:
- Zones — radius or postcodes for the areas you'll actually drive to.
- Delivery fee + free-over-threshold — cover the driver, nudge bigger orders.
- Shipping off — so no one orders hot food to be posted.
- Pickup on — with a realistic "ready in X" prep time.
- Minimum order — enforced at checkout across every wallet, not just in native settings.
- Store hours — checkout closes when the kitchen's off.
- Capacity caps + cutoff — so a rush can't bury the kitchen or the driver.
- Test with Apple Pay, not just a card — to catch the express-wallet gap.
Items 5–7 (and the cross-wallet enforcement on all of them) are OrderRules; 1–4 are native Shopify, plus a zones app if you need distance-based rates or driver routing.
The bottom line
Local delivery for a food store is a combination — zones, a minimum, hours, pickup, no shipping, and capacity — and Shopify natively covers only part of it, with a wallet limitation that silently drops customers. Set the zones natively, switch off shipping, and enforce the minimum, hours, and capacity at checkout so they hold for every customer, however they pay.
Start OrderRules free to add store hours, a delivery minimum, capacity caps, and scheduled pickup to your Shopify food store — enforced at checkout across Shop Pay, Apple Pay, Google Pay, and every other way your customers pay.