Shopify’s native local pickup can tell a shopper “usually ready in 24 hours”. It cannot let them say “Thursday morning”. For a lot of stores that gap is fine. For anyone who stages orders — bulky goods, assembled items, refrigerated, high-value, anything a person has to physically pull and set aside — it is the difference between a smooth counter and six people arriving at once on Friday at 5pm.
This is what a pickup slot system is actually made of, and where each piece has to live on Shopify.
What native gives you
Per location, you can set a pickup instruction and an estimated ready time. That estimate appears at checkout and in Shopify’s own “Ready for pickup” notification. It is genuinely useful and it is free.
What it isn’t is a booking. The shopper never states an intention, so nothing about their arrival reaches your order. Your staff prepare in the dark and the counter absorbs the variance.
The six pieces of a real slot system
Every one of these exists because leaving it out breaks something specific.
1. Opening windows, per weekday. Not “9 to 5” but the hours you can actually hand things over — which is usually narrower than your trading hours, because the counter is staffed for part of the day.
2. Slot length. Two hours is the common default. Thirty-minute slots look precise and generate a calendar nobody can staff; a whole day isn’t a booking. Pick the granularity your team can actually be ready for.
3. Prep lead time. The hours between “order placed” and the earliest slot you’ll offer. Without it a shopper books the window that starts in ten minutes and your staff find out when they walk in. This is the single most valuable setting in the list.
4. Blackout dates. Public holidays, stocktake, the day the shop is closed for a refit. They have to be a first-class setting, because they are the thing you’ll edit most often.
5. A booking horizon. How far ahead the calendar goes — two weeks is a sane default. Without an end date the calendar is infinite and shoppers book collections against stock you haven’t ordered yet.
6. A capacity cap per slot. How many collections one window can absorb. That one deserves its own discussion: see limiting pickup orders per slot.
Store-wide defaults, then per-store overrides
Set one schedule that applies everywhere, then override the shops that differ. This ordering matters more than it sounds:
- A default means the system works on install, before you’ve configured anything. Nobody adopts a pickup tool that requires an hour of setup at every location before a single shopper sees it.
- Overrides mean the mall unit with late hours and the warehouse counter that only hands over before noon can both be true, without forcing you into a per-location grid you have to maintain by hand.
Where the choice has to happen: before checkout
Shopify’s checkout has no field for a collection time. You cannot add one on a standard plan, and the ways around it are either Plus-only or fighting the platform.
So the choice belongs on the product page or in the cart, and it has to travel to the order as a cart attribute — which native cart-to-order flow carries through, including through Shopify’s own mixed-cart split. That is also why the time has to be collected before an express checkout starts: Shop Pay and Apple Pay skip the cart page, so anything expecting the shopper to pass through it will simply never run.
A calendar beats a row of date buttons here, for a boring reason: once your booking horizon is longer than a week, “the Saturday after next” is something you find by looking at a month, not by reading a horizontal strip of labels. Days you can’t serve should keep their number and just be unpickable — a month with holes in it still reads as a month.
Getting the time in front of your staff
The order is the only place that matters. Whatever collects the time has to write it somewhere you’ll actually see in the Shopify admin — a tag on the pickup order (Pickup 2026-08-06 10:00-12:00) is enough to sort a morning’s collections and filter the order list.
One trap worth knowing: a cart attribute whose name begins with an underscore is hidden from the admin order page by design. It is still readable through the API, but if a tool relies on those alone, your order page will look empty and you’ll assume nothing was captured.
What not to build
- Don’t send your own “your pickup is booked” email. Shopify already sends order and ready-for-pickup notifications. A second set means every shopper gets two emails saying nearly the same thing, from two senders, and support questions land in the wrong inbox.
- Don’t block checkout when a slot is unavailable. Hide the slot instead. An error at the final step loses an order you had already won; a slot that simply isn’t offered loses nothing.
- Don’t treat slots as inventory. A booked slot is a promise about staffing, not about stock. If the item isn’t there, no slot saves you — that’s a per-store stock problem.
How BopiSafe does it
BopiSafe puts all six pieces above in the free plan: a month calendar in the storefront picker, store-wide defaults with per-store overrides, slot length, lead time, blackout dates, booking horizon, and a cap per slot. Full or closed days stay visible but unpickable, and a slot that fills disappears from the storefront and from checkout, because both read the same record.
The chosen time rides to the order as a cart attribute and is written onto the pickup order as a tag, so it’s there in your admin. Nothing else changes: the order is Shopify’s own pickup order, and Shopify’s own notifications do the talking. Free up to 100 pickup orders a month, at any number of stores — pricing.
Written by the BopiSafe team — we build store-pickup tooling for Shopify merchants. Have a question this guide didn’t answer? Email miles.bopisafe@outlook.com.