META PURCHASES

Optimize Meta and Google Ads for profit, not revenue, on Shopify

Meta and Google Ads bid on the value your store reports for each purchase, and that value is usually revenue. A $100 order with a $10 margin and a $100 order with a $60 margin then look the same to the ad platform, so it can keep buying the sales that earn you least. Both platforms can learn from profit instead. This page explains how each one takes it, why Google Analytics 4 stays on revenue, and what your product costs in Shopify have to cover first.

By Rytis Balys, founder of Tikra Tracking · Checked 12 November 2026

Why it happens

The purchase value is revenue. A tracking app or pixel sends each purchase with its value: what the buyer paid for the products. Value-based bidding then looks for more buyers who pay a lot, whatever the margin on what they buy.

Meta takes profit as a second number on the same purchase. Meta's value optimization for profit lets you "optimize ad delivery toward the profit of a conversion rather than its revenue". You add the profit to your existing Purchase event in the field net_revenue, "The margin value of a conversion event". The purchase keeps its value. There is no separate currency for net_revenue: the currency of the Purchase applies to both.

Meta has thresholds before it optimizes for profit. Meta's overview lists at least 3 distinct positive profit values and at least 100 conversions over a one-week period, and recommends at least 30 daily conversions per campaign where possible. The ad set then uses the performance goal Maximize value of conversions, the conversion event Purchase and the conversion value Purchase profit.

Meta generally keeps the first event of a pair. When the browser pixel and the Conversions API send the same purchase, Meta's deduplication page says it generally prefers "the event that is received first" and discards the later one. Meta's value optimization guide asks for the same parameters on both sources. Meta does not document this case, so if another pixel sends the purchase first without a profit, the profit sent later from a server may be dropped with the duplicate.

Google Ads takes profit as its own conversion. A conversion action has one value, so profit goes to a separate conversion action next to your purchase. Google calls a secondary action "for observation only": it is reported in All conversions, not in Conversions, and not used for bidding unless it is part of a custom goal. Google asks you to wait 4 to 6 hours after creating a new conversion action before uploading conversions to it. Target ROAS on Search and Shopping needs at least 15 conversions in the past 30 days.

Google's own profit metrics are reports. Conversions with cart data, combined with the cost of goods sold in your Merchant Center feed, give Google Ads metrics "based on gross profit". Google's pages describe these as reporting metrics.

GA4 has no profit field. In GA4 the purchase value is the sum of price times quantity for the items, without shipping or tax, and its ecommerce metrics are revenue metrics. GA4's purchase event has no cost, profit or margin parameter. Putting profit in value would turn every GA4 revenue report into a profit report with a revenue label, so GA4 should stay on revenue.

Profit needs your product costs. In Shopify, Cost per item is "how much it costs you for the product or variant". You set it in the product's Price section, for each variant, or in the bulk editor or a CSV import. Shopify's own profit reports cover only products and variants "that had a cost recorded at the time they were sold". A product without a cost has no profit to send.

Check it yourself

  1. 1Your costs. In Shopify, open a few of your top-selling products and look at Cost per item on each variant. Products missing from Shopify's profit reports, such as Gross profit by product, likely had no cost when they sold.
  2. 2What Meta gets. In Meta Events Manager, open your pixel, find a recent Purchase and look at its parameters. With profit sent, net_revenue is there next to value and currency.
  3. 3Meta's thresholds. Count your purchases in Meta for the last 7 days: Meta's overview asks for at least 100 conversions over a one-week period before it optimizes for profit.
  4. 4Who sends first. In Events Manager, look at the Purchase event by source. If a browser pixel sends purchases without a profit, the profit sent from a server may be dropped in deduplication.
  5. 5Google Ads. In Goals > Conversions, check that the profit action is Secondary while you compare, and that your purchase action stays Primary. All conv. and All conv. value then count the purchase and the profit together.
  6. 6To test bidding on profit in Google Ads. Google uses a secondary action for bidding when it is part of a custom goal. Add a custom goal that holds only the profit action to one campaign, and leave your other campaigns on the purchase action. Give it 2 to 4 weeks. Its ROAS and conversion value will look lower, because they now count profit, not revenue, so set the target ROAS from the profit the campaign earns.
  7. 7When you switch Google to profit. If you make the profit action Primary to bid on it, make the purchase action Secondary in the same step, so Conversions does not count each order twice. Then review your target ROAS: a target set for revenue is too high for profit.

Run the free diagnosis

FAQ

What is profit as value?

Sending each order's profit to the ad platform, so value-based bidding learns from what you earn on an order, not only from what the buyer paid.

Does sending profit change the purchase value Meta sees?

Not with net_revenue. Meta's integration guide adds the profit to the existing Purchase event; the value stays as it was.

Why not send profit to GA4 too?

GA4's purchase value and its ecommerce reports are revenue. It has no profit field, so profit in the value would make your revenue reports show profit.

What happens to orders with products that have no cost?

They have no profit, unless your tool uses a margin you enter for products without a cost. Shopify's profit reports leave them out too.

Can profit be negative?

Meta's overview asks for at least 3 distinct positive profit values and does not say how it treats a loss. A tool can send a loss as 0, or send nothing for it.

Related

Problem

Meta shows fewer purchases than Shopify

Meta's Purchase count is lower than your Shopify paid orders. The common causes, which part sending fixes and which part is attribution, and a step by step check in Events Manager.

Problem

Meta counts purchases twice

Meta shows more purchases than you had Shopify orders. Why browser and server events double up, and how to find every sender in your store.

Problem

Low Event Match Quality for Purchase in Meta

Meta rates your Purchase event's Event Match Quality low. See why a Shopify store gets that score and how to check which customer data your purchases carry.

Problem

Meta's purchase value does not match your Shopify order total

Meta Ads Manager shows a different purchase value than your Shopify orders. How tax, shipping, discounts and refunds change the number, and how to check what Meta received.

All tracking problems · All guides