Google ads audit
/SKILLGoogle Ads account audit and business context setup. Run this first - it gathers business information, analyzes account health, and saves context that all other ads skills reuse.
--- name: google-ads-audit description: Google Ads account audit and business context setup. Run this first:it gathers business information, analyzes account health, and saves context that all other ads-skillss can reuse. Trigger this when the user selects "audit my ads," "ads audit," "set up my ads," "onboard," "account overview," "how's my account," "ads health check," "what should I fix in my ads," or when the user is new to NotFair and hasn't run an audit before. Also trigger proactively when other ads-skillss detect that business-context.json is missing. argument-hint: "<account name or 'audit my ads'>" --- # Google Ads Audit Diagnose account health and preserve business context for downstream skills (/google-ads, /google-ads-copy, /google-ads-landing). Read-only : never modifies the account. The user runs /google-ads to implement the fixes you recommend. ## Setup Follow ../shared/preamble.md (MCP detection, account selection) and ../shared/analysis-principles.md (evidence requirements, guardrails). Both apply throughout this skill. ## Filesystem contract (must persist) | Artifact | Path | When | |---|---|---| | Business context | {data_dir}/business-context.json | First full audit, or refresh when audit_date is >90 days old. Skip on scoped audits if file is fresh. | | Personas | {data_dir}/personas/{accountId}.json | Every full audit. | These are the handoffs to every other ads-skill:write them even if the report is short. Otherwise, /google-ads-copy and /google-ads-landing operate without business context and produce generic output. business-context.json schema: business_name, industry, website, services[], locations[], target_audience, brand_voice{tone, words_to_use[], words_to_avoid[]}, differentiators[], competitors[], seasonality{peak_months[], slow_months[], seasonal_hooks[]}, keyword_landscape{high_intent_terms[], competitive_terms[], long_tail_opportunities[]}, social_proof[], offers_or_promotions[], landing_pages{}, unit_economics{aov_usd, profit_margin, source}, notes, audit_date, account_id. PersonasJSON schema: {account_id, saved_at, personas: [{name, demographics, primary_goal, pain_points[], search_terms[], decision_trigger, value}]}. See references/persona-discovery.md. ## Policy freshness check (run first) Read ../shared/policy-registry.json. For each entry where last_verified + stale_after_days < today: - High-volatility → Use WebSearch to check area for recent Google Ads changes; compare to assumption. If there is a drift, flag the report and suggest a registry update. - Moderate-volatility → Add a one-line note stating "may warrant a check." - Stable → skip silently. ## Phase 1 : Pull the audit dataset Use a single runScript call with ads.gaqlParallel to fan out the queries required for an audit. The server’s notfair://playbooks/audit-account resource provides a battle-tested baseline; extend it to meet the needs of your specific query. You decide the exact GAQL structure, but a sound audit must include, at a minimum: - Account-level rollups (customer) - Campaign performance, including bidding strategy, network, and impression share metrics (campaign; 90-day cap for impression share data) - Ad group performance (ad_group) - Keyword performance with Quality Score and components (keyword_view) - Search terms (search_term_view) - Negative keywords and shared lists (campaign_criterion + shared sets) - Conversion actions (conversion_action) : including counting type, attribution model, primary/secondary - Network segmentation (segments.ad_network_type) when diagnosing CPA/CVR shifts or Search Partners - RSA assets (ad_group_ad) - Geo-targeting (campaign_criterion LOCATION + PROXIMITY) - Recent change events (change_event, last 30 days) : to explain regressions Aggregate the data within the script. Return summarized JSON, not raw rows. The agent provides context; the script performs the calculations. getRecommendations summarizeAccountSetups are useful cross-checks against Google’s own and the server’s structural views:run them as a separate tool after the “runScript” pass when comparison would enhance the report. If a critical query fails (auth, schema), display the error and stop:don’t fall b