What is the POAS Data Feed?
POAS = Profit-on-Ad-Spend. Instead of sending revenue to the ad platforms, you send profit. The ad platforms then optimize bidding on profit instead of revenue — much closer to your actual P&L.
Why you need it
- ROAS on revenue is an illusion. A product with a 50% margin and one with a 5% margin have the same ROAS in Meta Ads, but completely different profit. Bidding on revenue pushes budget toward low-margin products.
- Bidding on profit = bottom-line ROI. Smart Bidding (Google) and Advantage+ (Meta) optimize directly for what actually lands in your account after costs.
- Privacy benefit. The profit value never leaves your server — there are no margins or COGS in the dataLayer or the browser pixel.
How DataNostro POAS works
- The tenant sets up a lookup table SKU → margin (% or absolute COGS). Three sources:
- CSV upload — format
sku,margin_pct,cogs. Max 50,000 rows. - Heureka feed — if you have
cogsormargincolumns in the Heureka XML, an automatic pull every hour. - DataNostro Store — a programmatic update via an API key
poas:product:<sku>.
- CSV upload — format
- On every conversion the engine rewrites
valuefrom revenue to profit:- With an
items[]array (e-commerce purchase):profit = sum(item.qty × (item.price - item.cogs))orprice × margin_pct. - Without
items[]: the per-tenant default margin % is used.
- With an
- Profit is sent only to the ad platforms (Google Ads, Meta CAPI, TikTok, Sklik, Snapchat, Microsoft Ads, LinkedIn, Reddit, Pinterest). CRM and email destinations (Klaviyo, HubSpot, Pipedrive) get the original revenue — lifecycle reporting isn't disrupted by it.
When to turn it on
- ✅ You have a store with a variable margin across products (typically >5 percentage points of difference).
- ✅ You use Smart Bidding or Advantage+ campaigns optimized on conversion value.
- ✅ You have margin or COGS data per SKU available (from an ERP, the store admin, or a Heureka feed).
- ❌ If you sell a single product or SKUs with a similar margin, POAS won't bring a measurable uplift.
Setup step by step
- Dashboard → Power-ups → find the POAS Data Feed section.
- Choose the lookup table source (typically CSV upload to start).
- Download an export of your products from the store, add a
margin_pctorcogscolumn. - Upload the CSV — you'll see the number of loaded SKUs.
- Optionally: set a default margin % as a fallback for SKUs outside the table.
- Check the per-platform overrides — by default ad platforms = profit, CRM = revenue. Usually no need to change.
- Turn on the main toggle "Enable POAS value rewrite" and save.
- Test in Debug Events: a new purchase event should have
_dn_poas_applied: truein the dispatch trace.
Verification in Google Ads / Meta
- Google Ads: Tools → Conversions → select your conversion action → "Latest activity". The values should be lower and match the profit.
- Meta Events Manager: Test Events tab — you'll see purchase events with an adjusted
value. - DataNostro Debug Events: a newly sent event has
_dn_poas_applied: truein its payload.
FAQ
Q: Does it retroactively change historical data?
No. POAS only affects events sent after it's turned on. History in Google Ads / Meta stays in revenue.
Q: What if I don't have per-SKU margin, only an average for the whole store?
Set only the default margin % (e.g. 35%) and leave the lookup table empty. All events get the same margin — still better than revenue, but less precise than per-SKU.
Q: Do you also send profit to GA4?
Yes, by default. If you want to see revenue in GA4 (a typical use case for business reports), uncheck GA4 in the per-platform overrides — GA4 gets revenue, the ad platforms get profit.
Q: Does it work for Sklik and Heureka too?
Yes. The POAS rewrite affects Sklik server-side conversions and Heureka transactions. If you have a Heureka feed as the lookup source, it's completely self-contained — the feed has cogs/margin, we read them.