Restructuring Google Shopping Feeds to Bid Strictly on Gross Margin

Google Shopping campaigns often report record revenue and strong return on ad spend (ROAS), yet many ecommerce companies see profit shrinking because automated bidding optimizes for revenue, not margin. Without product cost data, Google’s algorithms naturally scale the products that generate the easiest conversions, even when those products contribute very little profit. 

By integrating cost of goods sold (COGS) into Merchant Center feeds, labeling products by margin tier, and structuring campaigns around those tiers, advertisers can redirect budget toward the inventory that actually drives contribution margin.

The Core Challenge: Record Revenue, Shrinking Net Profit

Many Google Shopping programs generate strong revenue while quietly eroding profit because automated bidding optimizes for conversion value rather than product margin. When product cost data is absent from Merchant Center feeds, Google’s algorithms naturally scale the products that convert most easily, even if those products contribute very little profit to the business.

On paper, most Google Shopping accounts look like they are crushing it. Revenue is climbing, conversion volume is increasing, and ROAS dashboards look strong. Marketing teams report record quarters, and paid search programs are often celebrated internally as reliable revenue engines.

But when finance reviews the same period, a different story often emerges: net profit is shrinking.

The disconnect stems from how different teams evaluate performance. Marketing reports revenue, conversions, and ROAS, while finance evaluates contribution margin (the profit remaining after product cost, shipping, and operational expenses).

When those costs are included, profitability can vary dramatically across products in the catalog.

The result is a familiar tension inside many ecommerce organizations:

  • Marketing reports record revenue.
  • Finance reports declining profitability.

Most Shopping campaigns rely on automated bidding strategies such as Target ROAS (tROAS) or Maximize Conversion Value, which optimize toward conversion value (revenue) rather than profit.

As a result, the algorithm naturally prioritizes products that generate the cheapest and most predictable conversions, even if those products carry very low margins.

Let’s look at the math in a typical auction:

ProductPriceCostProfit per Sale
Premium Jacket$180$70$110
Running Shoes$120$65$55
Basic T-Shirt$25$22$3

Now imagine a Google Shopping campaign with a $50,000 monthly budget.

Because the T-shirt generates cheaper clicks and higher conversion volume, automated bidding gradually allocates more budget toward that SKU.

The resulting performance might look like this:

ProductOrdersRevenueProfit Contribution
Jacket300$54,000$33,000
Shoes500$60,000$27,500
T-Shirt4,000$100,000$12,000

From a marketing perspective, the campaign appears outstanding:

  • $214,000 in revenue
  • strong ROAS
  • large conversion volume

But the financial picture tells a different story. Despite generating nearly half the revenue, the T-shirt contributes the smallest share of total profit.

The reason is structural. Merchant Center feeds typically include product data such as price, title, brand, and availability, but they rarely include COGS or margin data.

Because Google Ads sees price but not cost, the system cannot distinguish between a $100 sale that generates $60 in profit and one that generates $10. It simply scales the products that convert most efficiently.

The Strategic Shift: Rebuilding Shopping Feeds Around Profitability

Closing the revenue–profit gap in Google Shopping requires restructuring the product feed so profitability becomes part of the campaign architecture. By integrating COGS into Merchant Center, labeling products by margin tiers, and separating campaigns by those tiers, advertisers can ensure automated bidding scales the inventory that generates the strongest contribution margin rather than simply the cheapest conversions.

Correcting the revenue-versus-profit gap requires a structural change in how Shopping campaigns are built. Instead of treating the product catalog as a uniform pool of inventory, advertisers must restructure their Merchant Center feeds so profitability becomes part of the campaign architecture.

Here is how you restructure your campaigns to bid on profit:

  1. Integrate COGS data into the product feed so product-level margins can be calculated.
  2. Segment inventory into margin-based tiers using custom labels inside the feed.
  3. Structure campaigns around those tiers so automated bidding cannot shift spend toward low-margin inventory.

Pillar 1: Integrating COGS Data into Merchant Center Feeds

Margin-based bidding begins with making product cost visible inside the Shopping feed. By integrating COGS into Merchant Center, typically through supplemental feed, advertisers can calculate product-level margin and introduce profitability data that the advertising system can use for segmentation and bidding control.

