# How to Build a Margin Feed for tROAS That Optimises Real Profit

> How to build a profit-based bidding setup in Google Ads. Build a margin feed, switch Target ROAS from revenue to profit, and watch Smart Bidding redistribute spend toward what actually makes money.

**By Murtaza Rangwala** · **Published:** Jun 02, 2026 · **Read time:** 7 min read · **Category:** Attribution

Most Target ROAS campaigns are bidding on the wrong number. They're optimising against **revenue** — the cart total Google sees at checkout — instead of **profit**, the actual money the business keeps.

This sounds like a small distinction. It isn't. In every account I've migrated from revenue-based to profit-based bidding, the campaign mix changes dramatically. High-margin SKUs get more spend. Low-margin loss-leaders get starved. Reported ROAS goes down. Real ROAS goes up.

Google has the tools to do this properly now (conversion value rules, custom variables in feeds, margin uploads via the API). Almost nobody is using them.

Here's the full playbook for building a margin feed and switching tROAS to bid on profit.

!!!
**The TL;DR:** Target ROAS optimises against the conversion value you send. If you send revenue, it chases revenue. If you send profit, it chases profit. Build a profit feed that calculates margin per product or per service, send that as conversion value, and watch Smart Bidding redistribute spend toward what actually makes you money.
!!!

## Why revenue-based tROAS is misleading

Smart Bidding doesn't know your margins. It sees conversion value, treats it as "good," and optimises for more of it.

If your average margin is 30% but your bestseller has a 12% margin and your premium product has a 55% margin, revenue-based tROAS will:

- Push more spend toward the bestseller (high revenue per click).
- Starve the premium product (lower revenue per click despite higher profit per sale).
- Report a healthy account-wide ROAS that masks the profit shift.

> Revenue-based tROAS gives you a beautifully optimised path to losing money.

I've audited accounts where the *reported* ROAS was 600% but the *real* profit ROAS was negative. The advertiser thought the account was crushing it. The CFO knew otherwise.

## The four levels of conversion value sophistication

Most advertisers are at Level 1 or 2. The wins live at Levels 3 and 4.

### Level 1: Every conversion = 1

A leads-style setup where every form fill, every newsletter signup, every booking gets the same weight. Useless for value-based bidding.

### Level 2: Order total as conversion value

Pretty much the default for e-commerce. Sends the cart total to Google. Optimises for revenue.

### Level 3: Profit as conversion value

Sends `(order_total - cost_of_goods - fees - VAT) × your_margin_factor` to Google. Optimises for real profit.

### Level 4: Profit + adjusted for refund probability + LTV

The fully cooked version. Predicts the long-term value of each conversion (factoring in expected refunds, lifetime value, repeat purchase probability) and sends that to Google.

Most accounts can move from Level 2 to Level 3 in a week of dev work. That's where the biggest jump in real-world performance lives.

## How to build a profit feed

There are two main approaches. Pick based on your stack.

### Approach A: Calculate margin in your platform, send via dataLayer

If your e-commerce platform (Shopify, WooCommerce, Magento, etc.) knows the cost of goods per SKU, calculate margin at checkout and push it into the data layer:

```javascript
dataLayer.push({
  event: 'purchase',
  ecommerce: {
    transaction_id: '12345',
    value: 89.50,                  // gross revenue
    profit_value: 31.80,           // calculated margin
    currency: 'GBP',
    items: [
      {
        item_id: 'SKU-001',
        item_name: 'Product A',
        price: 89.50,
        margin: 31.80
      }
    ]
  }
});
```

Then in GTM, your Google Ads conversion tag uses `profit_value` instead of `value` as the conversion value. Done.

### Approach B: Use Google Ads conversion value rules

If you can't easily change the dataLayer, you can apply value adjustments at the Google Ads level using **conversion value rules**.

In Google Ads:

1. **Tools > Conversions > Value rules**.
2. Create a new rule.
3. Conditions: e.g., "Audience contains *Bulk buyers*" or "Device is *Mobile*" or "Location is *EU*".
4. Adjustment: multiply value by 0.X (your margin factor for that segment).

This works for coarse-grained adjustments (margin by location, device, audience) but not for per-SKU margin variation. For that, Approach A is needed.

### Approach C: Hybrid via offline conversion adjustments

For accounts where margin can only be calculated days after the order (e.g., final delivery cost, returns netted out), use **offline conversion adjustments** via the Google Ads API.

