Site: SAAS Integrator — a leading Australian iPaaS platform connecting eCommerce, ERP, POS, CRM, and marketing systems. We build revenue-focused integrations across Shopify, WooCommerce, Acumatica, MYOB, NetSuite, SAP Business One, Retail Express, Lightspeed, and Square.
Summary: Set up real-time pickup availability, custom messaging, and Pickup-Only enforcement on your Shopify store. This guide covers the quick start, installation, configuration, and a developer reference.
Set up real-time pickup availability, custom messaging, and Pickup-Only enforcement on your Shopify store. This guide covers the quick start, installation, configuration, and a developer reference.
Release notes for the Click and Collect app, newest first. Each entry links to the full setup section.
30 September 2026
3 updates · 1 new · 2 improvements
Improvement
Gift cards and digital products now skip store pickup
In short: Products that do not need shipping, such as gift cards and e-books, are now left out of store pickup completely. A cart holding only these goes straight to checkout without the Cart Popup. Their product pages no longer show store availability. In a cart with other products, they are never checked against store or delivery stock.
Why we changed it
The app treated a gift card like any other product. A gift card holds no stock at your stores, so its product page showed Out of Stock directly under the Add to cart button, and customers read that as "I cannot buy this". At checkout the Cart Popup asked the customer to choose a pickup store or a delivery method for something that is emailed to them. It then marked the gift card as not available, which could disable the checkout buttons for the whole cart, including the products that were in stock.
What the customer sees now
Only gift cards or digital products in the cart: Checkout goes straight to Shopify checkout. The Cart Popup does not open. Shopify's checkout has no delivery step for these orders.
On the product page: the store availability block is not shown, so the product never reads Out of Stock.
Mixed with other products: the Cart Popup opens as usual for the physical products. The gift card is listed with its price, quantity and remove button, and never shows an availability message. It no longer blocks store pickup or Home Delivery, and the store list is worked out from the physical products only.
How the app recognises these products
It uses one Shopify setting: whether the product is a physical product. In the product editor this is the Shipping section. When it reads Not a physical product (older admin: "This is a physical product" unticked), the app leaves that product out of store pickup.
That covers Shopify gift cards, gift vouchers created in Shopify by the SAAS Integrator REX connector, and ordinary products you have set up as a gift card, e-book or other download. The app does not look at the product name, type or tags.
How to set it up
There is no setting to turn on. It works for every store once released. We recommend one quick check:
In Shopify admin open Products and open each gift card or digital product.
In the Shipping section, confirm it reads Not a physical product. If the product has variants, check each one.
Open the product on your storefront. The store availability block should not appear.
Good to know
A gift card still marked as a physical product is treated as physical. It shows store availability and opens the Cart Popup, as before. Switch the Shipping setting to fix it.
Pickup details are cleared. If the customer chose a store earlier in their visit, the store details are removed from the cart before checkout, so a gift card order is not recorded or tagged as a pickup order.
Checkout is never held up. The app checks the cart when Checkout is clicked. If that check fails or takes more than two seconds, the Cart Popup opens as it always has.
The Checkout button shows it is working. While the app gets checkout ready, the button fades and cannot be clicked twice.
Products with physical and digital variants: the product page block follows the variant selected when the page loads.
Not affected: the site-wide store popup, the header store icon, the Store Locator and your checkout pickup options.
In short: When an order is placed, the app now adds Shopify order tags. Every store pickup order gets Store Pickup and the store name. An order where the customer pressed the store pickup checkout button but then chose shipping gets Store Pickup chosen - shipped and the store name. You can filter your orders list by these tags.
The tags
Store Pickup plus the store name, for example Bondi Beach: the customer is collecting the order from that store.
Store Pickup chosen - shipped plus the store name: the customer chose store pickup in the Cart Popup, then switched to shipping at checkout. The order is a normal delivery. The tag tells staff why a store name appears in its details.
How they work
Added once, when the order is placed. The app never changes them afterwards.
The store is the one chosen at checkout. If the customer picked one store in the Cart Popup and another at checkout, the tag names the checkout store. Moving the order to another location later does not add a new store tag.
Your own tags are kept. The app only adds tags. It never removes a tag you or another app added. Older orders keep any tags they already have.
Orders with only gift cards or digital products are not tagged.
How to set it up
There is nothing to turn on. Tagging starts for every store once released.
The app no longer edits your orders after they are placed
In short: The app used to go back to every order a few seconds after it was placed, and again whenever it changed, and rewrite the order's Additional details. It now leaves orders exactly as they were placed.
Why we changed it
Those edits were meant to keep the store and delivery method in Additional details correct. In practice they caused more problems than they solved. They could record the wrong store after an order was moved, and each edit added an "edited the details" entry to the order timeline. Every edit also set off any other app that listens for order changes. With a second app installed, the two could keep correcting each other.
What changes
No more "edited the details" entries from the app on your order timelines.
Moving an order changes nothing the app recorded. Move pickup orders between stores in Shopify as you normally would.
Additional details show what the customer chose in the Cart Popup. In most orders this matches checkout. If the customer changed their mind at checkout, it can differ. For example, a customer who picked a store and then chose shipping keeps that store name in Additional details.
Shopify's own record is the one to trust. Use the delivery method and pickup location Shopify shows on the order, and the order tags.
Good to know
Existing orders are not changed.
Notification templates that use Shopify's delivery method keep working. See Liquid examples.
If you built an email, Flow or report on the customerLocationName detail, switch it to Shopify's pickup location or the Store Pickup tags.
Checkout now opens on Pickup with the customer's store selected
In short: A new Open checkout on the Pickup tab setting in the Cart Popup. When it is on, a customer who clicks the Store Pickup checkout button lands on Shopify's Pickup tab with the store they chose in the Cart Popup already selected. They no longer start on Ship and have to find their store a second time.
Why we added it
Shopify's checkout always opened on the Ship tab, even after the customer had chosen a store and clicked the Store Pickup checkout button. With Enforce Store Pickup at checkout on, the customer typed an address and saw "Shipping not available", then had to work out that they needed Pickup. With it off, some customers paid for home delivery on an order they meant to collect. Either way they were asked to choose a store they had already chosen.
How to set it up
Open Online Store → Themes → Customize → App embeds → Cart Popup.
Under Store Pickup checkout, directly below Enforce Store Pickup at checkout, turn on Open checkout on the Pickup tab.
Save, then run the quick checkout test in the full setup section. You do not need to place an order.
Screenshot pending. Save as docs-images/open-checkout-on-pickup-tab.png
The new setting in the Cart Popup app embed. Open checkout on the Pickup tab sits in the Store Pickup checkout section, directly below Enforce Store Pickup at checkout. It is off by default.
Good to know
Off by default. Nothing changes on your storefront until you turn it on.
The Ship tab is still there. Shopify does not let any app remove or hide the Ship and Pickup buttons. The customer starts on Pickup and can still click Ship. To stop them completing the order as home delivery, also turn on Enforce Store Pickup at checkout.
No extra setup in Shopify admin. Unlike Enforce Store Pickup, this setting does not need the Pickup-Only Delivery Customisation.
It applies at the checkout click, not at store selection. Choosing a store on its own changes nothing at checkout.
Delivery checkouts still open on Ship. If the customer goes back, chooses Delivery in the Cart Popup and clicks Checkout With Delivery, checkout opens on Ship with your shipping rates.
Checkout is never held up. If Shopify does not respond within about two seconds, the customer goes to checkout as before, starting on Ship.
Checkouts that skip the Cart Popup are not affected, for example an express checkout button on the product page.
Stop Store Pickup orders being placed as home delivery
In short: A new Enforce Store Pickup at checkout setting in the Cart Popup. When it is on, a customer who checks out with Store Pickup can only complete the order as Pickup. Shopify's checkout no longer offers them a shipping rate, so the order cannot be placed as home delivery by mistake.
!
Setup required. The setting does nothing on its own. The Pickup-Only Delivery Customisation must also be active in your Shopify admin. If it is not, checkout still offers shipping on Store Pickup orders even with the setting on.
Path: Shopify admin → Settings → Shipping and delivery → Customisations → Add customisation → SAAS CNC Pickup-Only Delivery Customisation → Save. If you already activated it for Pickup In Store Only products, no further action is needed.
Why we added it
Shopify's checkout always opens on the Ship tab. A customer who chose a store and clicked the Store Pickup checkout button can miss that, enter an address, and pay for home delivery. The store never gets a collection to prepare, a parcel may already be on its way, and staff find out when the customer turns up to collect. Some merchants want this prevented outright. Others prefer not to lock customers in, so the setting is optional and off by default.
How to set it up
Make sure the SAAS CNC Pickup-Only Delivery Customisation is active (see the path above).
Open Online Store → Themes → Customize → App embeds → Cart Popup.
Find Store Pickup checkout, just above Home Delivery stock check, and turn on Enforce Store Pickup at checkout.
Save, then run the quick checkout test in the full setup section. You do not need to place an order.
Screenshot pending. Save as docs-images/enforce-store-pickup.png
The new setting in the Cart Popup app embed. Enforce Store Pickup at checkout sits in its own Store Pickup checkout section, above Home Delivery stock check. It is off by default.
What the customer sees
Nothing changes in the Cart Popup. At Shopify's checkout the Ship tab is still there, but where the shipping rates would be Shopify shows its own "Shipping not available" message. The customer selects the Pickup tab, which lists your stores as usual, and completes the order as a pickup.
Good to know
Off by default. Nothing changes on your storefront until you turn it on.
This is now how pickup is enforced for customer-selected stores. The 24 June 2026 release locked checkout as soon as a store was chosen. That is now a setting you switch on, and it applies at the checkout button rather than at store selection, so customers who are only browsing stores are never locked in.
It applies when the customer clicks the Store Pickup checkout button in the Cart Popup (labelled Checkout With Click & Collect unless you renamed it). Choosing a store on its own does not lock anything.
Customers can still change their mind. If they go back to your store from checkout, the lock is removed. They can then choose Delivery in the Cart Popup and check out with shipping as normal.
Home delivery orders are never affected. A customer who checks out with Delivery always sees your shipping rates.
Pickup In Store Only products are separate. They are always pickup-only at checkout once the customisation is active, whether this setting is on or off.
Checkouts that skip the Cart Popup are not locked. For example an express checkout button on the product page. Those customers see the normal checkout.
In short: The Cart Popup has been rebuilt for mobile. A postcode search shows the three closest stores, the chosen store collapses to a single card, the reason an item cannot be collected sits next to the store rather than off screen, and a new Maximum popup height on mobile setting stops the popup covering anything else at the bottom of the screen. Desktop keeps its two-column layout.
Why we changed it
The Cart Popup was designed on a desktop and did not work well on a phone. A 393px screen showed about three and a half stores before the checkout button, every store row carried its own Get Directions button, long store names were cut mid-word, and the cart items sat below the store list. When a customer chose a store that could not fill their cart, the checkout button went grey and the reason was two scrolls away. On mobile-heavy stores that is where customers gave up. Some merchants also run another bar or popup at the bottom of the screen and had no supported way to keep the two apart.
What the customer sees now
Three closest stores after a search. The postcode search returns the three nearest stores, sorted by distance. There is no Show more link. The search box is how a customer looks further afield. Stores set up with fixed Store Location IDs still show every store you listed.
One-line store rows. Each unselected store is a single row: store name, status, distance. Names wrap onto a second line instead of being cut short.
The chosen store collapses to a card. Once a store is selected it becomes one card under a Pick up at heading, with hours, address and a Directions link, and a Change store link on the right. The postcode search hides until Change store is tapped. This happens whether or not the store can fill the cart.
The reason sits next to the store. If the chosen store cannot fill the cart, its card shows the reason in red, checkout stays disabled, and the cart section opens underneath so the customer can see which lines are the problem.
Directions only where it is useful. The Directions link appears on the selected store card only, as a text link. Unselected rows no longer carry a button each.
Cart items collapse on mobile. On a phone the cart shows as a summary row (for example "3 items · $1,448.05") with a chevron. It opens automatically when an item is unavailable, and the customer can open or close it with a tap. Desktop still shows the full list.
Delivery method as a single control. On screens under 768px the Click & Collect and Delivery buttons become one full-width two-part control and the Delivery Method heading is dropped to save space.
Note text is trimmed on mobile. The banner at the top of the popup is limited to two lines on a phone. Desktop shows the full text.
Screenshot pending. Save as docs-images/cart-popup-mobile-collapsed.png
The mobile layout with a store chosen. The two-part delivery method control, the Westfield card under Pick up at with Change store on the right, the "3 items" summary row, and the checkout button all fit without scrolling the popup.
New settings
All three are on the Cart Popup app embed. Nothing is required, the defaults match what is described above.
Maximum popup height on mobile (under the new Mobile layout heading). A number in pixels, pre-filled with 550. It caps the popup on screens under 768px wide. Use it if another popup or bar sits at the bottom of the screen. Leave it blank to use 86% of the screen. Whatever you enter, the popup never exceeds 86% of the screen, so a small phone never gets a popup taller than its display.
"Change store" label. The link on the selected store card that reveals the postcode search. Default: Change store.
"Pick up at" heading. The heading above the selected store card. Default: Pick up at.
Screenshot pending. Save as docs-images/cart-popup-mobile-layout-settings.png
The Mobile layout setting in the Cart Popup app embed. Maximum popup height on mobile, pre-filled with 550.
Good to know
Desktop is unchanged in shape. Two columns, full cart list, Delivery Method heading. Desktop picks up the tidier store rows and the collapsed selected-store card, nothing else.
Nothing is chosen for the customer. After a search the three stores show with no store selected and checkout disabled until they tap one. When a customer returns with a remembered store, that store is selected and collapsed straight away.
Sorting, radius and stock rules have not changed. Only how many stores are shown after a search and how they are laid out.
Your Directions settings still apply. The label, colour and font size you set on the Locations Popup block are used by the Directions link on the selected card.
Easier-to-read status colours. The default green, red and amber used for Available, Not available and warnings have been darkened so they pass accessibility contrast checks on white. If you have saved your own colours, yours are kept.
Not affected: the product page store selector, the site-wide store popup, the checkout pickup options and the checkout banner all look and behave as before.
Store pages now live on your own domain at /pages/
In short: Each store now has a real Shopify page, for example yourstore.com/pages/bondi-beach, instead of an app address. Better for local SEO, and finally a URL you can put on signage, in Google Business Profile, or in print.
!
Setup required. You need a Shopify page per location and a one-off theme template. Existing store links keep working in the meantime, so nothing breaks while you do it. See the steps below.
Why we changed it
Store pages used to be served from an app address that read as third-party infrastructure in the address bar and in search results. It was not a URL a merchant could sensibly use anywhere, and for a business whose store pages are its main local search asset that is a real cost. Several merchants also already had their own store pages, which meant search engines saw two competing URLs for the same shop and the one being linked to internally had nothing on it.
What you need to do
Create a page in Online Store → Pages for each location. Leave the content blank, the app fills it in.
Create a store-detail page template in your theme, add the Store Detail Content block to it, and assign that template to your store pages.
Check each location's Page title on the Store locator tab produces the handle you used. The tab shows a live preview of the resulting URL.
Good to know
Old links still work. Previous store addresses redirect to the new page, so existing links and anything already indexed carry over rather than breaking.
The Page title now sets the URL. It used to affect only the SEO title. Editing it on a live store will move that store's address, so treat it as a URL change.
If you already had store pages, point the app at them by matching the Page title to your existing handle. Do not rename your pages.
Nearby store links and the structured data on every store page now use the new addresses too.
Stop customers ordering home delivery on items you cannot ship
In short: A new Validate stock for Home Delivery setting checks every item in the cart against the locations you actually ship from. If something is not available for delivery, the customer is told at the cart and Checkout With Delivery is disabled until they remove it or switch to Click and Collect.
Why we added it
The Cart Popup already checked stock for Click and Collect, but it checked nothing on the Delivery tab. If you hold stock in your stores but ship from one warehouse, a customer could pick home delivery for an item that only existed on a shop shelf. The order went through, and staff discovered afterwards that there was nothing to ship. This is common for retailers who push store pickup hard, because the warehouse runs dry while stores still have stock.
How to set it up
Open Online Store → Themes → Customize → App embeds → Cart Popup.
Find Home Delivery stock check and turn on Validate stock for Home Delivery.
Enter your Delivery Location IDs: up to three comma-separated Shopify Location IDs for the locations you ship online orders from. This step is required. Leaving it blank keeps the check switched off.
Adjust the message and note wording if you want, then Save.
Screenshot pending. Save as docs-images/home-delivery-stock-check.png
The new settings in the Cart Popup app embed. Validate stock for Home Delivery, Delivery Location IDs, and the wording and colours for the per-item message and the note.
What the customer sees
When an item cannot be delivered, the Delivery tab lists the cart, marks the item in red, and shows a note explaining what to do. The checkout button stays visible but disabled, so the customer understands why they cannot continue rather than meeting a dead end.
Screenshot pending. Save as docs-images/delivery-not-available.png
Delivery blocked at the cart. The item is flagged "Not available for home delivery", the note points the customer to Click and Collect, and Checkout With Delivery is greyed out.
Good to know
Off by default. Nothing changes on your storefront until you turn it on and enter your location IDs.
Stock is added up across your delivery locations. If you ship from two warehouses holding one unit each, a cart quantity of two passes.
Click and Collect is unaffected. A customer blocked from delivery can still collect the same item from a store that has it, which is exactly what the note tells them to do.
You choose the locations, not Shopify. Shopify cannot tell a warehouse from a shop, so you name the locations you ship from. Enter up to three.
Works alongside the existing Remove unavailable items button. Clearing the flagged items re-enables checkout straight away.
✓
Want certain products to be collection only, always? This check is stock-driven. It blocks delivery when the item is not available to ship, and allows it as soon as stock arrives.
If instead you have products that should never be delivered regardless of stock, that is a different setting. See Click and Collect orders now enforce pickup at checkout and set it up via the Pickup-Only Delivery Customisation. The two work well together: use Pickup In Store Only for products that are always collection only, and this check for everything else.
Home delivery orders are no longer recorded as pickups
In short: If a customer chose a pickup store and then checked out with home delivery, the app could still record that order as a Click and Collect pickup, complete with a store name. Order details now always match the delivery method Shopify captured.
Updated 30 September 2026: the app no longer edits order details after an order is placed. Additional details now keep what the customer chose in the Cart Popup, and the order tags show pickup versus shipped. See The app no longer edits your orders after they are placed.
What was going wrong
Choosing a store marks the cart as a pickup behind the scenes. If the customer then changed their mind and checked out with delivery, or reached checkout by a route that skipped the Click and Collect step such as an express checkout button, that marker could be left behind. The app read the leftover marker rather than the delivery method on the order, so a parcel that shipped with tracking could be filed as a store collection.
The order itself was always correct. It shipped normally, to the right address, with the right tracking. What was wrong was the app's own record of it.
What changes
The delivery method Shopify recorded on the order is now the source of truth, so the customer's final choice always wins.
A delivery order no longer carries a store name or pickup details.
Orders delivered to a parcel locker or collection point are correctly treated as deliveries rather than store pickups.
Why it matters to you
Click and Collect reporting is accurate again. Affected orders were inflating pickup volume for a store that never handled them, and understating home delivery.
Staff see one consistent record. Previously the order details could contradict the rest of the order, and whoever opened it had to work out which to believe.
Anything reading these details gets the truth, including notification templates that switch wording between collection and delivery.
Good to know
Genuine Click and Collect orders are unaffected. Pickup orders still record the chosen store exactly as before.
If you renamed your pickup option to something without the words "click and collect", it still works. Shopify classifies the order itself, so the label you use does not matter.
Existing orders are not corrected retrospectively. Orders already placed keep whatever details they were given. If you need historic orders cleaned up, contact support.
13 August 2026
1 update · 1 improvement
Improvement
Checkout only offers stores that can fulfil the whole order
In short: A store is now offered as a pickup option at checkout only if it holds stock for every item in the cart. Previously a store could be offered when it held only some of the items, so customers booked collections their store could not complete.
Why we changed it
Pickup options were built by combining the stores that could supply each line separately. On a single-item cart that is correct. On a mixed cart it was not: a store holding item A but not item B still appeared, because it qualified on item A alone. Customers chose it, staff then discovered half the order was missing, and the collection had to be chased or cancelled. Most retailers using Click and Collect do not run inter-store transfers, so there was no way to rescue those orders.
What you'll notice
On mixed carts, fewer stores may appear at checkout than before. The ones that do appear can complete the whole order.
Single-item carts are unaffected.
Nothing to configure. This applies automatically once the delivery customisation is active.
Good to know
Genuine backorders still allow pickup. If an item is out of stock at every location, your stores are still offered and the customer sees "We'll notify you when stock arrives" rather than "Ready for pickup now!". This keeps pre-orders and special orders working.
Fulfilment-only warehouses are never offered, even when they hold the stock. Only locations with local pickup enabled in Shopify appear.
A store chosen on the product page is honoured when it can fulfil the order. If it cannot, the customer sees the other stores that can, rather than an empty list.
If a mixed cart has no single store able to supply all of it, pickup is not offered for that cart. The customer can still order by home delivery, or split the order.
In short: A new Store selection memory setting on the Product Page block lets you decide whether a shopper's chosen store carries over to the next product. Keep it across visits, keep it for the browser session only, or show it only on the product where it was picked.
Why we added it
Once a shopper picked a store, it was remembered for 365 days and appeared already selected on every product page afterwards. That suits stores where customers always collect from the same place, but it means a shopper browsing other products never sees what is available at other locations. Merchants asked for the choice.
How to set it up
Open Online Store → Themes → Customize → Default product and select the SAAS Product Page CNC block.
Find Store selection memory, directly under PDP Store Lookup Mode.
Choose the option that suits your customers, then Save.
The three options
Remember across visits (default, recommended). Exactly as before, remembered for 365 days.
Session only. Remembered while the browser session is open, then forgotten.
This product only. Shown on the product where it was picked. Other products open in the search state.
Good to know
The default keeps today's behaviour, so nothing changes on your storefront until you choose otherwise.
Cart and checkout always keep the selected store, in every option, so a pickup order is never interrupted part way through.
This setting applies in Embedded PDP Store Lookup Mode only.
It is separate from Remember last searched postcode. That one remembers where a shopper searched, this one remembers which store they chose.
In short: An optional link on the selected store banner that clears a shopper's store completely and returns the block to the search state. Off by default, so nothing changes unless you switch it on.
Why we added it
Choosing a store also marks the cart as a pickup order behind the scenes. There was no single control that undid all of it, so a shopper who thought they had deselected their store could still be treated as collecting in store. This link clears everything in one action.
How to set it up
Open the SAAS Product Page CNC block in your theme editor.
Turn on Show "Remove store selection" link.
Save. The link appears on the selected store banner.
Good to know
It clears the saved store, the remembered selection and the cart pickup details together, then returns the block to the search state.
The clear button in the search field now performs the same full clear.
This setting applies in Embedded PDP Store Lookup Mode only.
In short: You can now flag a product as Delivery Only, so it is automatically removed from the cart when a customer checks out with Click and Collect. Home Delivery is unaffected.
Why we added it
Some products only make sense on a delivered order, for example a Shipping Insurance add-on. On a Click and Collect order there is nothing in transit to insure, so the customer should not be charged for it. Delivery Only removes these items automatically at collect checkout, so customers are only ever charged for what applies to their chosen method.
How to set it up
Open the Locations Popup app embed in your theme settings.
Choose a trigger and set its Trigger Value to match the metafield value on your products (for example Delivery_Only).
Turn on Delivery Only (remove on Click and Collect) for that trigger.
Set the matching metafield value on each delivery-only product.
Good to know
It is driven by your product metafield, not by stock levels, so your inventory and product sync are not affected.
It cannot be combined with Pickup In Store Only on the same trigger. If both are switched on, Pickup In Store Only takes priority and the item is kept.
If a cart contains only Delivery Only items and the customer chooses Click and Collect, they are shown a message asking them to switch to Home Delivery, and their cart is kept rather than emptied.
Click and Collect orders now enforce pickup at checkout
In short: When a customer selects a store for Click and Collect, the checkout now shows only the in-store pickup option for that store. Shipping and local delivery options are hidden for that order, so a pickup order can no longer be placed as a shipped order by mistake.
!
Setup required. This only works once you activate the delivery customisation in your Shopify admin. Until it is activated, shipping options will still appear at checkout on pickup orders.
Path: Shopify admin → Settings → Shipping and delivery → Customisations → Add customisation → SAAS CNC Pickup-Only Delivery Customisation → Save. This is the same customisation used by the Pickup In Store Only product setting, so if you have already activated it for that, no further action is needed.
What was happening before
After a customer chose a pickup store, the checkout still offered a shipping rate (such as Express Post) as the pre-selected default. If the customer did not actively switch to the pickup option, the order was created with a shipping line even though it was a genuine Click and Collect order. That meant staff had to correct the order by hand, and it could trigger the wrong customer email.
What changes now
Once a store is selected for pickup, only the "Pick up" option for that store is shown at checkout.
Carrier shipping and local delivery options are hidden for that order.
Pickup orders come through correctly the first time, with the right store location attached, and no manual correction is needed.
Good to know
This only affects carts where the customer has actively chosen a pickup store. Normal delivery orders are unaffected.
Once a customer has committed to Click and Collect, they cannot switch to delivery on the final checkout screen. To change to delivery, they return to the Click and Collect step, deselect the store, and choose delivery before checking out again.
Add the Product Page block to your product template so customers see pickup availability before they add to cart.
Verify each pickup location has a complete address and Shopify's Pickup in store setting is enabled in Settings → Locations.
Configure Store Hours (recommended) for each pickup location so customers see real opening times and pickup days.
✓
You're live. Customers can now find your stores and see pickup availability on the product page.
i
Recommended: enable both App Embeds. Toggle both in Online Store → Themes → Customize → App embeds. They work together. Cart Popup reads its settings (stores, stock display, custom messaging, colours) from the Locations Popup block, so enabling both gives you the full Click and Collect experience.
Locations Popup: holds the bulk of the app's configuration and renders the optional global store selector, header widget, and banner. The popup's auto-open on page load is disabled by default, so the popup only opens when the customer taps the store selector on a product page or in the header. Turn auto-open on in the block settings if you want a site-wide popup that opens for first-time visitors.
Cart Popup: pre-checkout cart validation, custom messaging at each cart line, Pickup-Only Home Delivery blocking. Requires Locations Popup to be on. Especially important if you use custom messaging triggers or have Pickup-Only products.
Must-do checklist
The four tasks below are the strict minimum for the app to work on your storefront. Each task links to its detailed section.
Subscribe to a plan.
The app is unusable without an active plan. All three plans include the full feature set. The 14 day trial is free.
Add a Google API key, or use hard-code mode.
Postcode / ZIP search and distance ranking require a Google Cloud key with the Geocoding and Distance Matrix APIs enabled. The Store Locator map and Google Business Profile linking need two more (Maps JavaScript and Places API (New)). See Step 2 for the full list of four. We recommend enabling all four so every feature works. If you have 5 or fewer pickup stores, you can skip the key and list them directly in the Product Page block.
Add the Product Page block.
Without it, customers cannot see pickup availability on the product page. Place it below the buy buttons.
Verify location addresses and Shopify "Pickup in store" setting.
Each pickup location must have a complete address (street, city, state, postcode, country) and Shopify's native Pickup in store toggle enabled. The app reads these directly from Shopify locations.
Optional features
The items below are not required for basic Click and Collect. Enable each one only if you want the specific capability it adds.
Feature
What it adds
When you need it
Locations Popup (App Embed)
Holds the bulk of the app's configuration: store list, stock display, custom messaging triggers, colours, popup behaviour. Also renders the global "select your store" popup, persistent header widget, and store banner.
You want a site-wide store selector, header widget, or banner. Required if you enable Cart Popup (Cart Popup reads its settings from this block).
You use custom messaging triggers, you have Pickup-Only products, or you want stock validated against the chosen store before checkout. Requires Locations Popup to be on. Cart Popup is a settings shell that reads its store list, colours, and messaging from the Locations Popup block.
Store Hours
Per-location opening hours, Click and Collect availability schedule, holiday closures.
Recommended for all merchants. Without it, store cards do not show hours and pickup is treated as always available.
Pickup-Only Delivery Customisation(manual setup)
Hides shipping and local delivery at checkout for pickup orders: carts containing a Pickup In Store Only product, and Store Pickup checkouts when Enforce Store Pickup at checkout is on. Enforced by a Shopify delivery customisation.
Required if you use Pickup In Store Only or Enforce Store Pickup at checkout. Neither does anything at checkout without it: Shopify still offers a shipping rate as the default, so a genuine pickup order can be placed as a shipped order and need manual correction.
Store Banner (App Block)
Header strip showing the selected store and delivery postcode across the storefront.
You want to reinforce the chosen pickup store on every page.
Checkout Pickup Banner(Shopify Plus only)
Confirms the pickup store the customer chose, rendered in the Delivery section of the checkout page.
You're on Shopify Plus and want to reinforce the chosen pickup store at checkout. Added in the Checkout editor, not the Theme editor.
i
Cart Popup is the most common gap. If you've set up custom messaging or Pickup-Only products and your customers can still checkout with Home Delivery, or your custom messages don't appear before checkout, your Cart Popup embed is off. Open Online Store → Themes → Customize → App embeds and turn it on. Make sure Locations Popup is also on. Cart Popup reads its store list, stock display, and messaging settings from the Locations Popup block.
Installation
Full step-by-step from a fresh install. Should take 10 to 20 minutes for a single-store retailer, 30 to 60 minutes for a multi-location chain that needs Store Hours configured per location.
Prerequisites
Before you start, confirm:
You have a Shopify store. Both Shopify Plus and non-Plus plans are supported.
At least one Shopify location exists, with a complete address (street, city, state / province, postcode, country) and Shopify's native Pickup in store setting enabled. To check, go to Settings → Locations.
(Optional, postcode-search mode only) You have a Google Cloud account. A new project is fine. Billing must be enabled on the project to use Distance Matrix and Geocoding, but free tier limits cover typical small-to-mid traffic.
You can access your Shopify theme editor and add app blocks to your product template.
Screenshot pending. Save as docs-images/shopify-app-store.png
Shopify App Store install page. Shows the Add app button and the requested permissions.
2
Pick a plan
On first load you will see the plan picker. Choose the plan that matches your location count and monthly order volume. All plans include the full feature set, and all plans start with a 14 day free trial. You can change plans later from Billing in the app sidebar.
Screenshot pending. Save as docs-images/plan-picker.png
Plan picker. Three plan cards (Local Retail, Growing Retail, Large Retail Network) with feature lists, current-usage bars, and Select / Cancel buttons.
Step 2. Add your Google API key
When a customer types their postcode / ZIP to find a pickup store, the app uses Google to convert it into a location and rank stores by distance. The Store Locator map, town / suburb / city lookup, and Google Business Profile linking use a couple more APIs. A single Google API key works for all of them. We recommend enabling all four so every feature works.
i
Skipping this step. If you have 5 or fewer pickup stores, you can enter your Shopify Location IDs directly in the Product Page block and skip the Google API entirely. See hard-code mode. Postcode / ZIP search, the store locator map, and town / suburb / city lookup are not available in this configuration.
Enable all four APIs on the project from APIs & Services → Library (search each by name and click Enable). One API key covers them all.
API
Powers
Required for
Geocoding API
Converts a postcode / ZIP or place name into a location. Also backs town / suburb / city lookup and the optional store banner.
Postcode / ZIP search
Distance Matrix API
Ranks stores by distance from the customer.
Distance ranking
Maps JavaScript API
Renders the interactive store locator map with branded pins.
Store Locator
Places API (New)
Powers place / address autocomplete in the search box, and Google Business Profile lookup on the Store Hours page.
Autocomplete & GBP
i
Basic Click and Collect needs only Geocoding and Distance Matrix. The other two, Maps JavaScript and Places API (New), are needed once you use the Store Locator and link a Google Business Profile. We recommend enabling all four up front so every feature works. You do not need the Routes API; Get Directions opens a standard Google Maps link that needs no key.
3
Create an API key. Go to Credentials → Create credentials → API key. Google will generate the key and show it once.
4
Copy the key and paste it into the app's Google API settings page in Shopify admin (in the app sidebar). Save.
Screenshot pending. Save as docs-images/google-api-settings.png
App Google API settings page. Three fields: Google API key, IPinfo API key (optional), Store search radius. Save button.
i
Application restrictions: choose None (unrestricted). In Google Cloud Console, open the key under Credentials → Application restrictions and select None. This is the simplest setup and keeps the key working everywhere the app needs it (storefront, store locator map, and the app's server-side lookups). If you prefer to lock the key down later, note that it is used both in the browser and server-side, so an HTTP-referrer-only restriction can break distance ranking and the banner.
Optional: IPinfo for postcode / ZIP auto-detect
If you want the search input pre-filled with the visitor's postcode / ZIP based on their IP address, sign up at ipinfo.io and paste the API key into the same settings page. Without IPinfo, the search input opens empty and the customer types their postcode / ZIP manually. IPinfo is only useful when postcode / ZIP search is in use, so it can also be skipped if you are hard-coding locations. All other features work normally either way.
Step 3. Enable App Embeds (optional)
Two App Embeds are available in your Shopify theme editor. Both are optional features, toggled independently. Skip this entire step if you only need the Product Page block.
Embed
Adds
Enable if
Locations Popup
Holds the bulk of the app's settings (stores, stock display, messaging, colours, behaviour). Also renders the global popup, header widget, and banner.
You want a site-wide store selector, or you plan to enable Cart Popup (which depends on this block for settings).
Cart Popup Requires Locations Popup
Pre-checkout cart validation, custom messaging at the cart, Pickup-Only Home Delivery blocking. Reads its configuration from the Locations Popup block.
You use custom messaging triggers, have Pickup-Only products, or want pre-checkout stock validation. Locations Popup must also be enabled.
1
Open your theme editor
In Shopify admin, go to Online Store → Themes, then click Customize on your live theme.
2
Open the App Embeds panel
In the left sidebar of the theme editor, click the App embeds icon (looks like a small jigsaw piece). You should see Cart Popup and Locations Popup listed under SAAS Integrator CNC.
Screenshot pending. Save as docs-images/theme-app-embeds.png
Theme editor App embeds panel. Shows the App embeds icon in the left sidebar with Cart Popup and Locations Popup toggles for SAAS Integrator CNC.
3
Toggle on Locations Popup
Find Locations Popup (saas-int-cnc-plus) and toggle it on. This activates the global store selector, the persistent header widget that shows the chosen store, and the search-by-postcode flow.
4
Toggle on Cart Popup
Find Cart Popup (saas-int-cnc-plus) and toggle it on. This activates pre-checkout cart validation, displays per-item availability at the selected pickup store, surfaces custom Click and Collect messages, and enforces Home Delivery blocking for Pickup-Only products.
!
If you use custom messaging triggers (described below), leave Cart Popup enabled. Disabling it is the most common cause of customers reaching checkout without seeing your "Available for in-store pickup only" or "Allow 2 to 3 days" messages.
5
Save
Click Save in the top right of the theme editor.
Step 4. Add the Product Page block
The Product Page CNC block displays stock availability and the store selector directly on each product page. Without it, customers cannot see pickup availability before adding to cart.
1
Open your product template in the theme editor
From the top dropdown in the theme editor, choose Products → Default product.
2
Add the block
In the left sidebar, find the product section. Click Add block, then select SAAS Product Page CNC from the list.
Screenshot pending. Save as docs-images/add-block-menu.png
Theme editor product template with Add block menu open. Shows the Add block dropdown with SAAS Product Page CNC highlighted.
3
Position the block
Drag the block to sit below the Add to cart button. This is where customers expect to see pickup availability.
4
Decide on postcode retention
Scroll the block settings to Remember last searched postcode. Decide whether to leave it off (recommended) or turn it on.
Off (default, recommended). The search field is blank by default. It is only auto-filled when an IPinfo API key is configured (set on the app's Google API settings page). The field also clears after each search. Best for stores where customers may be shopping for delivery to different addresses on different visits.
On (legacy behaviour). Restores the customer's last searched postcode each time the popup opens or the product page is revisited. Best when most customers always pick up from the same area. The setting applies in both Popup and Embedded PDP modes.
5
Decide on store selection memory
Directly under PDP Store Lookup Mode you will find Store selection memory. This controls how long a customer's chosen pickup store follows them around your catalogue.
Remember across visits (default, recommended). The chosen store is remembered for 365 days and appears already selected on every product page. Best when most customers always collect from the same store.
Session only. The store is remembered while the browser session is open, then forgotten. A good middle ground.
This product only. The store shows on the product where it was picked, and every other product opens in the search state. Best when you want customers to see what is available at other stores as they browse.
Cart and checkout always keep the selected store, whichever option you choose, so a customer part way through a pickup order is never interrupted.
Screenshot pending. Save as docs-images/store-selection-memory-settings.png
Store selection memory in the theme editor. The Product Page block setting open, showing the three options and the help text explaining each one.
✓
This is not the same as Remember last searched postcode in step 4. That one remembers where the customer searched. This one remembers which store they chose. You can set them independently.
While you are here, decide on Show "Remove store selection" link as well. Turning it on adds a link to the selected store banner that clears the customer's store completely in one tap, including the pickup details held against their cart, and returns the block to the search state. It is off by default. Both settings apply in Embedded mode only.
Screenshot pending. Save as docs-images/remove-store-selection-link.png
The Show "Remove store selection" link setting. Off by default. When on, the selected-store banner gains a link that clears the shopper's store, cookies, saved selection and cart pickup details in one tap.
6
Decide on the Special Hours Alert Window
The block's Special Hours Alert Window setting controls how many days ahead an upcoming holiday closure is shown on store cards. Default is 7 days. Set it higher (e.g. 14 or 30) if you run early-warning campaigns around major holidays. Set it lower if you want closures to appear only when imminent.
The same setting exists on the Locations Popup block. The two operate independently. Set the block you actually display to customers; you can match them for consistency.
7
Save
Click Save in the top right.
The default PDP Store Lookup Mode is Embedded, which renders store search and results inline on the product page. If you prefer the legacy modal behaviour, switch to Popup in the block settings. See Product Page block configuration for the difference.
Step 5. Configure Store Hours
Store Hours are technically optional, but configuring them dramatically improves the customer experience. Customers see when each store is open, when Click and Collect is available, and any upcoming holiday closures. Without configured hours, the storefront falls back to "always available" which can mislead customers.
1
Open the Store Hours page
In the app sidebar in Shopify admin, click Store Hours.
Screenshot pending. Save as docs-images/store-hours-admin.png
Store Hours admin page. Left column lists all locations. Right column shows the selected location's editor with tabs for Store hours, CnC availability, Special hours, JSON preview.
2
Select a location and set regular hours
Click a location in the left column. In the Store hours tab, set the timezone for that location, then tick the days the store is open and enter open and close times. Use the Copy hours button to duplicate a day's schedule to others.
3
Set CnC availability
Switch to the CnC availability tab. This is a separate schedule from regular store hours. Use it when Click and Collect pickup is only available on a subset of trading days, for example a store that's open 7 days but only fulfils pickup orders Monday to Friday.
4
Set special hours
Switch to the Special hours tab to add public holiday closures or one-off hour changes. Special hours override the regular schedule and appear on store cards as alert banners ahead of the date. By default the alert window is 7 days, configurable on either the Locations Popup or the Product Page block via the Special Hours Alert Window setting.
5
Copy to other locations
Once one location is configured, click Copy to locations at the top of the editor to apply the same schedule across multiple stores. Tweak per-location overrides as needed.
Verification
Open your storefront in a private window and walk through the customer journey to confirm everything is wired up.
The Locations Popup opens on first visit. You can search by postcode (search mode) or see your hard-coded stores (hard-code mode).
Each store card shows distance, stock status, and store hours (if configured).
On a product page, the SAAS Product Page CNC block is visible below the buy buttons.
The block shows pickup availability per location, including any custom messaging you configured.
Add a product to the cart, then click the checkout button. The Cart Popup opens and validates stock against the selected pickup store.
If you set up a Pickup-Only product, confirm Home Delivery is hidden in the Cart Popup.
Complete the checkout. The Click and Collect confirmation appears on the checkout page and on the order confirmation email.
Configuration
Primary settings only. Every block has additional appearance and label settings (colours, fonts, button text) that work without explanation. The settings documented below are the ones that change behaviour and customer experience.
Locations Popup
The global store selector embed. Toggle in Online Store → Themes → Customize → App embeds → Locations Popup.
Setting
Default
What it does
Store Location IDs (Global Popup)
Blank
Comma-separated Shopify Location IDs. 1 to 5 IDs activates hard-code mode and hides postcode search. Blank means standard search across all your Click and Collect locations.
Automatically open popup on page load
Off
When off (default), the popup opens only when the customer taps a store-selector trigger (for example the store selector on a product page or in the header). When on, the popup opens automatically on the customer's first page load if no store has been selected; once a store is chosen it does not re-open.
Default to Home Delivery
Off
When on, the popup opens with Home Delivery selected by default. Click and Collect activates if the customer then selects a store. When off, Click and Collect is the default tab.
Distance Unit
Auto
Auto detects from your Shopify store country. US stores show miles, all others show kilometres. Override to force one unit.
Enable Store Hours
On
Show configured hours on each store card. When off, hours are hidden even if configured.
Special Hours Alert Window
7 days
How far in advance to show upcoming holiday-closure banners on store cards.
Hard-code mode
For single-store and small-chain retailers with 5 or fewer pickup locations, you can skip postcode search entirely by entering your Shopify Location IDs in the Store Location IDs field. Behaviour:
What you enter
Resulting behaviour
1 ID
Single-store compact layout. Postcode search is hidden. The store auto-selects.
2 to 5 IDs
Multi-location picker. Postcode search is hidden. The customer chooses from the listed stores.
Blank
Standard postcode-based search across all your Click and Collect locations.
To find a Shopify Location ID, go to Settings → Locations, click a location, and copy the numeric ID from the end of the URL.
Cart Popup
The cart-side validation embed. Toggle in Online Store → Themes → Customize → App embeds → Cart Popup. Surfaces per-item availability at the selected pickup store and enforces Home Delivery blocking for Pickup-Only products.
!
Cart Popup depends on the Locations Popup. Cart Popup is a settings shell. It holds about 21 cart-page-specific settings (delivery method heading, cart items heading, the mobile height cap, the Pick up at and Change store wording, checkout button labels, etc.) but reads everything else (the store list, stock display, custom messaging triggers, colours, and behaviour) from the Locations Popup block. If Locations Popup is off, Cart Popup will not display stores or apply your configured settings. Always enable both together.
How the popup is laid out
The store side of the popup works the same way on every screen size, and the cart side adapts to the screen.
Search mode (no Store Location IDs on the Locations Popup block): a postcode search shows the three closest stores, sorted by distance, each as a one-line row with the store name, status and distance. There is no Show more link. Customers search another postcode to see other stores.
Preconfigured mode (1 to 5 Store Location IDs): every store you listed is shown, as before. The rows use the same compact style.
A chosen store collapses to a card under the Pick up at heading, showing hours, address and a Directions link, with a Change store link on the right. The postcode search is hidden until Change store is tapped. If the chosen store cannot fill the cart, the card shows the reason in red, checkout stays disabled, and the cart opens beneath it so the customer can see the affected lines.
On phones (under 768px) the cart collapses to a summary row that opens when an item is unavailable or when tapped, the two delivery method buttons become one full-width control without the Delivery Method heading, and the Note text banner is limited to two lines. The popup height can be capped with Maximum popup height on mobile.
On desktop the popup keeps its two-column layout: stores on the left, the full cart list on the right.
Screenshot pending. Save as docs-images/cart-popup-desktop-compact.png
Cart Popup on desktop. Left: delivery method tabs, then the chosen store (Westfield) as a single card under Pick up at with hours, pickup availability, address, Directions and a Change store link. Right: cart line items with a custom messaging trigger firing ("Allow 2 to 3 days for collection").
Screenshot pending. Save as docs-images/cart-popup-mobile-collapsed.png
Cart Popup on a phone. The same store card, the "3 items" summary row in place of the full cart list, and the checkout button, all inside the mobile height cap.
Setting
Default
What it does
Cart items heading
Click & Collect Cart Items
The heading above the line items in the Cart Popup.
"Not available" error message
Not Available at
Red text shown next to a line item when the selected store does not have stock. The store name is appended automatically.
Show "Remove all unavailable items" button
Off
When on, customers can clear all unavailable items in one click instead of removing them individually.
Delivery method heading
Delivery Method
The heading above the Click & Collect / Delivery buttons. Shown on desktop only. On screens under 768px the two buttons become one full-width control and the heading is not rendered.
"Pick up at" headingUpdated
Pick up at
The heading above the selected store card once a customer has chosen a store.
"Change store" labelUpdated
Change store
The link on the right of the Pick up at heading. Tapping it reveals the postcode search, prefilled with the last postcode searched, so the customer can pick a different store.
Maximum popup height on mobileUpdated
550
Pixels. Caps the popup height on screens under 768px wide. See Mobile layout below.
Note text + Make note text bold
Blank, Off
Optional shop-wide note displayed as a banner at the top of the Cart Popup. Use for promotional or operational messages every customer should see before they check out, e.g. "Come in-store for your free event pass - limited tickets" or "Allow extra time during sale periods". Supports an emoji prefix if you want a visual marker. On phones the banner is limited to two lines, so keep it short.
Method labels
Click & Collect / Home Delivery
Override the default tab labels for the delivery method toggle.
Mobile layout
On screens under 768px wide the popup is anchored near the top of the screen rather than centred, so any spare height sits at the bottom. Maximum popup height on mobile sets a ceiling on how tall it can be.
When to use it. You run another popup, a chat bubble or a promotion bar at the bottom of the screen and the Cart Popup was covering it. Enter a height that leaves that element clear. You no longer need custom theme CSS for this.
How the value is applied. The popup uses the smaller of your value and 86% of the screen height. A small phone never gets a popup taller than its display, whatever you enter.
Blank means no cap beyond the 86% rule, which is how the popup behaved before this setting existed.
What scrolls. Inside the cap the cart items list is the part that scrolls, with room kept for at least one item. The store card, the summary row and the checkout button stay in view. Only if those alone exceed the cap does the whole popup scroll.
Desktop is not affected. The setting applies under 768px only.
✓
Test it on a real phone, not just a resized browser. Browser address bars and bottom toolbars change the usable height. Open your cart on a phone, choose a store that cannot fill the cart, and check the red reason, at least one cart item and the checkout button are all visible without scrolling the page behind the popup.
Store Pickup checkout
An optional setting that makes a Store Pickup order pickup-only at Shopify's checkout. When a customer clicks the Store Pickup checkout button in the Cart Popup, shipping and local delivery are hidden for that checkout, so the order can only be completed as Pickup. It is off by default.
Use it when customers choose a store, reach checkout, miss that it opens on the Ship tab, and pay for home delivery by mistake. Leave it off if you would rather let customers switch to shipping on the checkout page. For the smoothest result, pair it with Open checkout on the Pickup tab, so the customer starts on Pickup rather than on a Ship tab with no rates.
!
The Pickup-Only Delivery Customisation must be active. The setting only marks the cart. It is the Pickup-Only Delivery Customisation that hides the shipping rates at checkout. With the setting on and the customisation not activated, checkout still offers shipping and nothing appears to have changed. Activate the customisation first.
Setting
Default
What it does
Enforce Store Pickup at checkout
Off
When on, customers who check out with Store Pickup can only complete the order as Pickup. Requires the SAAS CNC Pickup-Only Delivery Customisation to be active.
How it decides
It applies at the checkout click, not at store selection. The cart is marked only when the customer clicks the Store Pickup checkout button in the Cart Popup (labelled Checkout With Click & Collect unless you changed the Collect method label). Choosing, changing or removing a store never locks the checkout.
The mark is removed when the customer comes back. Returning to your storefront from checkout clears it. So does choosing Delivery in the Cart Popup and clicking Checkout With Delivery. A delivery checkout always shows your shipping rates.
At checkout, Shopify keeps the Ship tab. In place of the rates it shows its own "Shipping not available" message. The customer selects the Pickup tab to finish. The app does not add a message or remove the tab. With Open checkout on the Pickup tab also on, checkout starts on Pickup and the customer only sees this message if they click Ship.
The Pickup tab lists every store that can fulfil the order, following the rules in Which stores are offered at checkout. The store chosen in the Cart Popup is recorded on the order.
Checkouts that skip the Cart Popup are not locked, for example an express checkout button on the product page. Those customers see the normal checkout.
With the setting off, Store Pickup checkouts behave exactly as before: checkout offers both Ship and Pickup.
Test it after switching it on
Add an item to the cart, open the Cart Popup, choose a store that has it, and click the Store Pickup checkout button.
At checkout, stay on Ship and enter an address. You should see "Shipping not available" and no rates. The Pickup tab should list your stores.
Go back to your store, open the Cart Popup, choose Delivery and click Checkout With Delivery. Your shipping rates should be offered as normal.
If step 2 still shows shipping rates, the Pickup-Only Delivery Customisation is not active. You do not need to place an order for this test.
Open checkout on the Pickup tab
An optional setting that makes Shopify's checkout open on the Pickup tab, with the store the customer chose in the Cart Popup already selected. It applies when the customer clicks the Store Pickup checkout button. It is off by default and sits in the same Store Pickup checkout section, directly below Enforce Store Pickup at checkout.
Use it on any store that takes Click and Collect orders. Without it, checkout opens on Ship and the customer has to switch to Pickup and find their store again.
Setting
Default
What it does
Open checkout on the Pickup tab
Off
Store Pickup checkouts open on the Pickup tab with the chosen store selected. The Ship tab still shows.
How it works
It is set at the checkout click. When the customer clicks the Store Pickup checkout button, the app tells Shopify the cart is for pickup at the chosen store, then sends the customer to checkout. Choosing, changing or removing a store in the popup does nothing at checkout on its own.
The Ship tab stays. No app can remove the Ship and Pickup buttons. The customer starts on Pickup and can still click Ship. What they see there depends on Enforce Store Pickup at checkout: with it on, "Shipping not available"; with it off, your normal shipping rates.
It works on its own. It does not need the Pickup-Only Delivery Customisation, and it does not need Enforce Store Pickup to be on.
Delivery checkouts are reset. Choosing Delivery in the Cart Popup and clicking Checkout With Delivery clears the pickup choice, so checkout opens on Ship with your shipping rates.
It never blocks checkout. If Shopify does not answer within about two seconds, the customer goes to checkout as normal and starts on Ship.
Checkouts that skip the Cart Popup, for example an express checkout button on the product page, open on Ship as before.
Add an item that is stocked at two or more stores. Open the Cart Popup, choose one of those stores, and click the Store Pickup checkout button.
Checkout should open on Pickup with that store selected.
Go back to your store, click Change store, choose the other store and check out again. Checkout should open on Pickup with the new store selected.
Go back, choose Delivery and click Checkout With Delivery. Checkout should open on Ship with your shipping rates.
Use a product stocked at more than one store. If only one store holds it, you cannot tell whether checkout picked your store or simply the only store available. You do not need to place an order for this test.
Home Delivery stock check
An optional check that validates every cart item against the locations you ship from, in the same way the Cart Popup already validates against the selected pickup store. When an item is not available for delivery, the customer is told at the cart and Checkout With Delivery is disabled until they remove it or switch to Click and Collect. It is off by default.
Use it when you hold stock in stores that do not ship. If your shops are collection-only and you fulfil online orders from a warehouse, this stops customers ordering delivery on something that only exists on a shop shelf.
!
Delivery Location IDs is required. The toggle on its own does nothing. If the field is left blank the check is skipped and delivery is always allowed, so a merchant can switch it on and see no change. Enter at least one Location ID for the check to run.
Setting
Default
What it does
Validate stock for Home Delivery
Off
Turns the check on. The Delivery tab then lists the cart items and tests each one against your delivery locations.
Delivery Location IDs
Blank
Up to 3 comma-separated Shopify Location IDs for the locations you ship online orders from. Stock is added up across them. How to find a Location ID. Blank means the check is skipped.
Delivery cart items heading
Home Delivery Cart Items
The heading above the line items when the Delivery tab is selected.
"Not available for delivery" error message
Not available for home delivery
Red text shown under each cart item that cannot be delivered.
Delivery unavailable note
See below
The message shown under the delivery method tabs whenever an item fails the check. Tell the customer what to do next.
Make delivery note bold, Delivery note text colour, Delivery note background
Off, #B42318, #FDECEA
Styling for the note. The defaults are a red-on-pink warning treatment.
How the check decides
An item is available for delivery when your Delivery Location IDs hold enough stock between them to cover the quantity in the cart. Two warehouses with one unit each will satisfy a cart quantity of two.
A location ID that holds none of that item counts as zero. It does not fail the check on its own, it simply contributes nothing.
If the field is blank, or you enter more than three IDs, the check is skipped and delivery is allowed. This is deliberate: a configuration mistake should never stop customers buying.
Click and Collect validation is completely separate and is not affected. A customer blocked from delivery can still collect the same item from a store that has it.
✓
Write the note as an instruction, not an apology. The customer needs to know their two options: collect the item in store, or remove it and continue with delivery. The default wording does both, and the Remove unavailable items button gives them the second option in one click if you have it switched on.
!
Disabling Cart Popup (or its Locations Popup dependency) breaks Pickup-Only enforcement at the cart. Cart Popup is the cart-side enforcement point that hides Home Delivery for Pickup In Store Only carts. If either Cart Popup itself or Locations Popup (which Cart Popup reads from) is off, customers reach checkout without seeing the restriction.
Cart Popup is one of two enforcement layers for Pickup In Store Only. The second is the Pickup-Only Delivery Customisation, activated in Shopify shipping settings. Both layers are needed for full enforcement: Cart Popup (plus Locations Popup) blocks at the cart, the Delivery Customisation blocks at checkout. A gap in any layer lets an undeliverable order through.
Product Page block
The block that displays pickup availability on each product page. Add it via the theme editor under Online Store → Themes → Customize → Default product → Add block → SAAS Product Page CNC. It is not shown on gift cards and digital products.
Setting
Default
What it does
PDP Store Lookup Mode
Embedded
Embedded renders store search and results inline on the product page (recommended). Popup opens the global Locations Popup when the customer clicks the store link (legacy behaviour for existing stores).
Store selection memory
Remember across visits
Embedded mode only. How long a customer's chosen store is remembered on product pages. Remember across visits keeps it for 365 days, as before. Session only keeps it while the browser session is open, then forgets it. This product only shows it on the product where it was picked, and other products open in the search state. Cart and checkout always keep the selected store in every option, so a pickup order is never interrupted part way through. This is separate from Remember last searched postcode: that remembers where the customer searched, this remembers which store they chose.
Show "Remove store selection" link
Off
Embedded mode only. When on, adds a link to the selected store banner that clears the customer's store completely, including the pickup details held against their cart, and returns the block to the search state. Off leaves the banner exactly as it is today.
Store Location IDs
Blank
Same hard-code behaviour as the Locations Popup. 1 to 5 IDs lists those stores directly without search. Blank uses postcode search.
Block heading
Click & Collect
The heading above the store selector on the product page.
Remember last searched postcode
Off
When off (recommended), the search field is blank by default and only auto-fills when an IPinfo API key is configured. The field clears after each search. When on, the customer's last postcode is restored each time the popup opens or the product page is revisited (legacy behaviour). Applies in both Popup and Embedded PDP modes.
Enable Store Hours
On
Show configured hours on each store card. When off, hours are hidden even if configured.
Special Hours Alert Window
7 days
How many days ahead to show upcoming holiday-closure banners on store cards. Same setting also exists on the Locations Popup block; they operate independently. Set the block you actually display.
Click & Collect Custom Messaging
n/a
The three-trigger system for product-specific messaging. See Custom messaging.
Gift cards and digital products
Products that do not need shipping, such as gift cards, e-books and other downloads, are left out of store pickup. There is nothing to turn on. The app decides from one Shopify setting on the product: whether it is a physical product.
Where
What happens to a gift card or digital product
Product page
The Product Page block is not shown, so the product never reads Out of Stock.
Checkout, cart holds only these products
The Cart Popup does not open. The customer goes straight to Shopify checkout, which has no delivery step for these orders. Any store the customer chose earlier is cleared from the cart first.
Checkout, cart also holds physical products
The Cart Popup opens for the physical products. The gift card is listed but never checked against store stock or Home Delivery stock, never shows an availability message, and never blocks either checkout button.
Check your products
In Shopify admin open Products and open the gift card or digital product.
In the Shipping section, confirm it reads Not a physical product. In older admin screens, untick This is a physical product. Check every variant.
Save, then open the product on your storefront. The store availability block should be gone.
i
The product name does not matter. A product called "Gift Card" that is still marked as a physical product is treated as physical, because it might be posted out. A product with shipping switched off is treated as digital, whatever it is called. This covers Shopify gift cards, REX gift vouchers created by the SAAS Integrator connector, and ordinary products set up as gift cards.
Order tags
The app adds Shopify order tags once, when an order is placed. There is nothing to turn on. After that the app never edits the order: not the tags, and not the Additional details.
Tags added
When
Store Pickup and the store name
The order is a store pickup. The store name is the store the customer chose at checkout.
Store Pickup chosen - shipped and the store name
The customer pressed the store pickup checkout button in the Cart Popup, then chose shipping at checkout. The order is a delivery. The store name is the store they had chosen.
No tag
A normal delivery order, or an order with only gift cards or digital products.
Find tagged orders
In Shopify admin open Orders.
Click Filter, choose Tagged with, and enter Store Pickup or a store name.
Save the view to reuse it. The same tags work in Shopify Flow conditions and in reports.
Tags and Additional details
Additional details on an order show what the customer chose in the Cart Popup, exactly as placed. If the customer changed their mind at checkout, they can differ from the tags. The delivery method and pickup location Shopify shows on the order, and the tags, are the record to trust.
i
Moving an order does not change its tags. If you move a pickup order to another store, the store tag still names the store the customer chose at checkout. Shopify shows the new location on the order. Tag names longer than 40 characters are shortened, and commas in a store name become spaces, because Shopify does not allow either in a tag.
Store Hours
Per-location schedules. Set in the app admin, not in the theme editor. Open Store Hours from the app sidebar.
Each location has three independent settings:
Regular store hours
Weekly opening times with timezone. The schedule shown to customers on store cards as "Open · Closes at 5:00 PM" style status lines. Use Copy hours to duplicate a day's schedule across the week.
CnC availability
A separate schedule for when each location accepts Click and Collect pickup. Decoupled from regular hours so you can offer pickup on a subset of trading days. Example: a store open 7 days, fulfilling pickup orders Monday to Friday only.
i
If a location is listed for Click and Collect, configure CnC availability for it. Don't leave it blank. A location with no CnC schedule is treated as "always available", which can mislead customers.
Special hours
One-off variations and public holidays. Use these for Christmas Day closures, Anzac Day half-days, store-specific events. Special hours override the regular schedule for the dates you set. Upcoming closures surface as alert banners on store cards ahead of the date. The default alert window is 7 days, configurable on either the Locations Popup or the Product Page block via the Special Hours Alert Window setting. Set the block you display to customers, or match them for consistency.
Copy to locations
Once a location is configured, click Copy to locations to apply the same regular hours, CnC availability, and special hours to other selected locations.
Custom messaging
Product-specific Click and Collect messaging using Shopify metafields. The Product Page block supports up to three independent triggers built on a single product metafield key. Each trigger has its own value, message, stock-validation mode, and Pickup-Only / Delivery-Only setting.
The three-trigger system
You configure one metafield key (e.g. custom.stock_override) and up to three triggers. Each trigger watches for a specific value on that metafield. When a product's metafield matches a trigger value, that trigger's message is shown and that trigger's rules apply.
Field
What it does
Metafield Key
The metafield to read, in namespace.key format (e.g. custom.stock_override). The same metafield drives all three triggers.
Trigger Value
The value the metafield must contain for this trigger to activate. Any string works as long as each trigger's value is unique within this block. Common merchant conventions are true, pickup_only, pre_order, but pick whatever fits how your team labels products. Leave blank to disable a trigger.
Custom Message
Free-text message shown to customers when this trigger fires.
Ignore Stock Levels
Three-option select. See below.
Pickup In Store Only
When on, products matching this trigger are restricted to Click and Collect. Home Delivery is blocked.
Delivery Only (remove on Click and Collect)New
The inverse of Pickup In Store Only. When on, products matching this trigger are removed from the cart if the customer checks out with Click and Collect. Home Delivery is unaffected and the product is charged as normal. Use it for items that only make sense on a delivered order, such as a Shipping Insurance add-on.
i
Trigger values are merchant-defined. The app does not require specific values like "Pickup_Only" or "pre_order". You can use any string. The only constraint is that each trigger's value must be different from the other two within the same block, so the app can tell them apart. Match the value to whatever you set on the product metafield in Shopify admin.
Ignore Stock Levels options
Option
Behaviour
Use case
Off
Normal stock validation. Custom message does not appear; standard availability rules apply.
Trigger inactive.
All locations
Custom message shown at every location regardless of stock.
Made-to-order and pre-order products. The message ("Allow 2 to 3 weeks before pickup") appears at every store.
Only locations with no stock
Custom message shown only at stores with zero stock. Stocked locations show standard availability.
Inter-store transfer scenarios. The customer can pick up immediately at a stocked store or wait 2 to 3 days at a store the item is transferred to.
!
If you set Ignore Stock Levels to All locations, make sure the product's inventory is associated with all your Click and Collect locations in Shopify. Otherwise Shopify may block the order at locations where the product is not stocked.
For products without trackable inventory (true made-to-order goods), either enable Shopify's Continue selling when out of stock on the variant, or untick Track quantity entirely.
Common configurations
The trigger values below are examples. Pick any string you want, as long as it's unique within the block and matches what you'll set on the product metafield.
Inter-store transfer. Trigger value e.g. transfer, message "Allow 2 to 3 days for collection", Ignore Stock Levels Only locations with no stock, Pickup In Store Only off.
Pickup-only product. Trigger value e.g. pickup_only, message "Available for in-store pickup only", Ignore Stock Levels All locations, Pickup In Store Only on.
Pre-order or made-to-order. Trigger value e.g. pre_order, message "Pre-order. Ships from 15 June", Ignore Stock Levels All locations, Pickup In Store Only off.
Delivery-only add-on. Trigger value e.g. Delivery_Only, message "For delivery only", Ignore Stock Levels All locations, Delivery Only on (Pickup In Store Only off). The matching product (e.g. Shipping Insurance) is removed from the cart whenever the customer chooses Click and Collect.
Pickup In Store Only and "Only locations with no stock" are mutually exclusive. Picking the latter automatically disables the former.
Delivery Only (remove on Click and Collect) New
Delivery Only is the inverse of Pickup In Store Only. When a matching product is in the cart and the customer checks out with Click and Collect, the app removes it before checkout, so the customer is never charged for something that does not apply to pickup. The classic case is a Shipping Insurance add-on: on a Click and Collect order there is nothing in transit to insure.
Metafield-driven, not stock-driven. Removal keys off your product metafield, so the product keeps full tracked inventory and your REX / product sync is unaffected.
Home Delivery is unaffected. On a delivery order the item is retained and charged as normal. Removal only happens on the Click and Collect path.
Mutually exclusive with Pickup In Store Only. If both are switched on for the same trigger, Pickup In Store Only takes priority and the item is kept.
Empty-cart guard. If a cart contains only Delivery Only items and the customer chooses Click and Collect, they are shown a message asking them to switch to Home Delivery, and the cart is kept rather than emptied.
✓
Pair Delivery Only with a custom trigger message (for example "For delivery only") so the item is clearly labelled in the store list while Click and Collect is the selected method.
!
Express checkout is a known gap. Removal runs in the Cart Popup before checkout, so express buttons that bypass the cart (Shop Pay, PayPal, Google Pay) and direct /checkout links will not trigger it. For those paths the delivery-only item can still reach checkout. If that matters for your store, keep the express checkout buttons off on the cart and product pages.
!
If you turn on Pickup In Store Only, you also need to activate the Pickup-Only Delivery Customisation in Shopify's shipping settings. Without it, products marked Pickup In Store Only will still show Home Delivery as an option at checkout, because Shopify's checkout has no way to know about the restriction otherwise. See the next section.
Pickup-Only Delivery Customisation
A Shopify delivery customisation that hides shipping and local delivery options at checkout for pickup orders. It ships with the app and works on every Shopify plan (Plus and non-Plus), but you have to activate it manually once. It enforces pickup in two situations:
Pickup In Store Only products. Any cart containing a product flagged Pickup In Store Only has Home Delivery hidden at checkout. This is always on once the customisation is active.
Store Pickup checkouts, when you switch it on. With Enforce Store Pickup at checkout turned on in the Cart Popup, a customer who clicks the Store Pickup checkout button has carrier shipping and local delivery hidden, so the order can only be completed as Pickup. With that setting off, choosing a store does not change what checkout offers.
!
Required for reliable pickup orders. Without this customisation activated, Shopify checkout still shows a shipping rate (such as Express Post) as the pre-selected default. A customer who picked a store but did not actively switch to "Pick up" could place a genuine Click and Collect order as a shipped order, which then needs manual correction and can trigger the wrong customer email. The Cart Popup and the Delivery Customisation are two enforcement layers and you need both: the Cart Popup marks or blocks the order at the cart, the Delivery Customisation hides the shipping rates at checkout. Enforce Store Pickup at checkout and Pickup In Store Only do nothing at checkout until it is active.
How to activate it
In Shopify admin, go to Settings → Shipping and delivery.
Scroll to Customisations and click Add customisation.
From the list, choose SAAS CNC Pickup-Only Delivery Customisation.
Click Save.
You only need to do this once per store. Once active, the customisation runs automatically at every checkout. It acts on Pickup In Store Only carts, and on Store Pickup checkouts when Enforce Store Pickup at checkout is on. It leaves every other checkout alone.
What it does
Pickup In Store Only products. When a cart contains a product flagged via your Pickup In Store Only metafield trigger, the customisation removes Home Delivery from the shipping options shown at checkout. It reads the same metafield key configured on the Product Page block, so changing the key in the block automatically updates what the customisation looks for.
Store Pickup checkouts. When Enforce Store Pickup at checkout is on and a customer clicks the Store Pickup checkout button in the Cart Popup, the customisation hides carrier shipping and local delivery for that checkout. Shopify keeps the Ship tab and shows its own "Shipping not available" message there, and the customer completes the order on the Pickup tab. The order comes through as a pickup the first time, with the chosen store recorded, and no manual correction is needed. With the setting off, this part does nothing.
i
Customers cannot switch to delivery on the checkout page. Once a customer has clicked the Store Pickup checkout button with enforcement on, that checkout offers pickup only. To change to delivery they go back to your store, open the Cart Popup, choose Delivery and click Checkout With Delivery. Returning to the store removes the lock, so shipping rates are offered again. This trade-off is what prevents accidental shipped pickup orders.
This only affects Store Pickup checkouts with enforcement on, and carts that contain a Pickup In Store Only product. Choosing a store on its own, and normal delivery orders, are unaffected.
Which stores are offered at checkout
A location is offered as a pickup option only when both of these are true:
It has local pickup enabled in Settings → Locations. Fulfilment-only warehouses are never offered, even when they hold the stock.
It holds stock for every item in the cart. A location that can supply only part of the order is excluded, because the collection could not be completed.
Two deliberate exceptions:
Backorders still allow pickup. If an item is out of stock at every location, your pickup stores are still offered and the customer sees "We'll notify you when stock arrives" instead of "Ready for pickup now!". This keeps pre-orders and special orders working.
A pre-selected store is honoured when it can fulfil the order. If it cannot, the customer is shown the other stores that can, rather than an empty list.
If no single store can supply the whole cart, pickup is not offered for that cart. This assumes you do not run inter-store transfers. If a customer needs items held at different stores, they can order by home delivery or place separate orders.
When you can skip this
Skip the customisation only if you do not use Pickup In Store Only on any products and you leave Enforce Store Pickup at checkout off. If you want either of those to work, activate this customisation first. It is safe to activate even if you use neither, because it changes nothing until one of them applies.
Checkout Pickup Banner
A Checkout UI extension that confirms the pickup store the customer chose. Renders in the Delivery section of the Shopify checkout page, alongside the Ship / Pickup toggle.
!
Shopify Plus only. Checkout UI extensions can only be added to checkout on Shopify Plus stores. Skip this section if you're on a standard Shopify plan. All other Click and Collect features (Product Page block, Cart Popup, Store Hours, Pickup-Only enforcement) work on every Shopify plan.
What the banner shows
When a customer reaches checkout after selecting a pickup store, the banner displays the chosen store's name and address inline in the Delivery section. This reinforces the pickup choice and reduces "wait, am I getting this shipped or picking up?" support contacts after order placement.
How to add it
In Shopify admin, go to Settings → Checkout → Customize.
Open the Checkout editor for your live theme.
In the left sidebar, click Delivery to expand the section.
Click Add block and select checkout-ui-pick-up-banner.
Drag the block to your preferred position within the Delivery section.
Click Save.
Customisation
The banner inherits your checkout's typography and colour scheme automatically. There are no per-block settings to configure beyond placement.
i
Not on Plus? Reinforce the pickup choice using the Cart Popup app embed instead, which surfaces the chosen store immediately before the customer clicks through to checkout. The Cart Popup runs on every Shopify plan.
Store Locator
A customer-facing store directory and individual store pages, built on the same Shopify locations and Store Hours data as Click and Collect. It adds a searchable map of your stores, an SEO-friendly page per location, and structured data that links each store back to your brand and its Google Business Profile.
The Store Locator is made of seven parts:
Part
Where
What it does
Store Locator block
Theme editor, added to a Shopify page
The storefront directory: search by suburb or postcode, filter by state, map with branded pins, and store cards with hours, distance, and actions.
A Shopify page per location
Online Store → Pages
Each store gets its own real Shopify page at /pages/<handle>, so it can be indexed, linked and shared like any other page on your site. This is what the More Details button opens.
Store Detail Content (block)
Theme editor, on a store-detail page template
Fills each store page with that location's hours, map, services and contact detail. It works out which store to show from the page's handle, so you build one template and assign it to every store page.
Store Detail Page (App Embed)
Theme editor → App embeds
Styling for every store page: colours, heading sizes, which sections appear. Set once, applies to all of them.
Store locator tab
App admin → Store Hours → per location
Whether a location appears in the directory, plus its image, SEO text, contact email, and Google Business Profile link.
Brand Settings
App admin → Brand Settings
Your global website and social URLs, used in structured data only (the sameAs field) to link every store page back to your brand.
GBP Place ID
Store locator tab, per location
Links a location to its Google Business Profile for local SEO, with a built-in consistency (NAP) check.
i
It reuses what you already set up. The directory reads your Shopify locations, their addresses, and the hours, CnC availability, and special hours from Store Hours. Postcode search and distance ranking use the same Google API key as Click and Collect; the map and the Place ID check need a few extra Google APIs enabled (see Step 2). Warehouse-type locations are excluded automatically.
Setup
1
Make locations visible and add their detail
In Store Hours, open each location and switch to the Store locator tab. Turn on Show in store locator, then add a store image, page title, meta description, and location description. See per-location settings.
2
Add the directory block to a page
Create (or pick) a Shopify page for your store finder, for example a page named "Stores". In the theme editor, open that page template, click Add block in the Apps section, and add Store Locator. Configure it (see directory block settings) and Save.
Screenshot pending. Save as docs-images/store-locator-storefront.png
Storefront store locator. Split-panel layout: search and store cards on the left, branded map pins on the right.
3
Create a Shopify page for each store
Each location needs its own real Shopify page, which is what makes store pages indexable and gives you a clean URL you can put on signage, in Google Business Profile, or in print.
In Online Store → Pages, add a page for each location. Leave the content blank, the app fills it in. What matters is the handle, the part of the URL after /pages/.
!
The handle must match the Page title you set in the app. The app works out each store's URL from the Page title field on the Store locator tab: lowercase, spaces and punctuation become hyphens. "Bondi Beach" becomes /pages/bondi-beach, and "Altona Warehouse" becomes /pages/altona-warehouse. If that does not match a page you have created, the More Details button leads nowhere.
The Store locator tab shows a live search preview of the resulting URL as you type, so use it to confirm the two agree. Fix any mismatch by editing the Page title in the app, not by renaming your Shopify page.
!
Changing a Page title moves a live URL. That field now controls the page address as well as the SEO title. Editing it on a store that is already live will point the locator at a different URL, so treat it like any other URL change.
4
Build the store page template and turn on the embed
You build this once and every store page uses it.
In Online Store → Themes → Customize, create a new page template called store-detail.
On that template, click Add block in the Apps section and add Store Detail Content. There is nothing to configure. It identifies the store from the page handle.
Assign the store-detail template to each of your store pages. You can do this from the page itself in Online Store → Pages, under Template.
Go to App embeds and turn on Store Detail Page (SAAS Integrator CNC). This carries the colours, labels and section toggles for every store page.
Until both the block and the embed are in place, leave Enable More Details button off in the Store Locator block (it is off by default) so cards do not link to an empty page.
5
Set your Brand Settings
In the app admin, open Brand Settings and enter your brand website, Facebook, and Instagram URLs. These feed the sameAs structured data on every store page. See Brand Settings.
6
(Optional) Link each Google Business Profile
On the Store locator tab, paste each location's GBP Place ID and click Verify. See Google Business Profile.
Per-location settings (Store locator tab)
Each location's listing is controlled on the Store locator tab of the Store Hours page (alongside Store hours, CnC availability, and Special hours).
Field
What it does
Show in store locator
Includes this location in the customer-facing directory. Off hides it from the map and list.
Store image
A Shopify Files CDN URL for the photo shown on the store page. Recommended 1200×800px, JPG or PNG, max 2MB. If left empty, a Google Map image of the location is shown instead.
Page title
The store page's <title> and search-result heading. Include the suburb or city. Up to 70 characters.
Meta description
The search-result snippet. 150 to 160 characters recommended.
Location description
Body copy on the store page. Supports light markdown: **bold**, *italic*, [link text](url), and a blank line for a new paragraph. Use it for parking, landmarks, and services unique to the store.
Email address
Contact email shown under Additional info on the store page.
A live Google Search Preview shows how the page title, URL, and meta description will read in Google.
Google Business Profile (consistency check)
Paste a location's GBP Place ID and click Verify. The Place ID feeds the sameAs entity link in that store's structured data, helping Google connect the page to the business's Google listing. The field is optional and has no effect on pickup. Find the ID with Google's Place ID finder. Use the ID from your claimed Business Profile, not a plain map pin.
Screenshot pending. Save as docs-images/gbp-nap-check-verified.png
Google Business Profile check. After Verify, your Shopify Name, Address, and Phone are compared against Google side by side.
Status
Meaning
Match (green)
The field agrees with Google.
Likely match (amber)
Agrees once abbreviations are normalised (Boulevard vs Blvd, Victoria vs VIC). Treated as correct.
Mismatch (red)
The field genuinely differs. Worth fixing.
Not on Google (grey)
Google has no value for that field (commonly the phone). Not counted as a mismatch.
The badge reflects the worst field: Verified when no field is a mismatch, or Needs attention when at least one is.
i
Address-pin notice? If Google returns the street address as the business name and no phone, the Place ID is a map pin, not a claimed Business Profile. Re-link it from your actual Google Business Profile and verify again.
Store Detail Page
The App Embed that styles every individual store page. Store pages themselves are real Shopify pages at /pages/<handle>, filled in by the Store Detail Content block on your store-detail page template (see Setup). This embed carries the look and the section toggles for all of them. Enable it in Online Store → Themes → Customize → App embeds → Store Detail Page. Most settings are appearance only (page-wide colours, heading scale, body text size, breadcrumb and button labels) and work without explanation. The settings that change behaviour:
Setting
What it does
Services section tiles
Show or hide the Click and Collect, In-store shopping, Returns and exchanges, and Gift wrapping tiles, each with its own label and one-line description. The Click and Collect tile and the "Click & Collect available" pill appear only when the location has CnC availability configured for at least one day; the In-store shopping tile needs at least one open day.
About this store
Shows the location description from the Store locator tab. Hide the whole section if you leave descriptions blank.
Additional info
Shows the contact email and any extra location detail.
Nearby stores
Lists other locations near this one, each linking to its own store page.
Auto hero text colour
When on, the hero text flips between black and white based on the hero background brightness, for accessible contrast. Turn off to set a custom hero text colour.
Brand links (page-wide)
Website, Facebook, and Instagram links shown on every store page. Leave blank to hide. These are separate from the admin Brand Settings below, which are SEO-only.
Directory block settings
Settings on the Store Locator block you add to your page. Cosmetic settings (heading band, alignment and font size, all colours, map theme, and the card and search button labels) are self-explanatory. The settings that change behaviour:
Setting
Default
What it does
Layout
Split panel (62/38)
The cards-and-map arrangement. Also offers 60/40, 65/35, Map above list, and List only.
Distance unit
Auto (by country)
Auto shows miles for US stores and kilometres elsewhere. Override to force km or mi.
Auto-display all locations on load
On
Shows every store immediately, before any search. Useful for small chains.
Auto-display threshold
50
Auto-display only applies when the total store count is at or below this number. Above it, customers search first.
Default sort
Alphabetical
The initial order of cards before a postcode search re-sorts them by distance. Also offers By state and By postcode.
Use My Location button
On
Lets customers sort by their device location. Only triggers on click, never automatically on page load.
Filter by state pills
On
Shows a "Filter By State" control above the list. Clicking it expands a row of state pills (All, plus one per state that has stores) to filter the cards and pins.
Enable marker clustering
Off
Groups nearby map pins into clusters. Turn on for dense, many-store maps.
JSON-LD structured data (SEO)
On
Emits structured data for the directory. Leave on for local SEO.
Show store hours on cards
On
Shows open/closed status and the hours expander on each card.
Special hours alert window (days ahead)
7
How many days ahead an upcoming holiday closure is flagged on cards. Mirrors the same setting on the Product Page and Locations Popup blocks.
Search country
Australia
Biases postcode search to the right country (Australia, New Zealand, United States, United Kingdom).
Enable More Details button
Off
Links each card to its store detail page. Turn on only after enabling the Store Detail Page embed, otherwise the link has no page to open.
✓
"Set As My Store" on each card saves the customer's chosen store. That choice carries across the storefront and pre-selects the store on the product page Click and Collect block, so customers don't pick twice.
Brand Settings (sameAs)
Open Brand Settings in the app admin and enter your brand Website, Facebook, and Instagram URLs. These are used for SEO only: they populate the sameAs field in the structured data on every store page, linking all your branch pages back to one brand entity. They do not change anything shown on the page. Leave a field blank to omit it.
i
Two sets of brand links, different jobs. The admin Brand Settings here are SEO-only (the sameAs data). The Brand links on the Store Detail Page embed are the ones displayed on each store page. Set both if you want the links visible and in the structured data.
Developer reference
Integration points for theme developers, Shopify Flow users, and anyone customising the email or notification templates.
Where settings are stored
App configuration is split across four places. Knowing where each setting lives helps when debugging a misconfiguration or planning a migration.
Setting group
Where it lives
How merchants edit it
Bulk of the app's storefront configuration: store list, stock display mode, custom messaging triggers (3), button colours, popup behaviour (auto-open, default to home delivery, distance unit, store hours toggle, special hours alert window), postcode placeholder, store-card styling, close button.
Locations Popup app embed. Stored as theme settings in settings_data.json per theme.
Theme editor → App embeds → Locations Popup.
Cart-page-specific labels, colours and the mobile layout only (~21 settings): delivery method heading, cart items heading, "remove unavailable" button, "not available" message, note text, checkout button labels, method tab labels and active states.
Cart Popup app embed. Stored as theme settings in settings_data.json. The Cart Popup snippet reads these plus window.__CNC__.config published by the Locations Popup block.
Theme editor → App embeds → Cart Popup. Locations Popup must also be enabled.
Per-location store hours, CnC availability, special hours.
App's own database (LocationHours table).
App admin → Store Hours.
Per-product trigger values (the metafield value that activates a custom messaging trigger).
Shopify product metafields. Key is configured on the Locations Popup block; values are set per product.
Shopify admin → Products → product → Metafields. Or bulk via the app's Product Metafields page.
Google API key (one key for all four APIs), optional IPinfo key, store search radius.
App's own database (GoogleApi table).
App admin → Google API.
Pickup-Only delivery enforcement at checkout.
Shopify delivery customisation function. Reads the app's pickup-only product metafield, and the _cnc_enforce_pickup cart attribute that the Cart Popup sets when Enforce Store Pickup at checkout is on.
Shopify admin → Settings → Shipping and delivery → Customisations.
i
Why Cart Popup needs Locations Popup. The Cart Popup block only holds cart-page labels and tab styling. Everything else (stores, stock display, custom messaging triggers, colours, behaviour) lives in the Locations Popup block and is published to a runtime window.__CNC__.config object that the Cart Popup snippet reads. If the Locations Popup block is disabled, that config object is never published, so the Cart Popup has nothing to render.
Metafields
The app reads two kinds of metafield data: per-product metafields for custom messaging, and per-location metafields for store hours.
Product metafield (custom messaging)
Namespace and key: Configurable. The merchant sets the key in the Product Page block. Common convention is custom.stock_override.
Type: Single-line text.
Value: A string that matches one of the configured trigger values (e.g. stock_override, Pickup_Only, pre_order).
To set the metafield in bulk, use Shopify's Metafield definitions feature, the bulk editor, or the Admin API. The app auto-registers the definition on first load if it doesn't exist yet.
Location metafield (store hours)
Namespace and key:saas_int_cnc_plus.store_hours (auto-registered on app load).
Type: JSON.
Structure: Contains regular hours, CnC availability, and special hours for the location. Written via the Store Hours admin page.
The location metafield is intended to be edited through the Store Hours admin page rather than directly. Direct edits via the Admin API are supported but the JSON schema is not documented for direct write access in this version.
Liquid examples
Because messaging is driven by native product metafields, you can reference the same data in any Shopify Liquid template (order confirmation, shipping confirmation, ready-for-pickup, Shopify Flow email actions).
Order confirmation email
The Shopify order confirmation email is the most useful place to surface Click and Collect messaging. Customers always read it, and you can tailor it based on the delivery method and product metafields. Go to Settings → Notifications → Order confirmation → Edit code and add the snippets below.
1. Delivery-method-aware greeting
Replace the standard "Thank you for your purchase" greeting with one that adapts to how the customer is receiving the order. Pickup customers get a "ready for pickup" message, shipping customers get a "we'll let you know when it's shipped" message.
liquid · order-confirmation greeting
{% capture email_title %}Thank you for your purchase!{% endcapture %}
{% capture email_body %}
{% if delivery_method == 'pick-up' %}
Hi {{ customer.first_name }}, we're getting your order ready
for pickup. We'll notify you when it's ready to collect.
{% elsif requires_shipping %}
Hi {{ customer.first_name }}, we're getting your order ready.
We'll let you know when it's been shipped.
{% else %}
Hi {{ customer.first_name }}, thank you for your purchase!
{% endif %}
{% endcapture %}
Render it in the email body with <h2>{{ email_title }}</h2> and <p>{{ email_body }}</p> in the existing content section of the template.
2. Special Pickup Notice banner for delayed-collection items
For pickup orders that include items flagged in the product metafield (e.g. made-to-order or transfer-required goods), show a styled banner explaining the additional preparation time. The banner only appears when the order is a pickup order and at least one cart line has the metafield set.
liquid · click-and-collect-pickup-notice
{% assign has_delayed_pickup_items = false %}
{% if delivery_method == 'pick-up' %}
{% for line_item in line_items %}
{% assign stock_override_value = line_item.product.metafields.custom.stock_override | downcase %}
{% if stock_override_value == "true" %}
{% assign has_delayed_pickup_items = true %}
{% break %}
{% endif %}
{% endfor %}
{% endif %}
{% if has_delayed_pickup_items %}
<table class="row section" style="margin: 20px 0;">
<tr>
<td class="section__cell">
<center>
<table class="container">
<tr>
<td style="background-color: #FFF3CD;
border-left: 4px solid #FFC107;
padding: 20px; border-radius: 4px;">
<h3 style="margin-top: 0; color: #856404;">
📦 Special Pickup Notice
</h3>
<p style="color: #856404; line-height: 1.6;">
<strong>Your order contains items that require
additional preparation time.</strong>
</p>
<p style="color: #856404; line-height: 1.6;">
We will notify you via email when your complete
order is ready for pickup. Please allow up to
<strong>3 business days</strong> for preparation.
</p>
<p style="color: #856404; line-height: 1.6;">
<em>Thank you for your patience! We're working to
ensure your items are perfect and ready for
collection.</em>
</p>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
{% endif %}
Paste this block between <p>{{ email_body }}</p> and the View your order button block. The banner uses inline styles for maximum compatibility across email clients (Outlook, Gmail, Apple Mail, mobile).
i
Adapting the metafield check. This example checks line_item.product.metafields.custom.stock_override == "true". If your Product Page block uses a different metafield key (e.g. custom.pickup_only) or different trigger values (e.g. "stock_override", "pre_order"), change the downcase'd value comparison accordingly.
To show different messages for different triggers, replace the boolean flag with a {% case %} statement that branches on the metafield value, the same way the Product Page block does on the storefront.
3. Pickup-only subtotal label
Shopify's default subtotal table shows "Shipping" as the label for all orders. For pickup orders, swap it to "Pickup" so the customer sees terminology that matches their order. Add the conditional inside the existing subtotal-line block:
The same delivery_method == 'pick-up' pattern works in any notification template (shipping confirmation, ready-for-pickup, Shopify Flow email actions). For more detailed checks, use the fulfilment location:
liquid · fulfilment-location
{% if delivery_method == 'pick-up' %}
<p>You'll receive an email when your order is ready for pickup at
{{ order.fulfillment_locations.first.name }}.</p>
{% endif %}
Shopify Flow
The app uses native Shopify metafields and native Shopify locations, so all standard Shopify Flow triggers and actions work without additional integration:
Order created → branch on product metafield. Send a different email or assign to a different fulfilment team based on whether the order contains a Pickup-Only product, a made-to-order product, or a standard stocked product.
Order created → branch on fulfilment location. Route pickup orders to the picking team at the chosen store.
Order created → branch on the Store Pickup tag. The app tags every store pickup order Store Pickup plus the store name when it is placed, so Flow can route or notify on it without adding tags of its own. See Order tags.
No Shopify Flow connector needs to be installed. All data is accessible via the standard product, line item, location, and order Flow triggers.
!
Caution with Flow actions that change fulfilment locations. If your store uses a middleware integration that owns order routing (for example, SAAS Integrator or a similar ERP / OMS connector), Shopify Flow actions that reassign or override the fulfilment location may not be supported and can conflict with the middleware's own routing logic. Branching on the location (read-only) is safe. Writing or moving fulfilments via Flow is not. Confirm with your integration provider before adding any Flow action that mutates fulfilment data on a pickup order.
Theme compatibility
The app is built against Shopify Online Store 2.0 themes. Tested compatibility:
Dawn (Shopify reference theme). Full compatibility. No theme changes required.
Other OS 2.0 free and paid themes. Full compatibility for the Locations Popup and Cart Popup app embeds. The Product Page block uses standard {% schema %} block conventions and works in any theme that supports app blocks in section JSON files.
Legacy Liquid themes (pre-OS-2.0).Not supported. The app relies on Online Store 2.0 features (app embeds, JSON section templates, and app blocks) that pre-OS-2.0 themes do not have. To use Click and Collect, upgrade to an OS 2.0 theme. Dawn is free and a common starting point.
Sticky header banner
The optional store and delivery header banner block sits in the header section group. Most themes do not pin app blocks by default. For best results, add sticky positioning to the header section or move the block above the header bar. Speak to your theme developer if you need this customised.
Store Locator data and SEO
Location data is served from the app proxy at /apps/click-collect-live/api/store-locator-locations (visible, non-warehouse locations with coordinates, the hours metafield, and locator fields).
Store pages are native Shopify pages at /pages/<handle>. The handle is derived from the location's Page title field (lowercased, non-alphanumeric characters replaced with hyphens), falling back to the location name. The Store Detail Content block reads page.handle and fetches the rendered markup from /apps/click-collect-live/stores/<handle>?embed=1, then injects it and initialises the store detail script.
Legacy store URLs at /apps/click-collect-live/stores/<slug> return a 301 to /pages/<handle> when requested without ?embed=1, so previously indexed URLs consolidate rather than duplicating. The canonical on every store page points at the /pages/ URL.
The storefront map loads the Google Maps JavaScript API with the places and marker libraries; pins use AdvancedMarkerElement.
Structured data: each store page emits LocalBusiness JSON-LD with openingHoursSpecification and a sameAs array built from Brand Settings plus the GBP Place ID (place_id format).
"Set As My Store" persists to localStorage, dispatches a storelocator:changed event, and writes cart attributes via /cart/update.js; the product-page Click and Collect block reads the selection.
Analytics events post to /apps/click-collect/api/store-locator-analytics and are PII-free (postcode, event type, location ID, timestamp only).
Troubleshooting
Common symptoms and how to diagnose them. If your issue isn't here, see Support.
Postcode search returns no results
Open the app's Google API settings page. Confirm the key is saved.
Confirm the key is not restricted in a way that blocks your shop domain. Check Credentials → your key → Application restrictions.
Confirm each pickup location in Settings → Locations has a complete address. Locations with missing fields are silently skipped.
Custom message not appearing on a product
Open the product in Shopify admin. Confirm its metafield (under Custom data) is set to the exact trigger value, with no whitespace or case mismatch. Pickup_Only is different to pickup_only.
Open the Product Page block in the theme editor. Confirm Metafield Key matches the namespace and key on the product (e.g. custom.stock_override).
Confirm the trigger's Trigger Value matches the metafield value exactly.
Check Ignore Stock Levels. If it's set to Only locations with no stock, the message will appear only at zero-stock stores.
Home Delivery still appears for a Pickup-Only product
Open Online Store → Themes → Customize → App embeds. Confirm Cart Popup is on. Pickup-Only enforcement runs through the Cart Popup. With it off, Home Delivery is not blocked.
Confirm the product's metafield matches the trigger configured with Pickup In Store Only turned on.
Confirm the trigger's Ignore Stock Levels is not set to Only locations with no stock. That mode automatically disables Pickup In Store Only.
Confirm the Pickup-Only Delivery Customisation is activated in Settings → Shipping and delivery → Customisations. The Cart Popup blocks Home Delivery at the cart, but this customisation is what blocks it at checkout itself. Without it, customers can still complete checkout with Home Delivery on a Pickup-Only product.
Shipping is still offered after a Store Pickup checkout
Confirm the Pickup-Only Delivery Customisation is activated in Settings → Shipping and delivery → Customisations. This is the usual cause. The setting marks the cart, but the customisation is what hides the rates.
Open Online Store → Themes → Customize → App embeds → Cart Popup on your live theme. Confirm Enforce Store Pickup at checkout is on and the theme was saved. The setting is per theme.
Confirm the customer reached checkout through the Cart Popup's Store Pickup checkout button. A checkout that skips the Cart Popup, such as an express checkout button, is not locked.
Test in a fresh checkout. Going back to the store and returning to an old checkout tab removes the lock, which is expected.
Checkout still opens on the Ship tab after a Store Pickup checkout
Open Online Store → Themes → Customize → App embeds → Cart Popup on your live theme. Confirm Open checkout on the Pickup tab is on and the theme was saved. The setting is per theme.
Confirm the customer clicked the Store Pickup checkout button in the Cart Popup. Checking out with Delivery, or with a button that skips the Cart Popup such as an express checkout button, opens on Ship by design.
Test in a new private window with a fresh cart. An old checkout tab keeps whatever tab it opened on.
If the store selected at checkout is not the one chosen in the popup, check that store holds stock for every item in the cart. Checkout only offers stores that can fulfil the whole order. See A store is missing from the pickup options at checkout.
If it still opens on Ship, open your browser's developer console before clicking checkout. A warning from the app means Shopify did not accept the pickup choice in time. Send us a screenshot of the warning and your store address.
A store is missing from the pickup options at checkout
Most often this is correct behaviour rather than a fault. A store is offered only when it holds stock for every item in the cart.
Confirm the location has local pickup enabled in Settings → Locations. Fulfilment-only warehouses are never offered for pickup, even when they hold the stock.
Check the stock for each cart item at that location in Shopify. A single line at zero will exclude the store.
Confirm the location is enabled for Click and Collect in the app and has availability configured.
If no store can supply the whole cart, pickup is not offered for that cart at all. The customer can order by home delivery instead, or place two smaller orders.
A home delivery order shows pickup details
An order that shipped normally but whose Additional details show a store name, or show it as a pickup.
Check the order's tags. Store Pickup chosen - shipped means the customer chose store pickup in the Cart Popup and then switched to shipping at checkout. This is expected. The app no longer edits Additional details after an order is placed, so they keep what the customer chose in the popup. See Order tags.
Check what Shopify itself recorded. Open the order and look at the delivery method and shipping address. That is the authoritative record. Fulfil the order as a delivery.
If your reports or emails read the store name from Additional details, switch them to Shopify's delivery method, pickup location or the Store Pickup tags.
The Home Delivery stock check isn't blocking anything
Check Delivery Location IDs is not blank. This is the most common cause. The toggle on its own does nothing. With the field empty the check is skipped and delivery is always allowed. Open App embeds → Cart Popup → Home Delivery stock check and enter at least one Location ID.
Confirm you have entered no more than three IDs. More than three is treated as a configuration error and the check is skipped.
Confirm the IDs are correct and comma-separated, with no other characters.
Confirm Cart Popup and Locations Popup are both on in App embeds. The check runs inside the Cart Popup, so with either embed off there is nothing to run it.
Test with an item you know is out of stock at every location you listed. An item held at any one of them will correctly pass.
Delivery is blocked but the item looks in stock
Check the stock at the Delivery Location IDs you configured, not at your stores. Stock sitting in a shop does not count towards delivery unless that shop is one of your listed delivery locations.
Add up the stock across all the IDs you listed and compare it to the quantity in the cart. The check fails when the total is less than the cart quantity.
Confirm you have not missed a warehouse. If you ship from three locations but listed two, the third contributes nothing.
If a customer needs to order now regardless, they can still complete the purchase with Click and Collect from a store that holds the item.
Hours don't appear on store cards
Open the Store Hours admin page. Confirm the location has at least regular hours configured.
Open the Locations Popup block in the theme editor. Confirm Enable Store Hours is on (it is on by default).
Hard-refresh the storefront to clear any cached theme data.
The Cart Popup never opens at checkout
Confirm BOTH the Cart Popup and the Locations Popup app embeds are on in the theme editor. Cart Popup reads its store list, stock display, custom messaging, and styling from the Locations Popup block. Without Locations Popup enabled, Cart Popup will not display anything.
Open the storefront in a private window. Check the browser console for JavaScript errors. If there are theme-level conflicts (e.g. another app intercepting the checkout button), the Cart Popup may not get a chance to open.
Contact support with a link to your storefront and a short description of the symptom.
A gift card still shows store availability or opens the Cart Popup
A gift card or digital product shows Out of Stock on its product page, or a cart holding only gift cards still opens the Cart Popup.
Open the product in Shopify admin. In the Shipping section, confirm it reads Not a physical product. This is the usual cause. If the product has variants, check each one. See Gift cards and digital products.
Check what else is in the cart. If it also holds a physical product, the Cart Popup opening is expected. The gift card line should show no availability message.
Reload the storefront in a private window, so the browser is not using an older copy of the app's script.
If it still happens, contact support with the product link.
The Cart Popup only shows three stores
This is by design. After a postcode search the popup lists the three closest Click and Collect stores. Customers who want a store further away search a different postcode, or tap Change store on a selected store to search again.
If you want a fixed set of stores shown every time, enter their IDs in Store Location IDs on the Locations Popup block. Preconfigured stores are all shown, up to five, with no search box.
The product page store selector and the site-wide store popup are not limited to three. Only the Cart Popup uses the three-closest rule.
On phones the Cart Popup covers another popup or bar
Open Online Store → Themes → Customize → App embeds → Cart Popup and find Mobile layout.
Lower Maximum popup height on mobile until the other element is clear. The popup is anchored near the top of the screen, so spare height always sits at the bottom.
If the popup still looks cut off, check the value is not smaller than the space needed for the store card, the cart summary row, one cart item and the checkout button. Around 500 to 550 is the practical floor on most phones.
Remove any custom theme CSS that was previously used to shrink the popup. It will fight the setting and can break on the next app update.
A store page is blank, or More Details goes nowhere
Almost always a mismatch between the page you created and the Page title set in the app. The app derives the URL from that field, so the two have to agree.
Open the location's Store locator tab in Store Hours and read the search preview. It shows the exact URL the app will send customers to.
Compare that with your page's handle in Online Store → Pages. They must match character for character. "Altona Warehouse" gives /pages/altona-warehouse, which will not find a page at /pages/altona-store.
Fix a mismatch by editing the Page title in the app so it produces your existing handle. Do not rename the Shopify page, other things may link to it.
If the URL is right but the page renders empty, the store-detail template is not assigned to it, or the template is missing the Store Detail Content block. Check both in the theme editor.
If the page has content but looks unstyled, turn on the Store Detail Page app embed in App embeds.
Confirm the location has Show in store locator ticked. A hidden location has no page.
The store locator list is empty on page load
No stores listed, just "Search to find your nearest store". This is nearly always the Auto-display threshold, not a fault.
Open the Store Locator block in the theme editor and find Auto-display threshold. It is the maximum number of stores the locator will list automatically when the page opens.
Count your Click and Collect locations. If you have more stores than the threshold, the locator is waiting for a search by design.
To list every store on load, raise the threshold above your store count, then Save. With 58 stores, set it to 60.
Confirm Auto-display all locations on load is also switched on. The threshold has no effect if that setting is off.
If the list is still empty with the threshold well above your store count, check the browser console on the locator page for errors and confirm your Google API key is saved with the required APIs enabled.
A store isn't showing in the locator
Open the location's Store locator tab in Store Hours and confirm Show in store locator is on.
Confirm the location has a complete address in Settings → Locations. Locations missing coordinates are skipped.
Confirm it is not a warehouse-type location. Warehouses are excluded from the directory by design.
Confirm your Google API key is saved and the Store Locator APIs (Maps JavaScript, Places) are enabled, since the map and search depend on them.
FAQ
Quick answers to the questions merchants most often ask. For longer explanations, jump to the linked section.
Do all plans include the same features?
Yes. All three plans include the full feature set. Plans differ only by the number of Shopify locations and total monthly Shopify order volume.
Does this work on Shopify Plus?
Yes, and on non-Plus stores. The app uses Shopify's supported checkout messaging and approved delivery customisation APIs. No Plus-only features required.
Does this app modify Shopify checkout?
The app uses Shopify's approved checkout customisation APIs (delivery customisation functions) to support Pickup-Only fulfilment and surface Click and Collect messaging at checkout. It does not replace the checkout UI, modify the payment flow, or store customer payment data.
Does it work with Shopify POS?
Yes. The app uses native Shopify locations, the same locations your POS is connected to. There are no duplicate location setups, no sync workarounds, and no data drift between channels.
Does this integrate with Shopify Flow and order routing?
Yes. Because the app uses native Shopify metafields and native locations, all standard Shopify Flow triggers work without an additional connector. See Shopify Flow for common recipes.
Is the Cart Popup required?
The Cart Popup is optional as a feature. The app works without it, but you lose three specific capabilities at the cart: pre-checkout stock validation against the selected pickup store, custom messaging at each cart line (for example, "Allow 2 to 3 days for collection"), and Home Delivery blocking for Pickup In Store Only products.
Enable Cart Popup if you want any of those features. If you're running plain in-stock-only Click and Collect with no custom messaging triggers and no Pickup-Only restrictions, you can leave it off.
If you enable Cart Popup, you must also enable Locations Popup. Cart Popup is a settings shell only. It reads its store list, stock display, custom messaging triggers, colours, and behaviour settings from the Locations Popup block. Without Locations Popup enabled, Cart Popup will not display stores or apply your configured messaging.
Do gift cards and digital products go through store pickup?
No. Any product marked in Shopify as not a physical product is left out of store pickup. Its product page shows no store availability, a cart holding only these products goes straight to checkout, and in a mixed cart it is never checked against store or delivery stock. See Gift cards and digital products.
Is the Locations Popup required?
It depends on what you enable elsewhere. Locations Popup is technically optional, but in practice almost every working configuration needs it.
You can leave Locations Popup off only when all of the following are true:
Your Product Page block is in Embedded PDP Store Lookup Mode (the recommended default).
You're not using the Cart Popup app embed.
You're not using the optional store banner or header widget.
Enable Locations Popup if any of these are true:
You've enabled Cart Popup. Cart Popup reads the bulk of its configuration (stores, stock display, messaging triggers, colours) from the Locations Popup block. Cart Popup will not function without it.
You want a global "select your store" popup that opens on the customer's first visit.
You want a persistent header widget showing the chosen store.
You want the optional store banner.
Your Product Page block is in Popup (legacy) PDP Store Lookup Mode. The PDP delegates store lookup to this popup in that mode.
What counts toward my monthly order limit?
All Shopify orders created in the month count, regardless of fulfilment method.
What happens if I exceed my plan limits?
You'll be prompted to upgrade. There are no automatic overage charges.
Do I need the Store Locator?
No. It's an optional feature, separate from Click and Collect pickup. It adds a storefront store directory and an SEO-friendly page per location, built on the same Shopify locations and Store Hours data. Enable it if you want customers to find and browse your physical stores online. See Store Locator.
Support
For help with installation, configuration, or anything that's not behaving as documented, contact the team directly.
Email support
Get a response within one business day (Brisbane time).
A clear description of what you tried and what happened
A link to a product or cart that reproduces the issue, if relevant
Screenshots of any error messages
Related pages
Click & Collect for Shopify: the full feature list and current pricing. Handy if you are comparing plans or sharing the app with someone else on your team.
Shopify App Store listing: see what changed in the latest release, or leave a review if the app is working well for you.
What's new: recent releases and the settings they added, newest first.