The first requirement for margin-based bidding is visibility into product cost. Google Shopping campaigns already know a product’s price, but they typically do not know what it costs the business to sell it. 

COGS, often stored in Enterprise Resource Planning (ERP) systems, inventory platforms, or ecommerce databases, rarely flows into the Merchant Center product feed by default. As a result, the advertising system sees revenue but not profitability.

Once cost data is available inside the feed, margin can be calculated during feed processing:

Sale Price

– Cost of Goods Sold

– Estimated fulfillment costs (optional)

This calculation produces two key metrics: gross profit per unit and gross margin percentage, which reveal which SKUs meaningfully contribute to profitability versus those primarily driving volume or customer acquisition.

To use margin in advertising decisions, that cost data must be integrated into the Shopping feed. Most organizations accomplish this by uploading supplemental feeds inside the Merchant Center.

Supplemental Feeds

A supplemental feed acts like a second spreadsheet that attaches additional attributes to products already present in the primary feed. Instead of rebuilding the entire catalog, the file only contains the data you want to add, typically COGS values by SKU.

You create a supplemental feed in:

Merchant Center

→ Products

→ Data Sources

→ Add Supplemental Feed

The file usually contains just two columns:

idcogs
SKU_100142
SKU_100218
SKU_100373

The ID must match the product ID in the primary feed exactly, which allows Merchant Center to merge the datasets during feed processing.

This is where many setups break. Ecommerce platforms often send slightly modified IDs to Merchant Center (for example, US_EN_1234), while cost data from finance systems usually uses simpler SKUs (like 1234).

If those don’t match exactly, Merchant Center can’t connect the two. When that happens, the cost data simply doesn’t attach to the product.

The tricky part is that this usually doesn’t trigger a major error. The feed still processes, but some products are missing cost data, which means your margin calculations and segmentation won’t work as expected.

Once uploaded, the supplemental feed attaches a cost value to each product alongside existing attributes such as price and title.

However, Merchant Center does not provide a native field for product cost. To store and reference this data during feed processing, advertisers typically map the COGS value into a custom attribute using Attribute Rules.

You configure this here:

Merchant Center 

→ Data Sources 

→ Select Product Source 

→ Attribute Rules 

→ Add Attribute Rule

The rule pulls the cogs value from the supplemental feed and stores it in a custom attribute. This creates a stable field that can be referenced during feed processing, allowing advertisers to calculate product-level margin and evaluate the profitability of each SKU.

Larger organizations sometimes perform these transformations using dedicated feed management platforms or internal API pipelines, but the underlying concept remains the same: cost data must be attached to each SKU so margin can be calculated within the feed.

At this point, the product feed contains the financial inputs needed to evaluate inventory performance.

Pillar 2: Engineering Margin-Tiered Custom Labels

Margin data alone cannot influence bidding until it is translated into product segments that campaigns can control. By assigning margin tiers to Merchant Center custom labels, advertisers convert profitability into structured inventory groups that Google Ads campaigns can filter, bid on, and scale independently.

After completing Pillar 1, every product in the feed now contains the inputs needed to calculate profitability. Each SKU includes both price and cost, which means margin can be calculated across the entire catalog.

However, Google Ads cannot optimize directly against a value like margin. Instead, that financial signal must be translated into product labels that campaigns can filter and bid against.

This is where Merchant Center custom labels come in.

Custom labels allow advertisers to tag products with internal classifications that are invisible to shoppers but extremely useful for campaign segmentation and bidding control. Google provides five optional custom label attributes:

  • custom_label_0
  • custom_label_1
  • custom_label_2
  • custom_label_3
  • custom_label_4

Most margin-based Shopping implementations dedicate one of these fields to profitability segmentation.

Defining Margin Tiers

Once margin has been calculated in the feed, advertisers define a set of profitability bands that represent different contribution levels.

A typical segmentation model might look like this:

Margin TierLabel Value
High MarginMargin_40_plus
Strong MarginMargin_25_40
Moderate MarginMargin_15_25
Low MarginMargin_0_15
Loss LeaderMargin_negative

