Using custom labels to segment Shopping campaigns
How to design custom_label_0–4 for Google Shopping, margin bands, price tiers, lifecycle stages and seasonality, and build campaign structure that bids each segment correctly.
Custom labels are five free-text fields (custom_label_0 to 4) you attach to each product in your feed. Google ignores their content, they exist purely so YOU can group products inside Google Ads and bid each group differently. Label by margin, price band, lifecycle stage and seasonality, and your campaign structure can finally match your economics.
Why labels are the highest-leverage feed field you control
Every other feed attribute has a spec: Google tells you what belongs in gtin or google_product_category. Custom labels are the one place the spec is your business: margin, strategy, lifecycle. Without them, your campaign structure can only group products by what Google knows (category, brand, item ID). With them, it can group by what you know: and bidding by margin band routinely outperforms bidding by category, because category is a proxy for economics and margin is the economics.
The four groupings that pay
- Margin band: the big one. A 400% ROAS target is profitable at 45% margin and ruinous at 12%. Until campaigns can see margin, every target is a compromise. (True profit-on-ad-spend bidding needs margin data; margin-band labels are the practical approximation.)
- Price band: click value scales with price; a £8 product and a £800 product should not share a CPC ceiling. Bands also stabilise tROAS learning by pooling similar order values.
- Lifecycle stage:
newproducts lack the data tROAS needs;provenproducts have it;clearancewants maximum velocity, not efficiency. This label is what makes an incubator structure operable: graduation from incubator to main campaign is just a label flip in the feed. - Seasonality: pre-labelling seasonal ranges (
summer,q4-gift,evergreen) lets you swing budgets between whole segments in one move when the season turns, instead of hunting products one by one.
Deep dive Implementation details that bite
- Labels are strings, matched exactly.
Margin-High≠margin-high≠margin_high. Pick a casing convention and enforce it in the feed layer: a typo'd value creates a phantom segment that catches nothing. - Subdivision is snapshot, not subscription. When you subdivide a product group on label values, Google Ads captures the values present at that moment. New values added to the feed later land in "Everything else" until someone re-subdivides. Audit after any label-vocabulary change.
- The 1,000-value limit per label is irrelevant if you're doing it right: closed sets of 3–6 values per slot. If you're anywhere near the limit, the label has become an ID field, which product-ID-level bidding already does better.
- Compute labels; never hand-maintain them. "First listed < 30 days → new" is a rule, executed on every feed refresh. In /tools, label rules run as part of enrichment, so lifecycle and margin labels stay current without anyone remembering to update a spreadsheet: and the same labels flow to every channel that reads the feed.
- Design for the cross-product. Campaigns often need margin-high AND new: which works cleanly because the labels live in different slots. The rookie mistake is encoding two dimensions in one slot (
new-highmargin), which explodes the value set and makes cross-cuts impossible.
A worked structure
A mid-size apparel account, labels as above, three campaigns:
- Incubator (Standard Shopping, Maximise Clicks, modest budget): filter
custom_label_2 = new. Goal: data, cheaply. - Core (PMax or Standard, tROAS): everything
proven, subdivided bycustom_label_0margin band with targets 550 / 400 / 280%. - Clearance (Standard, Maximise Conversion Value):
custom_label_2 = clearance, priority on velocity before the season ends.
Products move between campaigns purely by label changes in the feed: no campaign edits, no learning resets in the receiving structures.
Step by step
- Decide your five dimensions. Assign one meaning per label slot and document it. A battle-tested default: label 0 = margin band, label 1 = price band, label 2 = lifecycle stage (new / proven / clearance), label 3 = seasonality, label 4 = free slot for experiments.
- Define the values as small closed sets. Each label should have 3–6 possible values (e.g. margin-high / margin-mid / margin-low). Free-text chaos (hundreds of distinct values) makes labels useless for structure.
- Populate the labels in your feed. Set the values in your feed layer, rules like "margin > 50% → margin-high" or "first seen < 30 days ago → new" should be computed automatically, not maintained by hand in a spreadsheet.
- Subdivide campaigns on the labels. In Google Ads, split product groups (Standard Shopping) or listing groups (PMax) by custom label, and set bids or targets per subdivision, e.g. tROAS 550% for margin-high, 300% for margin-low.
- Keep labels fresh and audit quarterly. Lifecycle and seasonality labels change over time; stale labels silently corrupt your structure. Automate the refresh in the feed and check quarterly that each label still means what your campaigns assume.
Frequently asked questions
Does Google use custom label content for targeting?
No. The values are opaque to Google's systems, "margin-high" targets nothing by itself. Labels only do something when your campaign structure subdivides on them.
Can I change label meanings later?
You can, but every campaign subdivision built on the old meaning breaks silently, products flow into "Everything else" and inherit whatever bid lives there. Treat a label redefinition as a campaign restructure, because it is one.
What happens to products whose label is empty?
They fall into the "Everything else" bucket of any subdivision on that label. Always check what bid or target that bucket carries, it's where unlabelled products quietly spend.