← Files AdAgntARCHIVED FILE
skills/adagnt-revenue/SKILL.md
4.6 KB · Oct 4, 2026 · 12:25 UTC
--- 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