Custom labels for Shopping campaigns: a segmentation scheme that scales
June 21, 2026
How to use custom_label_0 through custom_label_4 for margin, season, and velocity bidding without turning your feed into a mess of one-off flags.
Custom labels are the one part of the feed that carries nothing to the shopper and everything to you. custom_label_0 through custom_label_4 are five free-text slots Google never shows to a buyer and never uses to match your product. They exist purely so you can subdivide your catalog inside Shopping campaigns and bid on the slices that matter. Used well, they are the difference between bidding on your whole catalog as one blob and bidding on your bestsellers, your high-margin lines, and your clearance separately. Used carelessly, they become five columns of inconsistent junk nobody trusts.
What they are, precisely
You get exactly five labels, numbered 0 to 4. Each holds free text, one value per product. They are invisible to shoppers and have no effect on whether or where a product shows; their only consumer is the campaign structure you build in Google Ads, where you can subdivide product groups by a custom label and set bids, budgets, or whole campaigns against each value. That is the entire feature. The discipline is all in how you decide what goes in the five slots.
The mistake: labels as ad-hoc flags
The failure mode is treating the five labels as scratch space. Someone needs a “summer” tag, so it goes in custom_label_0. Next month someone needs a margin flag and puts it in custom_label_0 too, on a different set of products. Now label 0 means two things depending on the row, the values are a mix of summer, high-margin, and true, and no one can build a reliable product group on it. Five slots is a hard limit, so squandering them on one-offs is expensive.
The scheme: one dimension per slot, forever
The scheme that scales is boring on purpose: assign each label a single, fixed dimension and never repurpose it. A setup that covers most stores:
- custom_label_0 — margin tier. Values like
high,medium,low. Bid harder where the product actually makes money. - custom_label_1 — velocity.
bestseller,steady,slow, derived from recent sales. Your bestsellers deserve their own bids and budget protection. - custom_label_2 — season.
spring,summer,fall,winter,year-round. Push seasonal ranges up in their window and pull back out of it. - custom_label_3 — price band.
under-25,25-75,75-plus. Price bands often want different bidding because they convert differently. - custom_label_4 — clearance flag.
clearanceor empty. A simple switch to bid aggressively on stock you want gone.
The specific dimensions matter less than the rule: each slot means one thing, always, and its values are a small, closed set. When label 0 is always margin tier and always one of three values, you can build a product group on it with confidence a year from now.
Keep the values low-cardinality
Resist the urge to be precise. A margin label with the exact percentage in it (37.2) is useless for grouping because every value is unique. Buckets are the point: high, medium, low. You bid on buckets, not on continuous numbers, so compute the bucket in the feed and store the bucket. Three to five values per label is the sweet spot; twenty is a sign you are encoding the raw data instead of the decision.
Compute them, do not hand-type them
The reason ad-hoc labels rot is that they are maintained by hand. The fix is to derive every label from data at export time. Margin tier comes from cost and price. Velocity comes from a rolling sales window. Season comes from a product attribute or collection. Clearance comes from an inventory or tag rule. When the labels are computed, they stay correct as the underlying data moves, a product that stops selling drifts from bestseller to slow on its own, and your bids follow reality instead of a stale spreadsheet.
The payoff in the campaign
Once the five labels are consistent and computed, the Google Ads side gets simple. You subdivide a product group by custom_label_0 and instantly separate high-margin from low-margin bidding. You isolate bestseller velocity into its own campaign with its own budget so a spike does not starve everything else. You dial seasonal ranges up and down on schedule. None of that is possible if the labels are inconsistent, and all of it is easy if they are disciplined. The labels are cheap; the discipline is the product.
The plug
SnowPipe computes custom labels from your data on every export, margin tier from cost and price, velocity from a rolling sales window, season and clearance from your own rules, so all five slots stay consistent and current instead of drifting. It is at pipe.snowforge.dev, with a free tier.