TrendingDon't panic-bid on your own brand after the spam update.
AI & Data

Claude Code can operate your ad accounts. The question is what you let it touch.

Claude Code already pulls last week's numbers, drafts the negatives, and stages a budget change across Google Ads and Meta, wired in through the Model Context Protocol (MCP) and the platforms' own APIs. Here is how the plumbing works, why Google's own connector refuses to spend a cent, and where the guardrails still have to come from you.

MSMikołaj Salecki, portrait
Editor-in-chief
Jul 13, 2026·10 min read
A plaster hand resting on a terminal keyboard, two thin brand-blue cables running from the keys to labeled boxes marked Google Ads and Meta, a small plaster padlock clamped on the cable feeding the Meta box
One keyboard, two ad platforms. The lock isn't on the connection. It's on what the connection is allowed to change.Illustration: Mediovsky · generated with AI
TL;DR
  • Claude Code reaches ad platforms through two layers: the Model Context Protocol (MCP) gives it hands, the platform API does the work. [2]
  • The read path is ready now. Google's official Google Ads MCP server ships three query tools and cannot change a thing. [3]
  • The write path hides a trap: Google Ads has one broad OAuth scope, see-edit-create-delete, with no read-only sub-scope. [8]
  • Community and hosted servers do mutate, usually creating campaigns paused by default. [8]
  • The platforms are adding guardrails, like multi-factor authentication (MFA) and multi-party approvals, but for account access, not for what an agent spends. [9][10]
  • APIs move monthly: Google Ads v24.2, Meta v25.0, both with rolling sunsets. [5][7]

You type one sentence: pull last week's search terms with spend over $50 and no conversions, and draft me a negative list. Seconds later Claude Code has queried the account, filtered the rows, and handed back a reviewed list, in the same terminal you would use to edit a config file. Type again and it stages the budget shift you asked for, ready to confirm. This is not a demo. It runs today, because two pieces finally clicked together: a standard way to give a language model access to a system, and ad platforms that expose that system through an API.

The standard is the Model Context Protocol (MCP), an open protocol for connecting AI models to the tools and data where your work lives. [2] Claude Code, Anthropic's command-line coding agent, speaks it natively and can connect to hundreds of external tools through it. [1] Point it at an ad platform and the assistant that drafted your campaign brief can now read the campaign, and, if you let it, change it.

The interesting part is not that this works. It is what the platforms decided to allow, and what they left for you to secure.

01The three layers, and who owns each

Before the guardrails make sense, the stack has to. There are three layers between your sentence and a changed account, and different people own each.

1

Claude Code, the operator

The agent that reads your intent, decides which tool to call, and holds the conversation. It runs on your machine and connects to MCP servers you configure. It is where the reasoning happens, and where you set what it may do.

You run it
2

The MCP server, the adapter

A small process that exposes one system's actions as typed tools an agent can discover and call. For Google Ads it can be Google's official server or a community one. For Meta it is a community or hosted server. This layer decides what is even possible. [3]

You choose it
3

The platform API, the machinery

The Google Ads API or the Meta Marketing API, the same interfaces every third-party tool is built on. This is what actually reads a metric or moves a budget, under credentials you provision and scope. [4]

The platform owns it

The whole safety question lives in layer two, and in the credential it carries. The API can do almost anything, and Claude Code will call whatever it is given. So the adapter you connect, and the token behind it, are the decisions that matter most, and the two platforms have made opposite ones.

02The read path, which is genuinely ready

Start where the risk is lowest and the value is immediate: reading. Reporting, anomaly-spotting, and cross-account analysis are safe to automate because the worst case is a wrong answer you can check, not a wrong charge you cannot undo. This is exactly the closed-loop, reversible territory where agents are already production-ready.

Google ships an official connector for precisely this. The Google Ads MCP server, published at github.com/googleads/google-ads-mcp, installs with a single pipx command and gives any MCP-compatible client read-only access to an account. [3] It exposes three tools, all queries: search to run a query, get_resource_metadata to return schema for resources like campaigns, and list_accessible_customers to list the accounts you can reach. It runs locally over standard input-output, so Claude Code launches it as a subprocess.

Wiring it in is a short entry in a .mcp.json file. Claude Code reads three scopes: local (just you), project (shared with your team through a committed file), and user (all your projects). [1]

{
  "mcpServers": {
    "google-ads": {
      "command": "pipx",
      "args": [
        "run", "--spec",
        "git+https://github.com/googleads/google-ads-mcp.git",
        "google-ads-mcp"
      ],
      "env": { "GOOGLE_ADS_DEVELOPER_TOKEN": "your-developer-token" }
    }
  }
}

