# How to audit an ad account with an AI agent

> Tier: deep. Full contract: quantified decision rules and evidence requirements.

A structured pass over one ad account: settings, structure, spend concentration, conversion wiring and recent changes, ending in a ranked list of findings.

**Intent.** Turn an unfamiliar ad account into a ranked list of problems and confirmations, each backed by numbers.

## When to use

- Taking over an account from another team or agency.
- A periodic health check, quarterly or before a budget increase.
- Before proposing any restructure: the audit is the evidence.

## When not to use

- Fewer than 30 days of history in the account: most checks below need a baseline.
- During a declared incident. Use campaign-anomaly-investigation first; an audit is a survey, not a search party.

## Sources

Required: Google Ads
Optional: Meta Ads, Google Analytics 4

## Preconditions

- The account is ticked in the dashboard, confirmed via list_accounts.
- At least 30 days of spend history.
- The account currency and timezone are read before any figure is compared.

## Inputs

- `account` (required): The ad account to audit.
- `window`: Analysis window. Default: last 90 days.
- `target_cpa_or_roas`: The efficiency target the account is judged against. Ask rather than assume.

## Procedure

1. Read account settings, currency, timezone and the account tree. — tools: `google_ads_get_account_details`, `google_ads_get_account_hierarchy`
2. Map structure: campaigns, their types, statuses and budgets. — tools: `google_ads_get_campaigns`, `google_ads_get_budgets`
3. Read performance by campaign over the window, then rank by spend. — tools: `google_ads_get_insights`
   Spend concentration first: findings on 2% of spend are footnotes, not findings.
4. Check conversion wiring: actions, their counting and recent volumes. — tools: `google_ads_get_conversion_actions`
5. Read search terms and keyword performance for waste and gaps. — tools: `google_ads_get_search_terms`, `google_ads_get_keyword_performance`
6. Read the change history for the window: who changed what. — tools: `google_ads_get_change_events`
   Google keeps 30 days. Say so when the window is longer.
7. Collect the platform's own recommendations, as claims to verify rather than accept. — tools: `google_ads_get_recommendations`
8. If GA4 is connected, compare platform conversions with GA4 key events over the same window. — tools: `ga4_run_report`, `ga4_get_key_events`

## Decision rules

- **When** One campaign holds more than 60% of account spend → **conclude** Flag concentration: the account's result is that campaign's result. Audit it at ad group depth. **Unless** The account is deliberately single-product.
- **When** A conversion action counted in bids recorded zero conversions in 30 days while spend ran → **conclude** Flag as probable broken wiring or a dead action still steering bids.
- **When** Search terms with more than 20 clicks and zero conversions sum to over 5% of spend → **conclude** Flag as waste with the exact term list. Hand to google-search-waste for the full pass.
- **When** GA4 key events differ from platform conversions by more than 25% over the same window → **conclude** Flag a measurement gap, not a performance change. Hand to tracking-audit. **Unless** Attribution windows or counting methods visibly differ; name them instead.
- **When** Fewer than 100 clicks in the window on the audited scope → **conclude** Do not grade efficiency. Report volumes and structure only, and say the sample is too small.

## Evidence requirements

- Every finding names the campaign or term, the metric, the window and the account it came from.
- Every percentage names its denominator.
- Recommendations from the platform are marked as the platform's, not the audit's.

## Human approval boundary

- The audit changes nothing. Every fix it proposes is a proposal.
- Pausing anything found here goes through Safe Writes: preview, human confirmation, then apply.

## Failure modes

- The last 72 hours under-report conversions on every platform: never grade recent days as decline.
- Currency mixing across accounts silently corrupts every ranking; read the currency first.
- Change history beyond 30 days is not absence of change, it is absence of records.
- A restructure inside the window resets learning phases; performance dips there are expected, not findings.

## Output

- **Account snapshot**: Spend, structure, currency, timezone, window.
- **Findings, ranked**: Each with metric, evidence, affected spend share.
- **Confirmations**: What was checked and found healthy: absence of findings is a result.
- **Proposed next actions**: Each mapped to a skill or a Safe Write, none applied.

## Related

- Skill: [google-search-waste](https://www.getmcpads.com/skills/google-search-waste.md)
- Skill: [tracking-audit](https://www.getmcpads.com/skills/tracking-audit.md)
- Skill: [campaign-anomaly-investigation](https://www.getmcpads.com/skills/campaign-anomaly-investigation.md)
- Guide: [campaign-audit](https://www.getmcpads.com/guides/campaign-audit.md)
