{"id":48732,"plugin_id":"plugins_6abfd06fd7b481918f511feab2f806ea","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-24T13:37:22.799Z","digest":"463ad6de9a1d7a7861c4acbb492fda5381a861b8a9b6af8d3638f6c36407f621","against":null,"payload":{"description":"Explain why Google Ads performance changed between two periods from a report export. Splits the change in CPA, ROAS or conversions into demand, impression share, CTR, CPC and conversion rate, by segment (brand, non-brand, PMax, app, upper funnel), and separates mix shift from real change. Use when the user asks why CPA went up, why conversions dropped, or what happened to their account, and can share a campaign report with a Day or Week column.","included_files":[{"relative_path":"references/ad-copy.md","size_in_bytes":1871},{"relative_path":"references/audit-checklist.md","size_in_bytes":2665},{"relative_path":"references/bidding-budgets.md","size_in_bytes":3945},{"relative_path":"references/diagnostics.md","size_in_bytes":3464},{"relative_path":"references/measurement.md","size_in_bytes":2413},{"relative_path":"references/myths.md","size_in_bytes":3618},{"relative_path":"references/platform-facts.md","size_in_bytes":17913},{"relative_path":"references/principles.md","size_in_bytes":3471},{"relative_path":"references/search-terms-negatives.md","size_in_bytes":3561},{"relative_path":"references/structure-pmax.md","size_in_bytes":3357},{"relative_path":"scripts/ppc.py","size_in_bytes":75759}],"name":"performance-triage","skill_md_contents":"---\nname: performance-triage\ndescription: Explain why Google Ads performance changed between two periods from a report export. Splits the change in CPA, ROAS or conversions into demand, impression share, CTR, CPC and conversion rate, by segment (brand, non-brand, PMax, app, upper funnel), and separates mix shift from real change. Use when the user asks why CPA went up, why conversions dropped, or what happened to their account, and can share a campaign report with a Day or Week column.\n---\n\n# Performance triage\n\nTurns a \"why did it change\" question into arithmetic, then into a short diagnosis with the next check.\n\nThe user's explicit instructions take priority over this guidance. Reply in the user's language.\n\n## Inputs\n\nA campaign report exported from Google Ads with a time segment. Ask for exactly this if it is missing:\n\n- Segment: Day (or Week), covering both periods.\n- Columns: Campaign, Campaign type, Impr., Clicks, Cost, Conversions, Conv. value (if value matters), Search impr. share, Search lost IS (rank), Search lost IS (budget).\n- In the interface: Campaigns view, set the date range to cover both periods, add the columns, segment by Day, download as CSV or Excel.\n\nAlso ask for the two periods to compare. Default: the last 28 complete days against the 28 before.\n\n## Steps\n\n1. Run `python scripts/ppc.py inspect --data <file>`. Check the date range and the segments. If brand campaigns are not detected, ask how they are named and pass `--brand-regex`.\n2. Run `python scripts/ppc.py triage --data <file> --a <start:end> --b <start:end> --out triage`.\n3. Read `references/diagnostics.md`, then the output:\n   - `mix`: how much of the account CPA change is mix shift between segments.\n   - Per segment: `change`, `cpa_explained_by`, `conversions_explained_by`, `verdict`.\n   - `warnings`.\n4. Ask for the change history of the period if the cause points at the account (targets, budgets, pauses, new campaigns), and match dates.\n5. If conversions lag (leads to sales, trials to paid), say whether the latest days are mature before reading conversion metrics.\n\n## Output\n\n- First line: what moved, by how much, and the main cause, for the segment that matters most (usually non-brand).\n- The values table (before and after, per segment) and the changes table from `triage.md`, including the day the shift starts when one is found.\n- The diagnosis per segment that moved, in one or two lines each.\n- The next check, and the action if the cause is already clear.\n\n## Rules\n\n- Never report an account-level CPA change without the mix split and the segment view.\n- Few conversions (under about 30 in a period) means ratio changes are noise. Say so.\n- Do not name a cause the numbers do not show. \"Demand fell\" needs eligible impressions; \"auction got expensive\" needs CPC with CVR flat.\n- Platform facts only from `references/platform-facts.md`.\n\n## Scripts and references\n\n- `scripts/ppc.py` (pandas, numpy). Handles Google Ads exports in English and Spanish with preamble and totals rows; other languages via `--map '{\"Kosten\": \"cost\"}'`.\n- If code execution is not available, give the user the command to run locally.\n\n## Running the script\n\n- Run it with the Python that has pandas installed (`python` in ChatGPT's code environment). Write outputs to the working folder (for example `--out /mnt/data/result`) and share the files with the user.\n- Put ad text and any value with `$` in single quotes, or pass a CSV with `--data`: the shell expands `\"$12\"`.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}