Once connected, the agent works in the account's own query language, GAQL. You describe the report, Claude Code writes and runs the query, and reasons over the rows. The request that once took three screens becomes one line of intent behind this:

SELECT search_term_view.search_term, metrics.cost_micros
FROM search_term_view
WHERE metrics.conversions = 0
  AND metrics.cost_micros > 50000000
  AND segments.date DURING LAST_30_DAYS

One credential detail shapes how far this scales. A developer token at Test or Basic access runs up to 15,000 operations per day (any get or mutate request); Standard access lifts that to effectively unlimited. [4] For read-heavy analysis across a handful of accounts, Basic is usually enough to start.

The signal hiding in that read path is worth stating plainly: Google's own MCP server ships three tools, and every one of them is a query. [3] Read that as a design decision, not a limitation. The company that owns the data decided what an agent should get by default: look, do not touch. To spend money in Google Ads you will not use Google's connector. You build the write path yourself, which means you own the guardrails.

03The write path, and the scope you can't narrow

Writing is where the convenience gets seductive and the stakes change. A mutate action does not return a wrong answer you can catch. It spends a budget, pauses a winner, or ships a broken creative, at the speed of automation.

Two cropped plaster hands facing each other over a thin brand-blue rule, the left hand open and reading a small card, the right hand held back behind a hairline gate, a dotted matrix between them
Reading is open. Writing waits behind a gate you build yourself.Illustration: Mediovsky · generated with AI

Here is the part that surprises people. Google Ads exposes one broad OAuth scope, adwords, described on the consent screen as "see, edit, create, and delete your Google Ads accounts and data." There is no read-only sub-scope, so a community MCP that only reports asks for the same all-powerful permission as one that can delete a campaign. Pipeboard, a hosted vendor, states that its Google integration requests that scope and lets an assistant "create or update campaigns." [8] Granting it is closer to adding an admin than wiring a reporting tool. The scope does the talking, not the tool's description.

That reframes the choice. There are two ways to give Claude Code write power, and they trade control against effort.

The fast one is to connect a write-capable server. A hosted option like Pipeboard's Meta Ads MCP exposes dozens of tools and skips the developer-app setup, and its defaults are safer than you might expect: it creates campaigns paused, so a human approves before spend starts. [8] But it holds the broad scope, and its safety model is the vendor's, not yours.

The slower one is to build your own mutate tools: thin, typed tools you write against the API and expose to Claude Code yourself. You still hold the broad scope, but you decide which actions exist, on which accounts, with what caps. It is the only path for Google Ads writes, and the honest choice for any account you cannot afford to have wrecked.

For Meta, the community ecosystem is where the writes live. Pipeboard's Meta Ads MCP runs as a hosted server and can launch campaigns, upload creatives, and update budgets through conversation, with every new campaign paused by default. [8] That is the posture to demand from any write-capable server. If you build your own path instead, keep write actions in narrow, separate tools that validate inputs and create changes paused, so the only things that can change are the ones you deliberately allowed. The scope alone will not stop the rest.

04Google and Meta are not the same target

The two platforms differ in ways that decide how you wire each, and both move under your feet.

Google Ads Meta (Facebook and Instagram)
Official MCP server Yes, read-only [3] No official server; community and hosted [8]
Query language GAQL Marketing API endpoints
Auth to start Developer token + OAuth [4] Hosted server: one connect step [8]
Current API version v24 (v24.2, June 2026) [5] v25.0, February 2026 [7]
Version lifecycle Monthly releases; v21 sunsets August 5, 2026 [6] Rolling expiries by version [7]

The versioning treadmill is real. Google moved the Google Ads API to a monthly release cadence starting with v23 in January 2026; the current version is v24, with v24.2 out on June 24, 2026, and older versions sunset on a schedule, v20 on June 10 and v21 on August 5, 2026. [5][6] Meta introduced Graph and Marketing API v25.0 in February 2026 and expires versions on its own clock. [7] Any integration is a maintenance commitment, an argument for a thin mutate layer you can update in one place rather than custom code sprawled across endpoints.

The subtler shift is strategic. The API is narrowing on the automated campaign types you might most want an agent to manage: as of Marketing API v25.0, Meta's legacy Advantage Shopping and App campaigns can no longer be created or updated through the API. [7] The platforms are steering their most automated products, the same push visible in Performance Max and Advantage+, toward goal-set control that you set and they run. Where that happens, the lever an agent can pull through the API gets shorter, and the setup you define matters more.

05The guardrails are the job