Each product receives one of these values in the custom label field.

For example: custom_label_0 = Margin_25_40

These labels now act as profitability tags attached to every SKU in the feed.

Assigning Margin Labels with Feed Rules

Advertisers do not manually tag products one by one. Instead, they create attribute rules that assign the correct label based on margin thresholds.

In Merchant Center, these rules are typically configured here: Merchant Center → Data Sources → Select Product Source → Attribute Rules → custom_label_0

Inside the rule builder, you define the conditions that determine which label each product receives.

For example:

If Margin > 40% → custom_label_0 = Margin_40_plus

If Margin 25–40% → custom_label_0 = Margin_25_40

If Margin 15–25% → custom_label_0 = Margin_15_25

If Margin < 15% → custom_label_0 = Margin_0_15

Once this rule is configured, Merchant Center applies it during feed processing and assigns the appropriate label to every product.

In some organizations, margin tiers are assigned outside of the Merchant Center. Feed management platforms or internal API pipelines may calculate margin and apply the appropriate custom_label values before the feed is sent to Google.

In these setups, Merchant Center simply receives a product feed where the labels are already populated and passes those values through to Google Ads for campaign filtering.

Pillar 3: Decoupling Low-Margin Loss Leaders from High-ROAS Targets

Margin tiers only influence profitability if they control how campaigns are structured. By separating campaigns using inventory filters based on margin labels, advertisers prevent automated bidding from shifting budget toward low-margin products and ensure each profitability segment is managed with bidding strategies that reflect its financial contribution.

After Pillar 2, every product in the catalog carries a margin-tier label such as Margin_40_plus or Margin_0_15. These labels convert profitability into structured product segments inside the feed.

The final step is translating those segments into campaign architecture that controls how advertising spend is distributed across the catalog.

Without this step, margin labels exist in the feed but have no influence on budget allocation. Google Ads will continue optimizing across the entire product set, often shifting spend toward products that generate the easiest conversions rather than the strongest financial contribution.

To prevent this, advertisers use the margin labels created in Pillar 2 to control which products are eligible to serve in each campaign.

Structuring Campaigns by Margin Tier

Instead of advertising the entire catalog inside a single campaign, advertisers create separate campaigns for each profitability segment and use inventory filters to restrict which products each campaign can promote.

A typical structure might look like this:

  • High Margin Campaign – Inventory filter: custom_label_0 = Margin_40_plus
  • Moderate Margin Campaign – Inventory filter: custom_label_0 = Margin_15_25
  • Low Margin Campaign – Inventory filter: custom_label_0 = Margin_0_15
  • Loss Leader Campaign – Inventory filter: custom_label_0 = Margin_negative

These filters are configured directly in the campaign settings: Google Ads → Campaign → Settings → Additional Settings → Inventory Filter

Advertisers select the feed attribute (for example Custom label 0) and enter the value that defines the inventory segment.

Once applied, the campaign can only serve products that match that label, ensuring that:

  • high-margin inventory competes only with other high-margin products
  • low-margin or acquisition products cannot absorb budget intended for profitable items

Automated bidding can still optimize conversion efficiency, but it does so within financially consistent inventory groups.

Adjusting Bidding Strategy by Margin Tier

Once campaigns are separated by margin tier, bidding strategies can reflect the economics of each segment.

High-margin campaigns are typically structured to capture as much auction share as possible. Because these products generate more profit per sale, advertisers can afford to run lower tROAS targets, which allows the system to bid higher in auctions.

This often means:

  • larger budgets
  • lower tROAS targets to increase impression share
  • broader auction coverage

For example, a product with an 80% margin might sustain a 150% tROAS target, while a lower-margin product may require 400%+ just to remain profitable. By lowering the target on high-margin inventory, advertisers can outbid competitors and scale volume where it actually drives profit.

Lower-margin or acquisition campaigns are structured to limit exposure, not scale it. Because these products generate less profit per sale, the goal is to maintain visibility without allowing them to absorb disproportionate spend.

In practice, this often looks like:

  • higher tROAS targets to restrict spend
  • tighter budget allocation
  • capped bids or manual CPC where needed

