Blog

How to Set Up BOPIS on Shopify (2026 Guide)

2026-05-11 · BopiSafe Team

Setting up BOPIS on Shopify takes 4 steps: enable in-store pickup at each location in Shopify Admin, tag your pickup-only products, configure per-location capacity, then test the cart-to-checkout flow. Most stores can complete this in 30 minutes, but the harder part — handling mixed carts and capacity edge cases — is where Shopify’s defaults fall short.

This guide walks through the full setup, then covers the five most common mistakes that turn BOPIS from a revenue lever into a support nightmare.

What is BOPIS?

BOPIS stands for Buy-Online-Pickup-In-Store. A customer places an order on your Shopify storefront, selects a physical location for pickup at checkout, and collects the order in person instead of having it shipped. It’s also called click-and-collect in the UK and Australia.

BOPIS sits between pure e-commerce and pure retail. It gives customers same-day fulfillment without shipping fees, and gives merchants higher-margin orders (no carrier costs) plus foot traffic that often converts into add-on purchases.

According to Statista’s 2024 retail study, over 50% of US online shoppers used BOPIS at least once in the prior 12 months, and BOPIS orders convert 25-40% higher than ship-to-home for retailers with physical locations.

Why does Shopify need extra setup for BOPIS?

Shopify supports local pickup as a fulfillment option out of the box — you can enable it per location and pickup will appear at checkout. But the default behavior has four gaps that bite most merchants within the first month of going live:

  1. Shipping methods still appear on pickup-only carts. A customer adds a “store-only” item, and Shopify still shows them USPS rates, leading to confused orders that need manual fixing.
  2. Mixed carts can’t split cleanly. When a customer adds one pickup-only item and one shippable item, Shopify forces a single fulfillment choice. Most merchants either lose the order or fulfill it incorrectly.
  3. No per-location capacity. Shopify won’t stop accepting pickup orders for a store that’s already booked solid for the day.
  4. Inventory drift between sync windows. If POS sells the last unit while the e-commerce order is in the cart, Shopify happily takes the BOPIS order — leading to an unfulfillable promise.

Each gap is solvable, but solving them requires either a custom Shopify Function or a purpose-built app. The setup below covers the native flow first, then flags where you’ll need to extend.

Prerequisites

Before you start:

If you’re missing any of these, fix them first — BOPIS on top of broken inventory data will make the data problem worse, not better.

Step 1: Enable in-store pickup at each location

In Shopify Admin:

  1. Go to Settings → Locations
  2. Click the location you want to offer pickup from
  3. Scroll to Pickup and toggle This location offers pickup
  4. Set the expected pickup time (“usually ready in 2 hours” / “next day” — be honest, undersetting expectations costs more than oversetting)
  5. Add pickup instructions that will appear in the order confirmation (parking, hours, which door, how to identify yourself)
  6. Save

Repeat for every location that should accept pickup. Locations without pickup enabled won’t appear at checkout.

Common mistake: enabling pickup at a fulfillment-only warehouse where customers can’t physically visit. If staff aren’t trained to greet pickup customers, don’t enable pickup there — even if the inventory lives there.

Step 2: Tag your pickup-only products (and decide your taxonomy)

Not every product should be available for pickup. Heavy items, fragile items, perishables outside refrigeration, and special-order items often need to be either pickup-only or ship-only.

The cleanest way to model this in Shopify is with tags or a metafield:

Pick one and stick with it. Mixing tag-based and metafield-based logic is the #1 cause of BOPIS bugs we see in production.

Why this matters: by default, Shopify will show shipping methods for any product with stock at any location. Without product-level pickup rules, a customer adds a pickup-only item and Shopify still asks for a shipping address. The order goes through, the customer gets confused, your support team eats it.

Step 3: Set per-location capacity

Shopify natively does not support per-location pickup capacity. If your store can prep 30 pickup orders per day before staff are overwhelmed, Shopify won’t stop the 31st order from being placed.

To enforce capacity, you need either:

The goal is the same: when a location hits its daily/hourly cap, it should stop appearing as a pickup option at checkout. Customers either pick a different location or switch to shipping. Both outcomes preserve revenue; an unfulfillable pickup order does not.

If you’re at low pickup volume (under 10 orders/day) you can defer this step and operate on trust. Above that threshold, capacity enforcement pays for itself within the first week.

Step 4: Handle mixed carts (the hardest part)

A mixed cart is a single cart containing both pickup-only and shippable items. Shopify treats this as one cart with one fulfillment choice — there’s no native way to ship one item and pick up another in a single order.

