# Click-and-collect configuration

Source: https://support.storeconnect.com/articles/setting-up-click-and-collect · Last modified 21 August 2026

Click and Collect is a term used by eCommerce stores offering their customers local pickup, or in-store collection of their orders without having to wait for it to be delivered. It's also known by the industry term BOPIS (Buy Online, Pickup In Store). See [Omnichannel fulfillment models](omnichannel-fulfillment-models) for how this compares to other fulfillment models.

## Setting up Click and Collect

Click and Collect uses the following **objects**:

-   Store object
    -   Activates shipping methods for Click and Collect
-   Stock Location object
    -   Where the goods are located
-   Collection Point object
    -   Definable name where customer collects goods from
-   Product object
    -   Configures your product available for Click and Collect
-   Stock Level object
    -   Define much stock is available to sell

### Step one - enable storewide shipping

Even though customers are physically collecting their ordered goods, we consider Click and Collect as a method of shipping. Because of this you will need to enable shipping in your Store object.

See Enable your store shipping to find out how to do this.

### Step two - create a stock location

Once you have enabled shipping for your store you can start assigning inventory to use the Click and Collect shipping method.

Your store may have one or more locations that hold stock. For instance, Warehouse stock and Retail storefront stock. You can create as many "Stock Locations" as you have warehouses or storefronts that hold available stock.

![Fulfilment Options](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677693/documentation-media/stock-locations.png)

Not all stock locations may have Click and Collect facilities. So, for each Stock Location you will need to define the "Online Fulfillment Options".

:::warning
**This field is the switch that makes a location collectable.** A stock location left
on `Shipping only` offers no pickup, no matter how the collection point, product and
stock records are configured, and nothing reports an error. If you have completed
every other step and no pickup option appears at checkout, check this field first.
Choose the option that includes click and collect.

Two other settings on the location are just as silent:

-   **Active** must be checked. An inactive stock location is excluded from click and
    collect entirely, exactly as if the fulfillment option were wrong.
-   The location must be linked to the store through a **Store Stock Location**
    record. Without that link, the storefront's own
    `current_store.pickup_enabled?` check reports that the store has no click and
    collect at all.
:::

![Fulfilment Options](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677694/documentation-media/stock-location-object-fulfillment-options.png)

Optionally, you may also want to set the days to restock and a requirement that stock is physically present for the option to Click and Collect.

![Days to restock Options](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677695/documentation-media/stock-locations-object-days-to-restock.png)

### Step three - create a collection point

Collection Points are essentially the fancy names for your warehouses or showrooms that customers will see. You can add your opening hours, a description and phone for customer convenience.

![Collection points](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677697/documentation-media/collection-points.png)

If you really want to add an impression, you can include **geolocation** longitude and latitude parameters to your collection point. Your own Salesforce Administrators and/or Partners can utilize geolocations in building a custom feature showing Collection Points on a map.

![Creating a new collection point](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677699/documentation-media/new-collection-point.png)

:::warning
**A stock location with no usable collection point disappears from the checkout.** The
location is only offered when at least one of its collection points survives these
three tests, and no error is shown when none do:

-   The collection point is **Active**.
-   It belongs to the store the customer is shopping.
-   Its **Zone**, if one is set, matches either the shipping address or the billing
    address on the cart. A collection point with no zone is always offered; one with a
    zone the customer's address falls outside of is dropped, so a location can be
    collectable for one customer and invisible to the next.
:::

### Step four - make your product Click and Collectable

In your Product object you will need to configure the Shipping Method to now include a "Pick up in store" option.

![Product shipping methods](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677700/documentation-media/product-object-shipping-methods-1.png)

Edit the Product object, select the "Pick up in store" option and using the right arrow, move the option into the "Chosen" box.

![Selecting the product shipping method](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677701/documentation-media/product-object-shipping-methods-2.png)

The product is now configured for Click and Collect.

### Step five - set your stock levels

To have a functional Click and Collect you need stock to sell.

If you are tracking your inventory then you must:

1.  Have available stock, and/or
2.  Have backorderable stock

If you are not tracking your inventory then the above is not required.

:::warning
**When Track Inventory is on, a missing Stock Level record silently removes the
location from the checkout.** For every product in the cart that tracks inventory,
StoreConnect looks for a Stock Level record at that stock location with an **Available
to Sell** figure of at least the quantity ordered. If any tracked product in the cart
has no such record, the whole location is reported as out of stock rather than
unavailable, and the default theme then leaves it out of the click and collect list.
Nothing reports an error.

So every inventory-tracked product you want collectable needs a Stock Level record per
collectable location, with enough **Available to Sell** to cover the order. Products
with **Track Inventory** switched off are treated as always in stock and need no Stock
Level record.

Whether an out-of-stock location is shown as unselectable or is treated as available
later depends on **Require Stock For Pickup** and **Days to Restock** on the stock
location.
:::

Both (1) & (2) above are set within the Stock Levels object and if you are still in the Product object from the earlier step then simply click on the "related" tab.

![Related product object](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677702/documentation-media/related-product-object.png)

Otherwise, you can find the Stock Level object using the dropdown menu.

![Related product object](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677704/documentation-media/stock-levels-object.png)

#### Have available stock

