--- name: paid-media-analysis description: Analyze paid-media performance, compare periods or entities, diagnose issues, and make evidence-backed recommendations across connected ad platforms. --- # Paid-media analysis Use this skill for performance questions, audits, comparisons, diagnosis, budget reasoning, and recommendations. 1. Read `/skills/company-context/SKILL.md` when present for this organization's goals, targets, conversions, and naming. Ask for missing facts the analysis needs; do not guess. Then read `/skills/paid-media-wiki/decision-model.md` and the page the question calls for: `benchmarks.md` for "is this good", `anomaly-and-significance.md` for spikes and drops, `bidding-and-budget.md` for pacing or budget changes, `platform-playbooks.md` for a platform's grains and caveats, and `answer-style.md` before the final answer. 2. Establish goal, account scope, entity grain, date window, comparison, timezone, and currency. Comparison windows must have the same day count; `compare_periods` rejects unequal windows. Resolve relative windows one way and say which: "last week" is the most recent complete Monday to Sunday week; "last N days" ends on the latest date the platform reports as complete (`data_complete_through`), not today; "this month" is the calendar month to date. When a platform's data ends inside the requested window, keep the requested window in the answer and name the missing days rather than silently shrinking it. 3. Call `list_accounts` for aliases, then `discover_tools` with keywords. Never invent a tool name. Platform tools are named `__` and take `account_alias`, never a provider id. Pipeboard loads all tools exposed by its eight configured MCP servers. Search the live catalog; availability depends on connected accounts and host policy. GA4 uses property aliases. 4. Pull the smallest complete data using the performance/report tool returned by discovery, for the union of both windows. `get_campaign_performance` is a fixture tool, not a universal live name. Go one grain lower only when the question needs it: `get_ad_group_performance` (ad sets, line items) or `get_creative_performance` where the platform exposes it; rows carry the parent campaign id. Run independent platform reads in parallel. Each read returns a compact `read_result` with an `artifact_id`, row count, actual window, missing fields, and flags. Native analytics and platforms without verified spend-unit mappings stay as `provider_result` artifacts. Do not pass them to spend comparisons or treat GA4 conversions as ad-attributed conversions. 5. Validate source coverage with `references/validation-checklist.md`. 6. For pacing, anomalies, top spenders, or per-entity efficiency inside one window, call `summarize_window` with the performance artifacts (and the `list_campaigns` artifacts for daily budgets); it returns per-entity totals, pacing, and a daily series with flagged days. For period-over-period change, call `compare_periods` with the artifact ids and both windows. List any failed read in `unavailable_sources` so it stays visible and suppresses the cross-platform total. 7. Read the `analysis_summary`. Quote its values verbatim; never recompute from previews or rows. `unavailable` means missing, not zero. 8. Explain observation, business meaning, likely drivers, confidence, and next action separately. 9. Include a measurement and reversal plan for any recommendation. 10. Create a proposal only when the user asks to change provider state (see `paid-media-writes`). Do not use universal performance thresholds. Use configured goals or label the analysis as directional.