Examples

Custom label examples for Google Shopping

Custom labels are five free-text columns, custom_label_0 to custom_label_4, that you fill in the feed so Shopping and Performance Max campaigns can split, bid and report on things Google does not know about your products: margin, season, bestseller status, stock depth. Here are seven custom label examples from different stores, a label plan that fits the five slots, and the rule that computes each value from catalog data.

We connect your store, build the feed and keep it in sync. Updated 2026-10-27.

At a glance

  • Five attributes, custom_label_0 to custom_label_4, one value per product each, 1 to 100 characters, not case sensitive.
  • Google allows up to 1,000 unique values per label across the account; values over that limit are ignored for bidding and reporting, so use bands, not raw numbers.
  • Labels work in Performance Max, Shopping and Demand Gen campaigns. Display dynamic remarketing uses ads_labels and ads_grouping instead.
  • A custom label is not a feed label: feed labels tag a whole data source (often a country), custom labels tag individual products.

A custom label plan that fits five slots

Decide what each slot means before you fill any of them, and keep one kind of value per slot. Google's own examples use exactly this: one label for season, one for selling rate, one for price range, one for margin. Mixing season and margin values in the same slot makes campaign subdivision impossible.

SlotMeaningValuesUsed for
custom_label_0Margin bandhigh_margin, mid_margin, low_marginSeparate return targets
custom_label_1Price bandunder_100, 100_499, 500_plusBudget split by ticket size
custom_label_2Season or newnesssummer, winter, all_season, new_arrivalSeasonal pushes
custom_label_3Selling ratebestseller, otherProtect hero products
custom_label_4Stock depthlow_stock, healthy_stockLower bids on last units

Seasonal custom label examples for a product feed

Seasonal labels are the most common and the most often stale. A label that still says summer in November keeps the wrong products in the boosted campaign. Three ways to keep it current: compute it from a tag or category the merchandiser already maintains, drive it from a Google Sheet list the team edits at each season change, or match a publish date so the label expires on its own when the months in the rule move on.

Keep the value set small and fixed (summer, winter, all_season, black_friday) and change which products carry it, not the names. Campaign product groups are built on the values, so renaming a value empties the group until you rebuild it.

Custom labels versus feed labels

The names are close and they do different jobs. A feed label is set on a whole product data source in Merchant Center, up to 20 characters of A-Z, digits, hyphens and underscores, and a campaign selects one feed label to choose which data sources it advertises. It usually stands for a country or a language. A custom label is a column in the feed with a value per product, used to subdivide product groups inside a campaign.

When we register a Textfinity feed in Merchant Center with you, the feed label is set on that data source, usually the feed's country; custom labels are columns we map like any other.

Examples

Worked examples, by situation

Each example is a different store and a different reason to split products. The snippet is the rule we set up in Textfinity to write the label.

Fashion · CSV feed · cost in a merged sheet

Margin band

Before

price: 59.00
cost: 21.00

After

custom_label_0: high_margin

Advanced transform on custom_label_0

if [cost] is empty then "margin_unknown"
else if calc{([price] - [cost]) / [price]} > 0.5
then "high_margin"
else if calc{([price] - [cost]) / [price]} > 0.25
then "mid_margin"
else "low_margin"

How we set it up

Cost rarely sits in the store export, so we join it from a Google Sheet as a merged source keyed on SKU and map custom_label_0 with the advanced expression above. Every product needs a row in the cost sheet: an advanced rule that names a merged column fails for products with no match, even inside is empty. The empty check covers rows with a blank cost.

Electronics · 3,000 SKUs · wide price range

Price band

Before

price: 649.00

After

custom_label_1: 500_plus

Advanced transform on custom_label_1

if [price] is empty then "no_price"
else if calc{[price]} >= 500 then "500_plus"
else if calc{[price]} >= 100 then "100_499"
else "under_100"

How we set it up

We map custom_label_1 with the advanced expression above. Google's own example uses price ranges for a custom label; three or four bands are enough to set different targets for cheap accessories and expensive devices.

Outdoor apparel · CSV export with Tags column · seasonal

Season from product tags

Before

Tags: waterproof, summer-2026, hiking

After

custom_label_2: summer

How we set it up

We map custom_label_2 as the static value "summer" under the condition Tags includes "summer"; else-if Tags includes "winter", "winter"; else "all_season". A native Shopify connection imports no tags, so Shopify stores use the product type or a metafield instead.

Furniture · 600 SKUs · bestseller list kept by the buyer

