{"id":13049,"plugin_id":"plugin_asdk_app_6a6318aaee888191a823829387f922a5","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:02:49.183Z","digest":"4491c8e5def07470dca4ed34eafd8865d43cdebee0d2752c8109ba5b64ce8941","against":null,"payload":{"name":"kreel-google-account-audit","description":"Structural audit of the Google Ads account.","included_files":[],"skill_md_contents":"---\nname: kreel-google-account-audit\ndescription: \"Structural audit of the Google Ads account.\"\n---\n\nIf more than one brand is reachable, call `list_brands` first and pass `brand` on every call.\n\nAudit the Google Ads structure. Use `get_entities` with platform='google', entity_type='campaign' (rows carry channel_type, channel_sub_type, serving_status, is_removed). Check:\n- Naming-convention drift across campaign names.\n- Abandoned campaigns: serving_status active but no spend in 30 days - cross-reference `get_entities` against `get_performance` campaign rows (platform='google', date_range={\"days\": 30}).\n- Campaigns capped by budget: `query` the `campaigns` DSL table filtered to platform='google' for `search_budget_lost_is` (with `search_impression_share` and `search_rank_lost_is`) - a high budget-lost impression share is the 'hitting the daily cap' signal (Google budgets and bid strategies are not synced, so this is the proxy; do not report ad strength or bid-strategy mix - neither is available).\nReturn findings with severity and a suggested fix per item.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}