Do not assume the platforms will secure this for you. They are adding controls, but they guard a different door. Google now requires multi-factor authentication for new API tokens on the user-auth flow [10], and its new multi-party approvals cover account actions like user invitations and access-level changes, not the budget and bid moves an agent makes once authorized. [9] They harden who gets in. What an authorized agent does inside is still on you.

So build the write path like it can spend money, because it can. Turn the read path on this afternoon. Before you turn on the write path, work down this checklist, and treat the failures as blocking.

Self-check

Is your account safe to let Claude Code write to it?

Six controls decide it, weighted by how much protection each carries. "Ready" means the write path is reversible, scoped, and watched. "Exposed" means a confident agent can spend faster than you can catch it.

0/100
Exposed

The first two controls are the gate. Because the OAuth scope is all-or-nothing, the only real limit on blast radius is which accounts the credential reaches, so a token wired to a sandbox reads very differently from one that can touch every client. Pair that with human approval on spend, and a model mistake shows up in a paused campaign instead of a charge.

One control needs underlining: the server you trust. Claude Code's documentation warns to verify you trust each server before connecting it, because a server that fetches external content can expose you to prompt injection. [1] For a connector holding a scope that can delete campaigns, that is not boilerplate. It is the threat model.

So where does this leave the other ways to automate an account? Google Ads scripts still win the deterministic, scheduled, single-platform jobs. A workflow tool wins the fixed, repeatable pipeline. Claude Code with MCP wins the exploratory, conversational work: pull the data, reason about it, draft the change, stage it for a human, across accounts, in one terminal. Most teams run all three, each on the work it fits.

The honest position for 2026 is the same one that holds for every capable agent. The convenience is real, and you should take it: the reading alone saves your team hours a week, starting now. What has not changed is who is accountable when a budget moves. Keep a human on every write, wire the agent to the narrowest slice of the account it needs, and the account that gets wrecked this year will not be yours. It will be the one where someone mistook a plain-English sentence for a safe one.

Sources

  1. Anthropic · Connect Claude Code to tools via MCPtransports (HTTP recommended, stdio local, SSE deprecated), installation scopes, OAuth via /mcp, per-tool permissions, and the trust and prompt-injection warning
  2. Model Context Protocol · IntroductionMCP as an open standard for connecting AI models to tools and data
  3. Google · Google Ads MCP serverofficial server, read-only by design; the three query tools (search, get_resource_metadata, list_accessible_customers) and the pipx install
  4. Google for Developers · Access levels and permissible useTest and Basic access capped at 15,000 operations per day; Standard access effectively unlimited
  5. Google for Developers · Google Ads API release notesmonthly cadence since v23 (January 2026); current v24, with v24.2 on June 24, 2026
  6. Google Ads Developer Blog · Google Ads API v21 sunset reminderv21 stops serving requests on August 5, 2026; v20 sunset June 10, 2026
  7. Meta for Developers · Introducing Graph API v25.0 and Marketing API v25.0v25.0 on February 18, 2026; legacy Advantage Shopping and App campaigns can no longer be created or updated via the Marketing API, extending to all versions by May 19, 2026
  8. Pipeboard · Google Ads MCP: permissions and capabilitiesrequests the broad adwords OAuth scope ("see, edit, create, and delete"); write-capable ("create or update campaigns"); the Meta server creates campaigns paused by default
  9. Google Ads Developer Blog · Multi-party approvals in the Google Ads APIsecond-admin approval added across versions for sensitive account actions such as user invitations and access-level changes, not campaign mutations
  10. Google Ads Developer Blog · Multi-factor authentication requirement for the Google Ads APIMFA required for new OAuth refresh tokens on the user-auth flow, rolling out from April 21, 2026; service accounts unaffected

Frequently asked questions

Can Claude Code actually manage Google Ads and Meta campaigns?

Yes, through two layers. The Model Context Protocol (MCP) gives Claude Code a standard way to reach an ad platform, and the platform's own API does the work. Reading is production-ready today: Claude Code can run queries, pull performance, and draft reports across accounts. Writing depends entirely on which server you connect. Google's official Google Ads MCP server is read-only by design. Community and hosted servers, like Pipeboard's, do expose write actions, usually creating campaigns paused by default so a human approves before spend starts.

What is the difference between using MCP and calling the ad API directly?

The API is the machinery that reads and changes an account. MCP is a standard wrapper that lets an AI agent discover and call that machinery in plain language, without a bespoke integration for every tool and account. In practice you either connect a prebuilt MCP server that wraps the API, or build your own thin tools that call the API directly and expose them to Claude Code. The read path is similar either way. The write path is where the wrapper you choose decides how much can go wrong.

Why is Google's official Google Ads MCP server read-only?

