Google Shopping custom labels: the complete setup guide
Google Shopping custom labels split SKUs by margin, performance, and season - so Smart Bidding bids by tier, not averages. Full setup and strategy inside.
- 12,000+PMax campaigns audited
- 200+Live ecom clients
- €200M+Tracked sales
Most ecommerce Google Ads accounts run every product at the same bid target. The new hero product and the dead clearance SKU compete in the same Performance Max campaign at the same ROAS floor. Smart Bidding treats them equally because the feed does not tell it anything different.
Custom labels fix that.
Google Shopping gives you 5 custom label fields - custom_label_0 through custom_label_4 - and lets you fill each one with whatever values you want. There is no preset list. You define them. A value like high or champion or q4-seasonal or clearance - all valid. Whatever helps you describe your products in a way that is useful for bidding and campaign structure.
This guide covers what custom labels are, the label schemes that actually move results, how to set them up technically, and how to use them in Performance Max and Standard Shopping. It also covers how ZenoX's Performance Labelizer automates this across 200+ ecom brands.
What Google Shopping custom labels actually do
Let me be clear about what custom labels do not do first, because there is a lot of confusion here.
Custom labels do not change which queries your products match. Titles and descriptions decide that. They do not affect who sees your ads. Audience matching comes from product type, category, and the content of your feed. They do not directly change your bids.
What they do: they give you a way to segment your catalog inside Google Ads so you can apply different campaign structures and bid targets to different product groups.
Think of it like a spreadsheet column. You fill in a value for each SKU based on whatever matters to your business. Then in Google Ads, you filter products by those values - putting high-margin products in one listing group with an aggressive ROAS target, and low-margin or dead-weight products in another with a more defensive one.
Without custom labels, Performance Max sees all your products as one undifferentiated pool. Smart Bidding optimizes across the whole catalog using the blended average. Your best-margin, best-converting products subsidize your dead stock. Your worst products cap your overall spend because they drag down the average.
With custom labels, you give Smart Bidding the signal it needs to bid by tier instead of by average.
The 5 custom label fields and how to think about them
Google gives you fields custom_label_0 through custom_label_4. Five slots. Each one can hold its own set of values, independent of the others.
One product can have a different value in each slot at the same time. So a single SKU could be tagged as:
custom_label_0: high(high margin)custom_label_1: champion(top performer by conversion)custom_label_2: summer(seasonal)custom_label_3: premium(price tier)custom_label_4: clearance(inventory status)
That is five independent signals you control. In practice, three well-defined labels cover most of the value. More than that starts to get hard to maintain and reason about.
The fields are named by number only. There is no predefined meaning. custom_label_0 is not reserved for margin and custom_label_3 is not reserved for season. You decide what each slot means for your business. The only rule is consistency - whatever value scheme you pick, use it across your whole catalog.
The label schemes that move results the most
Here are the four schemes that consistently make a difference across the brands we work with at ZenoX.
Margin tier
Pull cost-of-goods data from your back end. Divide products into three groups:
high- above 55% marginmid- 35 to 55% marginlow- under 35% margin
This is the most high-value label because it directly ties Smart Bidding's decisions to your actual profit per sale. Without it, a 10% margin product getting a 4x ROAS looks like a win on paper. It might be running at a loss once you factor in fulfilment and returns. The margin tier label tells the campaign to apply a different ROAS floor to low-margin products - protecting your budget from subsidizing SKUs that can never be profitable at scale.
Performance bucket
Look at the last 30 to 60 days of conversion data per SKU. Bucket products into three groups based on how they are actually performing:
champion- converting consistently, above your account's average ROASsleeper- getting impressions and clicks, not converting wellwaster- burning spend with zero or near-zero conversions
ZenoX's Performance Labelizer runs this scoring daily and writes the label back to Merchant Center automatically. Champions get pushed hard. Sleepers get investigated - sometimes a title rewrite wakes them up. Wasters get a defensive target or get paused until the feed issue behind them is fixed.
Seasonality
If you sell products with a clear seasonal pattern - summer apparel, Q4 giftware, winter home decor - a season label lets you suppress off-season SKUs in Performance Max without delisting them entirely. Values like peak, shoulder, off give you a filter you can activate when the season turns. No need to delete products or pause campaigns. Just flip the label and update the listing group filter.
Price band
If your catalog spans a wide price range, Smart Bidding can struggle because the conversion patterns are very different at $30 and $300. The decision cycle is longer for high-ticket items. A price band label (under-100, 100-to-300, over-300) lets you split high-AOV products into their own listing group with bid targets that reflect the longer consideration window.
How to set up custom labels in your feed
There are three ways to add custom labels to your products.
The main feed
If you have full control over your feed file (CSV, XML, or API), add columns for custom_label_0 through whichever labels you are using. Fill in the value for each product row and re-upload. This works cleanly for custom feeds but is messy for Shopify stores where the main feed is generated automatically from product data - any manual edits get overwritten on the next sync.
A supplemental feed
The cleaner approach for Shopify is a supplemental feed. Create a separate CSV with just three columns: id (the product offer ID), custom_label_0, and any other labels you are using. Fill in the value for each product ID. Upload this as a supplemental feed in Merchant Center, linked to your primary feed.
The sub feed layers your labels on top of the main feed without touching the Shopify export. When you update labels, you only update the sub feed. This is how most feed management tools and ZenoX's internal tooling work.
Feed rules in Merchant Center
Merchant Center has a built-in feed rules tool that can set custom label values based on other feed attributes - for example, setting custom_label_0 = 'high' for any product where the price is above $150. It is limited to simple logic but covers some schemes without any external tooling. Find it under Products > Feeds > your feed > Processing.
After updating the feed, go to the Products tab in Merchant Center and filter by your custom label to confirm the values loaded correctly. Feed changes can take up to 24 hours to process. If labels are not showing, check that the supplemental feed is linked and that column headers match exactly - Merchant Center is case-sensitive and expects custom_label_0, not Custom Label 0.
The complete Google Shopping feed guide covers how custom labels fit into the broader feed structure alongside title rewrites, item-group IDs, and GMC compliance checks.
Using custom labels in Performance Max and Standard Shopping
Performance Max
In PMax, custom labels go inside Listing Groups. Open the Asset Group, find the Listing Group section, and add a filter based on your custom label values.
Split by margin tier: create one listing group for custom_label_0 = high, one for mid, one for low. Set the most aggressive tROAS target for the high group. Set a more conservative target for low - or exclude that group entirely if the margin cannot support the bid floor.
If you also have a performance bucket label, layer it on. High-margin Champions become your priority listing group. Low-margin Wasters can sit at a minimal spend cap or be excluded until the underlying product or feed issue is fixed.
One practical limit: each listing group needs enough conversion volume for Smart Bidding to learn. If a tier is generating fewer than 30 conversions per month, consider merging it with the tier above until volume builds. Thin listing groups generate unstable signals.
Standard Shopping
In Standard Shopping campaigns, custom labels let you split campaign structure explicitly. High-margin products go into a dedicated campaign with Priority: High and an aggressive budget. The full catalog sits in a second campaign with Priority: Low and a smaller budget as a catch-all.
This controls budget allocation without relying purely on Smart Bidding's internal decisions. You are explicitly directing spend toward the products with the highest profit upside. Combined with a bid modifier by device or network, this gives you very granular control.
The core logic - bid by tier, not by blended average - is the same whether you are running PMax or Standard Shopping. Custom labels are just the mechanism that makes it possible.
The contrarian take on Performance Max explains why the feed and its labels are always the root cause of campaign inefficiency - worth reading alongside this setup guide.
How ZenoX handles this with the Performance Labelizer
Setting up custom labels is not the hard part. Keeping them accurate over time is.
Margin changes. Best sellers go cold. Clearance stock moves. Products that were Champions in January are Wasters by March. If the labels do not update, the bid logic reflects a picture of your catalog that is weeks out of date. You are bidding on last quarter's reality.
ZenoX's Performance Labelizer runs the scoring daily. It pulls conversion data from Google Ads, looks at the last 30 days per SKU, and assigns Champion, Sleeper, or Waster based on where each product lands against your catalog average. Then it writes the updated custom_label value back to Merchant Center automatically - no manual spreadsheet updates, no weekly label reviews.
The bid logic always reflects what is actually happening in the account today, not what was true when you last touched the feed.
This is the same infrastructure we use internally across 200+ ecom brands. The Labelizer is the data layer. The custom label is the signal. The listing group is where it becomes a bid decision.
Putting it together
Custom labels are one of the simplest feed changes to make and one of the most consequential for how Smart Bidding treats your catalog. Five fields. You define the values. You decide what they mean. Then you use them to build a campaign structure where the bids reflect your actual product economics - not a blended average across everything.
Start with one label: margin tier. Pull the cost data, assign high, mid, or low to every SKU, upload the supplemental feed, and build three listing groups in your PMax campaign with different tROAS targets. That one change replaces a blended optimization with a margin-aware one.
Add the performance bucket next. Then seasonality if it matters for your niche. Build from there at a pace that lets you verify each label is working before adding the next.
If you want to see how we structure the full setup for a new ecom account - from feed audit to custom label scheme to campaign build - the process page walks through it clearly. Or if you want to see what this looks like in practice on real accounts, the results page has examples across fashion, jewelry, and home decor where the label system is part of the setup that moved the numbers.
The bid strategy is downstream of the feed. Custom labels are how you make the feed tell the truth about your products.