Google’s official Google Ads MCP server lets Claude read your account and answer questions about it in plain English. It’s free, it’s open source, and it only reads - it can’t change a bid, pause a campaign or add a keyword.
The setup got a lot easier on 9 September 2026. Google retired developer tokens, so the step every other guide still warns you about is gone. On 30 September 2026 the latest version is 0.0.4, released on 25 September, and that’s the one this guide uses.
Google Ads MCP at a glance
| Google’s official server | |
|---|---|
| What it does | Answers questions about your account by running Google Ads reports |
| Tools | search, get_resource_metadata, list_accessible_customers |
| Can it change anything? | No. No bids, budgets, keywords or pauses |
| Cost | Free (Apache-2.0). The Google Ads API has no per-call charge |
| What you need | A Google Cloud project with Explorer access, a Google login, Python 3.10+ and pipx |
| Developer token | Not needed since 9 September 2026 |
| Works in | Claude Desktop, Claude Code, Cursor, Codex, Google’s Antigravity |
| Latest release | v0.0.4, 25 September 2026 |
MCP (Model Context Protocol) is the plug that lets an AI assistant call an outside tool. Without it, Claude only knows what you paste into the chat. With this server, it can go and fetch your actual account data, so you stop copying reports into a chat window.
P.S. We wrote another guide on Facebook Ads MCP to do the same thing for Meta.
What the Google Ads MCP server can do
It has three tools. list_accessible_customers finds the accounts your login can see. get_resource_metadata tells the AI which fields exist on something like a campaign. search runs the actual report, written in Google Ads Query Language .
It also ships four read-only resources the AI can open on its own: the API discovery document, the list of metrics, the list of segments and the latest release notes. That’s how it knows a field called metrics.search_budget_lost_impression_share exists without you telling it.
Google’s own documentation is blunt about the rest:
This implementation is strictly read-only. It cannot modify bids, pause campaigns, or create new assets.
The one thing nobody mentions: the login you give it can write. Google Ads doesn’t publish a read-only login scope, so the server asks for full access and stays read-only because it only ships read tools. The comment sits right there in the server’s code . Treat the credentials file on your laptop like a password, and never hand it to another tool.
So an assistant connected to this can tell you your Brand campaign’s CPA tripled last Tuesday. It can’t then pause it. I’m happy with that trade. The worst a read-only server can do is tell you something wrong, and you can check it.
My own pull of 84 Performance Max campaigns across 42 accounts in August 2026 was read-only API work of exactly this kind. Reading was enough to find that 45 of them had no ROAS or CPA target at all, which I wrote up in the Performance Max audit .
What changed on 9 September 2026
Until this month, every guide to this server (ours included) opened with the developer token. You applied from a manager account, you waited, and applying from a test manager account got you rejected.
Google retired developer tokens on 9 September 2026. API access now belongs to the Google Cloud project that owns your login. You can still send a token and nothing breaks, but Google’s migration guide says the API ignores it, and a future major version will start rejecting it.
The server followed the next morning. Google merged “Remove devtoken validation” on 10 September, and version 0.0.3 went out on PyPI 26 minutes later. You don’t need a manager account any more either, because you sign up in Google Cloud Console.
The access level you need
Turning the API on gets you Test access, which only reaches test accounts. For your real account you need Explorer, which allows 2,880 operations a day against live accounts. That’s two a minute, around the clock, which is far more than one person asking questions in a chat will use.
Google says it may grant Explorer automatically once you apply. Explorer does block a few services, including Keyword Planner and billing, and Google lists them on its access levels page . The MCP server uses none of them.
If Google rejects your application
Google lists a known issue on its developer token page. Cloud projects on the free trial, or with a suspended billing account, get turned down for Explorer and Basic access.
Google’s workarounds: upgrade the project to a paid tier, remove billing from it, or apply from a different project that’s already brand verified.
How to set up the Google Ads MCP server
These are the steps from Google’s README , in order, with the developer token taken out.
- Pick a Google Cloud project and enable the Google Ads API in it. That gives you Test access.
- Apply for Explorer access. In Cloud Console, open the Google Ads API overview page, expand “Upgrade access level” and click Apply for access.
- Create an OAuth client in the same project (a Desktop app client is fine) and download its JSON file. Google’s OAuth client guide walks through it.
- Log in with the Google Ads scope using the command below. You need the gcloud command line tool installed for this one.
- Install pipx . The server needs Python 3.10 or newer.
- Add the server to your AI app with the config in the next section.
- Ask it “what customers do I have access to?” A list of account IDs back means it works.
Step 4: log in with the Google Ads scope
gcloud auth application-default login \
--scopes https://www.googleapis.com/auth/adwords,https://www.googleapis.com/auth/cloud-platform \
--client-id-file=YOUR_CLIENT_JSON_FILE When it finishes, gcloud prints Credentials saved to file: [PATH]. Copy that path, because it goes into the config.
If you’d rather not touch a terminal at all, my Claude Code setup walkthrough has one kickoff prompt that makes Claude do the technical setup for you.
The config to copy
Claude Desktop
Open Settings, then Developer, then Edit Config. That opens claude_desktop_config.json, which lives in ~/Library/Application Support/Claude/ on a Mac and %APPDATA%\Claude\ on Windows. Paste this in, swap the three placeholders, save, then quit Claude fully and reopen it.
claude_desktop_config.json
{
"mcpServers": {
"google-ads-mcp": {
"command": "pipx",
"args": ["run", "--spec", "google-ads-mcp==0.0.4", "google-ads-mcp"],
"env": {
"GOOGLE_APPLICATION_CREDENTIALS": "PATH_TO_CREDENTIALS_JSON",
"GOOGLE_PROJECT_ID": "YOUR_PROJECT_ID",
"GOOGLE_ADS_LOGIN_CUSTOMER_ID": "YOUR_MANAGER_ACCOUNT_ID"
}
}
}
} Three notes on that block:
- Delete the
GOOGLE_ADS_LOGIN_CUSTOMER_IDline if you reach your account directly and not through a manager account. - I’ve pinned version 0.0.4 so it doesn’t change under you. Google’s README pulls the latest code from GitHub instead, which gets fixes sooner.
- If Claude says it can’t find pipx, replace
"pipx"with the full path thatwhich pipxprints in your terminal.
The earlier version of this page said Claude Desktop couldn’t run this server, and that was wrong. Desktop starts local servers itself from this file. What can’t see a server on your laptop is the Connectors screen, because connectors reach out from Anthropic’s cloud to a public URL.
Claude Code
One command adds it. --scope user makes it available in every folder you open.
Add the server to Claude Code
claude mcp add google-ads --scope user \
-e GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIALS_JSON \
-e GOOGLE_PROJECT_ID=YOUR_PROJECT_ID \
-- pipx run --spec google-ads-mcp==0.0.4 google-ads-mcp Type /mcp inside Claude Code afterwards and google-ads should show as connected.
Cursor, Codex and Antigravity
Cursor reads the same mcpServers block from .cursor/mcp.json. Codex and Google’s Antigravity connect over HTTP instead: you run the server as its own process at http://localhost:8080/mcp and point them at that address. The README has both, including codex mcp add google_ads --url http://localhost:8080/mcp.
ChatGPT
ChatGPT’s connectors take a URL, so a server on your laptop is invisible to it. The route there is Google’s Cloud Run deployment, which puts the server behind a web address with its own login. That’s a developer job, and my ChatGPT connection guide covers easier options.
Questions to ask it
Start with questions that need real data and would take you twenty minutes in the interface. Anything you could answer from memory is a waste of the connection.
| Ask this | What the server pulls |
|---|---|
| Which search terms spent over $100 with no conversions in the last 30 days? | search_term_view |
| Which campaigns lost the most impression share to budget last month? | campaign, budget lost impression share |
| Which keywords have a Quality Score under 5 and spent over $200 this quarter? | keyword_view |
| Which ads are disapproved or limited right now? | ad_group_ad, policy status |
| What’s my CPA on mobile vs desktop over the last 90 days? | campaign, split by device |
| Which account under my manager account spent the most this month? | list_accessible_customers, then each account |
Put the customer ID in the question if you have more than one account. Google’s README says the AI will ask for it otherwise.
That’s the shape of a useful answer: named keywords, real spend, zero conversions, and a second list of what’s working so you don’t cut the wrong thing.
Two warnings before you act on anything it says:
- Check the conversion actions first. When I read 100 accounts in August 2026, the median account had 9 primary conversion actions. Ask for CPA on an account like that and you get an average of nine different things.
- Big accounts get sampled. On a large account the AI can pull a slice of the data and then answer confidently about the whole thing. Check any number against the Google Ads interface before you change something.
We also made our own internal list of PPC prompts , 100% free and public.
How to make changes when it only reads
The server won’t change anything, but the AI can still write the change for you to apply. Here are three routes, safest first:
- A Google Ads Editor import. Ask for the change as a CSV (negatives, paused keywords, new bids), import it into Google Ads Editor, review it, then post. You see every row before it goes live.
- A Google Ads script. For anything recurring, like pausing keywords that pass a spend limit with no conversions, ask it to write a Google Ads script . Run it in preview first, which shows the changes without making them.
- A server that can write. The hosted options below make changes themselves, and each describes an approval or review step first.
I’d use the first two for almost everything. The Editor import is my favourite, because Claude does the thinking and you still press the button.
Other Google Ads MCP servers
Google’s isn’t the only one. Here’s what else turns up when you search, checked on 30 September 2026:
| Server | What it reads | Can it change the account? | Login |
|---|---|---|---|
| Google’s official server | Any report, via GAQL | No | Your Cloud project and Google login |
| cohnen/mcp-google-ads | GAQL, campaign and ad reports | No | Its README still asks for a developer token |
| GoMarble’s server | GAQL, plus Keyword Planner ideas | No | Its README still asks for a developer token |
| Zapier MCP | Reports | Yes: campaign status, customer lists, offline conversions | Your Zapier account, 2 tasks per tool call |
| Markifact , AdKit , Adspirer | Reports | Yes, and each describes an approval or review step | Google sign-in through their service |
The two open-source alternatives are both MIT-licensed and free. The cohnen server hasn’t changed since October 2025, so its setup steps predate the token change.
If you already pay for Optmyzr, MCP access for Claude and ChatGPT is on every plan , so check that before you set anything else up.
The hosted ones plug into Claude’s Connectors screen with a URL, like the custom connector above. Google’s server goes in the config file instead, because it runs on your own machine.
My pick is Google’s server. Google maintains it, it had three releases on PyPI in September 2026 alone, and reading is the right default for anything an AI touches in your account.
Should you use it at all?
Be honest about the job you’re doing.
Use it if you want an analyst: something that answers real questions from real account data instead of guessing. That’s what it’s good at, and the read-only design means it can’t hurt you.
Skip it if what you actually want is “tell me what’s wrong with my account”. You’d be installing a data pipe and still need to know which questions to ask. Our Wasted Spend Agent is being built for that job and has a waitlist now. If you’d rather someone ran the account, we manage Google Ads for $2,000 a month flat .
If the account looks fine and sales don’t, the leak is often the page the ad sends people to, and no Google Ads server can see it. Postclick audits that page, designs new versions and builds the one you pick, and it has its own MCP server so Claude can run it from the same chat. It doesn’t connect to your Google Ads account. You start with 56 free credits, and an audit costs 18.
If you run Meta as well, its server works the other way round: hosted, no token, and it can write. One reads, one writes covers which one to trust with an assistant.
- Is the Google Ads MCP server free?
- Yes. The code is Apache-2.0 at github.com/googleads/google-ads-mcp, the Google Ads API has no per-call charge, and Explorer access costs nothing. The one catch is a known issue Google lists: Cloud projects on the free trial get rejected for Explorer access, and one of Google's fixes is upgrading the project to a paid tier. The API itself still doesn't charge per call after that.
- Do I still need a Google Ads developer token?
- No. Google retired developer tokens on 9 September 2026 and moved access levels to Google Cloud projects. An old config that still sends a token keeps working, because the API ignores it. Google says a future major API version will start rejecting tokens, so take the GOOGLE_ADS_DEVELOPER_TOKEN line out now.
- Can I use the Google Ads MCP server with ChatGPT?
- Only through a web address. ChatGPT's connectors reach remote servers, so you would deploy Google's server to Cloud Run with its OAuth proxy and give ChatGPT that URL. OpenAI's Codex command line tool is easier: run the server locally in HTTP mode and add it with codex mcp add google_ads --url http://localhost:8080/mcp.
- Can I use it across a whole MCC?
- Yes. Since version 0.0.4 on 25 September 2026, every tool takes an optional login_customer_id, so the AI can switch manager accounts question by question. You can also set GOOGLE_ADS_LOGIN_CUSTOMER_ID once in the config. Asking a manager account directly for performance metrics returns an error, so ask about the child account.
- Can it do keyword research?
- No. It only runs reports on your own account. Keyword Planner is a separate service, and Explorer access blocks it anyway. GoMarble's open-source server has a run_keyword_planner tool, but your Cloud project needs Basic access or higher for Keyword Planner calls to work.
- What can it not tell me?
- Anything that isn't in Google Ads. It can't see your CRM, your actual revenue, your landing pages or your Meta spend, so it can't work out true ROAS or tell you whether a lead was any good. It also can't act: no pausing, no bid changes, no new assets.
Our AI Tools








