Managing Google Ads by profit instead of revenue
Four stages from profit reporting to sending contribution margin as the value: what data you need, what changes in campaigns and when you can stop.
Google bids on the number you report
Target ROAS and Maximise conversion value optimise for conversion value, and in most online shops that value is revenue. If you want to manage by profit, sooner or later you have to change that number, or absorb the differences in margin through your campaign structure. Everything else is just reporting. Profit is an intended use: Google lists it as a possible optimisation goal for conversion value.
Much of the confusion comes from mixing up three levels that work in different ways:
| Level | Tool | What it does | What it does not do |
|---|---|---|---|
| Reporting | cost_of_goods_sold plus basket data |
shows gross profit per conversion | changes no bid by itself, only with the Profit Optimisation Goal (beta), if your account has it |
| Structure | Custom labels | separates margin groups with their own targets | cannot represent mixed baskets |
| Signal | Conversion value | changes what Smart Bidding bids on | costs a tracking rebuild and ongoing upkeep |
According to Google, the Merchant Center attribute for cost of goods is used for reporting and does not have to be exact, and the gross profit it shows is revenue minus cost of goods, so before shipping, payment fees and returns. Conversion value rules do not help either, because their conditions are location, device and audience. The product purchased is not one of them, so you cannot use them to reflect the margin of your range. For value adjustments by product, brand or category there is Product Value Optimisation, which according to Search Engine Roundtable is a beta for Performance Max and Shopping that needs no change in structure. As I read it, it does not replace the margin per order, but it can simplify margin groups if your account has it. The conversion value has to be changed by you, usually in the tracking.
The test before any effort: does margin change the ranking?
Whether you need to rebuild anything at all shows up in a table of your highest-revenue products or product groups. Calculate it once by ROAS and once by contribution margin per euro of ad spend. A made-up example with round numbers:
| Suppose | Ad spend | Revenue | ROAS | CM rate | Contribution margin | CM per €1 of ad spend |
|---|---|---|---|---|---|---|
| Group A | €5,000 | €40,000 | 8 | 20% | €8,000 | €1.60 |
| Group B | €5,000 | €30,000 | 6 | 40% | €12,000 | €2.40 |
| Group C | €5,000 | €20,000 | 4 | 70% | €14,000 | €2.80 |
By ROAS, A is the star. By contribution margin it comes last. After deducting advertising, A leaves €3,000 and C leaves €9,000. A uniform target of ROAS 6 would hold back exactly the group that earns the most.
My rule, as a judgement and not a Google threshold: if the ranking stays the same and no product sits below €1 of contribution margin per euro of ad spend, stage 1 is enough. If the ranking flips, stage 2 is justified. The stage therefore follows the spread in margins, not the technical setup. Even a vendor that sells profit tracking advises bidding on revenue and assessing by profit when margins are low or uniform.
The data is usually already there: purchase or production costs per SKU in the ERP, and the product report in Google Ads supplies the rest. Which costs other than the goods belong in the rate is covered in the article on contribution margin for advertising decisions.
Four stages with a clear stopping point
| Stage | What you do | Data | You stay here as long as |
|---|---|---|---|
| 1 Assess | Keep bidding on revenue, read the results by contribution margin | Cost of goods per SKU, product report | the ranking stays stable |
| 2 Margin groups | One label per margin band, a separate target ROAS per group | Margin per product in the feed as well | baskets mostly come from one group and each group has enough conversions |
| 3 Report product margin | Net basket minus cost of goods as the value per order | Cost of goods available to the tracking at runtime | shipping and returns are similar across product groups |
| 4 Report contribution margin | Expected contribution margin after a returns deduction as the value | Shipping, fees and return rate per product group as well | final stage |
The first stage changes nothing in the campaigns except the decisions you draw from them: which group gets more budget, which product you stop advertising. If you set up cost_of_goods_sold along with basket data, you also see gross profit in the account. For shops with similar margins, this is where the road ends.
Stage 2: margin groups are the cheapest real intervention
This is where bidding changes for the first time, without anyone touching the tracking. Of the five custom labels, you assign one to margin, with one value allowed per product. Google itself uses LowMargin and HighMargin as examples. After a change in the feed, it can take up to 48 hours for the values to appear in the account. You use the groups in Shopping and in Performance Max with a Merchant Center feed, in practice usually with separate campaigns so that each group gets its own target. Details are in the article on target ROAS by margin group.
You derive the target for each group from its rate:
Target ROAS = (1 + profit required per euro of ad spend) ÷ CM rate
If you want to keep 20 cents per euro of ad spend in the example, that gives a target ROAS of 6 for A, 3 for B and around 1.7 for C. That is the floor, not the starting value: C keeps €9,000 today, and at ROAS 1.7 it would need €45,000 of ad spend to do so. Lower the target from the current ROAS in steps, and afterwards read the contribution margin after ad spend in euros.
Two things end this stage. The first is mixed baskets: the ad runs for a product from group C, but the conversion reports the revenue of the whole basket, including items from group A. The second is data volume. For target ROAS, Google states at least 15 conversions in 30 days at the conversion tracking level and warns that lower volume makes the data noisy. I consider that a floor: three groups share the same volume, and each should be well above it. If they are not, merge groups.
Stage 3: profit as the value makes the structure simpler
Once the value per order contains the product margin, the margin sits in the signal, and the same break-even then applies to every margin: a value ROAS of 1 means advertising has used up the margin exactly. That is break-even, and the target sits above it. This is what tool vendors call POAS. It solves the problem of mixed baskets, because every order reports its own value. The technical approach and its pitfalls are covered in the article on margin as conversion value.
Margin groups with graded targets now correct for margin twice. Group C would get its high margin once through the higher value and a second time through the lower target. After the switch, all margin groups should have the same target, and the separation can be dropped over time unless another reason supports it, such as brand or clearance. I would only remove it once the new values have settled, otherwise you can no longer tell the effect of value and structure apart.
If you send margin as the value from the browser, you expose it there. One specialist article therefore recommends server-side or obfuscated transmission so that competitors cannot infer your margin.
Stage 4: the value is a forecast
The obvious idea for the last stage would be to report the final contribution margin once the return period has passed. Two requirements rule that out. Google recommends conversion delays of under seven days and warns that the ramp-up can otherwise take several months. And automated bidding only reads value adjustments up to 7 days after the conversion, while for reporting they are possible up to 54 days.
A return that arrives after two weeks never reaches the bid. That is why you report an expected value at the time of purchase, with the return rate already built in as a deduction per product group:
Value = (net basket − cost of goods) × (1 − return rate) − shipping and payment − return rate × cost of processing a return
Suppose an order of €100 net with €40 cost of goods, €8 for shipping and payment, a 30% return rate and €10 to process each return. That gives €60 × 0.7 − €8 − €3, so €31. Without the deduction the value would be €52, and Smart Bidding would overvalue products with high returns by around two thirds.
Avoid a double correction: a deduction in the value plus retracting the returned order subtracts the same return twice. In my view it is cleaner to compare the sum of reported values each month against the actual contribution margin from the ERP and adjust the deduction. How to send returns for reporting is explained under sending returns to Google Ads.
This stage only pays off if shipping and returns really differ between product groups. With a range where the rates are similar, the deduction shifts all values by roughly the same amount, and then it does little for the bid.
How to switch from revenue to profit without flying blind
The move to stage 3 or 4 is the riskiest moment, because the reported value per conversion inevitably falls. If you leave the old target in place, you suddenly demand several times the efficiency, and the campaign can almost grind to a halt. My suggestion:
- Measure in parallel. Create a new conversion action with the profit value as secondary, and keep the existing one as primary. A sensible yardstick is Google's recommendation for starting value-based bidding: three weeks or one to two conversion cycles, whichever is longer. For setting the target, Google names four weeks, and I would stick to that.
- Convert the target. The starting value is what the parallel phase actually delivers: the sum of profit values divided by ad spend. With the contribution margin from the table, that is €34,000 on €15,000, so around 2.3 instead of ROAS 6. This holds back A (currently 1.6) and gives C (currently 2.8) room.
- Switch once. Make the profit action primary and the revenue action secondary, and set the new target. One vendor also describes lowering the target gradually. I would set the target once, because Google advises against several target changes within one conversion cycle.
- Add safeguards. Set a budget cap and monitor closely in the first weeks. The tool vendor itself writes that the algorithm's reaction cannot be predicted.
The secondary revenue action keeps showing what revenue is coming in. Management has to know beforehand that revenue and reported ROAS may fall, and decide whether it accepts that for more contribution margin. If that decision is only made after the first weak revenue month, the switch is easily reversed before it has had a chance to show anything.
Uniform margins do not need a profit value
I have not found robust independent evidence that profit values deliver more contribution margin on average. Published success figures come from vendors. In my view the logic supports the model, but you have to measure it in your own business. Check these cases in particular:
Uniform margins. The ranking does not move, and anything beyond stage 1 is effort without a new signal.
New customer business. The value reflects the first order. A low-margin entry product that brings repeat buyers looks worse in it than it is, and Smart Bidding will push it back. If repeat purchases make up a large share of your profit, you first need an answer to how much a new customer may cost.
Effects on the range. Profit values shift visibility away from low-margin products. If those products bring customers back regularly or need to be cleared, you have to manage that exception deliberately instead of leaving it to the bid.
Outdated costs. In reporting the value may be rough, in the signal an error hits the bid directly. If purchase prices change often and nobody maintains them, I would stay at stage 2.
The wrong question. Even a clean profit value says nothing about whether the sale would have happened without the ad. The table above also works with averages, but a budget step only counts with its last euro. Why that can reverse the assessment is shown in the comparison of ROAS 8 and ROAS 4.
The Google requirements mentioned are as of November 2026.
Further questions
Does this also work with Performance Max?
Yes. Custom labels can be used in Performance Max if the campaign has a Merchant Center feed. A profit value you send works there just as it does in Shopping, through target ROAS or Maximise conversion value. At stage 3 you have to convert every campaign's target to the new scale.
Do I need a tool or a data team for this?
Not for stages 1 and 2: they need a product report, cost of goods from your ERP and a spreadsheet. From stage 3 onwards someone has to rebuild the value in your tracking. A developer can do that. A tool is an option, not a requirement.
Sources
- About conversion value rules, Google Ads Help
- About Smart Bidding using value-based bidding for Search and Shopping, Google Ads Help
- How to adjust your conversions, Google Ads Help
- Use custom labels for Shopping ads, Google Ads Help
- Cost of goods (cogs) [cost_of_goods_sold], Google Merchant Center Help
- How to use POAS in Google Ads, ProfitMetrics
- Forget revenue! How to maximize profit with Google Ads & more, maxcluster
- Setting up Google Shopping, OMR Reviews (in German)
- Key tips to driving online sales, Google
- Product Value Optimization, Google
- Google Ads Product Value Optimization, Search Engine Roundtable
- About Target ROAS bidding, Google Ads Help
