{"id":66314,"plugin_id":"plugin_asdk_app_69461dc91ee48191ae4a14eb9bde1c21","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-28T12:05:37.780Z","digest":"83b310e895f7e9849259b8a14d93885db6e6e4315739cf13a95f8ff760e5708b","against":null,"payload":{"description":"Review ad performance across platforms with Adspirer — how are my ads doing, weekly or monthly reports, a cross-channel scorecard, CPA, ROAS, CTR, spend trends, and auditing whether conversion tracking is set up correctly. Read-only; changes nothing.","included_files":[],"name":"adspirer-performance-review","skill_md_contents":"---\nname: adspirer-performance-review\ndescription: Review ad performance across platforms with Adspirer — how are my ads doing, weekly or monthly reports, a cross-channel scorecard, CPA, ROAS, CTR, spend trends, and auditing whether conversion tracking is set up correctly. Read-only; changes nothing.\n---\n\n# Performance review\n\nFollow `adspirer-mcp` before any tool call. This skill only reads — it never changes a campaign.\n\n## Where the numbers come from\n\nThe two big platforms have **direct, top-level** performance tools. The rest go through their router.\n\n| Platform | How |\n|---|---|\n| Google Ads | `get_campaign_performance` — call it directly |\n| Meta Ads | `get_meta_campaign_performance` — call it directly |\n| TikTok | `tiktok_ads` router → `execute` → `get_tiktok_campaign_performance` |\n| LinkedIn | `linkedin_ads` router → `execute` → `get_linkedin_campaign_performance` |\n| Amazon | `amazon_ads` router → `execute` → `get_amazon_campaign_performance` |\n| ChatGPT Ads | `chatgpt_ads` router → `execute` → `get_chatgpt_performance` |\n\nCalling the routed ones directly by name will fail — they aren't in the tool list. Pass\n`raw_data: true` when the user wants the numbers rather than the rendered summary.\n\nOnly pull the platforms the user has actually connected. Check `get_connections_status` first\ninstead of firing six calls and reporting five failures.\n\n## Before you trust a single number\n\n**Verify conversion tracking.** Run `audit_conversion_tracking`. It returns a health score and\nfindings across Google, Meta, and LinkedIn — pixels, CAPI, dedup, conversion actions, enhanced\nconversions, attribution.\n\nIf tracking is broken, every conversion metric below is fiction, and the honest answer to \"how are\nmy ads doing\" is \"I can't tell you yet, and here's why.\" Say that before presenting a CPA. This is\nthe single most valuable thing this skill does.\n\nAlso check the window. Amazon's last 48 hours are incomplete. Today is always partial. A \"drop\" that\nis really an unfinished day is the most common false alarm in this job.\n\n## The scorecard\n\nReport per platform, then in total:\n\n- **Spend** — and pace against the monthly budget\n- **Conversions** and **cost per conversion**\n- **ROAS**, where revenue is tracked\n- **CTR** and **CPC** — diagnostic, not goals\n- **Change vs the previous equivalent period**\n\nCompare like with like: last 7 days against the 7 before, not against a partial week.\n\n## Say what it means\n\nA table is not a review. Lead with the answer:\n\n> Google is doing the work — 34 leads at $41, under your $50 target. Meta spent $890 for 3 leads.\n> The Meta ad set has a frequency of 4.2 and its CTR halved over two weeks; that's creative fatigue,\n> not targeting.\n\nName the biggest problem and the biggest opportunity. Give one recommendation, with the number\nattached. Offer to act — don't act. Changes belong to `adspirer-optimize`.\n\n## When something moved sharply\n\nUse the anomaly tools rather than speculating: `explain_performance_anomaly` (Google),\n`explain_meta_anomaly`, `explain_tiktok_anomaly`, `explain_linkedin_anomaly`. They compare windows\nand attribute the delta to a cause.\n\nBefore blaming the algorithm, check the boring explanations: a campaign paused, a budget changed, a\ndisapproved ad, a landing page that started 404ing, a conversion tag someone removed on deploy.\n\n## Make it easier to look at\n\nA scorecard across six platforms is a table the user will squint at, and a trend is a shape, not a\ncolumn of numbers.\n\n\nOffer a **Site** when the user will revisit it or send it to a client — a hosted dashboard rather\nthan a message. Ask first, and default to invitation-only: this page carries their spend and\nconversion data. For a one-off look, a chart in the conversation is enough.\n\n## Make it recurring\n\nA review is worth more every week than once. When the user likes what they just read, offer to\nschedule it — this host can, and they can create it just by asking.\n\nA recurring task re-runs this review and notifies them by push and email. A **monitoring task** is\nbetter when they'd rather hear only about changes: it re-checks and stays quiet until something\nmoves.\n\n\n\nEach run costs tool calls against their monthly quota, the same as a live conversation. Weekly is the\nright default; daily only for accounts spending enough to justify it. Say so before setting it up.\n\nIf the user wants it delivered by **email** instead, or this host has no scheduler, Adspirer's\n`monitoring_and_reporting` router does server-side scheduled briefs. See `references/host-surfaces.md`\nin `adspirer-agent`.\n\n## Don't\n\n- Don't average CPA across platforms with wildly different volumes and call it \"blended performance\"\n  without saying so.\n- Don't present a 3-day window as a trend.\n- Don't fabricate a number when a tool fails. Say the call failed and which one.\n- Don't schedule a daily review for an account that spends $20 a day. The runs cost more attention,\n  and more quota, than the findings are worth.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}