The Google Ads MAA Agent: Weekly Ads Management, Run by AI

The Google Ads MAA Agent is an AI system that produces the weekly performance report for a Google Ads account. Every week it pulls the account data straight from the Google Ads API, compares it against last week, diagnoses what moved and why, and drafts a Metrics, Analysis, Action report along with a chart-backed client version. A human reviews every draft before the client sees it. Nothing publishes on its own, and nothing changes in the account without a person approving a script.

We built it at Local Service Spotlight to run Dennis Yu’s MAA framework at a consistency no manual process gave us. The framework supplies the discipline: real numbers, a diagnosis before any recommendation, actions with owners and deadlines. The agent supplies the part humans are worst at, which is doing it every single week without shortcuts. The code is public: google-ads-maa-skills on GitHub, MIT-licensed, with a full worked example.

The Google Ads MAA Agent weekly pipeline: client memory, data pull, draft, render, human review, post, with a feedback loop into next week

What it is, and what it isn’t

It’s a reporting and diagnosis system. It reads the account, explains it, and stages the work. It is not an autopilot that edits bids or budgets on its own. The data connection is read-only by design, every change ships as a dry-run-first script a person approves, and every report is a draft until a person posts it.

That boundary is deliberate. The value of a weekly MAA is trust: the client sees the same numbers we see, the bad news gets named, and the recommendations trace back to evidence. An AI that quietly edited the account would undercut the thing the report exists to build.

Why the structure matters

MAA stands for Metrics, Analysis, Action: what the numbers did, why they did that, what we’re doing next. Dennis Yu built the framework at BlitzMetrics, and his core claim is that analysis is 10x more important than metrics. Metrics say the patient’s arm hurts; analysis is the X-ray that finds the broken bone. Most agency reporting skips the X-ray, which is why the same PDF with the same three bullets shows up every month while CPA sits at $200.

The discipline is the point. No recommendation gets made unless there’s a specific number it moves and a specific reason it moves that number. “Add some negatives” is not an action. “Add exact match negatives for the competitor brand in the search terms, worth about $140 a week based on 30-day data” is an action. Dennis’s MAA article is the definitive reference for the framework itself; this article is the definitive reference for the tool that runs it.

The proof: one account, twelve cycles

American AF Dumpsters is a Dallas dumpster rental business running a single Search campaign against an $85 target CPA. When structured weekly runs started on this account, the 30-day CPA was $216.50. Twelve cycles later:

Cycle ending30-day CPA
2026-04-24$216.50
2026-05-01$167.83
2026-05-08$179.17
2026-05-15$142.52
2026-05-22$130.57
2026-05-29$136.70
2026-06-05$112.99
2026-06-12$96.52
2026-06-19$77.51
2026-06-26$79.55
2026-07-03$72.45
2026-07-10$68.21

The 30-day cost per lead fell 68% over twelve cycles, crossed under the $85 target in mid-June, and has held there for four straight cycles. $68.21 is the account’s best 30-day average since tracking began. Two moves drove the early gains. Dynamic Keyword Insertion on the geo keywords took city-specific Quality Scores from the 2 to 6 range up to 9s and 10s, and impression share lost to rank fell from 30.68% to 11.00%. And breaking the account’s highest-spend keyword, “roll off dumpster,” out of a crowded ad group into its own tightly matched one took it from QS 3 with zero conversions to 3 conversions at $78.84, under target. From there the weekly loop compounded: the budget got raised only after impression share data proved budget was the constraint, negatives ran every cycle to keep the new traffic clean, and when a new ad underperformed in week one, the agent held its recommendation an extra cycle instead of reacting to a single bad week.

None of this is sophisticated. It’s a disciplined checklist, run every week without skipping. Individual runs are documented in the meta articles below, one article per run.

How a weekly run works

It starts from memory, not from scratch. The agent keeps a knowledge base per client: a metric spec (which numbers lead the report and in what order), an active issues file (running problems every analysis must address), a trend file feeding 13-week lead and cost-per-lead charts, and last week’s report, because this week opens by checking whether last week’s actions worked. This is what separates it from pasting a CSV into a chatbot: no weekly amnesia.

It pulls the data itself. The primary data source is the official Google Ads MCP, a read-only bridge to the Google Ads API. The agent queries campaigns, keywords with Quality Score components, search terms, ad performance, and conversion detail, each in 7-day and 30-day windows. Numbers come from the platform, never estimates; anything unreachable gets a visible FILL IN marker for the reviewer rather than a guess. When the analysis raises a question the initial data can’t answer, it pulls the extra data in the same cycle, so “worth investigating” becomes a grounded action this week instead of a deferral to next week.

It writes the draft under the framework’s gates. Every metric carries a comparison and its counterweight (a falling cost per lead means nothing until volume and lead quality check out beside it). The weakest area gets named, never buried. Inferences are labeled “to be verified,” not stated as fact. Noisy small-budget accounts get two to three weeks of consistent evidence before a change earns an action item. Structural fixes come before the tactical work that depends on them. And the action list is one list with owners tagged inline, never padded to look busy.

It renders the client view. The full MAA is a working document; clients get a second rendering with a one-paragraph summary, the two trend charts, flagged watch items, and a short list of what we need from them. Same findings, built for an owner reading between jobs.

A human closes the loop. The reviewer checks the draft, fills gaps, adjusts what the data alone couldn’t know, and posts it. Then the memory updates, and the cycle repeats.

How to set it up yourself

Everything below lives in the public repo: github.com/Goodrich-Dev/google-ads-maa-skills. Setup takes about 20 to 30 minutes per account.

What you’ll need: a Google Ads account (or MCC) with admin access, Claude (Cowork or Claude Code), and for the live data connection, a Google Ads API developer token, a Google Cloud project, and OAuth credentials.

