If you're bidding the same amount across every product in your Google Shopping catalogue, you're almost certainly overpaying on low-margin products while underbidding on high-margin ones. The math is straightforward: a product with 60% gross margin can sustain a much higher CPC for the same target ROAS than a product with 15% gross margin. Bidding them identically treats £1 of revenue as worth the same regardless of how much profit it generates.

Margin-based bidding requires two things: knowing your product margins, and having a mechanism to segment products by margin in Google Shopping campaigns. Custom labels are that mechanism, and they sit in your product feed — which means the whole system starts with feed quality.

Step 1: Define your margin tiers

Start with three tiers. You can refine later, but three is enough to create meaningful bid differentiation without overcomplicating your campaign structure:

The exact thresholds depend on your business. For a fashion retailer with 65% average margins, "high" might be 65%+, "mid" 40–65%, "low" below 40%. For an electronics retailer with 12% average margins, the tiers are compressed — high might be anything over 20%.

Step 2: Get margin data into your feed

Your product margin data is in your accounting system, ERP, or inventory management system — not in Shopify or WooCommerce. This is where many merchants get stuck: the feed management tool doesn't have the margin data.

The practical solutions, in order of effort:

Option A — Populate cost price in Shopify/WooCommerce and calculate in Trajekt: Shopify has a native "Cost per item" field. If you populate this, Trajekt can calculate margin as (price - cost) / price and assign labels based on the result. Rule: IF (price - cost_price) / price > 0.50 THEN custom_label_0 = "high-margin".

Option B — Supplemental feed from a spreadsheet: Export your SKU list and margin tier from your accounting system into a CSV. Upload to Trajekt as a supplemental feed source. Trajekt merges the margin tier column with your main feed by matching on product ID. No changes to Shopify or WooCommerce required.

Option C — Manual category-level approximation: If you don't have product-level cost data, use category as a proxy. If you know that your own-label products are high margin and branded products are low margin, a category rule achieves reasonable margin-based segmentation without exact margin data.

Trajekt rules for margin tiers
# Option A: calculate from cost_price field IF ((price - cost_price) / price) > 0.50 THEN custom_label_0 = "high-margin" IF ((price - cost_price) / price) BETWEEN 0.25 AND 0.50 THEN custom_label_0 = "mid-margin" IF ((price - cost_price) / price) < 0.25 THEN custom_label_0 = "low-margin"

Step 3: Build campaign structure around margin labels

With margin labels in your feed, you can create product groups in Google Shopping campaigns that split by custom_label_0. The most direct structure: one Shopping campaign with product groups for each margin tier, each with its own ROAS target or CPC bid.

If your overall target ROAS is 400%, the margin-segmented targets might be:

For Smart Bidding (Target ROAS), Google automatically adjusts CPC bids to hit your ROAS target. The margin segmentation means Google is optimising each product group toward a ROAS target that actually corresponds to a consistent profit target — rather than different-margin products all chasing the same ROAS figure, which means inconsistent profitability.

Step 4: Validate and iterate

After implementing margin-based bidding, allow 30 days for Smart Bidding to stabilise before evaluating results. The key metric to compare isn't ROAS (which you've deliberately differentiated) — it's profit per click, or total gross profit generated by each margin tier's campaign spend.

If your high-margin tier is spending significantly but generating disproportionately high ROAS (well above your 250% target), you may be under-bidding there — lower the ROAS target to allow more spend. If your low-margin tier is spending but generating below your 600% ROAS target, tighten the target or reduce bids.

What changes when products move between margin tiers

This is the elegance of the Trajekt rules approach: when a product's cost price changes (supplier price increase, for example) or when you run a promotion that compresses margin, the rule recalculates the margin tier on the next feed refresh. The label updates automatically, and Google Ads reads the updated label on the next campaign sync.

Without automated label management, margin-based bidding requires someone to manually update labels whenever product economics change — which means it either doesn't get done, or it absorbs significant ongoing time. Automated label rules eliminate this maintenance burden.

🌎
Trajekt Editorial
Product Feed & Ecommerce Specialists

Trajekt is a UK-built product feed management platform. Our editorial team covers feed optimisation, Google Shopping strategy, ChatGPT commerce, and ecommerce channel management for UK merchants and agencies.

Share: X / Twitter LinkedIn