BopiSafe Install on Shopify
Blog

Shopify BOPIS for Grocery Stores: 2026 Guide

2026-07-07 · Updated 2026-07-14 · BopiSafe Team

Grocery is the number-one click-and-collect category for one reason: fresh food can’t go in a parcel. Produce, dairy, frozen, and prepared items are pickup-only or local-delivery-only by nature — they spoil in transit and shoppers want them today. That makes a multi-store grocery operation the sharpest fit for real BOPIS on Shopify, and the mixed cart its hardest case.

Up to 78.7% of click-and-collect sales are grocery items, according to Capital One Shopping research. The reason isn’t novelty — it’s physics. A bag of spinach and a tub of ice cream are pickup-or-local-delivery items, full stop. This guide covers how multi-store grocers run BOPIS correctly on Shopify, why live per-store stock is non-negotiable for fresh goods, and what happens when a customer mixes a perishable item with a pantry staple that ships from a warehouse.

Why is grocery the hardest BOPIS category to ship — and the best one to pick up?

Most retail categories can ship; pickup is a convenience. Grocery is the opposite. A meaningful slice of any grocery catalog physically can’t survive a parcel: fresh produce, refrigerated and frozen items, deli and bakery goods, cut flowers, prepared meals. These aren’t pickup-preferred — they’re pickup-only or local-delivery-only by their nature.

That flips the usual BOPIS framing. For a grocer, pickup and local delivery aren’t a feature bolted onto a shipping business — for the perishable half of the catalog, they’re the only fulfillment that works. Shelf-stable items (canned goods, pantry staples, household supplies) can ship. The cold-chain and fresh items can’t.

So a grocery store sells two kinds of products at once, and they need two different fulfillment paths. The trouble starts the moment a customer puts both in one cart.

Pickup also matches how people actually grocery shop — a planned weekly trip, not a spontaneous parcel order. US click-and-collect retail sales reached $154.3 billion in 2025, per Capital One Shopping, and grocery anchors that volume. Pickup’s share of online grocery specifically held around 37% in early 2025, with delivery taking the rest, according to Brick Meets Click data reported by Grocery Dive. Either way, the in-store-collection half of grocery is a multi-billion-dollar habit, not a niche.

Why does per-store stock matter more for grocery than any other category?

Grocery inventory moves faster than almost any other retail category, and it differs sharply by store. One location has organic strawberries on the shelf this morning; another sold the last clamshell an hour ago. A combined inventory pool — the Shopify default, which treats all your stock as one number — hides that difference completely.

The failure mode is concrete. A customer in one neighborhood reserves fresh salmon for pickup based on a stock count that’s really the total across five stores. Their local store doesn’t have it. They drive over, the fish isn’t there, and now you owe a refund and an apology for a wasted trip. For perishables, the stakes are higher than dry goods — there’s no “we’ll order it in for next week.”

Real multi-location BOPIS treats each store’s stock as its own truth. The product page shows live availability per store, and the in-cart store picker lets the shopper choose where to collect — sorted by priority then distance. A store that’s out of stock or at pickup capacity stays visible but greyed out, so the shopper sees it exists and picks an available one instead.

This is the heart of grocery BOPIS, not a nice-to-have. The store picker also locks the chosen store into checkout, so the order can’t drift to a location that doesn’t stock the item. Our guide to showing per-store stock at pickup covers how this works across a chain.

How does a mixed grocery cart break native checkout?

Here’s the everyday grocery cart that has no clean resolution at native checkout: a customer adds fresh chicken, a bag of apples, and a pint of ice cream (all pickup-only — they can’t ship) plus a case of canned tomatoes and a box of pasta (shelf-stable, shipped from your distribution centre — no store shelf to collect them from). One cart, two fulfillment realities.

By design, a Shopify order carries one fulfillment method. Every line in a single order ships, or every line is picked up — there’s no native way for one order to do both. So this cart has no single method that fits all of it. The customer hits checkout and either sees an error, or is forced into one method that creates an order you can’t fulfill — fresh chicken with a shipping label, or canned goods flagged for in-store collection.

This isn’t a rare edge case for grocery. It’s the modal basket. Shoppers don’t separate their fresh and pantry items into two trips, and they shouldn’t have to. The mixed cart is the normal grocery cart — which is exactly why grocers feel this gap harder than any other category.