Step 1: Install the skills. Copy the folders under skills/ into your Claude skills directory, or install the repo as a plugin. Six skills come in the box: the analyzer (the quarterback), a copy optimizer, a change-script builder, a landing page auditor, an automation script builder, and the client-view renderer.

Step 2: Connect the data. Two routes, and the repo’s WALKTHROUGH.md covers both.

  • Route A, the Google Ads MCP (recommended). A read-only, live connection to the Google Ads API. The repo’s shared/frameworks/mcp-setup-guide.md walks through the credentials, local or Cloud Run deployment, and verification. This is the route that gets correctly-labeled Quality Score components and mid-analysis follow-up pulls.
  • Route B, the export script. A Google Ads Script (built by the google-ads-script skill) runs inside the account and emails ten datasets weekly; a Gmail label routes them to the analyzer. No API credentials or cloud project needed, about 20 minutes in the Ads UI, and it’s the backup that keeps scheduled runs alive when the MCP’s authorization lapses. We ran the system on this route alone for months.

Set up A, B, or both; the analyzer prefers the MCP and falls back to the email automatically.

Step 3: Run your first MAA. Say “do an MAA for [account].” On a new account the agent asks a few setup questions: target CPA, primary conversion goal, service area. It writes the draft, and from then on each run builds on the last.

Step 4: Review, apply, render. Read the draft. Run any generated change script in dry-run first, confirm the preview, then run it live. Say “render the client view” and deliver the report.

Verify it worked: the draft’s numbers match the Google Ads UI, every action item has an owner, the weakest area is named, and the chart endpoints equal the report’s bottom-line numbers. The repo’s worked example (an anonymized client, real numbers) shows what good output looks like.

The tool improves the way an account manager does

Every rule in the agent came from a run that went wrong or a reviewer’s edit, and the repo’s changelog keeps the record. When a draft recommended landing page work ahead of a campaign restructure that would have redone it, “structure before tactics” became an enforced gate. When a report padded a client’s action list to look balanced, “no padding” became a rule. When a strong week’s summary ended on a hedge, “keep the bottom line confident” went into the render skill. The process is the same apprenticeship a junior account manager goes through, minus the forgetting: we run it on live accounts, find the improvement, and push it to the repo.

Where it falls short today

We publish the seams because the fixes are the roadmap:

  • Authorization friction. The Google Ads connection can require reauthorization as often as daily. That single step is what stands between the current roughly 90% autonomous state and fully hands-off scheduled runs. Until it’s solved, the email pipeline stays wired as the backup so a scheduled run degrades instead of stalling.
  • Follow-up pulls are young. The agent now answers its own questions with mid-cycle Google Ads pulls; extending that reflex to more sources (page speed tests, keyword research, analytics) is active work, one live run at a time.
  • Moving from Opus to Sonnet. The agent currently runs on Claude Opus, the second most capable model, at roughly $2 to $4 per weekly run. The plan is a champion/challenger migration to Claude Sonnet, which costs a fraction as much: run Sonnet drafts alongside Opus on the same weekly data, score both against the same quality gates and the reviewer’s edit count, and promote Sonnet one stage at a time. The client-view render goes first, since it’s mechanical projection with a trace-check, and the analysis goes last, since diagnostic judgment is where model quality shows. Sonnet earns each stage by matching Opus on live accounts, not by assumption.

Full automation is the goal, but only of the pipeline. The review gate stays.

Real examples: meta articles from live runs

Each example below is a meta article documenting one specific run: what the agent did, the judgment calls it made, what a human changed, and what it cost versus the manual equivalent. One run, one meta article. The library grows weekly, because the agent writes one after each run.

  • How We Ran a Weekly Google Ads Review With AI That Fixed Its Own Blind Spot (the American AF Dumpsters run, 2026-07-10). A dormant ad group only ever converted on leaked roll-off intent; instead of writing “keep watching,” the agent pulled keyword research mid-cycle, found the real demand in untargeted terms like “monthly dumpster rental,” and shipped two dry-run change scripts with a fold-or-keep decision rule. The 30-day cost per lead hit $68.21 across 44 leads, the account’s best mark since tracking began. About 14 agent-minutes and $1.95 against roughly an hour to an hour and a half of manual work.
  • How We Ran Target Painting’s Google Ads MAA With a Claude Agent (the Target Painting run, 2026-07-10). Budget-lost impression share doubled, and the agent traced it to a landing page score lifting ad rank across the whole ad group (impressions +68% on flat spend). A keyword-attributed search-term diff showed the new auctions were mostly junk, flipping the recommendation from “raise budget” to “tighten match first,” and a PageSpeed follow-up named the next lever: a 6.6-second mobile load. About 14 agent-minutes and $3.70 against roughly an hour to an hour and a half of manual work.

The origin post for this system, with the initial three-piece setup, is on BlitzMetrics: How to Run a Weekly Google Ads Audit That Actually Moves the Numbers.

Related frameworks

  • MAA is the reporting discipline the agent runs. Start there for the why behind every gate above.
  • GCT: Goals, Content, Targeting defines what each client’s campaigns are supposed to accomplish. The agent reads it before writing a word.
  • Digital Plumbing is the tracking infrastructure underneath. The reports are only as honest as the conversion data, which is why tracking verification precedes bid changes.
  • Dollar a Day is the amplification strategy on the content side, measured by the same weekly discipline.

Get started

Run it yourself this week: the repo has everything, and script based setup is about 20 minutes. If you want to learn the framework from its creator, Dennis Yu teaches MAA inside the BlitzMetrics coaching program, working through your own account’s reports with you. And if you’d rather have the agent run on your account with our team reviewing every report, that’s what we do at Local Service Spotlight.

Scroll to Top