You have three real options:

  1. Block mixed carts at the cart page. Show a message: “This cart contains items that can’t be combined. Please check out separately.” This is the cheapest to implement and the worst for conversion — abandonment rate spikes 15-25%.
  2. Split the cart into two coordinated draft orders. When the customer checks out, programmatically create one order for pickup and one for shipping, both linked to the same customer and payment. This is what BopiSafe does. Conversion stays intact, customer gets one checkout, you get two clean fulfillment paths.
  3. Force the whole cart to one fulfillment mode based on majority. Risky — you’ll fulfill some items wrong.

Option 2 requires a Shopify Cart Transform Function plus checkout-side coordination. It’s not trivial to build from scratch, which is why most merchants either accept the abandonment of option 1 or buy an app that handles option 2.

Step 5: Test the full flow before going live

Before you announce BOPIS to customers, run these test scenarios from a private browser session:

ScenarioExpected outcome
Cart with 1 pickup-only itemShipping methods hidden; pickup options shown
Cart with 1 shippable itemShipping shown; pickup hidden (unless dual)
Cart with bothEither split cleanly or surface a clear message
Pickup at a location with 0 stockLocation should not appear as a pickup option
Pickup at an at-capacity locationLocation should not appear
Order placed, then inventory hits 0 between cart and submitOrder should be blocked or downgraded

If any of these fail, fix before announcing. BOPIS that breaks at edge cases erodes trust faster than no BOPIS at all.

The 5 mistakes that kill BOPIS rollouts

After watching dozens of merchants launch BOPIS, the same five mistakes recur:

  1. Enabling pickup at locations that aren’t staffed for it. Customers show up, no one greets them, refund follows. Train first, then enable.
  2. Not setting expected pickup time honestly. “Ready in 2 hours” when reality is 6 hours generates more support tickets than no estimate at all.
  3. Forgetting to handle inventory drift. POS sells the last unit while a BOPIS order is in flight. Without enforcement, you’ve just promised a customer something you can’t deliver.
  4. Mixing tag-based and metafield-based pickup rules. Pick one. Document it. Never mix.
  5. Treating BOPIS as a shipping replacement, not a fulfillment mode. Mixed carts, location capacity, and pickup-only checkout are all distinct problems. Solving one without the others creates new failure modes.

Where Shopify defaults stop and BopiSafe begins

If you’re a single-location store with simple inventory and low pickup volume, Shopify’s native pickup is enough. Set it up, test it, run it.

If any of these apply, you’ll outgrow native quickly:

BopiSafe was built specifically for the gaps above: pickup-only checkout enforcement, mixed-cart splitting via coordinated draft orders, per-location capacity guardrails, and inventory-drift blocking. It runs on Shopify Cart Transform + Checkout Functions, so it adds zero perceivable latency and doesn’t require theme rewrites.

For a deeper comparison with the most-installed alternative, see our BopiSafe vs Zapiet writeup (coming soon).

Next steps

Have a question this guide didn’t answer? Email support@bopisafe.com — we read everything and update this guide based on what merchants actually run into.

Frequently asked questions

Does Shopify support BOPIS out of the box?

Partially. Shopify supports local pickup as a fulfillment option per location, but it does not split mixed carts (pickup + ship-to-home), enforce per-location capacity, or hide shipping methods on pickup-only carts. Most merchants need an app to close these gaps.

Can I run BOPIS on a single-location Shopify store?

Yes. BOPIS works with one location — the constraint is that the location must have a physical address customers can pick up from. Multi-location stores get more value from per-location capacity and routing, but single-location stores still benefit from pickup-only checkout and mixed-cart handling.

Do I need Shopify Plus for BOPIS?

No. BOPIS works on every Shopify plan. Shopify Plus adds Checkout Extensibility features that some pickup apps use, but the core flow (locations, pickup fulfillment, theme integration) works on Basic, Shopify, and Advanced plans.

Will BOPIS slow down my checkout?

Properly implemented BOPIS adds no perceivable latency. Shopify Cart Transform and Checkout Functions run server-side in milliseconds. The only slowdown comes from poorly written third-party apps — if your checkout feels slow after enabling pickup, audit the app, not BOPIS itself.

How do I handle a customer who orders pickup but never shows up?

Set a hold window in your order management workflow (typically 5-7 days). Send a pickup-ready email, then a reminder at 48 hours. After the hold expires, restock the item and refund. BopiSafe surfaces uncollected orders on the dashboard so this never falls through the cracks.

Can I charge a fee for in-store pickup?

Yes. Configure pickup as a paid fulfillment method in Shopify (e.g., a $2 handling fee for picking and staging). Most merchants offer pickup free as a conversion lever, but paid pickup is fully supported.

What happens if inventory goes to zero between cart and pickup?

This is the biggest BOPIS failure mode. Without enforcement, customers can place a pickup order for an item that is no longer physically in the store. BopiSafe blocks checkout when inventory drift would cause an unfulfillable order. Out of the box, Shopify does not.

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