Claude Code turns Google Ads work into terminal work: one command adds
the connector, /mcp confirms the tools, and from then on your agent
reads and runs the account in the same session as your code — audits,
budgets, bids, new campaigns, executed on your command in seconds, with
output that lands in files instead of chat scroll. Setup for
all Claude surfaces is covered in
connect Claude to Google Ads; this page
is the developer workflow on top.
One command, then verify
claude mcp add --transport http adcopilot https://mcp.adcopilot.cloud/c/<your connector key>/mcp
Start claude, run /mcp, and the adcopilot server should list its
tools — reads like search and list_accessible_customers, writes like
create_campaign and add_negative_keywords. First prompt:
List the accounts you can see, then give me last 7 days of spend and
conversions for account <account>.
Reads run without ceremony. The first write triggers Claude Code's permission prompt in the terminal — tool name, arguments, allow options — which is the approval loop in its terminal form.
One rule before anything else: the connector address is a credential.
Keep the server in local or user scope, never in a committed .mcp.json,
and treat a leaked key like a leaked token — kill that connector from
your dashboard and mint a new one. The full model is on
the security page.
The point of the terminal: output that persists
Chat clients answer; Claude Code produces artefacts. Make that the habit from the first session:
Audit account <account> for the last 30 days — wasted spend, search
terms, disapprovals, structure — and write the findings to
reports/ads-audit-2026-08-10.md with a ranked action list at the top.
Now the audit is a file: commitable, diffable against next month's, greppable. The same pattern covers weekly summaries, change logs, and negative-keyword decisions — an ads paper trail living in git next to the site whose ads it describes. When a finding needs code changes (a landing page, a tracking fix), the same session reads your codebase and makes them; that combination is the workflow no browser tab has.
Put the house rules in CLAUDE.md
Claude Code reads CLAUDE.md at session start — use it so every ads
session inherits your conventions instead of relearning them:
## Ads conventions
- Google Ads account: <account> (the only account to touch)
- Currency: INR. Budgets stated per day.
- New campaigns: always created paused, never enabled in the same
session they are created.
- Negatives: exact match for one-off junk, phrase for patterns.
- Every session that changes anything appends to reports/ads-changelog.md.
Five lines, and prompts shrink from paragraphs to verbs — "run the weekly sweep" now means the same thing every week.
Script the weekly check — read-only by construction
claude -p runs a prompt headless and prints the result, which turns
the weekly routine's
reporting half into a script:
claude -p "In account <account>: last 7 days vs previous 7 — spend,
conversions, cost per conversion by campaign, then the top 10 search
terms with cost and no conversions. Markdown." \
--allowedTools "mcp__adcopilot__search,mcp__adcopilot__list_accessible_customers" \
> reports/weekly-$(date +%F).md
The --allowedTools list is the safety design, not a convenience:
headless runs have nobody at the approval prompt, so scripts get read
tools only. Built that way, the cron job that drops a Monday report into
your repo can never mutate the account — writes stay in interactive
sessions where you approve them one by one. Schedule it, then spend your
Monday twenty minutes acting on the file instead of gathering it.
Quirks worth knowing
- Tool names are prefixed — in
--allowedTools, MCP tools followmcp__<server>__<tool>, so the exact strings depend on the server name you chose inclaude mcp add(here,adcopilot). - Approvals are per tool — allow
add_negative_keywordsfor a session without also allowingupdate_campaign. Graduate tools the way the approval workflow suggests: harmless writes first, spend writes never. - Same address everywhere — the URL you added here also works in Claude Desktop, Gemini CLI and Cursor; one connector, every client, and the full client list shows each config shape.
If you have a terminal open and no connector yet:
Start a free pilot — sign in with
Google, copy the address, and the claude mcp add line above is the
entire setup. Your first audit file can exist ten minutes from now.
Frequently asked questions
Which scope should the connector be added under?
Local or user scope — never project scope. Project scope writes the server config into a .mcp.json that typically gets committed, and your connector address is a credential: whoever holds it can act on your ad account through their own client. Local scope (the default) keeps it to this machine and directory; user scope makes it available in all your projects.
Can a cron job make changes to my ad account?
Only if you explicitly allowlist write tools, so don't. In headless mode there is no human at the approval prompt, which is exactly why scripted runs should pass only read tools in --allowedTools. A script built that way can query and report forever but cannot mutate — the write path stays interactive, where the approval loop exists.
Why use Claude Code for ads instead of Claude Desktop?
Files and repeatability. Claude Code writes audit output to markdown you can commit, diff week over week, and pipe into anything else; a CLAUDE.md carries your account ID and house rules into every session; and -p mode turns any recurring read into a one-line script. Desktop is better for conversational work — the connector address is the same in both.
Try it on your own account for a week
The full set of tools for the week, so you can see what it actually does — and it still cannot delete anything. No cost, no card, no contract: you connect your own Google account and can withdraw the access whenever you like.
- Up to 5 accounts
- One week
- Full tools
- No card
- Autonomous agentsLevels of autonomy in Google Ads management, which optimisation work is safe unattended versus which needs approval, and why irreversible actions should not be automated.
- Google Ads MCP serverWhat a Google Ads MCP server is, how free self-hosted servers compare to a hosted one, the full tool list AdCopilot exposes, and what you need to connect.
- Connect ClaudeStep-by-step instructions for adding a Google Ads MCP connector to Claude Desktop, claude.ai and Claude Code, including what to ask it first and how to revoke access.
- Connect ChatGPTStep-by-step instructions for adding a Google Ads MCP connector to ChatGPT, what it can read and change, and how to withdraw access.