On Shopify you can label a product “pickup-only” in three places — tags, collections, or custom fields. They look interchangeable but behave very differently, and using two at once is the most common cause of BOPIS labeling bugs. This guide covers the trade-offs and the one rule that prevents most label-related fulfillment problems.
If you’ve already mixed two systems, jump to the migration section. If you haven’t started yet, the most important decision is which single system you’ll commit to and how you’ll keep it clean.
Why labels matter more than people think
When a pickup app processes a cart, the first question it asks about every item is “is this pickup-only, ship-only, or both?” The answer comes from whatever label your store uses. If the label is wrong, missing, or contradicted by another label, every downstream behavior breaks:
- The cart page shows the wrong delivery options
- Shipping rates appear on pickup-only items, or pickup options appear on shippable-only items
- Customers complete checkouts the store can’t actually fulfill
- Pickup-ready emails fire for orders that should have been shipped
- Reporting on pickup-vs-shipping revenue becomes unreliable
The pickup app is only as good as the label it reads. If labels drift — different products labeled different ways, or the same product labeled two contradictory ways — the app gets confused, and confusion always lands on the customer.
The question is not “which labeling system is best in theory.” The question is “which labeling system gives my team the fewest places to make a mistake.”
What are the three ways to label pickup-only products?
Product tags
Add a tag like pickup-only to every pickup-only product. Easy, visible, no setup.
This is how most stores start, and for a small catalog with a single person managing it, that’s fine. You can apply tags in bulk from the product list. Almost every Shopify app reads tags out of the box. The product list shows the tag at a glance.
The weakness is that tags are just free-text strings. Nothing stops a team member from typing pickup_only instead of pickup-only, or Pickup-Only, or pickupOnly. Each of those is a different tag as far as Shopify is concerned, and your pickup app will only recognize the one it was told to look for. The others quietly fail.
Tags also share a single flat namespace with everything else — marketing tags, category tags, seasonal tags. The longer your store runs, the more crowded that namespace gets, and the easier it is for a fulfillment-critical tag to be accidentally removed by someone cleaning up old marketing tags.
For under a few hundred products and one person managing the catalog, tags are usually the right starting point. Past that, the failure modes start to dominate.
Collections
Create a collection called “Pickup Only” and add products to it. Treat membership as the pickup-only signal.
This sounds clean, but it confuses two jobs that should stay separate. Collections exist for customers — they’re the groups people browse on the storefront. Using a collection to also carry fulfillment data means anyone tweaking the collection to improve the storefront experience can accidentally change which products get treated as pickup-only.
Smart collections, which auto-populate based on rules, are even worse for this purpose. They re-evaluate every time anyone saves a product, so a tag change anywhere in the store can quietly move products in or out of the pickup-only set. You can wake up to a different set of pickup products than you went to bed with, and there’s no audit trail explaining why.
The one good use for collections in a pickup context is the storefront-facing one: a “what can I pick up today” page that customers can browse. That’s a presentation use, not a fulfillment use, and it should be populated from whichever fulfillment label you actually use as your source of truth.
Custom fields
Set up a custom field on the product that records which of pickup, local delivery, and shipping each product allows — for example “pickup only”, “ship only”, or “pickup and ship”. Set the allowed methods for each product.
Custom fields are the strictest option. You can require the field, restrict it to specific values, and use Shopify’s built-in product editor to fill it in. Bulk CSV imports handle custom fields cleanly because the field has its own column. You don’t get the same typo problem because the value is constrained.
The trade-offs: there’s a one-time setup cost to define the field and train the team, and a small number of older third-party apps only know how to read tags. For a modern store with a growing catalog and more than one person editing products, the structural benefits compound quickly.
Why should you pick only one labeling system?
The most important sentence in this entire guide: whichever option you pick, pick exactly one, and never let a second one creep in.
Across our own pickup integration work since 2023, the labeling problems that take the longest to untangle almost all trace back to two systems running in parallel: the store starts with tags, someone later sets up custom fields, products get both, the migration is left half-done, and now different pages and reports disagree about which product is pickup-only.
The fix is upstream: at the start of any pickup project, decide which single labeling system is the source of truth and make it the only one your team writes to. If you later want to migrate, complete the migration end-to-end before declaring it done.
How to migrate if you’ve already mixed
If you’re reading this and realizing you already have both tags and custom fields in play, here’s the cleanup sequence using Shopify’s built-in tools — no developer required.
Step 1: Pick the winner. Usually this is custom fields, because they’re stricter, but it can be tags if your store is small and you have legacy apps that only read tags. Whatever you pick, write it down.
Step 2: Audit. Use Shopify’s product filter to find every product where the two systems disagree. Filter by tag, export to CSV, compare against custom field values in a spreadsheet. Identify the products that are tagged pickup-only but missing the custom field (or vice versa).
Step 3: Reconcile. For each disagreement, decide what the correct value is and update the losing system to match the winner. Use Shopify’s bulk editor — it handles both tags and custom fields directly in the product list without leaving the admin.
Step 4: Watch for a few weeks. Don’t remove the losing system yet. Leave both in place and monitor. Confirm your pickup app and your theme are both reading the winning system. Confirm new products are getting the winning label and not the losing one.
Step 5: Remove the loser. Once you’re confident nothing depends on the losing system, do a single bulk action to remove it from every product. Document the decision so future team members know not to bring it back.
The audit step is where most merchants cut corners. Skipping it means you re-enter the broken state inside a month. Don’t skip it.
How BopiSafe fits
BopiSafe sidesteps the whole tags-vs-collections drift problem because it does not read your tag or collection taxonomy to decide fulfillment in the first place. You set the fulfillment rules — pickup, local delivery, shipping — directly inside the app: per product, per collection, or as a shop-wide default. Those settings are the source of truth, not whatever label happens to live on the product.
That means your tags and collections are free to do their real jobs — merchandising, search, storefront browsing — without secretly controlling fulfillment. You still want a single, clean labeling scheme for your own sanity and for any other apps that do read tags, but BopiSafe will not get confused if a marketing tag changes or a smart collection re-populates.
The goal is the same goal you should have: one source of truth for fulfillment, no drift, no surprise pickup behavior.
Written by the BopiSafe team — we build BOPIS infrastructure for Shopify merchants.
Next steps
- If you haven’t enabled pickup yet, read how to set up BOPIS on Shopify and pick a single labeling system before you start tagging products
- If you have a larger catalog or complex pickup rules, read the pickup-only products guide for the full setup walkthrough
- If you have pickup at multiple locations, read Shopify multi-location pickup inventory — labeling matters even more there
- Or install BopiSafe and set fulfillment rules per product, per collection, or shop-wide — without keying off your tags
For Shopify’s own merchant documentation on product organization, see the tags help article and the custom data overview. Both pages cover the basics from the merchant side without any developer setup.
Have a labeling edge case this guide didn’t cover? Email support@bopisafe.com — we update this guide based on what merchants actually run into.