Custom labels (custom_label_0–custom_label_4) are five optional feed attributes that let catalog operators tag products with values of their own choosing. They are invisible to shoppers, have no effect on product approval, and do not interact with required attributes like title or gtin. Their sole purpose is to create segments you can act on in Google Ads campaigns.
This article focuses on one narrow question that often causes messy catalogs: how should you decide what data to encode in each label, and what constraints apply to the values themselves? The campaign-strategy side—how to bid on those segments—is a separate topic covered in the Custom Label Strategy for Google Shopping ROAS article.
The Five Slots: What Google Defines and What You Control
Google reserves exactly five attributes: custom_label_0, custom_label_1, custom_label_2, custom_label_3, and custom_label_4. Each is a distinct, independent field—values in one slot do not affect another, and the numbering implies no hierarchy or priority. You can populate any subset; all five are optional.
Because the search context for this article confirms the attributes but the full constraints page (https://support.google.com/merchants/answer/6324473) is not in the supplied approved sources, the value rules below come from what Google's documentation explicitly states or clearly implies across the approved sources.
What is established from Google's product data specification is that attribute values must be submitted in a supported format and, where a specific language is required, that language is English. For example, Google documentation states that for Boolean attributes, "the value must be submitted in English"—a reminder that language constraints are attribute-specific and explicit, not assumed globally.
For custom labels, you supply free-text string values. Keep each value short and consistent across your catalog. Using long, sentence-style strings like "products we want to promote in Q4 because margin is high" creates segments that are hard to filter in Google Ads. Concise, enumerable values work better: high-margin, Q4, clearance.
Value Constraints and Conflicts with Other Attributes
Custom labels do not override, replace, or conflict with standard required attributes. They live alongside title, price, condition, gtin, and every other attribute in your feed row. A value you place in custom_label_0 has zero influence on how Google reads condition or identifier_exists.
However, conflicts can appear at the catalog-management level when you use a label to store data that already has a dedicated attribute:
- Condition — If you put
"new"or"refurbished"incustom_label_1to segment by condition, that value does nothing to substitute for the requiredcondition [condition]attribute. You must still supplyconditionseparately. Duplicating the data in a label is harmless but adds maintenance overhead. - Identifiers — Custom labels are never a substitute for
gtin,mpn, orbrand. For custom goods that genuinely lack a GTIN, the correct approach is theidentifier_existsattribute, not a custom label. Google documentation describesidentifier_existsas the attribute "to indicate that unique product identifiers (UPIs) aren't available for your product," covering products like "custom goods or one-of-a-kind products, like custom T-shirts, art, or handmade goods." - Title content — Do not mirror keyword-stuffed title fragments inside custom labels. Google documentation requires that titles "use professional and grammatically correct language" and prohibits "gimmicky ways of drawing attention." Copying poorly formed title text into a label does not sanitize it; it just moves the noise to a different field.
Slot Assignment: Pick One Dimension per Slot
Assign each slot to a single business dimension and keep that assignment stable over time. If you change what custom_label_2 means mid-season, historical campaign data tied to that label becomes misaligned. Common dimensions include:
| Slot | Dimension example | Example values |
|---|---|---|
| custom_label_0 | Margin tier | low, mid, high |
| custom_label_1 | Seasonality | evergreen, Q4, summer |
| custom_label_2 | Inventory status | in-stock, low-stock |
| custom_label_3 | Sale status | on-sale, full-price |
| custom_label_4 | Product line | basics, premium |
This is illustrative. Choose dimensions that reflect your actual business logic, not this table.
Hypothetical Example: A Clothing Catalog with Custom and Standard Products
The following is a hypothetical example to illustrate correct attribute separation. It does not represent a real merchant result.
Imagine a catalog operator running a clothing store that sells both branded, GTIN-assigned items and custom-made dresses. Here is how two representative products might be structured:
Product A — Branded T-shirt with GTIN
title: Organic Cotton Men's T-Shirt - Blue - M
condition: new
gtin: 01234567890128
brand: ExampleBrand
identifier_exists: (omit or leave as default)
custom_label_0: high
custom_label_1: evergreen
custom_label_2: in-stock
custom_label_3: full-price
custom_label_4: basics
Product B — Custom-made dress without identifiers
title: Customized Black Dress - Size M
condition: new
gtin: (leave blank)
mpn: (leave blank)
identifier_exists: no
custom_label_0: mid
custom_label_1: Q4
custom_label_2: in-stock
custom_label_3: on-sale
custom_label_4: premium
For Product B, identifier_exists: no tells Google there is no manufacturer-assigned identifier—this is required for custom goods. The custom labels are completely separate from that declaration and carry only the operator's campaign segmentation data. Notice that custom_label_4 says premium, not no-gtin or custom-made; the label describes a bidding dimension, while the identifier_exists attribute handles the identifier question.
For titles, Google documentation requires that you "distinguish between variants" by adding "the distinguishing details of each variant to the title"—for example, size and color. Those variant details belong in title (and in dedicated attributes like size and color), not in custom labels.
Maintaining Labels Across a Live Catalog
Custom label values are strings, so catalog tooling like Magicfeedpro can apply them via supplemental feeds or feed rules rather than requiring a rebuild of the primary feed. This matters for large catalogs where labels need to change frequently—for example, rotating on-sale in and out of custom_label_3 based on your promotion calendar.
A few practical rules to keep labels clean:
- Enumerate allowed values per slot. Decide in advance that
custom_label_0will only ever holdlow,mid, orhigh. Free-form entry leads to values like"High Margin","high margin","HM", and"high"coexisting in the same slot, which fragments your Google Ads segments. - Do not encode data that expires without a plan to update it. If
custom_label_1carriesQ4and you do not clear it in January, every affected product carries a stale label for eleven months. - Do not use custom labels to work around disapprovals. A product disapproved because
conditionis missing will not be reinstated by adding a custom label with a condition value. Labels have no status effect in Merchant Center. - Keep values in the language your feed uses for other string attributes. While no source in this run specifies a language requirement unique to custom labels, maintaining consistency across your feed reduces the risk of unexpected parsing behavior.
Custom labels are a catalog segmentation tool. They work cleanly when each slot maps to exactly one business dimension, values are short and controlled, and the labels never substitute for a required standard attribute.
Related articles

description Attribute Rules for Google Shopping Feeds
Length limits, formatting restrictions and prohibited content rules for the description attribute in a Google Shopping feed.

Variant Landing Page URLs in a Shopping Feed: link Rules
Learn how to set the link attribute for each variant item in a Google Shopping feed to meet Merchant Center requirements.

item_group_id for Variants: Requirements, Value Rules, and Feed Impact
When item_group_id is required for color and size variants, what value rules apply, and what happens when it is missing or mismatched.

