Skip to content

Google Shopping

Segmenting Shopping campaigns by margin, not category

Category campaigns hand low-margin and high-margin products the same ROAS target. How to build margin tiers with custom labels and let bidding follow profit.

By CartKernel · Published

Most Shopping accounts are split into campaigns by category because that is how the catalog is organized. Bidding does not care about categories. It cares about what a click is worth, and a click is worth a share of the profit on the sale, not a share of the revenue. When one campaign holds a product that keeps sixty cents of every dollar next to one that keeps twenty, a single target ROAS is wrong for both of them. Segmenting by margin tier moves the profit logic into the campaign structure, where automated bidding can act on it.

The problem with one target across mixed margins

A target ROAS is a statement about margin. Break-even ROAS is revenue divided by contribution, so a product with a 50 percent contribution margin breaks even at a ROAS of 2.0, and a product at 20 percent breaks even at 5.0. Put both in a campaign with a 3.0 target and the bidding system will happily spend to hit 3.0 on each of them. The first product could have carried far more spend and still made money. The second loses money on every conversion the campaign celebrates.

The account reports look fine, because the blended ROAS sits on target. The profit and loss does not. Working through break-even ROAS for a handful of your products, or running them through the break-even ROAS calculator, usually makes the spread visible in ten minutes.

Step one: a per-product margin you would defend

Use landed contribution margin, not list-price gross margin. The number needs to include everything that scales with an order:

  • Cost of goods, including inbound freight and duties.
  • Payment processing fees.
  • Pick, pack and packaging cost.
  • The shipping you subsidize when the order qualifies for free delivery.
  • An allowance for returns where the product category has a known return pattern.

Precision matters less than consistency. You are going to sort products into three or four buckets, so a margin that is right within a few points is enough. Most stores can get there from the cost-per-item field on the platform plus a shipping and fees assumption per price band. Contribution margin is the figure to standardize on, because it is the one that decides whether an ad-driven order made or lost money.

Step two: tiers wide enough to hold conversion data

Three tiers is the usual starting point; four when the catalog is large and the margin spread is wide. Cut the boundaries where your products naturally cluster rather than at round numbers, and check that each tier will collect enough conversions for automated bidding to work with. A tier that produces a few conversions a month is not a tier, it is noise. Merge it into its neighbour.

An illustrative split for a store whose products range from 15 to 70 percent contribution margin:

Tier Contribution margin Break-even ROAS Starting target ROAS
A 55 percent and above about 1.8 2.2
B 40 to 55 percent about 2.2 2.7
C 25 to 40 percent about 3.1 3.8
D below 25 percent 5.0 or higher 6.0 or excluded

The starting targets sit above break-even by the profit you want to keep per order. A store that is deliberately buying new customers who reorder may set the target at break-even for tier A and accept that the first order carries no profit. Whether that is sensible depends on repeat rate, which is a decision for the owner, not the bidding system.

Step three: write the tier into a custom label

Merchant Center gives every product five custom labels, and the tier belongs in one of them. The mechanism matters because the tier will change as costs change:

  1. Build a sheet or a scheduled export with two columns, product ID and margin tier.
  2. Submit it as a supplemental feed keyed on ID, mapping the tier column to custom_label_0.
  3. Refresh it on the same schedule as your cost data, typically monthly.
  4. Give every product a value. Products with no label fall out of every tier campaign and quietly stop advertising. A default value of “new” for products without cost data keeps them visible in a holding campaign.

If a feed app or the platform already manages your feed, the same tier column can flow through it. What you should not do is edit labels by hand in a spreadsheet nobody owns. The custom labels work on our side is mostly this plumbing, and it is what keeps the structure true six months later.

Step four: one campaign per tier, target from the tier

For Standard Shopping, create one campaign per tier and subdivide the product group by custom_label_0 so only that tier’s products are eligible. For Performance Max, budgets and target ROAS live at the campaign level, so separate targets need separate campaigns, each with listing groups filtered to the tier’s label. Asset groups inside one campaign will not give you different targets.

Inside each tier campaign, keep category as the second level of product groups. It costs nothing and gives you reporting by category within the tier, a place to exclude products, and a way to see when a category is dragging a tier’s ROAS.

A worked example, illustrative only

Say two products both sell for 100 dollars. Product A keeps 60 dollars of contribution, product B keeps 20. Under a shared campaign with a 3.0 target, the system is allowed to spend about 33 dollars to sell either one. Product A nets 27 dollars after ads, product B loses 13.

Split them. Product A’s tier runs at a 2.2 target, allowing roughly 45 dollars of spend per sale and still netting 15. Product B’s tier runs at 6.0, allowing about 17 dollars per sale and netting 3. The point is not a forecast of the uplift. It is that spend now follows profit product by product, and the products that can afford to win auctions are the ones bidding to win them.

Where category still earns its place

Category does not disappear from the account. It still drives:

  • Search term review and negative keywords, which are category-shaped.
  • Seasonal budget flags, because a category’s demand window is more useful than a tier’s.
  • Creative and asset groups in Performance Max, where the imagery has to match the product.
  • Reporting to the owner, who thinks in categories.

Category becomes a dimension you report and refine on rather than the axis you bid on.

Price band as a second axis

A tier that spans a 15 dollar accessory and a 400 dollar unit will behave unevenly. Conversion rates and order values differ so much that pacing and reporting get muddy even when the margin percentage is the same. Where the tier has enough data, split it by price band using custom_label_1. Where it does not, leave it, because a thin campaign is worse than a slightly untidy one. See how we approach large-catalog structure for the trade-off in detail.

What to watch after the switch

Expect a learning period after restructuring, and hold changes for a couple of weeks unless something is clearly broken. Then watch:

  • Spend share by tier. Spend should migrate toward tiers A and B. If tier D still takes most of the budget, its target is too low or its products are the only ones with demand.
  • ROAS against target by tier, not blended. Blended ROAS will look worse if tier A grows, and that is the correct outcome.
  • Profit on ad spend per tier, which is the number the whole exercise was for.
  • Product counts per campaign in Google Ads against the tier counts in the feed, so a broken label refresh shows up as a count drop rather than a month of silent decline.
  • Impression share in tier A. If it is low, that is where a budget increase pays.

Mistakes that undo the structure

  • Tiering on list-price gross margin and forgetting the free-shipping subsidy, which pushes low-price products into a higher tier than they deserve.
  • Re-tiering weekly. Costs do not move that fast and every move resets learning.
  • Building six tiers on a catalog that supports three.
  • Leaving target ROAS bidding targets untouched after a cost change. The refresh job should prompt a target review.
  • Treating the Performance Max campaign per tier as set and forget. The search term and listing group reports still need reading.

If your account is currently split by category, the fastest test is to build tier A only, move its products out of the existing campaigns, and give it its own target. One tier is enough to see whether the highest-margin products were being held back.


Sources

Find the leak.

A free Growth Analysis ranks what your store should fix first, by revenue at stake.