agentsclimarketplace

Routine

Skill chanktb/claude-google-ads/skills/routine

Find where your Google Ads budget leaks, cut waste, and scale your ecommerce store safely — 15 skills: audit, money-leak diagnostics, plan, campaign builders, safe push, monitor, optimize.

Install
npx -y skills add chanktb/claude-google-ads --skill routine

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

The daily/weekly/monthly/quarterly operating rhythm for a Google Ads account. Orchestrates tracker (observe) and optimizer (act) at the right cadence, remembers when each was last run, auto-surfaces overdue checks, and gates every action behind explicit preconditions (only act when ALL are met, else wait). Use when the user says "daily routine", "weekly review", "what should I check today", "routine", "what's due", "ongoing management", "what can I change now".

SKILL.md

6.2 KB, as published. Nobody here has run it

Google Ads — Routine (cadence + decision gates)

This is the operating rhythm, not a new analysis engine: it calls tracker and optimizer at the right cadence, remembers history, and gates actions so nothing changes unless its preconditions are met. It answers: "what do I check today, what am I allowed to change, and under what conditions."

STEP 0 — Read state + build today's agenda

  1. Load account-context.yaml (esp. guardrails, margin_tiers, campaign_defaults).
  2. Run the history engine: python "${CLAUDE_PLUGIN_ROOT}/skills/routine/scripts/routine_state.py" [--today YYYY-MM-DD] It reads routine-state.json in the working dir and prints what's DUE / OVERDUE per cadence.
  3. Run everything that's due or overdue — not just what the user asked. If the user says "daily" but the weekly/monthly is overdue (they haven't checked in a while), run those too and say so. This is the "it remembers and nags" behavior: long gap → the overdue cadence surfaces automatically.

Model dispatch (run cheap, decide expensive) — see ${CLAUDE_PLUGIN_ROOT}/references/model-tier-dispatch.md

  • Scout (haiku) — STEP 0 routine_state.py run (agenda) and the --mark stamp after acting.
  • Routine / Judge — inherited from the skills this orchestrates: tracker and optimizer carry their own per-STEP tiers (collection is Routine, verdicts are Judge).
  • Judge (main session) — the decision gates (every precondition check, +10% vs WAIT), reading the cooldown from guardrails, and deciding what overdue work to run. The agenda is cheap; the gate is judgment — never delegate a gate.

Cadence checklists (each calls existing skills — don't re-implement)

  • Daily (~15 min) — health check, NOT optimization. Via tracker: spend/CPC/clicks vs yesterday, budget pacing, disapprovals/policy, paused-by-error, sudden anomalies. Goal = spot what's BROKEN. No performance changes off one day of data.
  • Weekly (1-2h) — via optimizer: search-term review (mandatory, both sources) — pull search_term_view (covers Search/Branded campaigns) AND PMax/Demand-Gen search category insights (campaign_search_term_insight; search_term_view does NOT contain PMax terms). Feed both to search_term_miner.py. Never propose blocking brand terms (brand intent = your own traffic, even at 0 conv). Then: budget pacing + reallocate to top performers, campaign tiering, automated-rules check. Apply the decision gates below.
  • Monthly (2-4h): the full money-leak sweep — run D1-D14 in ${CLAUDE_PLUGIN_ROOT}/references/diagnostic-playbook.md: bid/target health (decode bidding_strategy_system_status; lower tROAS if LIMITED_BY_INVENTORY, scale if LIMITED_BY_BUDGET on-target), budget allocation (shift low-ROAS→high-ROAS), geo waste, dayparting, structure, Quality Score, PMax channel distribution (D8), ad copy/assets/extensions (D9). Any tROAS/budget move follows the Scaling Ladder (one variable, cooldowns). Plus conversion-tracking audit (measurement), attribution review. Pull a fresh audit if drift is suspected.
  • Quarterly: strategic audit + plan alignment to business goals.

Decision gates — only act when ALL preconditions hold (else WAIT and say which failed)

Read the spacing/cooldown from the context guardrails (the change-event-cooldown rule), don't hardcode it.

ActionPreconditions (ALL must hold)Step
Scale budget UPROAS ≥ margin-tier target · campaign is budget-limited (lost IS to budget / capping) · no budget change within the context cooldown · not reversing a recent decrease · not in Learning · ≥~15 conv/week+10% (gentle), never bigger
Raise target ROAS≥15 conv/week · ≥2 weeks since last target change · ROAS stable above current target · no recent change_event+0.1x per step
Add negative keywordterm >$10 spend AND 0 conv (or clearly irrelevant) · NOT in the protected set (store/coupon/cheap-brand)exact/phrase, ready-to-copy
Scale budget DOWNROAS < target sustained (not one bad day) · not in Learning · not reversing a recent increase within cooldownPMax: pause low-ROAS asset groups, do NOT cut budget
Pause campaign / asset groupDead tier (ROAS < ~0.5× target) sustained · checked non-paid (organic/email) revenue contribution firstPMax → pause the asset group, not the campaign budget

Rules of the road (see ${CLAUDE_PLUGIN_ROOT}/references/optimization-playbook.md): never reverse budget direction within the cooldown window (went up → stay up or hold); hold the cooldown between changes so Smart Bidding stabilizes; prefer Mondays for budget changes (cleaner weekday pacing). If a precondition fails, do NOT act — report the action as "WAIT — needs: <the failing condition>".

After acting — record it

Stamp the cadence so history stays accurate: python "${CLAUDE_PLUGIN_ROOT}/skills/routine/scripts/routine_state.py" --mark weekly --actions "raised <campaign> budget +10%; added 4 negatives" Account mutations still go through pusher (approval gate): the optimizer serializes the gated actions into a change-set.json, and pusher validates (validate_changeset.py — the cooldown gate re-checks the spacing this routine just decided) + renders CHANGE-PLAN.md. The routine proposes + gates; it doesn't push silently.

Scheduling (optional)

Pairs with cron/scheduled agents: a daily cron runs the daily health check; a Monday cron runs the weekly routine. The history engine means even ad-hoc runs catch up anything overdue.

To build / refine later

  • A one-line "what changed since last run" diff from the log.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.