Bestsellers from a Google Sheet

Before

id: TB-OSLO-180 (listed in the bestseller sheet)

After

custom_label_3: bestseller

How we set it up

We map custom_label_3 as the static value "bestseller" under the condition id is in google sheet list (column A of the sheet's first tab), else add static value "other". The buyer edits the sheet; the feed picks it up on the next rebuild.

Beauty · Shopify · 1,000 SKUs · stock-sensitive

Stock depth

Before

variant_inventoryQuantity: 3

After

custom_label_4: low_stock

Advanced transform on custom_label_4

if [variant_inventoryQuantity] is empty
then "no_stock_data"
else if calc{[variant_inventoryQuantity]} < 5
then "low_stock"
else "healthy_stock"

How we set it up

We map custom_label_4 with the advanced expression above. Lower bids on low_stock so ad spend does not sell the last units at full click cost. On Shopify the DSL reads underscore names such as variant_inventoryQuantity.

Footwear · CSV export · new arrivals

New-in label from the publish date

Before

published: 2026-10-03T09:12:00

After

custom_label_2: new_arrival

How we set it up

We map custom_label_2 as the static value "new_arrival" under the condition published matches regexp 2026-(09|10) (mapping regex is anchored at the start of the value), else rename from the season column. Update the months when the season turns.

Multi-brand retailer · Shopify · 5,000 SKUs

Brand tier

Before

product_vendor: Sonora

After

custom_label_0: premium_brand

How we set it up

We map custom_label_0 as the static value "premium_brand" under the condition vendor is in google sheet list (premium brands in column A of the sheet's first tab), else add static value "core_brand". Keeps the label at two values instead of one per brand.

Copy this plan

Plan: custom labels live by the end of the day

The labels are feed work; the bidding is campaign work in Google Ads.

  1. 01

    Write the label plan

    Assign one meaning per slot with a closed list of values, as in the table above. Agree it with whoever runs the campaigns.

  2. 02

    Bring in the data the store lacks

    Cost, bestseller lists and premium brand lists usually live in a spreadsheet. Join them as a merged source keyed on SKU.

    What we set up: We join your Google Sheet to the store data as a merged source keyed on SKU.
  3. 03

    Map each custom label

    Use advanced for calculated bands and conditional static values for list-based labels.

    What we set up: We map custom_label_0 to custom_label_4 in your Google Shopping feed, one rule per slot.
  4. 04

    Check the values

    Open a few products in the product explorer and confirm each gets the expected label, including products with empty cost or stock.

    What we set up: We check the mapped labels of sample products in the product explorer before the feed goes live.
  5. 05

    Build product groups in Google Ads

    After Merchant Center fetches the feed, subdivide Shopping product groups or Performance Max listing groups by custom label. This step happens in Google Ads.

Customization tips

Make it yours

Bands, not numbers

A label holding the exact margin percentage burns through the 1,000-value limit and gives you nothing to bid on. Three to five bands per label is the working range.

Always have an else

Products that match no condition should still get a value (other, all_season, margin_unknown). An empty label drops the product into the catch-all group without telling you why.

Lists in sheets, logic in the feed

A merchandiser can maintain a bestseller sheet without touching the feed; the rule that reads it stays the same. The trade-off is one more source that can go stale if nobody owns it.

FAQ

Questions about custom labels google shopping examples

What are custom labels in Google Shopping?

Five optional feed attributes, custom_label_0 to custom_label_4, that hold your own values per product. Shopping, Performance Max and Demand Gen campaigns use them to group products for bidding and reporting.

What are good examples of custom labels?

Margin band, price band, season, bestseller status, stock depth, new arrival and brand tier. Google's help page uses season, selling rate, price range and margin as its own examples.

How many values can a custom label have?

Up to 1,000 unique values per custom label attribute across the Merchant Center account, 5,000 in total. Values submitted after the limit are ignored for bidding and reporting.

Can I create custom labels without editing my store?

Yes. Feed tools and Merchant Center attribute rules can compute labels from existing fields. In Textfinity we map the custom_label columns for you with conditions or advanced expressions and join extra data from a Google Sheet.

Set up for you

Have us fill all five custom labels from your catalog and a spreadsheet.

Send us your store URL and the cost or bestseller sheet. We map margin, price, season and stock labels in your Google Shopping feed in Textfinity, and the labels update on every rebuild.

Get your custom labels set upOr email support@textfinity.io

Tell us your store and channels. We reply within 24 hours.