Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Query, audit, and optimize Google Ads campaigns. Supports two modes: (1) API mode for bulk operations with the google-ads Python SDK, (2) attached-browser mode for users without API access. Use when asked to check ad performance, pause campaigns or keywords, find wasted spend, audit conversion tracking, or optimize Google Ads accounts.
.claude/skills/jdrhyne-google-ads/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 596% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 144% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 41% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 49% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 153% | 0% |
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:
bashpython3 -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.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-18 | pass→fail | 16,268 | 9,145 | -44% | 1 | 1 | 0% | 2,000 | 1,782 | -11% | 0 | 0 | — |
case-01 | fail→fail | 29,072 | 36,902 | +27% | 1 | 1 | 0% | 2,728 | 1,968 | -28% | 0 | 0 | — |
case-02 | fail→pass | 8,992 | 29,322 | +226% | 1 | 1 | 0% | 643 | 4,476 | +596% | 0 | 0 | — |
case-03 | fail→fail | 32,881 | 26,947 | -18% | 1 | 1 | 0% | 4,717 | 2,120 | -55% | 0 | 0 | — |
case-04 | pass→pass | 28,244 | 24,723 | -12% | 1 | 1 | 0% | 3,547 | 5,583 | +57% | 0 | 0 | — |
case-05 | pass→pass | 21,735 | 15,339 | -29% | 1 | 1 | 0% | 2,048 | 3,059 | +49% | 0 | 0 | — |
case-06 | pass→pass | 17,572 | 13,197 | -25% | 1 | 1 | 0% | 2,250 | 2,690 | +20% | 0 | 0 | — |
case-07 | fail→fail | 12,548 | 9,510 | -24% | 1 | 1 | 0% | 695 | 2,002 | +188% | 0 | 0 | — |
case-08 | fail→pass | 11,749 | 36,383 | +210% | 1 | 1 | 0% | 1,798 | 4,379 | +144% | 0 | 0 | — |
case-09 | pass→pass | 21,768 | 21,503 | -1% | 1 | 1 | 0% | 1,963 | 3,035 | +55% | 0 | 0 | — |
case-10 | fail→pass | 9,534 | 6,283 | -34% | 1 | 1 | 0% | 1,695 | 2,384 | +41% | 0 | 0 | — |
case-11 | fail→fail | 15,262 | 11,240 | -26% | 1 | 1 | 0% | 1,576 | 2,340 | +48% | 0 | 0 | — |
case-12 | pass→pass | 16,838 | 10,167 | -40% | 1 | 1 | 0% | 1,408 | 2,232 | +59% | 0 | 0 | — |
case-13 | fail→pass | 30,706 | 55,156 | +80% | 1 | 1 | 0% | 3,270 | 4,880 | +49% | 0 | 0 | — |
case-14 | fail→pass | 32,903 | 27,143 | -18% | 1 | 1 | 0% | 1,224 | 3,101 | +153% | 0 | 0 | — |
case-15 | fail→pass | 7,483 | 71,704 | +858% | 1 | 1 | 0% | 1,073 | 4,760 | +344% | 0 | 0 | — |
case-16 | fail→pass | 10,526 | 13,037 | +24% | 1 | 1 | 0% | 1,570 | 2,187 | +39% | 0 | 0 | — |
case-17 | pass→pass | 14,355 | 7,141 | -50% | 1 | 1 | 0% | 2,077 | 2,482 | +19% | 0 | 0 | — |
case-19 | pass→pass | 15,454 | 18,860 | +22% | 1 | 1 | 0% | 1,460 | 2,514 | +72% | 0 | 0 | — |
case-20 | fail→pass | 17,288 | 17,238 | -0% | 1 | 1 | 0% | 1,924 | 3,504 | +82% | 0 | 0 | — |
case-21 | pass→pass | 22,433 | 18,234 | -19% | 1 | 1 | 0% | 2,125 | 3,271 | +54% | 0 | 0 | — |
case-22 | fail→fail | 17,359 | 12,573 | -28% | 1 | 1 | 0% | 2,201 | 2,699 | +23% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +32 percentage points is the difference between those two pass rates over the 19 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/24/2026 | +23% |
Other measured skills in the registry, with their headline benchmark lift.