Custom labels and internal_label: segmenting one catalog across ad channels

Design stable product labels for Google, Meta and Microsoft without forcing one platform's field semantics onto every channel.

The short version

Use one source taxonomy, but map it differently for each ad platform. Google and Microsoft give you five custom-label slots; Meta's internal_label is the better field for frequently changing product-set membership because edits do not trigger policy re-review.

Assign each scarce slot to one stable business dimension, document every allowed value, and verify the exported labels before campaigns depend on them.

Start with the decision the label must support

A label is useful only when it changes a campaign, bid, product set or report. Define that decision first.

Good dimensions include:

  • margin band;
  • price band;
  • bestseller tier;
  • seasonality;
  • stock pressure;
  • promotion eligibility;
  • experiment arm.

Avoid labels that merely restate fields the platform already understands, such as brand or product type, unless your campaign tooling specifically needs the duplicate. Do not mix two dimensions into one value such as high-margin-winter-clearance; it becomes impossible to change one dimension without rewriting the others.

Reserve the five Google and Microsoft slots

Google Merchant Center exposes custom_label_0 through custom_label_4. Microsoft Merchant Center exposes the equivalent customLabel0 through customLabel4. Each value can be up to 100 characters.

Treat the slots as a shared contract, for example:

Slot Dimension Example values
0 Margin band margin_high, margin_mid, margin_low
1 Price band price_under_50, price_50_150, price_over_150
2 Seasonality evergreen, summer, holiday
3 Stock pressure stock_healthy, stock_low, overstock
4 Experiment arm control, test_a, test_b

Keep the meaning of each slot stable. Changing custom_label_0 from margin band to seasonality may silently move products between campaign filters and break historical reporting.

Google also limits each label slot to 1,000 unique values account-wide. Controlled vocabularies protect that limit and make filters predictable.

Use Meta internal_label for product-set membership

Meta supports custom_label_0 through custom_label_4, but its current catalog guidance recommends internal_label for product-set filtering. Each product can carry up to 5,000 internal labels, each up to 110 characters, and Meta stores them in lowercase.

The operational advantage is important: changing internal_label does not trigger policy re-review. Use it for membership that changes often, such as:

  • campaign_back_to_school;
  • promo_week_34;
  • audience_new_customer;
  • clearance_august;
  • region_nordics.

Meta's five custom-label fields remain available and can still carry stable creative or reporting text. Do not force a rapidly rotating product-set scheme into those five slots just to match Google.

Map one source taxonomy into channel-specific outputs

Keep labels in your product-data source or transformation layer, not as manual edits inside each ad platform.

A practical model separates stable attributes from temporary memberships:

margin_band: high
price_band: 50_150
seasonality: evergreen
stock_pressure: healthy
experiment_arm: control
memberships: [campaign_back_to_school, region_nordics]

Export that model as:

  • Google: stable dimensions into custom_label_0custom_label_4;
  • Microsoft: the same stable dimensions into customLabel0customLabel4;
  • Meta: stable dimensions into custom labels only when useful, and rotating memberships into internal_label.

This keeps the business meaning consistent without pretending that the destination fields have identical semantics.

Do not confuse item labels with feed labels

Custom labels and internal labels belong to individual products. Google's feed_label and Microsoft's feedLabel group a feed or catalog for campaign targeting; they do not segment individual items.

Use a feed-level label for market or catalog scope. Use an item-level label for product membership inside that scope. Mixing the two creates campaigns that look correctly filtered but include the wrong products.

Put governance around the taxonomy

Maintain a small label dictionary beside the feed pipeline. For every dimension, record:

  1. destination field;
  2. allowed values;
  3. calculation rule;
  4. data owner;
  5. refresh frequency;
  6. campaigns and reports that consume it.

Version changes to slot meaning. If a calculation changes, add the effective date to reporting notes so a label-driven performance shift is not mistaken for a market change.

For temporary labels, set an expiry rule. A promotion label with no owner or end date becomes permanent catalog debris.

Verify before campaigns depend on it

Test a representative export before enabling filters or bids:

  1. Check that every value uses the documented vocabulary.
  2. Count unique values per Google label slot.
  3. Confirm Meta internal labels arrive lowercase and within the length limit.
  4. Compare the same products across source data, exported files and platform diagnostics.
  5. Build a temporary product group or product set and inspect the included SKUs.
  6. Test missing and stale source values; define whether they should produce no label or an explicit fallback.
  7. Save the extract and membership count as the deployment baseline.

Run the free product feed scanner before upload to catch field and formatting problems. Then verify membership inside each destination platform; a valid file does not prove that the intended products landed in the intended segment.

Sources