Skip to main content

Custom Pickup Locations

Let customers choose a pickup location at the time of subscribing, and display estimated delivery dates based on each location's configured lead time.

Overview​

Custom Pickup Locations give merchants a flexible alternative to standard shipping. Instead of entering a delivery address, subscribers choose from a list of pickup points (e.g., a local store, a collection depot, or a partner location) when they subscribe. The customer's chosen location is then attached to their subscription and used for every recurring order.

Two kinds of pickup

Zubs manages two independent pickup systems:

  • Custom Pickup Locations (this article) — locations you define in Zubs. The customer chooses one on the product page, before checkout, and there is no cap on how many you can define.
  • Shopify pickup — locations with local pickup enabled in your Shopify settings. The customer chooses one at checkout, and Zubs lets them or your support team move the subscription between Shopify pickup and home delivery afterwards.

A subscription uses one or the other, never both, and the portal shows the controls for whichever applies.

Shopify location limit workaround

Shopify's native pickup is tied to your store locations, so the number of pickup points you can offer is capped by the location limit of your Shopify plan. With Zubs Custom Pickup Locations, you can define as many locations as you need — there is no cap. This makes the feature a practical workaround for merchants who operate more collection points than their plan's location limit allows.

How it works:

  1. Merchant defines pickup locations in the Zubs merchant portal, each with an address and optional delivery lead time. Addresses are geocoded on save to enable distance-based sorting
  2. Customer visits the shell product page and picks a location from the Pickup Location Selector, optionally sorted by distance via Use my location
  3. The selected location is saved to the subscription and applied to all future orders
  4. Existing subscribers can change their pickup location from the customer portal at any time
  5. In the customer portal, the estimated delivery date for each upcoming order is calculated from the location's lead time and displayed to the customer

Setup​

Step 1: Mark your shell product as a non-physical product​

In the Shopify admin, open your shell product and set each variant's Shipping setting to This is a physical product = off (i.e., mark it as a digital or service product). This prevents Shopify from asking customers to enter a shipping address during checkout, since delivery is handled via pickup.

warning

If this step is skipped, customers will be prompted to enter a shipping address at checkout even though they chose a pickup location.

Step 2: Enable Custom Pickup Locations in Settings​

  1. In the Zubs merchant portal, go to Settings → Subscription Features
  2. Locate the Custom Pickup Locations feature and enable it
  3. Once enabled, a section appears where you can manage your list of pickup locations

Step 3: Add Your Pickup Locations​

For each location you want to offer:

  1. Click Add Location
  2. Enter the location name (displayed to customers, e.g., "Downtown Store" or "North Collection Point")
  3. Enter the full address of the pickup location
  4. (Optional) Enter the expected delivery time in days — the number of days between an order being processed and it being ready for pickup at that location
Estimated delivery dates

When a delivery time is set, the customer portal uses it to show subscribers an approximate pickup-ready date for each upcoming order. This helps customers plan ahead and reduces "where is my order?" support requests. If no delivery time is set, no estimated date is shown.

  1. (Optional) Enter a Type — a free-form label like "School", "Production", or "Locker" to group similar locations. Customers can filter by type in the pickup picker.
  2. Click Save to add the location

Repeat for each location. Locations can be edited, hidden, or removed at any time from the same settings page.

Automatic geocoding

Zubs geocodes the address on save so the storefront and customer portal can sort by distance. Nothing to configure — it runs automatically. A warning icon appears next to any location without coordinates — either because no address was entered or the address couldn't be geocoded. Checkout still works but no distance is shown.

Hide a Location Without Deleting It​

Sometimes you want to stop offering a location temporarily — a store closes for renovation, a collection point pauses for the season — without losing its details. Click the hide button (the eye icon) next to a location in the settings list instead of deleting it.

A hidden location:

  • Disappears from the Pickup Location Selector on the storefront, so new subscribers can't choose it
  • Disappears from the Change pickup location picker in the customer portal and on the contract detail page in the merchant portal
  • Stays in your settings list with a Hidden badge — click the eye button again to show it
Locations customers already use

Deleting a location is blocked while active subscriptions still use it — hiding is the soft alternative. If you hide a location that active subscriptions are on, Zubs asks you to confirm and tells you how many are affected. Those subscribers keep their current pickup location until they choose a different one; they just can't re-select the hidden one once they switch away.

Step 4: Enable the Pickup Location Selector in the Theme Editor​

The pickup location selector is part of the Initial Product Selector block and must be switched on in the Theme Editor.

Initial Product Selector required

The Pickup Location Selector is a feature of the Initial Product Selector block. Make sure you have the Initial Product Selector set up before proceeding. See Initial Product Selector for the full setup guide.

  1. Open the Theme Editor in your Shopify admin (Online Store → Themes → Customize)
  2. Navigate to the product page template that contains your shell product
  3. Select the Initial Product Selector block in the left-hand panel
  4. In the block settings, find the Pickup Location Selector toggle and enable it

