Blog

Shopify Pickup Product Tags vs Collections vs Custom Fields

2026-06-13 · BopiSafe Team

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 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

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.

Frequently asked questions

Should I use product tags or custom fields to mark pickup-only products?

For a small store with a few hundred products and one person managing the catalog, tags are the simplest place to start — every Shopify app reads them and you can apply them in bulk from the product list. Once you're past a few hundred products, or you have more than one person editing the catalog, custom fields are safer because they enforce consistent values and don't get accidentally overwritten during bulk edits. The cardinal rule is to pick one and never use both.

Can I use a Shopify collection to mark pickup-only products?

You can, but it's the weakest of the three approaches. Collections exist to group products for customers to browse, not to carry fulfillment rules. The moment someone tweaks the collection to make it look better on the storefront, they may silently change which products are treated as pickup-only. Smart collections that auto-populate based on rules are even riskier because they can change without anyone noticing. Use collections for merchandising and a separate label for fulfillment.

What happens if I use both tags and custom fields?

One of them tends to get out of sync. It is a common pattern — someone adds a new pickup product and remembers the tag but forgets the custom field, or vice versa. Now your theme reads one signal and a reporting tool reads another, and you get inconsistent behavior depending on which page or report you look at. It is one of the most common self-inflicted BOPIS organization problems. The fix is to pick one source of truth from day one and enforce it.

When should I migrate from tags to custom fields?

Migrate when any of these is true — you've started seeing typos like `pickup_only` vs `pickup-only` on different products, you're regularly using bulk CSV imports to update your catalog, you have more than one person editing products, or you need to record more than just "yes/no this is pickup-only" — for example, which specific locations a product can be picked up from. Once any of these hits, tags become a liability faster than they save time.

Do I lose anything by using custom fields instead of tags?

A small number of older Shopify apps only know how to read tags. If you're using a lot of legacy third-party apps, audit which ones support custom fields before you migrate. Most apps built in the last few years support both, but it's worth checking. The other thing you lose is the at-a-glance visibility — tags appear right on the product list, while custom fields require opening the product to see.

How do I migrate without breaking anything?

Set up the custom field first, then run a one-time bulk edit (Shopify's built-in bulk editor handles this for most catalogs under 50,000 products) to copy each product's tag value into the custom field. Leave the tag in place for a few weeks while you confirm every app and every page is reading the new field. Once you're sure nothing still depends on the tag, remove it in a single bulk action. Never let both run as authoritative — that's how you end up back in the broken state.

Does my pickup app decide fulfillment from my tags or collections?

It depends on the app. Some apps key off your tag or collection taxonomy to decide what is pickup-only, which is exactly why drift between two labeling systems causes problems. Others, like BopiSafe, let you set the fulfillment rules (pickup, local delivery, shipping) per product, per collection, or as a shop-wide default inside the app itself — so the app does not silently inherit whatever your storefront tags happen to say. Ask any vendor how their app determines fulfillment before you commit to a labeling scheme.

Do I need to label products at all if I only sell from one location?

Yes, if any of your products shouldn't be available for pickup — for example, items that ship from a fulfillment warehouse rather than your physical store, or special-order items that aren't kept on-site. The label tells your pickup app which products belong in the pickup flow and which don't. Without it, customers will be offered pickup on items you can't actually hand them at the counter.

Want pickup that doesn't break? See how BopiSafe works →

New to BopiSafe? Use code BOPISAFE30 at plan selection for a 30-day free trial instead of 14.