Manage Google Ads and Meta campaigns from Claude Code
Claude Code is a terminal-first AI coding assistant, but its MCP support makes it equally capable as an ad operations tool. The same {list_campaigns} and {propose_change} tools that work in Claude Desktop work here — same safety contract, same draft-before-live enforcement.
Why Claude Code for ad management
Claude Code operators live in the terminal, write code, and already have MCP wired in. If you manage a mix of paid media and technical work in the same session, keeping ad operations in the same client removes a context switch. You can pull a campaign report, spot a CPA drift, draft a bid adjustment, and push the approved change — all without leaving your terminal.
The read/draft scope model means there is no different risk profile compared to Claude Desktop. The AI never holds spend authority.
Install SpendSignoff in Claude Code
Open your .claude/settings.json (or ~/.claude.json for global config). Add SpendSignoff to the mcpServers block:
~/.claude.json (mcpServers section)
{
"mcpServers": {
"spendsignoff": {
"type": "http",
"url": "https://mcp.spendsignoff.com/mcp"
}
}
}OAuth on first use
Connecting your ad accounts
Once Claude Code can reach SpendSignoff, ask it to list your connected accounts: "Show me my Google Ads accounts." If none are linked, it will return an empty list and point you to the SpendSignoff dashboard where you link ad-platform credentials via the account-level OAuth flow.
Linking happens once per platform. The credentials are KMS-vaulted server-side — Claude Code never sees your ad-platform access tokens directly.
Reading, drafting, approving
With accounts connected, three verbs describe every operation. Read — the model fetches live data: campaign list, yesterday's spend, keyword-level ROAS. Draft — the model stages a before→after diff, e.g. raising a daily budget from $120 to $150. Approve — you log into the SpendSignoff dashboard, review the diff, and click "Approve & push live." The model cannot skip that step.
Sample session in Claude Code: "Pause all campaigns with a 30-day CPA over $80 and more than 50 conversions." Claude Code calls query_entities to pull the candidates, then calls propose_change once per qualifying campaign. Each change lands in your approval queue as a separate reviewable diff.
No auto-approve path
mcp.approve scope is not issued to any AI client. Budget-moving actions require a human sign-off every time.Practical workflows
- Weekly hygiene — "List keywords with CTR below 0.3% and spend above $50 last 30 days" → review the list → "Pause the top 10 by wasted spend."
- Launch a campaign — "Create a Google Ads search campaign for [product], $80/day, broad-match keywords [k1, k2, k3]." SpendSignoff stages the full campaign object as a draft.
- Cross-platform budget check — "Show me yesterday's spend and conversions for all accounts." Reads both Google Ads and Meta in one response.
- CPA spike triage — "Which ad groups spiked CPA by more than 40% this week vs last week?" Returns a ranked list with before/after figures.
FAQ
- Does SpendSignoff work with Claude Code's agent mode?
- Yes. In agent mode Claude Code can chain multiple tool calls — reading account data, deciding which changes to draft, and queuing several proposals in a single run. All drafts still land in your approval queue; none are applied automatically.
- Is there a difference between connecting via Claude Desktop vs Claude Code?
- The MCP server is identical. The only difference is where you configure the
mcpServersblock — in Claude Desktop's settings UI vs a JSON file for Claude Code. Same OAuth flow, same tools, same safety contract.
Connect an account read-only and watch the operator work.
Reads are free on every plan. Nothing spends without your two-step approval.
Related reading