| Question | Answer |
|---|---|
| What is it? | Google's official MCP server for the Google Ads API |
| Who makes it? | Google's Ads developer relations team, open source on GitHub |
| Server URL | None hosted by Google. You run it on your computer, or deploy it to your own Cloud Run |
| Works in | Claude Desktop, Claude Code, Cursor, Gemini CLI. Claude on the web only through your own Cloud Run deployment |
| Read or write? | Read only. No tool changes bids, pauses campaigns or creates ads |
| Developer token? | No longer needed. Google sunset them on 9 September 2026 |
| What it can't see | Your Shopify orders, and what people do after the click |
What the Google Ads MCP does
It gives your agent the Google Ads API's reporting side, and nothing else. Google's docs are blunt about it: "This implementation is strictly read-only. It cannot modify bids, pause campaigns, or create new assets" (Google for Developers).
There are only three tools. The work happens in search, where the agent writes Google Ads Query Language (GAQL) for you.
| Tool | What it does |
|---|---|
list_accessible_customers | Lists the Google Ads accounts your login can reach, with names and IDs |
search | Runs a GAQL query: spend, clicks, conversions, budgets, status, any report the API offers |
get_resource_metadata | Tells the agent which fields a report type has, so its queries are valid |
It also ships reference resources the agent can read: the API's discovery document, the full lists of metrics and segments, and release notes (GitHub). Three tools is enough, because search can pull any report the API exposes.
Before you start
- A Google Cloud project. Since 9 September 2026, API access belongs to the Cloud project that made your OAuth credentials. You no longer need a developer token or a manager account (Google Ads API policy).
- Explorer access on that project. A new project starts at Test access, which only reads test accounts. Explorer reads real accounts, up to 2,880 operations a day, and Google may grant it automatically (access levels).
- pipx and Python 3.10 or newer on your computer (PyPI).
- The gcloud CLI and a Google login with access to the ad account. If you go through a manager account, note its ID.
Set it up in Claude Desktop
In the Google Cloud console, create a project (or pick one) and enable the Google Ads API.
On the Google Ads API overview page in the console, click "Apply for access" and request Explorer.
Create an OAuth client (desktop app) in the same project and download its JSON file.
Run this in a terminal, signing in with the Google account that sees your ads:
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_FILEWhen it finishes, copy the credentials file path it prints.
In Claude Desktop, go to Settings, pick Developer and click Edit Config. Add this to
claude_desktop_config.json:{ "mcpServers": { "google-ads-mcp": { "command": "pipx", "args": ["run", "--spec", "git+https://github.com/googleads/google-ads-mcp.git", "google-ads-mcp"], "env": { "GOOGLE_PROJECT_ID": "YOUR_PROJECT_ID", "GOOGLE_APPLICATION_CREDENTIALS": "/path/to/credentials.json" } } } }Quit Claude Desktop completely and open it again (MCP docs).
Ask "What customers do I have access to?" Your ad accounts should come back.
If your access goes through a manager account, add "GOOGLE_ADS_LOGIN_CUSTOMER_ID": "1234567890" to the env block, with the manager ID and no dashes.
The README's example still has a GOOGLE_ADS_DEVELOPER_TOKEN line. Google's docs page drops it, and so do we.
Claude Code
Same server, one command (Claude Code docs):
claude mcp add --scope user \
--env GOOGLE_PROJECT_ID=YOUR_PROJECT_ID \
--env GOOGLE_APPLICATION_CREDENTIALS=/path/to/credentials.json \
--transport stdio google-ads-mcp \
-- pipx run --spec git+https://github.com/googleads/google-ads-mcp.git google-ads-mcp
Run /mcp to check it's connected. Keep --transport stdio right before the name, or Claude Code reads the name as another variable.
Cursor
Put the same JSON block from step 5 in ~/.cursor/mcp.json (every project) or .cursor/mcp.json (one project). If it doesn't show up, open the Output panel and pick "MCP Logs" (Cursor docs).
Claude on the web
claude.ai only takes remote servers (Claude Help), so you'd deploy Google's server to your own Cloud Run with an OAuth client ID and secret, then add that URL as a custom connector.
What to ask once it's connected
Google's own first test: "Give me a report of the top spending campaigns split by device category over the last 7 days." Then, for a store:
- "Which search terms spent money in the last 30 days and got no conversions?"
- "Which campaigns are losing impressions because of budget?"
- "Show conversions by conversion time for last month, so I can line them up with Shopify orders."
- "Which landing pages get the most paid clicks, and what's the conversion rate on each?"
- "What changed in spend and cost per conversion week over week, by campaign?"
Ask the agent to show the GAQL it ran. It's the quickest way to catch a query that answered a different question.
What it can't answer on its own
Everything this server returns is Google's count of Google's results. Two limits follow.
Timing and credit. Google reports conversions on the date of the ad click, not the sale, and offers separate "by conv. time" columns to compare with your own sales (Google Ads Help). Credit is split by data-driven attribution, the default for most conversion actions (Google Ads Help). It won't match your Shopify orders line for line.
The page. The server can tell you how many paid clicks a landing page got and how many converted. It has no idea whether those visitors saw the price, reached the add to cart button, or left in two seconds on a phone. Nor can it tell if the page matched what the ad promised. That data never reaches Google Ads. If that's your problem, start with traffic but no sales.
So it answers "which campaign is expensive", not "why don't these clicks buy". Here's where those follow-up questions land in Anry, which reads the ad side and the store side together. All 16 of its tools, from the Anry MCP docs:
| The question Google Ads MCP leaves open | Anry tool |
|---|---|
| Which stores and ad accounts can I see, and is tracking healthy? | list_sites, get_site_status |
| Show me spend per campaign and ad, next to the revenue Anry tied to it from my store's orders | get_campaign_spend |
| Where is ad spend not earning its keep? | get_paid_waste_summary |
| Where is money leaking right now, and what's each leak worth? | list_opportunities, get_revenue_leaks |
| Show me the evidence for one leak | get_issue |
| How does the funnel look by page and by source? | get_analytics_overview, get_top_pages, get_traffic_sources |
| Did paid visitors scroll and click on this page? | get_heatmap_summary |
| Show me the actual visits behind a finding | list_sessions, get_session |
| What did the reports say last week, and what are we tracking? | list_reports, get_report, list_questions |
None of the 16 can change your store, settings, campaigns or ads. Add it next to Google's server with one line in Claude Code:
claude mcp add --transport http anry https://mcp.anry.io/mcp
Then ask both: "Which Google campaign spends the most, and what happens on its landing page after the click?" Google's server answers the first half, Anry the second.
Google Ads MCP vs Anry vs a CSV export
| Google Ads MCP | Anry MCP | CSV export into Claude | |
|---|---|---|---|
| Spend, clicks, Google conversions | Yes, any GAQL report | Yes, by campaign and by ad | Yes, one snapshot |
| Orders from your own store | No | Yes | No |
| Visitor behavior after the click | No | Yes | No |
| Meta ads too | No | Yes | Only if you export both |
| Changes campaigns | No, read only | No, read only | No |
| Setup | Cloud project, OAuth, pipx | One URL, OAuth sign-in | None |
| Cost | Open source, no price listed | Monthly plan, free trial | Free |
Prices checked October 2026.
If you want Google's reports in chat and trust Google's conversion count, the official server is enough. Tools that run the campaigns for you are a separate category; Ryze and its alternatives are compared here. For the Meta side, see our Meta Ads MCP setup.
Is it safe?
It's Google's own code, read-only, signed in through your own OAuth client. Two things to know. The README says the server "will expose your data to the Agent or LLM that you connect to it", so only connect accounts you're fine sending to that model. And it adds a usage-tracking header to its API calls.
To cut access, run gcloud auth application-default revoke. It revokes the login and deletes the local credentials file (gcloud reference). If bans worry you, Google's policies are covered in will connecting AI get my ad account banned. This server makes no changes at all.
Common errors and the fix
| Error | Cause | Fix |
|---|---|---|
CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION | Your Cloud project only has Test access | Apply for Explorer on the Google Ads API page in the Cloud console |
USER_PERMISSION_DENIED | You reach the account through a manager account the call didn't name | Set GOOGLE_ADS_LOGIN_CUSTOMER_ID to the manager ID, no dashes |
NOT_ADS_USER | The Google login you used has no Google Ads account | Rerun the gcloud login with the account that has access |
CUSTOMER_NOT_ENABLED | The ad account isn't fully set up or was cancelled | Finish signup in Google Ads, or reactivate the account |
| Server missing in Claude Desktop | Bad JSON, a relative path, or no restart | Fix the config, quit Claude fully, check ~/Library/Logs/Claude/mcp*.log |
Meanings and fixes are from Google's common errors guide.
Where Anry fits
Google's server tells you what Google saw. Anry picks up after the click: it links each Google or Meta ad click to the visit and to any order in your store, spots the page, device or ad that loses money, and puts a figure on it from your own orders. Detection is deterministic code, and your own agent makes the fix.
You don't need Anry if your question stops at the account: budgets, search terms, which campaign costs most. Google's server answers those.
Frequently asked questions
Is there an official Google Ads MCP server?
Yes, googleads/google-ads-mcp on GitHub, open source from Google's Ads developer relations team. It's read-only, with three tools.
What is the Google Ads MCP server URL?
There isn't a public one. You run it locally through pipx, or deploy it to your own Cloud Run service, in which case the URL is your Cloud Run address plus /mcp.
Do I still need a Google Ads developer token?
Not anymore. Google retired them on 9 September 2026. What counts now is the access level of your Google Cloud project, and a manager account is optional too.
Can Claude change my Google Ads campaigns through it?
Not with Google's server, which has no tool for bids, pausing or new assets. A few Google Ads MCPs built by other companies can write, so check which one you installed.
Why don't its conversions match my Shopify orders?
Google reports conversions on the click date and splits credit with data-driven attribution. Shopify counts orders on the day they're placed. Use the "by conv. time" columns to get closer, but they still won't match exactly.
Sources
- Google Ads MCP server, Google for Developers (updated 16 October 2026)
- googleads/google-ads-mcp README, GitHub
- google-ads-mcp on PyPI
- API policy and developer token sunset and access levels, Google for Developers
- Common errors, Google Ads API
- Conversions by conversion time and attribution models, Google Ads Help
- gcloud auth application-default revoke, Google Cloud
- Client docs: Claude Desktop local servers, Claude Code, Claude custom connectors, Cursor
- Anry MCP server docs
See which ad clicks leave your store before they buy.
14-day free trial, no card. Works in Claude, Claude Code and Cursor.