Skip to content
ADD-ONS

POAS Data Feed — Profit-on-Ad-Spend bidding

Send profit instead of revenue to Meta CAPI, Google Ads, TikTok, and Sklik. Bidding on profit, lookup from a CSV / Heureka feed / DataNostro Store. CRM destinations stay on revenue.

10 min Read Středně pokročilý Updated 5.6.2026

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

  1. 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 cogs or margin columns in the Heureka XML, an automatic pull every hour.
    • DataNostro Store — a programmatic update via an API key poas:product:<sku>.
  2. On every conversion the engine rewrites value from revenue to profit:
    • With an items[] array (e-commerce purchase): profit = sum(item.qty × (item.price - item.cogs)) or price × margin_pct.
    • Without items[]: the per-tenant default margin % is used.
  3. 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

  1. Dashboard → Power-ups → find the POAS Data Feed section.
  2. Choose the lookup table source (typically CSV upload to start).
  3. Download an export of your products from the store, add a margin_pct or cogs column.
  4. Upload the CSV — you'll see the number of loaded SKUs.
  5. Optionally: set a default margin % as a fallback for SKUs outside the table.
  6. Check the per-platform overrides — by default ad platforms = profit, CRM = revenue. Usually no need to change.
  7. Turn on the main toggle "Enable POAS value rewrite" and save.
  8. Test in Debug Events: a new purchase event should have _dn_poas_applied: true in 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: true in 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.

Did this article help you?
✓ Thank you for the feedback