BopiSafeInstall on Shopify
Plans & pricing

Everything, free — until 100 pickup orders a month.

There is no feature ladder here. Both plans are the same product — real per-store counts, the store picker, pickup times, per-slot capacity, unlimited stores. The only thing that differs is how many pickup orders a month are included.

Billing runs through your Shopify account: no card to set up, no annual commitment, and you can move between the plans at any time without reconfiguring anything.

Free

For stores taking up to 100 pickup orders a month.

$0/ month

Free forever · no card, no trial clock

  • The real available quantity at every pickup store
  • Store picker on the product page, in the cart and in your cart drawer
  • Pickup times: month calendar, slot length, lead time, blackout days
  • A capacity cap per slot — honoured at checkout too
  • Unlimited pickup locations
  • 100 pickup orders a month
  • No watermark, ever
Install free

Start on Free — it is not a trial and it does not expire. Upgrade from inside the app when the month's count says you need to.

Compare

The same list twice, on purpose.

Multi-location and live stock are the two things this category usually locks behind a paid tier. Here they're in the free one.

FeatureFreePro — $19.90/mo
Available quantity per pickup store
Store picker (product page, cart, cart drawer)
Buy-now interception, so direct checkouts carry the store
Pickup time slots on a month calendar
Lead time, blackout days, booking horizon
Per-store overrides of the default hours
Capacity cap per slot, hidden in storefront and checkout alike
Chosen store locked into checkout
Pickup time written onto the order for your admin
Pickup locationsUnlimitedUnlimited
Pickup orders per month100Unlimited
The meter

How a pickup order gets counted.

An order counts when both of these are true

  1. Shopify itself says it's a pickup order — the fulfillment order carries the pick-up delivery method.
  2. It carries the pickup choice BopiSafe wrote to the cart.

Why both, and not either

Our pickup attribute rides on the cart, and when Shopify splits a mixed cart that attribute can land on the shipping half as well — billing on it alone would charge you for orders that were never pickups. Going by the delivery method alone has the opposite problem: it would charge you for pickup orders our picker never touched, including ones you keyed in yourself in the admin.

Which way we fail

Deliberately downward. If a shopper's browser blocks our script and they check out through plain native pickup, that order isn't counted — you got nothing from us, so you aren't billed for it. We would rather undercount than send you a bill you'd have to argue with.

The small print, in full

  • Cancellations and refunds don't hand an order back to your allowance.
  • The count resets on the 1st of each month at 00:00 UTC — independent of your Shopify billing date.
  • Only pickup orders count. Shipping orders, draft orders and anything our picker didn't touch are invisible to the meter.

Going over doesn't switch anything off

The allowance is how we bill, not a kill switch. Past 100 orders in a month, your storefront behaves exactly as it did at order 99: the picker works, times can be booked, checkout still locks to the chosen store. What changes is a note on the app's home page and one email to you. An app sitting in the checkout path shouldn't be able to break your pickup flow over a bill.

How it runs

What it does to your store.

No theme code, ever

The storefront side is a Shopify app embed you switch on in the theme editor. We never edit, wrap or copy your theme markup — and an uninstall leaves nothing behind in it.

It cannot block a checkout

The single checkout customization only ever hides: the pickup stores nobody chose, and slots that filled up. There is no rule anywhere in the app that can stop a shopper with an error.

Real native orders

Every order is Shopify's own pickup order. No draft orders, no shipping order dressed up with a tag — so notifications, POS handoff and your reports keep working untouched.

It doesn't hold up your page

Stock is fetched after first paint and briefly cached, so the product page renders at its usual speed. If the lookup fails we show nothing rather than a wrong number.

Your settings live in Shopify

Hours, slots and capacity are stored as metafields on your own shop and locations. There is no separate database of yours for us to lose, and you can read it all through the Shopify API.

Clean uninstall

Uninstall and the storefront reverts to native pickup immediately. We drop the access token on the uninstall webhook and everything shop-keyed on Shopify's redact webhook.

Install it free and see it on your own products.

Nothing to fill in first — it reads your stores and puts sensible hours in place.