{"title":"Click-and-collect configuration","slug":"setting-up-click-and-collect","url":"https://support.storeconnect.com/articles/setting-up-click-and-collect","url_markdown":"https://support.storeconnect.com/articles/setting-up-click-and-collect.md","subtitle":null,"summary":"Set up click-and-collect so customers order online and pick up in store: enabling shipping, creating stock locations and collection points, configuring product shipping methods, managing stock levels, and rendering pickup options in a custom theme.","type":"Help_Documentation","video_url":"","keywords":"click and collect, local pickup, in-store collection, in-store pickup, stock location, collection point, order online pick up in store, pick up in store, stock levels, inventory management, shipping methods, bopis, online fulfillment options, shipping only, pickup_options, pickup_enabled, store stock location, collection point zone, custom theme, no pickup option showing","last_modified":"2026-08-21T07:12:35+0000","body_markdown":"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.\n\n## Setting up Click and Collect\n\nClick and Collect uses the following **objects**:\n\n-   Store object\n    -   Activates shipping methods for Click and Collect\n-   Stock Location object\n    -   Where the goods are located\n-   Collection Point object\n    -   Definable name where customer collects goods from\n-   Product object\n    -   Configures your product available for Click and Collect\n-   Stock Level object\n    -   Define much stock is available to sell\n\n### Step one - enable storewide shipping\n\nEven 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.\n\nSee Enable your store shipping to find out how to do this.\n\n### Step two - create a stock location\n\nOnce you have enabled shipping for your store you can start assigning inventory to use the Click and Collect shipping method.\n\nYour 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.\n\n![Fulfilment Options](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677693/documentation-media/stock-locations.png)\n\nNot all stock locations may have Click and Collect facilities. So, for each Stock Location you will need to define the \"Online Fulfillment Options\".\n\n:::warning\n**This field is the switch that makes a location collectable.** A stock location left\non `Shipping only` offers no pickup, no matter how the collection point, product and\nstock records are configured, and nothing reports an error. If you have completed\nevery other step and no pickup option appears at checkout, check this field first.\nChoose the option that includes click and collect.\n\nTwo other settings on the location are just as silent:\n\n-   **Active** must be checked. An inactive stock location is excluded from click and\n    collect entirely, exactly as if the fulfillment option were wrong.\n-   The location must be linked to the store through a **Store Stock Location**\n    record. Without that link, the storefront's own\n    `current_store.pickup_enabled?` check reports that the store has no click and\n    collect at all.\n:::\n\n![Fulfilment Options](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677694/documentation-media/stock-location-object-fulfillment-options.png)\n\nOptionally, 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.\n\n![Days to restock Options](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677695/documentation-media/stock-locations-object-days-to-restock.png)\n\n### Step three - create a collection point\n\nCollection 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.\n\n![Collection points](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677697/documentation-media/collection-points.png)\n\nIf 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.\n\n![Creating a new collection point](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677699/documentation-media/new-collection-point.png)\n\n:::warning\n**A stock location with no usable collection point disappears from the checkout.** The\nlocation is only offered when at least one of its collection points survives these\nthree tests, and no error is shown when none do:\n\n-   The collection point is **Active**.\n-   It belongs to the store the customer is shopping.\n-   Its **Zone**, if one is set, matches either the shipping address or the billing\n    address on the cart. A collection point with no zone is always offered; one with a\n    zone the customer's address falls outside of is dropped, so a location can be\n    collectable for one customer and invisible to the next.\n:::\n\n### Step four - make your product Click and Collectable\n\nIn your Product object you will need to configure the Shipping Method to now include a \"Pick up in store\" option.\n\n![Product shipping methods](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677700/documentation-media/product-object-shipping-methods-1.png)\n\nEdit the Product object, select the \"Pick up in store\" option and using the right arrow, move the option into the \"Chosen\" box.\n\n![Selecting the product shipping method](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677701/documentation-media/product-object-shipping-methods-2.png)\n\nThe product is now configured for Click and Collect.\n\n### Step five - set your stock levels\n\nTo have a functional Click and Collect you need stock to sell.\n\nIf you are tracking your inventory then you must:\n\n1.  Have available stock, and/or\n2.  Have backorderable stock\n\nIf you are not tracking your inventory then the above is not required.\n\n:::warning\n**When Track Inventory is on, a missing Stock Level record silently removes the\nlocation from the checkout.** For every product in the cart that tracks inventory,\nStoreConnect looks for a Stock Level record at that stock location with an **Available\nto Sell** figure of at least the quantity ordered. If any tracked product in the cart\nhas no such record, the whole location is reported as out of stock rather than\nunavailable, and the default theme then leaves it out of the click and collect list.\nNothing reports an error.\n\nSo every inventory-tracked product you want collectable needs a Stock Level record per\ncollectable location, with enough **Available to Sell** to cover the order. Products\nwith **Track Inventory** switched off are treated as always in stock and need no Stock\nLevel record.\n\nWhether an out-of-stock location is shown as unselectable or is treated as available\nlater depends on **Require Stock For Pickup** and **Days to Restock** on the stock\nlocation.\n:::\n\nBoth (1) \u0026 (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.\n\n![Related product object](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677702/documentation-media/related-product-object.png)\n\nOtherwise, you can find the Stock Level object using the dropdown menu.\n\n![Related product object](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677704/documentation-media/stock-levels-object.png)\n\n#### Have available stock\n\nStock 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.\n\n![Track Inventory](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677705/documentation-media/product-object-available-to-sell.png)\n\n#### Have backorderable stock\n\n**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.\n\n![Track Inventory](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677706/documentation-media/product-object-track-inventory.png)\n\nThen you'll need to turn on \"Backorderable\" within the Stock Levels object.\n\n![Make Backorderable](https://res.cloudinary.com/hzkr6fi81/image/upload/v1781677707/documentation-media/stock-level-backorderable.png)\n\n### Step six - check your theme renders the pickup options\n\nSteps one to five configure Click and Collect in Salesforce. The storefront still has\nto display it, and that is a separate thing.\n\nThe default theme does this for you. **A custom theme, or any theme with its own\nhand-written checkout, must render the pickup options itself.** Pickup options are not\nshipping rates: they live on their own collection, so a delivery step that loops\n`current_cart.shipping_rates` alone will show no pickup choice at all, with a fully\ncorrect configuration behind it and nothing reporting a problem.\n\nThe options are on `current_cart.pickup_options` (also available per line on\n`current_cart_item.pickup_options`). Each is a\n[PickupOption](pickup-option-liquid-object-reference) carrying the `stock_location`,\none or more `collection_points`, and `in_stock?` / `disabled?` /\n`immediately_available?` flags.\n\nPickup and delivery share the checkout form's `method` field, so both sets of radio\nbuttons use the same input name. The value of a pickup radio is the option's\n`form_value` joined to the chosen collection point's id with an underscore:\n\n\n```liquid\n\n{% assign method_field = form.fields[\"method\"] %}\n\n{% for option in current_cart.pickup_options %}\n  {% unless option.disabled? %}\n    {% for point in option.collection_points %}\n      \u003clabel\u003e\n        \u003cinput type=\"radio\"\n               name=\"{{ method_field.name }}\"\n               value=\"{{ option.form_value }}_{{ point.id }}\"\u003e\n        {{ point.display_name | default: point.name }}\n      \u003c/label\u003e\n    {% endfor %}\n  {% endunless %}\n{% endfor %}\n```\n\n\nRemember the empty state too. A checkout that decides whether to show \"no delivery\noptions available\", or whether to enable its continue button, by testing\n`current_cart.shipping_rates.size` alone will block a pickup-only cart.\n\n:::note\n`current_store.pickup_enabled?` and `current_cart.pickup_options` do not answer quite\nthe same question. `pickup_enabled?` only counts stock locations linked to the store\nthrough a **Store Stock Location** record, while the cart's pickup options are built\nfrom every active, collectable stock location. A location that is missing its\n**Store Stock Location** link therefore produces selectable pickup options on the cart\nwhile `pickup_enabled?` still returns `false`, and a section gated on that attribute\nrenders nothing.\n\nAdding the missing link is the fix. If you are writing a custom checkout and want to\nbe certain, test `current_cart.pickup_options` directly rather than\n`current_store.pickup_enabled?`.\n:::\n\n## Terms\n\n**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 \u0026 Standard Objects](https://trailhead.salesforce.com/content/learn/modules/data_modeling/objects_intro)\" Trailhead to understand more about Objects.\n\n**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.\n\n**Backorderable:** This is when a product can be sold to customers even if it is temporarily out of stock."}