Stock Levels is simply that. It is the object which keeps track of the amount of stock you have to sell. When you have available stock, set your "Available to Sell" option to the amount of stock you have on hand to sell.

![Track Inventory](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677705/documentation-media/product-object-available-to-sell.png)

#### Have backorderable stock

**Backorderable** is automatic if Track Inventory is off but if Track inventory is on, using the Backorderable checkbox on the stock level record allows backorders while still tracking stock levels.

![Track Inventory](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677706/documentation-media/product-object-track-inventory.png)

Then you'll need to turn on "Backorderable" within the Stock Levels object.

![Make Backorderable](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677707/documentation-media/stock-level-backorderable.png)

### Step six - check your theme renders the pickup options

Steps one to five configure Click and Collect in Salesforce. The storefront still has
to display it, and that is a separate thing.

The default theme does this for you. **A custom theme, or any theme with its own
hand-written checkout, must render the pickup options itself.** Pickup options are not
shipping rates: they live on their own collection, so a delivery step that loops
`current_cart.shipping_rates` alone will show no pickup choice at all, with a fully
correct configuration behind it and nothing reporting a problem.

The options are on `current_cart.pickup_options` (also available per line on
`current_cart_item.pickup_options`). Each is a
[PickupOption](pickup-option-liquid-object-reference) carrying the `stock_location`,
one or more `collection_points`, and `in_stock?` / `disabled?` /
`immediately_available?` flags.

Pickup and delivery share the checkout form's `method` field, so both sets of radio
buttons use the same input name. The value of a pickup radio is the option's
`form_value` joined to the chosen collection point's id with an underscore:


```liquid

{% assign method_field = form.fields["method"] %}

{% for option in current_cart.pickup_options %}
  {% unless option.disabled? %}
    {% for point in option.collection_points %}
      <label>
        <input type="radio"
               name="{{ method_field.name }}"
               value="{{ option.form_value }}_{{ point.id }}">
        {{ point.display_name | default: point.name }}
      </label>
    {% endfor %}
  {% endunless %}
{% endfor %}
```


Remember the empty state too. A checkout that decides whether to show "no delivery
options available", or whether to enable its continue button, by testing
`current_cart.shipping_rates.size` alone will block a pickup-only cart.

:::note
`current_store.pickup_enabled?` and `current_cart.pickup_options` do not answer quite
the same question. `pickup_enabled?` only counts stock locations linked to the store
through a **Store Stock Location** record, while the cart's pickup options are built
from every active, collectable stock location. A location that is missing its
**Store Stock Location** link therefore produces selectable pickup options on the cart
while `pickup_enabled?` still returns `false`, and a section gated on that attribute
renders nothing.

Adding the missing link is the fix. If you are writing a custom checkout and want to
be certain, test `current_cart.pickup_options` directly rather than
`current_store.pickup_enabled?`.
:::

## Terms

**Object:** In Salesforce, an object is another name for a database table. A database table is essentially a spreadsheet where **fields** exist as columns and **records** as rows. Complete the "[Understand Custom & Standard Objects](https://trailhead.salesforce.com/content/learn/modules/data_modeling/objects_intro)" Trailhead to understand more about Objects.

**Geolocation:** Geolocation is 1) the process of determining a website visitor's location based on the IP address they are reported as coming from, and 2) a feature by which Salesforce Admins and/or Partners can custom build showing Collection Points on a map. See [Click and Collect](setting-up-click-and-collect) for more information.

**Backorderable:** This is when a product can be sold to customers even if it is temporarily out of stock.

---

## Follow StoreConnect

- [Email Newsletter](https://getstoreconnect.com/c/lp-newsletter)
- [LinkedIn Newsletter](https://www.linkedin.com/build-relation/newsletter-follow?entityUrn=7444956928444862464)
- [YouTube](https://www.youtube.com/channel/UCngKdP2x8l1wcbAKW3tvU8g)
- [LinkedIn](https://www.linkedin.com/company/storeconnect)
- [X / Twitter](https://x.com/storeconnecthq)

## Popular Links

- [Partners](https://getstoreconnect.com/partners)
- [News](https://getstoreconnect.com/articles/news)
- [Events](https://getstoreconnect.com/articles/events)
- [Feature Comparison](https://getstoreconnect.com/how-we-compare)
- [Download a free trial](https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000FMkeKUAT)
- [Book a Demo](https://getstoreconnect.com/contact)

## Documentation

- [Help documentation](https://support.storeconnect.com/help-documentation)
- [AI agents](https://support.storeconnect.com/ai)
- [Videos & tutorials](https://support.storeconnect.com/videos-tutorials)
- [Developer reference](https://support.storeconnect.com/developer-reference)
- [Release notes](https://support.storeconnect.com/release-notes)
- [Troubleshooting](https://support.storeconnect.com/troubleshooting)
- [Trust Center](https://trust.getstoreconnect.com/)
- [Status Page](https://status.storeconnect.com/)

## Contact

- info@getstoreconnect.com
- US +1 415 745 3230
- AUS +61 2 8365 2308

100 S Ashley Dr, Suite 600-2461
Tampa FL 33602-600 USA

Level 22, Sydney Place
180 George Street
Sydney, NSW, 2000, AUS

---

StoreConnect Support — https://support.storeconnect.com/articles/setting-up-click-and-collect