1. Original conversion fires client-side with revenue.
2. A nightly job calculates true profit and uploads adjustments via the [Conversion Adjustment API](https://developers.google.com/google-ads/api/docs/conversions/upload-adjustments).
3. Smart Bidding now bids on the adjusted (profit-accurate) value.

## The dashboard-vs-reality reckoning

When you switch from revenue to profit, the reported ROAS in Google Ads drops. This is expected. Conversion values are smaller. ROAS = value / cost. Smaller numerator, smaller ROAS.

This freaks people out. Don't let it.

You should:

- **Re-baseline your tROAS target** to a level that reflects the new (lower) conversion values. If you were at 600% on revenue and your margin is 30%, your equivalent profit-tROAS is ~180%. Set the new target there.
- **Communicate to stakeholders** that the headline ROAS number changed because of methodology, not performance. Show them real-profit ROAS instead.
- **Build a Looker Studio view** that displays revenue-ROAS and profit-ROAS side by side for 3-6 months so everyone can see the shift.

## Use case: a beauty e-commerce brand with 40% margin variation

A composite based on patterns I've seen.

A direct-to-consumer beauty brand was running Google Shopping + PMax at a tROAS of 500%. The category looked profitable on paper. The CFO was unhappy.

We pulled the data. Margin varied wildly:

- Bestselling cleansers: **12% margin** (volume play, low profit).
- Mid-tier serums: **35% margin**.
- Premium night creams: **62% margin**.

Smart Bidding was pushing spend toward the cleansers. They had the lowest CPCs and highest conversion rates. ROAS looked great. The brand was losing money.

We implemented Approach A — calculated profit at checkout, pushed `profit_value` into the data layer, switched the Google Ads conversion tag to use it. Re-baselined tROAS from 500% (revenue) to ~150% (profit).

**Results over 90 days:**

- Reported ROAS dropped from 500% to 165% (mechanical, expected).
- **Real profit ROAS climbed from 130% to 245%.**
- Spend redistributed: ~40% less on cleansers, ~70% more on premium night creams.
- Total profit on the same ad budget rose by 28%.

The CFO stopped complaining. Same Google Ads account. Same budget. Different number sent in.

## What about LTV and refund-adjusted values?

Once you're at Level 3 (profit), Level 4 is the next mountain.

### Refund-adjusted profit

If your refund rate is 15%, your reported profit is 15% inflated.

Use the same offline conversion adjustment approach to push negative adjustments when refunds happen. Within your conversion window (default 90 days for most accounts), Google Ads will recalculate.

### Predicted LTV

If you have repeat customers, the first purchase isn't the full picture. A customer with predicted £400 LTV is worth bidding more for than one with predicted £80 LTV — even if their first order is the same size.

Build a pLTV model (often a simple cohort-based prediction is enough) and send `predicted_ltv` as the conversion value instead of (or in addition to) first-purchase profit.

This is what enterprise accounts spend six figures on. You can do a decent version with a data analyst and a week of work.

## Common mistakes

- **Switching to profit without re-baselining tROAS.** Your campaigns will look broken. They aren't. Lower the target proportionally.
- **Calculating margin too crudely.** "Apply a 30% factor to everything" is better than nothing but loses the per-SKU optimisation that's the whole point.
- **Not communicating to stakeholders.** The reported ROAS drop will get someone reverting your work in two weeks unless you explain it upfront.
- **Forgetting fees and VAT.** Shopify shows revenue including fees. Your real revenue is lower. Subtract.
- **Skipping the verification step.** Send 20 test orders, calculate expected profit manually, check Google Ads conversion value matches. Catch math errors before scaling.
- **Optimising for profit but not refund-adjusting.** You still inflate by your refund rate. Do both.

## Bottom line

Revenue-based Target ROAS will get you a profitable-looking dashboard and an unprofitable business. The migration to profit-based bidding is the highest-leverage analytics work most performance marketing teams aren't doing yet.

- Calculate **profit at the point of conversion**.
- Send **profit value** to Google Ads, not revenue.
- **Re-baseline tROAS** so the targets reflect the new value scale.
- **Layer in refund and LTV adjustments** once profit-bidding is stable.

Smart Bidding is genuinely good. Give it the right target. The campaign mix will reshape itself toward what makes you money, not what generates volume.

Your CFO will notice. So will Smart Bidding.

---

**Sources and further reading:**

- [About conversion value rules (Google Ads Help)](https://support.google.com/google-ads/answer/10410266)
- [Upload conversion adjustments (Google Ads API)](https://developers.google.com/google-ads/api/docs/conversions/upload-adjustments)
- [About Smart Bidding (Google Ads Help)](https://support.google.com/google-ads/answer/7065882)
- [Set up enhanced conversions (Google Ads Help)](https://support.google.com/google-ads/answer/9888656)

---

**Tags:** tROAS, target ROAS, Google ads bidding strategy

## About the author

Murtaza Rangwala is a senior independent Google Ads consultant. 8 years, 1,900+ campaigns shipped, $250M+ in client revenue generated. Independent practice capped at four concurrent clients.

- More posts: https://www.murtazarangwala.com/blog
- Book a 30-min call: https://calendly.com/murtaza_rangwala/30min
- Free Google Ads audit: https://www.murtazarangwala.com/#audit