Google shipped its server (github.com/googleads/google-ads-mcp) with three tools, all of them queries: search (GAQL), get_resource_metadata, and list_accessible_customers. It cannot change bids, pause campaigns, or create assets. That is a deliberate choice and a useful signal: the platform that owns the data decided the safe default for an agent connector was to look, not touch. If you want an agent to spend in Google Ads, you build that mutate path yourself and own the guardrails.

What is the OAuth scope problem with write-capable ad MCPs?

Google Ads exposes one broad OAuth scope, adwords, described on the consent screen as 'see, edit, create, and delete your Google Ads accounts and data.' There is no fine-grained read-only sub-scope today. So a community MCP that only reports still asks for the same all-powerful scope as one that can delete campaigns. Granting it is closer to handing over admin access than wiring up a limited reporting integration, which is exactly why the credential you attach, and the accounts it can reach, matter more than the tool's description.

Is it safe to let an AI agent change a live ad account?

Only with the discipline you would apply to any automation that spends money, plus one more layer. Scope credentials so the write path is separate from the read path, keep a human on every consequential change, and prefer tooling that creates changes paused rather than live. The specific risk with an agent is that it can pursue a slightly wrong objective faster than you can notice. The fix is not distrust of the model. It is a mutate path that is reversible, logged, and gated, so a mistake surfaces in a preview or a paused campaign, not in the spend report.

What do I need to connect Claude Code to Google Ads?

A Google Ads API developer token, OAuth or Application Default Credentials, and the MCP server itself. The official server installs with a single pipx command and runs locally over standard input-output (stdio), so Claude Code launches it as a subprocess. Mind the access tiers: a developer token at Test or Basic access is capped at 15,000 operations per day, while Standard access lifts that to effectively unlimited. For read-heavy analysis, Basic is usually enough to start.

Can Claude Code create Facebook and Instagram campaigns?

Yes, through community and hosted servers rather than an official one. Pipeboard's Meta Ads MCP exposes dozens of tools that launch campaigns, upload creatives, and adjust budgets across Facebook and Instagram, and runs as a hosted remote server so you skip the developer-app setup. It creates campaigns paused by default, which is the right posture. Note that the Meta API surface is narrowing on automated campaign types: as of Marketing API v25.0 the legacy Advantage Shopping and App campaigns can no longer be created or updated through the API at all.

How does Claude Code handle MCP permissions?

It treats each MCP tool as a named capability you can allow, deny, or approve per call, and you authenticate remote servers that use OAuth through the /mcp command. Servers are configured at three scopes: local (just you, this project), project (shared with your team through a committed .mcp.json file), and user (all your projects). HTTP is the recommended transport for remote servers, stdio for local ones, and the Server-Sent Events (SSE) transport is deprecated. The docs warn plainly to verify you trust each server before connecting it, because a server that fetches external content can expose you to prompt injection.

Aren't the platforms adding their own guardrails?

Some, but not the ones you need most. Google now requires multi-factor authentication for new Google Ads API tokens (rolling out from April 21, 2026) and added multi-party approvals across API versions. But those approvals cover sensitive account actions, like user invitations and access-level changes, not the budget and bid moves an agent would make. The controls protect who can touch the account, not what an authorized agent does once it is in. That second guardrail is still yours to build.

Will the API versions I integrate against keep changing?

Constantly. Google moved the Google Ads API to a monthly release cadence starting with v23 in January 2026; the current version is v24, with v24.2 out on June 24, 2026, and older versions sunset on a schedule (v20 stopped serving on June 10, 2026, v21 on August 5, 2026). Meta introduced Graph and Marketing API v25.0 in February 2026 and expires versions on its own rolling clock. Any integration is a maintenance commitment, which argues for a thin, well-scoped mutate layer you can update in one place.

Should I use Google Ads scripts, an MCP agent, or a workflow tool?

They solve different problems. Google Ads scripts are best for deterministic, rules-based jobs on a schedule inside one platform. A workflow tool like n8n or Make is best for fixed, multi-step pipelines across services. Claude Code with MCP is best when the task is exploratory and conversational: pull the data, reason about it, draft the change, and stage it for approval, across accounts, in one place. Many teams run all three, each on the work it fits, with a human owning the objective every time.

Found this useful?
MSMikołaj Salecki, portrait
Editor-in-chief

Mikołaj Salecki

Writes about media, tech, and AI business for people who actually run digital. Former agency lead. Skeptic of frameworks that read better than they perform.

More articles →

Get the next issue by email.

One letter, once a week. Sharp coverage of media, tech, and AI business. No filler.

By signing up you agree to our privacy policy and to receive weekly emails. Unsubscribe anytime.