← Files AdAgntARCHIVED FILE

skills/adagnt-revenue/SKILL.md

4.6 KB · Oct 3, 2026 · 06:27 UTC

↓ Download file

---
name: adagnt-revenue
description: Connect real revenue sources (GA4, Shopify, Stripe, Klaviyo) and judge campaigns by true ROAS — revenue divided by spend — instead of platform-reported conversion value. Use when the user asks what their ads actually earn, wants to connect a store or analytics source, or questions the numbers their ad platforms report.
---

# AdAgnt Revenue & True ROAS

Ad platforms grade their own homework: the conversion value Google or Meta reports is their claim about what they drove. This skill wires in the ground truth — actual revenue from the user's store, payment processor, or analytics — and judges every campaign against it.

## Step 1 — Connect a revenue source

Check what's already wired up with `list_revenue_sources`. If nothing is connected (or the user mentions a new source), onboard one with `connect_revenue_source`:

- `source` — one of `ga4`, `shopify`, `stripe`, `klaviyo`. Pick whichever is closest to the money: Stripe or Shopify if they charge there, GA4 if e-commerce tracking is solid, Klaviyo for email-attributed flows.
- `property_id` — the store/property identifier. Optional in sandbox; ask for it on live accounts.
- `average_order_value` — sandbox only: calibrates the simulated revenue stream. Ask for a realistic figure rather than defaulting, so sandbox numbers look like the user's business.

Connecting is a write, but a safe one — it creates a data connection, not an ad-account change. Still confirm the source and identifier with the user before calling, and verify afterward with `list_revenue_sources` (check sync status, not just presence).

One source is enough to start. If the user connects several, be explicit that revenue is joined from all of them — don't double-count a Shopify order that also shows up in Stripe; ask which source is authoritative for order revenue.

## Step 2 — Read true ROAS

`get_true_roas` returns per-campaign revenue ÷ spend from the connected sources, ranked worst-to-best, each with a verdict. What the verdicts mean and what to do:

- **kill** — spend with no revenue to show for it over the window. Recommend pausing; the burden of proof is on the campaign now. Check one thing first: is the sales cycle longer than the date range? A 30-day window will condemn a 60-day B2B cycle unfairly.
- **fix** — real revenue, bad ratio. Something specific is broken: targeting, landing page, bid strategy, or creative. Diagnose before touching budget — `adagnt-performance` has the anomaly tools.
- **keep** — earning its budget. Leave it alone. Not every campaign needs an intervention this week.
- **scale** — high true ROAS with headroom. Propose a budget increase in steps (20–30% at a time), not a doubling — efficiency usually falls as spend rises.

Set `min_spend` so tiny campaigns don't pollute the ranking (default 10 is fine; raise it on large accounts). Use the same `date_range` the user's targets are stated in.

Present the ranking worst-first, exactly as returned — the user's biggest losses are the lede, not the wins.

## Step 3 — Explain the attribution gap

`get_revenue_attribution` returns, per campaign and platform, both the platform-reported conversion value and the actual attributed revenue — and the gap between them. When the user asks why the numbers disagree (they will), the honest explanation:

- **Platforms over-claim.** Each platform attributes any conversion it touched, so the same order is claimed by Google *and* Meta. Summing platform-reported value counts money twice; connected revenue counts it once.
- **View-through and window inflation.** A platform may claim a sale because someone saw an ad a week before buying through another door. Revenue-side attribution is stricter.
- **Under-reporting happens too.** Blocked tracking, iOS privacy limits, and offline sales make platforms miss revenue they genuinely drove. A gap in either direction is information.

The rule of thumb to give the user: **platform numbers for optimizing within a platform, true ROAS for deciding between platforms and for judging total spend.** A campaign is never "actually profitable" on platform-reported value alone.

## Step 4 — Act on it

Verdicts are recommendations, not actions. Any pause, budget change, or reallocation that follows goes through the normal write-tool discipline: exact payload shown, explicit yes, one call, verify with a read tool. For cross-platform budget moves based on true ROAS, `optimize_cross_platform_budget` files a plan to the approval queue by default — keep it that way. Record what was decided with `update_strategy` (`append_learning`) so next month's review starts from this one's conclusions.

SHA-256: 4dafa01af8243381669b60f9b504af325f644554b237ab527444433dca24536d