Query, audit, and optimize Google Ads campaigns. Supports two modes: (1) API mode for bulk operations with google-ads Python SDK, (2) Browser automation mode for users without API access - just attach a browser tab to ads.google.com. Use when asked to check ad performance, pause campaigns/keywords, find wasted spend, audit conversion tracking, or optimize Google Ads accounts.
Analyze Google Ads safely. Stay read-only unless the user explicitly requests an account change and approves the exact proposed diff at action time.
Browser mode requires a user-attached, logged-in Google Ads session. API mode requires Python plus locally configured Google Ads credentials. Neither mode is a universal activation requirement.
Choose from capabilities that are actually available; do not make either mode a universal prerequisite.
Safe API readiness checks inspect presence and behavior only:
python3 -c "from google.ads.googleads.client import GoogleAdsClient; print('google-ads client available')"
test -r "$HOME/.google-ads.yaml" && echo "Google Ads config file is readable"
Do not display the file or environment values. A browser-only workflow does not require Python or API credentials.
references/api-setup.md completely.references/browser-workflows.md completely.references/mutation-workflow.md completely after gathering the current state.Never recommend a pause, budget change, or bid change from one metric alone. Interpret performance using the user's goal and, where relevant:
Optimization score is a Google recommendation signal, not an automatic action threshold. A zero-conversion or high-CPA entity is an investigation candidate until the relevant context is checked.
| Question | Minimum evidence | |---|---| | Campaign performance | Spend, conversions or key business outcome, value when available, date range, comparison period | | Wasted-spend candidates | Search terms or keywords, spend, clicks, conversion lag, negatives, match type, campaign goal | | Budget constraints | Lost impression share, budget status, marginal return, campaign priority, recent changes | | Conversion health | Primary actions, recording status, last activity, attribution, tag/import diagnostics | | Policy or delivery issues | Entity status, policy details, dates, affected scope, recent edits |
Use a compact evidence table:
| Entity | Observation | Goal context | Evidence period | Uncertainty | Recommendation | |---|---|---|---|---|---|
Then list proposed account changes separately as not executed. Each proposal must include the exact entity identifiers and current and proposed values so it can enter the mutation workflow if the user chooses.
The initial request establishes intent, not approval for an unseen diff. For any pause, enable, bid, budget, targeting, conversion, label, or other account mutation:
references/mutation-workflow.md.If identity, scope, validation, approval, or readback cannot be completed, stop without changing the account.
These instructions use version-neutral service and field concepts and were reviewed on 2026-08-29 against the then-current Google Ads API v25.1 documentation and Python client patterns. Before changing API code or publishing a new skill version, re-check the official release notes, upgrade guide, client library guide, and limits. Do not force an API version in a client call unless the tested client requires it.
Category:business