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" in custom_label_1 to segment by condition, that value does nothing to substitute for the required condition [condition] attribute. You must still supply condition separately. Duplicating the data in a label is harmless but adds maintenance overhead.
  • Identifiers — Custom labels are never a substitute for gtin, mpn, or brand. For custom goods that genuinely lack a GTIN, the correct approach is the identifier_exists attribute, not a custom label. Google documentation describes identifier_exists as 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:

SlotDimension exampleExample values
custom_label_0Margin tierlow, mid, high
custom_label_1Seasonalityevergreen, Q4, summer
custom_label_2Inventory statusin-stock, low-stock
custom_label_3Sale statuson-sale, full-price
custom_label_4Product linebasics, 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:

  1. Enumerate allowed values per slot. Decide in advance that custom_label_0 will only ever hold low, mid, or high. 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.
  2. Do not encode data that expires without a plan to update it. If custom_label_1 carries Q4 and you do not clear it in January, every affected product carries a stale label for eleven months.
  3. Do not use custom labels to work around disapprovals. A product disapproved because condition is missing will not be reinstated by adding a custom label with a condition value. Labels have no status effect in Merchant Center.
  4. 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.


MagicFeedPro Team

Feed Optimization Practitioners

We're a team of e-commerce and paid-search practitioners who have spent the last decade running Google Shopping campaigns at scale. We write about what actually moves the needle on product feed quality, CTR, and conversion.

Related articles