The clean fix is to split the cart by fulfillment type and send each group through its own checkout. BopiSafe groups the fresh pickup-only items into one real native order tied to the chosen store, and the warehouse-shipped pantry items into a second real native order — two orders, never one merged order, because combining incompatible fulfillment into a single Shopify order is a platform limit nobody clears. Our mixed-cart split guide walks through the full flow.

Setting fresh items to pickup-only — and why it must hold at checkout

The mechanism behind all of this is a single merchant decision: which products can’t ship. You set each perishable SKU — or a whole “Fresh” or “Frozen” collection — to pickup-only or local-delivery-only. That’s the menu you’re defining. The shopper then orders from it.

The catch is enforcement. Marking an item pickup-only does nothing if shipping reappears at checkout. A theme tweak that hides shipping on the cart page looks correct in a browser — then a customer taps Shop Pay or Apple Pay, which skip the cart page entirely, and shipping options come back. The order goes through, the warehouse prints a shipping label for a carton of eggs, and you find out from the customer.

Proper BOPIS enforces the rule at checkout itself, inside Shop Pay and Apple Pay too — not just on the cart page. The fresh item never gets a shipping option, and there’s nothing to bypass by switching payment methods. This is the part DIY theme work can’t reliably do; most grocers use an app for it. Our pickup-only products guide breaks down the labeling decision and the enforcement gap in detail.

The principle is worth stating plainly: the merchant sets the menu, the buyer orders from it. You decide that fresh and frozen are collected in store, and the platform holds that line — a warehouse can’t ship what’s been marked must-collect.

How grocery pickup time slots actually work

Grocery pickup is time-sensitive in a way most categories aren’t. A customer picking up refrigerated items wants a specific window, and the store needs to stage cold items at the right moment — you can’t pull ice cream two hours early.

After choosing a store, the shopper books a pickup or local-delivery time from a month calendar for that store. Per-slot caps grey out windows that are full, so a single Saturday-morning slot doesn’t get swamped with more orders than staff can stage. Capacity caps (a daily limit per store) are a Pro-plan control; choosing a time is available on every plan.

Keep the framing honest here: this is a light confirmation layer — pick a store, pick a window. It is not a delivery-routing engine, a courier-dispatch tool, or a staff-rostering suite. Those run on Shopify-native tools or dedicated apps. BopiSafe’s job is the buyer-facing loop and checkout enforcement, not back-office logistics. For the setup details, see our pickup time window guide.

What does a complete grocery BOPIS setup look like?

Pulling it together, a multi-store grocer’s BOPIS stack has these parts working as one loop:

LayerWhat it does for a grocerWhy it matters
Live per-store stockShows what each store actually has, in real timePerishables turn over fast; combined pools cause wasted trips
In-cart store pickerShopper chooses where to collect; out-of-stock stores greyedOne trip, the right store, locked into checkout
Pickup-only enforcementFresh and frozen can’t get a shipping labelHolds inside Shop Pay and Apple Pay, not just the cart page
Time-slot bookingShopper books a collection window per storeCold items staged at the right moment; slots don’t overload
Mixed-cart splitFresh + pantry cart becomes two real native ordersThe modal grocery basket still checks out

Notice the order. The store picker and per-store stock are the heart of grocery BOPIS — that’s the everyday win, the shopper seeing which store has their items and locking that store into a clean native order. The split is what keeps the fresh-plus-pantry basket alive: it fires on a cart no single method covers — a pickup-only perishable beside a pantry line that ships from your warehouse.

Across our own pickup integration work since 2023, the pattern that separates a smooth grocery BOPIS launch from a support backlog is almost always per-store stock accuracy — get that right and the rest of the loop holds.

Where the native flow ends

If you run a single store, do a handful of pickup orders a week, and almost never see a mixed fresh-plus-pantry cart, you can probably get by on Shopify’s native local pickup plus a cart-page warning. The Shopify Help Center on local pickup covers that baseline.

You’ll outgrow it the moment any of these become true:

Worth noting: BOPIS shoppers are valuable once they arrive. 85% of US BOPIS shoppers have made an additional purchase when collecting an order, per Capital One Shopping — for grocery, the in-store top-up on pickup is a well-documented habit. A clean pickup experience isn’t just damage control; it’s a second sale.