Once enabled, the location dropdown will appear to customers on the product page whenever the Initial Product Selector is shown.


Customer Experience​

On the storefront (new subscribers)​

The Pickup Location Selector appears on the shell product page. Clicking the Choose pickup location button opens a modal that walks the customer through finding the nearest pickup point:

  1. Reference step. Customer enters a postal code, city, or address (address autocomplete suggests matches as they type) or clicks Use my location for browser geolocation.
  2. Results step. Pickup locations appear sorted by distance from the reference, each row showing name, address, and distance. A chip at the top displays the current reference with a × button to clear it.
  3. Optional map view. A Show map toggle renders an interactive map with a pin per pickup location and a marker at the reference. Clicking a pin highlights the corresponding row.
  4. Confirm bar. Clicking a row or a marker previews the choice in a sticky bar at the bottom of the modal. The choice is only committed when the customer clicks Confirm selection.

A small crosshair icon next to the trigger is a one-shot shortcut: clicking it snaps to the nearest pickup location and commits immediately, without opening the modal — handy on mobile.

If you've configured types on your pickup locations, customers see filter chips in the picker to narrow the list (and map markers) by type. Each chip shows its location count.

See Initial Product Selector — Choosing a pickup location for the same flow described from the IPS block's perspective.

In the customer portal (existing subscribers)​

Subscribers can change their pickup location from the customer portal at any time via Change pickup location on the subscription detail page. If the customer has a delivery address on file, the modal sorts options by distance from that address and shows a distance badge on every geocoded entry; otherwise it falls back to an alphabetical list with a banner suggesting they add an address. The change applies to all future orders.

The Change pickup location modal in the customer portal shows the same filter chips when you've configured types.

If a delivery lead time is set for the chosen location, the portal also shows the estimated ready-for-pickup date for each upcoming billing cycle.


How to Use in Templates via Liquid​

The customer's chosen pickup location is stored as order attributes and can be accessed in your Liquid templates (e.g., notification templates or Shopify Flow).

Available attributes​

AttributeDescriptionAlways present
order.attributes.pickup_location_nameThe name of the pickup locationYes
order.attributes.pickup_location_addressThe full address of the pickup locationOnly if configured
order.attributes.pickup_location_country_codeThe country code of the locationYes
order.attributes.pickup_location_expected_delivery_dayThe expected delivery dayOnly if configured
order.attributes.pickup_location_typeThe merchant-defined type of the pickup location (e.g., "School", "Production")Only if configured

Example: Order confirmation email​

To show the pickup location in your order confirmation email, you can add a block alongside the existing shipping address. This keeps backwards compatibility for orders that use a shipping address while also displaying the pickup location when one is set:

{% if requires_shipping and shipping_address %}
<td class="customer-info__item">
<h4>Shipping address</h4>
{{ shipping_address | format_address }}
</td>
{% endif %}
{% if order.attributes.pickup_location != blank %}
<td class="customer-info__item">
<h4>Pickup location</h4>
<p>
{{ order.attributes.pickup_location_name }}
{% if order.attributes.pickup_location_address != blank %}
<br>{{ order.attributes.pickup_location_address }}
{% endif %}
{% if order.attributes.pickup_location_expected_delivery_day != blank %}
<br>Pick up on {{ order.attributes.pickup_location_expected_delivery_day }}
{% endif %}
</p>
</td>
{% endif %}

Troubleshooting​

Pickup location selector not appearing on the product page​

Possible causes:

  1. The Custom Pickup Locations feature is not enabled in Settings → Subscription Features
  2. No pickup locations have been added yet
  3. The Pickup Location Selector toggle in the Theme Editor block settings is off

Solution:

  • Confirm the feature is enabled and at least one location exists in the merchant portal
  • Open the Theme Editor, select the Initial Product Selector block, and verify the Pickup Location Selector toggle is turned on

A pickup location is missing from the selector​

Possible cause: The location is hidden. Hidden locations stay in your settings list (with a Hidden badge) but don't appear to customers or on the contract detail page.

Solution:

  • Go to Settings → Subscription Features → Custom Pickup Locations and click the eye icon on the location to show it again.

Estimated delivery date not showing in the customer portal​

Possible cause: The pickup location does not have an expected delivery time configured.

Solution:

  • Go to Settings → Subscription Features → Custom Pickup Locations
  • Edit the relevant location and enter a value for Expected delivery time (days)

Customer selected the wrong pickup location​

Customers can change their pickup location themselves from the customer portal — see In the customer portal. Your support team can also change it from the contract detail page in the merchant portal.

Distance badges aren't shown for a location​

The location either has no address or its address couldn't be geocoded (a warning icon appears next to it in the settings table). Edit the location with a complete address — geocoding re-runs on save.