Before anyone sees your Shopping ad, the feed has already decided everything: which products enter the auction, with what price, image and availability. This guide brings together what you need to know about the product feed: what it is, where it works, how to manage it in Merchant Center, and how (and why) to split the catalogue into groups instead of advertising everything at once.
Definition
What a product feed is and where it comes from
The feed is often treated as a technical attachment to a campaign. In practice, it is the most important file in product advertising:
Definition
A product feed is a structured list of a shop’s products (in a file such as XML or CSV, or delivered via API) in which each product is described by a set of attributes: identifier, name, price, availability, image, link and category. Advertising platforms build product ads from the feed, which is why the feed is in practice the first creative of the campaign: it decides which products enter at all and how they are presented.
Where does it come from? Most often it is generated by the shop platform or one of its modules (XML/CSV export), sometimes via API, and in larger shops from a data warehouse. Whatever the source, one rule applies: the feed must tell the truth about the shop. The price and availability in the ad must match the product page, otherwise products will be disapproved.
This is what a single feed record looks like (illustrative example, attribute names according to the Google specification):
One product in the feed · attributes and values
| Attribute | Value | Role |
|---|---|---|
| id | LAMP-8451-MS | the key that links everything |
| title | Loft table lamp, brass, E27 | the text the product is found by |
| price | 62.25 EUR | must match the product page |
| availability | in_stock | controls whether the ad serves |
| image_link | https://…/lampa-8451.jpg | the ad’s visual creative |
| product_type | Lighting > Table lamps | your own hierarchy for splits |
| brand · gtin | Brand A · 5901234123457 | matching to the Google catalogue |
| custom_label_0 | high-margin | your label for segmentation |
The last row is the most interesting: custom labels are the only attributes that describe your strategy rather than the product, and catalogue segmentation is built on them.
Ecosystem
Where the feed works: Merchant Center, Meta and other channels
One catalogue, many workplaces. The same set of products feeds different advertising systems. Each has its own format and its own management interface, but all draw on the same truth about the products:
<item>
<id>LAMP-8451-MS</id>
<price>62.25 EUR</price>
<availability>in_stock</availability>
<custom_label_0>high-margin</custom_label_0>
</item> <!-- …and so on, 4,800 times -->
One file, four destinations
Google Merchant Center is the feed’s command centre in the Google ecosystem: from here products flow into Shopping campaigns, Performance Max and free product listings. This is also where diagnostics live: approved / disapproved statuses and the reasons for disapproval.
The Meta catalogue powers catalogue campaigns on Facebook and Instagram, as well as shops in those apps. It is managed in Commerce Manager, where you define the data source (file, scheduled fetch or API) and product sets.
Other channels work in a similar way: Microsoft has its own equivalent of Merchant Center for Shopping campaigns on Bing, while Pinterest and TikTok have their own catalogues. Good practice: one source of truth for products and format conversions per channel, instead of separately maintained files whose prices drift apart over time.
Strategy
Why not to advertise the whole catalogue at once
The default scenario in most shops looks the same: one Shopping campaign, the whole catalogue attached, a shared budget and one ROAS target for everything. The algorithm gets a contradictory task: a single target has to cover products with 50% and 9% margins, bestsellers and products without a single sale in months.
Here is how it looks on illustrative data from a home furnishings shop (one campaign across the whole catalogue, last 30 days):
One campaign · whole catalogue of 4,800 SKUs · 30 days · spend and revenue according to Google Ads · illustrative data
| Product group | SKU | Share of spend | Share of revenue (Google Ads) | Avg. margin |
|---|---|---|---|---|
| High margin + A turnover | 520 | 18% | 46% | 48% |
| Low-margin bestsellers | 340 | 24% | 27% | 19% |
| Active long tail | 2,610 | 44% | 24% | 33% |
| Long tail with no sales for 90 days | 1,330 | 14% | 3% | – |
The algorithm knows neither margin nor strategy: it optimises a shared target across everything it received in the feed. Until the catalogue is split, this table stays invisible.
The effect of a single shared budget
58% → 27%
More than half of spend (58%) lands in the long tail of the catalogue, which returns 27% of the conversion value reported by Google Ads. At the same time, the group delivering almost half of that value receives less than a fifth of the budget, because nobody separated it out.
The real risk
A campaign on the whole catalogue subsidises the weakest products at the expense of the best. Products with no margin and no turnover compete in the same auctions as the leaders, and the shared ROAS target averages out the result: the campaign “breaks even”, even though half of the budget inside it works below the profitability threshold.
The feed is more than a technical file. It is the first budget decision: it determines which products enter the auction at all, before anyone sets a bid.
Framework
How to split the catalogue: six segmentation axes
A good split comes from data, not from the category tree. Categories describe what a product is, whereas a campaign cares about how a product performs: how much margin it leaves, how fast it turns over, whether it is in stock. Six axes cover almost every case:
| Segmentation axis | Question it answers | Example use in a campaign |
|---|---|---|
| Margin | how much is actually left from a sale | a separate campaign with a higher budget for high margin |
| Turnover | how fast the product sells | bestsellers as the stable core of Performance Max |
| Stock level | whether there is anything to sell | limited delivery at low stock, stop for out-of-stock items |
| Price position | which price tier the product competes in | different messaging and bids for premium products |
| Season and trend | when the product has its moment | seasonal groups switched on and off in one move |
| Life cycle | new arrival, core range or clearance | new arrivals with their own test budget, clearance separately |
In the feed, the split is carried by custom labels (custom_label_0–4): five slots, each holding one value per product, with free-form content. A dictionary agreed in advance works best: one axis per slot, short values, no special characters or spaces:
Example label dictionary · one axis per slot
| Slot | Axis | Example values |
|---|---|---|
| custom_label_0 | margin | high-margin · mid-margin · low-margin |
| custom_label_1 | turnover | turnover-a · turnover-b · turnover-c |
| custom_label_2 | stock level | full-stock · low-stock · last-units |
| custom_label_3 | price position | under-25 · 25-75 · premium |
| custom_label_4 | season or life cycle | new · season-autumn · clearance |
A label is only a carrier: a value makes sense only when a calculated number stands behind it: margin from cost of goods, turnover from sales, stock from the warehouse.
Key point
The minimum sensible start is two axes: margin and turnover. Simply crossing “high margin × high turnover” against “the rest” separates a group that deserves its own budget, and the long tail stops eating into the leaders’ spend.
Methodological note: labels based on margin, turnover and stock are calculated from shop data, so they work for every channel. A label based on ad cost per product is a different story: that granularity exists in the source data only for Google Shopping campaigns; Meta and TikTok report costs at ad level at the lowest, not at product level.
In practice · Google Merchant Center
How to split the feed in Merchant Center
In Merchant Center, splitting the catalogue comes down to one thing: every product must be given label values. There are three ways, from the simplest to the most flexible:
Labels in the primary feed
If the shop platform lets you populate custom_label_0–4, the values travel with the products. This is the simplest route, but every change to the labelling logic requires a change on the shop integration side.
Supplemental feed
A separate file or spreadsheet with two columns: id and label values. Merchant Center attaches it to the primary feed by id, overwriting nothing except the specified attributes. It is the standard way to segment without touching the shop integration.
Feed rules
Rules in Merchant Center can assign a label conditionally, for example “if price is greater than X, set custom_label_3 = premium”. They are good for simple splits based on attributes already in the feed, but they cannot replace labels calculated from sales data.
Fetch schedule
The primary and supplemental feeds should refresh at least once a day, shortly after prices and stock levels are updated in the shop. That way the split in your campaigns always reflects reality.
Diagnostics per group
Once the feed has been processed, check the statuses: how many disapproved products fall into each group. Disapproved bestsellers hurt more than a disapproved long tail, and without a split that difference stays invisible.
Practice · campaigns
How to split product campaigns in Google Ads and Meta
Labels in the feed are only potential. Money starts working differently only when the split is reflected in the campaign structure.
Google Ads and Performance Max: product groups
Open the product split in the campaign
In a Shopping or Performance Max campaign, select listing groups and split the catalogue by custom label, product type or brand.
Exclude what you do not want to pay for
The “everything else” group collects the rest of the catalogue by default. Exclude it deliberately or keep it with a separate, low bid; this is the most frequently skipped step.
Split segments into separate campaigns
Groups with different roles should have separate campaigns: leaders with a higher budget and a realistic ROAS target, the long tail with a test budget. Shared campaign = shared target = averaging.
Match targets to each group’s margin
A group with a 48% margin can tolerate a lower ROAS than a group with a 19% margin. The campaign target should follow from the group’s profitability, not from one number for the whole account.
Revisit the split after every data change
Products move between groups: a bestseller drops into the long tail, a new product becomes a leader. Reviewing labels on a regular schedule keeps the structure alive.
Meta Ads: product sets in the catalogue
Create sets in the catalogue
In Commerce Manager, define product sets using filters on feed fields: availability, price, brand, product type or custom label. A set is the equivalent of a product group in Merchant Center.
Target the campaign at a set, not the catalogue
In a catalogue campaign, choose a specific set as the product source. Using the whole catalogue as the source means the algorithm decides on its own what to promote, including products with no margin.
Build exclusion sets
A separate “unavailable and last items” set is useful as an exclusion in remarketing. Nothing irritates a customer more than an ad for a product that is no longer available.
Separate sets, separate messages
A premium set and a clearance set deserve different creatives and different bids. Splitting the catalogue also means splitting the language you use to speak to the customer.
Key point
The same labels across all channels. If custom_label_0 means “margin” in Merchant Center, the same field should mean “margin” in Meta sets. One label dictionary for the whole ecosystem means fewer mistakes and comparable results between channels.
Automation
Automatic product labelling in DataOrganizer
The hardest part of segmentation is calculating the labels, not clicking through the panels. Margin requires the unit cost per SKU, turnover requires sales history, stock requires warehouse data: three different sources that have to be combined and kept up to date. This is exactly what automated e-commerce analytics does.
DataOrganizer labels products automatically: using the shop’s connected data, it calculates margin, turnover, stock and price position for every SKU, then splits the catalogue into ready-made product groups. Values update with the daily data refresh: the “low-stock” label disappears when a delivery reaches the warehouse, and a bestseller that slows down drops out of the leaders group by itself. The result connects to Merchant Center as a supplemental feed fetched on a schedule, or exports to a file for the Meta catalogue.
Catalogue of 4,800 SKUs split into four groups by margin (from unit cost) and turnover over the last 90 days:
| Group | SKU | Share of revenue | custom_label_0 |
|---|---|---|---|
| High margin + A turnover | 520 | 46% | high-margin-turnover-a |
| Low-margin bestsellers | 340 | 27% | bestseller-low-margin |
| Active long tail | 2,610 | 24% | tail-active |
| Tail with no sales in 90 days | 1,330 | 3% | tail-90-days |
The labels are ready as a supplemental feed: add its URL in Merchant Center on a daily schedule and the values will refresh along with the data. The “high margin + turnover A” group is worth moving into a separate campaign with its own target.
The same groups can be browsed and modified by asking questions, in the app or through DataOrganizer MCP in the chat you use every day:
Where the advantage lies
In how current the label is, not in the label itself. Manually calculated labels start ageing on the day they are uploaded. Labels calculated from connected, daily refreshed data follow the shop: when the margin or stock changes, the group changes, and the campaigns change with it.
FAQ
Frequently asked questions about product feeds
What is the difference between a primary feed and a supplemental feed?
The primary feed is the full list of products with all required attributes; it creates the products in Merchant Center. A supplemental feed does not create products: it adds or overwrites selected attributes, matching the primary feed by id. This makes it possible to add custom labels, for example, without modifying the shop integration that generates the primary feed.
How many custom labels does a Google feed have?
The Merchant Center specification provides five slots: custom_label_0 to custom_label_4, with one value per slot for each product. The values are free text; you decide what they mean. Good practice: one segmentation axis per slot and a fixed vocabulary of values without diacritics or spaces, shared across all advertising channels.
Does splitting the catalogue hurt Performance Max?
A split that is too granular can do harm: every campaign needs enough conversions for the algorithm to learn from. A safe approach is two or three data-driven groups (margin, turnover) and deliberate exclusions rather than a growing number of micro-campaigns. A data-based split on its own usually helps, because the algorithm stops averaging a single target across products with vastly different profitability.
How do you exclude out-of-stock products from ads?
The foundation is a correct availability attribute: a product marked as out_of_stock is not served in Google product ads. In Meta, a product set is restricted with an availability filter. It also pays to act in advance: a label such as low-stock lets you turn down the budget on products that are about to run out, before they disappear from the shop and from the campaigns.
How often should the product feed and labels be updated?
The feed should refresh at least once a day and after every major change in prices and stock levels, and the fetch schedule in Merchant Center is best set for the hours just after the shop data is updated. Update analytical labels (margin, turnover, stock) at the same pace as the data they are calculated from: campaign segmentation should reflect today’s shop, not last week’s.
Cheat sheet for the whole guide
Three rules for working with a product feed
1. The feed is the campaign’s first creative. Before any ad is created, the feed decides which products enter the auction, at what price and with what availability. A single source of truth for products, converted per channel, saves you from all the other problems.
2. Split the catalogue by data, not by category. Margin and turnover are the minimum starting point; custom labels custom_label_0–4 carry the split, and product groups in Google Ads and product sets in the Meta catalogue put it into practice. A campaign covering the entire catalogue averages the target and subsidises the long tail at the expense of the top sellers.
3. A label is only as good as it is up to date. Values calculated from connected data, such as automatic labelling in DataOrganizer, follow the shop and return to Merchant Center as a supplemental feed on a schedule. A manual spreadsheet starts going stale on the day it is uploaded.
DataOrganizer · automatic product labelling
Connect your shop and see how your catalogue splits by margin, turnover and stock, with labels ready for Merchant Center and Meta. Instant demo account; you only pay for connected sources.