BopiSafe is complete multi-location BOPIS for Shopify, and grocery is one of its sharpest cases. You set each product’s fulfillment — lock perishables to pickup-only or local-delivery-only in one click, per product or per collection. Shoppers see real-time per-store stock, choose where to collect in an in-cart store picker, and book a pickup time. That choice is enforced at checkout, not just shown — so fresh items never get a shipping label inside Shop Pay or Apple Pay. And a cart mixing a perishable item with a warehouse-shipped one splits into two real native orders, one per fulfillment type. Because these are real native orders, Shopify’s own “Ready for pickup” emails and POS handling just work — one less system to run.

Written by the BopiSafe team — we build BOPIS infrastructure for Shopify merchants.

Next steps

Frequently asked questions

Why is grocery the biggest click-and-collect category?

Groceries are perishable and time-sensitive — fresh produce, dairy, and frozen items can't sit in a parcel for two days, and shoppers want them today, not shipped. That makes pickup and local delivery the natural fulfillment methods, not shipping. Up to 78.7% of click-and-collect sales are grocery items, according to Capital One Shopping research. Pickup also fits the weekly-shop habit, where a customer plans the trip anyway.

Can a grocery customer buy fresh items for pickup and shelf-stable items for shipping in one Shopify order?

Not as one native order, once that pantry item ships from a warehouse or distribution centre rather than sitting on the shelf of the store they're collecting from. By design, a Shopify order carries one fulfillment method, so a pickup-only fresh item beside a line that can only ship leaves no single method that fits the whole cart. The native checkout either errors or forces one method that creates an order you can't fulfill correctly. BopiSafe works with this model by splitting the cart into two real native checkouts — one for the fresh pickup items, one for the ship-only ones.

How do I make perishable items pickup-only on Shopify?

There's no native per-product pickup-only toggle. You label the perishable SKUs as pickup-only (a tag or custom field works), enable local pickup on the stores that stock them, and add checkout-level enforcement that strips shipping for those items — including inside Shop Pay and Apple Pay. That last step is where most setups leak, because a theme tweak doesn't run inside express checkout. See our pickup-only products guide for the full pattern.

Why does per-store stock matter so much for grocery?

Grocery stock turns over fast and differs sharply by store — one location has organic strawberries today, another sold out an hour ago. If your online store shows a single combined inventory pool, customers reserve items that aren't actually on the shelf at their chosen store. Live per-store stock shows what each location genuinely has before the customer commits, which is the difference between a clean pickup and a wasted trip.

Does a grocery store need Shopify Plus for BOPIS?

No. BOPIS on Shopify works on every plan, including Basic. Shopify Plus adds some checkout-customization polish and its own native mixed-cart split (Plus or early access), but per-store stock, the store picker, time slots, and BopiSafe's own mixed-cart split all run on standard plans.

How do grocery stores handle a customer picking the wrong store for pickup?

The store picker should lock the chosen pickup store into checkout so the order can't drift to a location that doesn't stock the item. After the shopper picks a store, native checkout is constrained to that store. Stores that are out of stock or at capacity stay visible but greyed out, so the customer simply picks an available one instead of selecting a store that can't fulfill the order.

Can customers book a grocery pickup time slot on Shopify?

Yes, with a booking layer. After choosing a store, the shopper picks a pickup or local-delivery time from a month calendar for that store. Per-slot caps grey out full windows so a single Saturday-morning slot never gets overloaded. This is a light confirmation layer, not a delivery-routing or rostering suite — shipping items have no slot.

How does BopiSafe handle a mixed grocery cart with fresh and pantry items?

It groups the cart by fulfillment type and sends each group through its own real native Shopify checkout. The fresh pickup-only items go through a pickup checkout tied to the chosen store; the pantry items your warehouse ships go through a shipping checkout. Both are real native orders — not draft orders — so Shopify's own pickup notifications and POS handling work automatically. Shop Pay carries across both legs.

Will splitting the cart break discount codes or free-shipping thresholds?

Each leg is its own native checkout and evaluates against its own cart total. Shop Pay, Apple Pay, and stored payment methods work on every leg. Conditional promos — a "$15 off $75" code or a free-shipping threshold — apply per leg, against that leg's subtotal, not the combined original cart. If conditional promos are central to your grocery pricing, test them before going live.

Want pickup that doesn't break? See how BopiSafe works →

New to BopiSafe? Use code BOPISAFE30 at plan selection for a 30-day free trial instead of 14.