Rather than competing aggressively in auctions, these campaigns act as controlled coverage, capturing incremental demand while preventing low-margin products from dominating the account.

This structure allows profitable products to capture greater auction share while keeping lower-margin inventory visible without allowing it to absorb disproportionate spend

Hidden Platform Limitation: Performance Max

Margin segmentation becomes more complicated when campaigns use Performance Max (PMax).

Unlike traditional Shopping campaigns, where product groups can be bid on separately, a Performance Max campaign typically manages the entire product set under one shared budget and one automated bidding strategy.

Within that campaign, different asset groups may represent different product collections, but they still compete for the same budget pool. Google’s bidding system ultimately decides which products receive the most spend.

If high-margin and low-margin products exist inside the same Performance Max campaign, the system may still allocate budget toward the products that generate the lowest-cost conversions, even if those products contribute less profit.

This often means low-priced items (like a $25 t-shirt) get distributed more heavily across lower-cost placements such as Display, Gmail, or YouTube. While these environments typically have lower purchase intent, they also have much cheaper clicks. That allows low-priced products to generate conversions at a lower cost per acquisition, even if the conversion rate itself is lower.

Higher-priced products (like a $180 jacket), by contrast, rely more on high-intent Search and Shopping auctions, where clicks are more expensive. As a result, they may receive less spend if the system can hit its performance targets more efficiently elsewhere.

Because Performance Max optimizes across all channels toward a single goal, it can end up scaling low-margin products in cheaper environments while limiting exposure for higher-margin items that depend on more competitive inventory.

In other words, margin tiers in the feed don’t control spend on their own. Without campaign-level separation, the system can still prioritize low-cost conversion volume over overall profitability.

To preserve margin segmentation, advertisers typically create separate Performance Max campaigns for each margin tier and use feed labels to restrict which products each campaign can advertise.

For example:

Performance Max: High Margin

Inventory filter: custom_label_0 = Margin_40_plus

Performance Max: Moderate Margin

Inventory filter: custom_label_0 = Margin_15_25

Performance Max: Low Margin

Inventory filter: custom_label_0 = Margin_0_15

By filtering each campaign to a single margin tier, advertisers ensure that the automated bidding system only evaluates products within the same profitability band.

Measuring the Impact: Reclaiming Profit from the Auction

When product cost data and margin segmentation are integrated into Shopping campaigns, the advertising system begins allocating spend toward products that generate the strongest financial contribution, not just the easiest conversions. This structural shift often keeps revenue relatively stable while significantly improving total profit by scaling high-margin inventory instead of low-margin volume drivers.

Earlier we saw how automated bidding gradually shifted spend toward the T-shirt because it generated the cheapest conversions. The campaign produced strong revenue, but most of that growth came from the lowest-margin product in the catalog.

The resulting performance looked like this:

ProductOrdersRevenueProfit Contribution
Jacket300$54,000$33,000
Shoes500$60,000$27,500
T-Shirt4,000$100,000$12,000
  • Total Revenue: $214,000
  • Total Profit: $72,500

Despite generating nearly half the revenue, the T-shirt contributed the smallest share of total profit.

After applying the three-pillar framework, the same catalog behaves very differently.

Using the same $50,000 advertising budget, performance might shift like this:

ProductOrdersRevenueProfit Contribution
Jacket (Margin_40_plus)550$99,000$60,500
Shoes (Margin_25_40)700$84,000$38,500
T-Shirt (Margin_0_15)1,200$30,000$3,600
  • Total Revenue: $213,000
  • Total Profit: $102,600

After restructuring the feed and campaigns around margin tiers, revenue remains nearly the same, about $1,000 lower, but total profit increases by more than $30,000. The advertising system is still generating strong sales volume, but now those sales are concentrated in the products that actually contribute meaningful profit.

By integrating cost data, segmenting products by margin, and structuring campaigns around profitability tiers, advertisers change the environment in which the algorithm operates. The automation itself doesn’t change.

What changes is what the system is allowed to scale.

Frequently Asked Questions


Ready to see how much of your ad spend is non-incremental?

Request a demo to start the risk-free, 30-day AdAi trial to quantify your trapped capital and reclaim budget to fund your growth campaigns.