How to calculate POAS for your store, step by step
Record a cost for every product, send cost of goods sold to Google Ads, and divide Gross profit by Cost in a custom column. For Meta, take the tax out of the purchase value, multiply by your margin and divide by spend. Above 1, the ads paid for themselves.
By Joris van Huët, Founder & CEOUpdated 8 min read
Run the numbers for your store: the free profit margin and markup calculator.
Usually five numbers: product costs, sales credited to the ads, tax, margin and spend. Record costs in Shopify, send them to Google Ads through Merchant Center, and divide Gross profit by Cost in a custom column. For Meta, strip tax from the purchase value, multiply by margin and divide by spend. Above 1, the ads paid for themselves.
Ten steps for one closed month: a decision, two steps in Shopify, four in Google Ads and Merchant Center, two for Meta and a verdict. The menu paths come from Shopify's, Google's and Meta's help pages as they read on 1 October 2026. If a Google Ads column stays blank, the checks further down say why.
Step by step
- Decide which costs come off. POAS has no official definition, so write yours at the top of the sheet. Gross profit takes off product cost only; a contribution version also takes off the shipping you pay, card fees and returns. Menu path: none, this is a decision.
- Record a cost on every variant. Shopify reports profit only for products and variants that had a cost recorded when they sold. A flavour, size or colour left blank quietly drops out of every profit figure. Menu path: Shopify admin > Products > (product) > Price section > Cost per item > Save.
- Read the margin for the month. Gross profit by product works out Gross margin as net sales minus cost, divided by net sales. For a contribution recipe, Profit margin by order adds the shipping, duties and import taxes your store paid. Menu path: Shopify admin > Analytics > Reports > Category filter > Profit Margin.
- Send your costs to Merchant Center. Google Ads builds gross profit from the cost_of_goods_sold attribute in your product data. Add it to your feed, or set it with an attribute rule, which needs the Advanced data source management add-on. Menu path: Merchant Center > Data sources > Product sources > (your source) > Attribute rules > Add attribute rule.
- Check the cart data diagnostics. Your purchase tag must send each order's items, with IDs that match Merchant Center exactly. The Shopping tracking walkthrough covers that setup. The card flags mismatched IDs and missing cost of goods sold, and Google says fixes can take 24 to 48 hours to show. Menu path: Google Ads > Goals > Diagnostics > conversions with cart data card.
- Put Gross profit next to Cost. Cart data metrics sit in the Conversions group of columns, at campaign, ad group and product level. Tick Gross profit and Gross profit margin, then Apply. Menu path: Google Ads > Campaigns > Columns > Modify columns > Conversions.
- Build a POAS column. Create a custom column with Gross profit divided by Cost, set its data format to Number and save it. Then tick the new column and click Apply. Menu path: Google Ads > Campaigns > Columns > Modify columns > + Custom column > + Column.
- Pull Meta's value and spend. Add Purchases conversion value and Amount spent for the same month. Meta's Purchase ROAS is the first divided by the second. Menu path: Meta Ads Manager > Campaigns > Columns > Customize columns > Apply.
- Take the tax out of Meta's value. Shopify's Facebook & Instagram app reports an order's total price, duties and taxes included. Divide by one plus your tax rate, multiply by your margin, then divide by Amount spent. Menu path: none, this is spreadsheet arithmetic.
- Hold every POAS against 1. On gross profit, 1 means the ads covered their own cost and left nothing for shipping, fees or wages. Set your bar above 1 by whatever your recipe left out. Menu path: none, this is the verdict.
A worked example
For illustration, here is one invented month in round numbers.
| Line | Where it comes from | For illustration |
|---|---|---|
| Shopping campaign, Cost | Google Ads, Cost column | €1,000 |
| Shopping campaign, Gross profit | Google Ads, Gross profit column | €1,500 |
| Shopping campaign, POAS | €1,500 divided by €1,000 | 1.5 |
| Meta campaign, Purchases conversion value | Ads Manager | €6,000 |
| Tax inside that value | Your tax rate, step 9 | €1,000 |
| Margin | Shopify, Gross profit by product | 40% |
| Gross profit on Meta's claim | €5,000 times 0.40 | €2,000 |
| Meta campaign, Amount spent | Ads Manager | €2,000 |
| Meta campaign, POAS | €2,000 divided by €2,000 | 1.0 |
Say the Shopping campaign shows €1,500 of gross profit on €1,000 of cost. In this worked example, its POAS is 1.5: each euro of ads left €1.50 before shipping and fees.
Now suppose some products it sold had no cost of goods sold in your feed. Google leaves those items out of Gross profit, so the real figure sits above 1.5, not below. A patchy feed makes Google's POAS look worse than it is.
The Meta campaign is the sneaky one. Say the Meta campaign shows €6,000 of purchases conversion value on €2,000 of spend, a Purchase ROAS of 3x that looks comfortable. If the tax inside is €1,000, the sales are €5,000, and a 40% margin leaves €2,000 of gross profit. That is a POAS of exactly 1: a break-even campaign in a nicer jacket.
One store's Break-even sheet draws the same line from the ROAS side. At a 40% margin, break-even ROAS is 2.5x, because 1 divided by 0.40 is 2.5 (Break-even sheet). If your Meta sales without tax, divided by spend, land on 2.5x at that margin, POAS is 1. In this worked example, €5,000 divided by €2,000 is exactly that, which the break-even ROAS answer explains from the other end.
What should I check when POAS looks wrong?
- The Gross profit column is blank. Google only processes items from a Merchant Center account linked to your Google Ads account. Check the link, then check that the item IDs in your tag match the IDs in your feed.
- Google's POAS looks too low. Items with no cost of goods sold drop out of Gross profit, as in Google's hat and shirt example. Fill those gaps before you cut a campaign.
- Meta's POAS looks too high. The purchase value probably still holds tax. Redo step 9 before you scale anything.
- Google Ads and Shopify disagree on profit. They answer different questions. Google Ads counts profit on sales it attributes to your ads, while Shopify counts every sale whose product had a cost. Expect Google's figure to be the smaller one.
- Imported GA4 conversions show different values. Google says Google Ads calculates imported Analytics conversions differently from Analytics itself. Compare like with like, and do not mix the two in one POAS.
- POAS moved after a supplier price rise. Shopify's help calls Cost per item static data. Each report reflects the costs entered at the time. Update the field when costs change, or your months will not compare.
What to do this week
- Save your POAS columns as a set. In Google Ads, save Cost, Gross profit and your POAS column as one named column set. Pass: last month's Shopping and Performance Max campaigns each show a POAS. Fail: the columns are blank, so start again at step 5.
- Run step 9 on last month's Meta campaigns. Work from Purchases conversion value and Amount spent, with tax taken out. Pass: every campaign you plan to scale clears 1 with room for shipping and fees. Fail: a campaign with a healthy-looking ROAS lands at or below 1.
- Clear the diagnostics alerts. Download the flagged item IDs from the cart data card and fix them in your feed. Look again two days later. Pass: the status reads Excellent or Good. Fail: it still reads Needs attention or Urgent, so part of your sales never reaches Google's Gross profit.
Check the homework. Your GA4 Attribution paths export already holds the evidence. Causality Engine reads that one file and shows what each channel caused next to what last-click gave it, in 1 to 2 minutes, for €99 once (excluding VAT), refundable within 30 days. Check the homework
Sources, 1 October 2026: Profit reports (Shopify Help Center); Cost of goods sold [cost_of_goods_sold] (Google Merchant Center Help); Set up your attribute rules (Google Merchant Center Help); About conversions with cart data (Google Ads Help); About conversions with cart data diagnostics (Google Ads Help); Metrics available with conversions with cart data (Google Ads Help); Add or remove columns in your statistics table (Google Ads Help); Create custom columns (Google Ads Help); Customize columns in Meta Ads Manager (Meta Business Help Center); Purchase ROAS (return on ad spend) (Meta Business Help Center); Facebook data sharing (Shopify Help Center).
Related answers
Frequently asked questions
Where does Google Ads get product costs for gross profit?
From the cost_of_goods_sold attribute in your Merchant Center product data, matched to the items each purchase sends as cart data. The match runs on item ID, so the IDs in your tag must match your feed exactly. Without both, the Gross profit column stays empty.Why is Google Ads gross profit lower than Shopify's?
Usually because it covers less. Google Ads counts only sales it attributes to your ads, and only items with a cost in Merchant Center. Shopify's gross profit covers every sale whose product had a cost recorded. The two answer different questions, so a gap is normal.Does cost of goods sold in Merchant Center have to be exact?
No. Google treats it as a reporting figure and says it need not be exact. A rough estimate works, and if a product's cost varies, Google suggests an average. Use the same currency as your prices to avoid exchange rate mix-ups.
Go deeper: Causal attribution, explained.
Sixty-second versions of these ideas: Causality Engine on YouTube Shorts.
Keep reading
Terms in this article
- Ad SpendAd Spend is the total amount invested in advertising campaigns. It is measured against Return on Ad Spend (ROAS) to evaluate campaign effectiveness.
- AnalyticsAnalytics is the systematic computational analysis of data. It reveals customer behavior and measures campaign performance.
- AttributionAttribution identifies user actions that contribute to a desired outcome and assigns value to each. It reveals which marketing touchpoints drive conversions.
- CausalityCausality is the relationship where one event directly causes another, essential for identifying specific actions that drive desired outcomes in marketing.
- ConversionConversion is a specific, desired action a user takes in response to a marketing message, such as a purchase or a sign-up.
- Google AdsGoogle Ads is an online advertising platform where advertisers bid to display ads, service offerings, and product listings.
- MetricsMetrics are quantifiable measures that track and assess business process status. They evaluate campaign performance and inform attribution analysis.
- Profit MarginProfit margin measures profitability, calculated as net income divided by revenue and expressed as a percentage.