Google Ads MCP for Shopify stores: setup and what it can answer

Google's official Google Ads MCP server is open source and read-only. You run it yourself with a Google Cloud project and OAuth. Here's the setup and what it can't see.

Raphael Gonzalez, Founder, Anry. Prices checked October 2026
QuestionAnswer
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 URLNone hosted by Google. You run it on your computer, or deploy it to your own Cloud Run
Works inClaude 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 seeYour 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.

ToolWhat it does
list_accessible_customersLists the Google Ads accounts your login can reach, with names and IDs
searchRuns a GAQL query: spend, clicks, conversions, budgets, status, any report the API offers
get_resource_metadataTells 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

  1. In the Google Cloud console, create a project (or pick one) and enable the Google Ads API.

  2. On the Google Ads API overview page in the console, click "Apply for access" and request Explorer.

  3. Create an OAuth client (desktop app) in the same project and download its JSON file.

  4. 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_FILE
    

    When it finishes, copy the credentials file path it prints.

  5. 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"
          }
        }
      }
    }
    
  6. Quit Claude Desktop completely and open it again (MCP docs).

  7. 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 openAnry 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 ordersget_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 leakget_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 findinglist_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 MCPAnry MCPCSV export into Claude
Spend, clicks, Google conversionsYes, any GAQL reportYes, by campaign and by adYes, one snapshot
Orders from your own storeNoYesNo
Visitor behavior after the clickNoYesNo
Meta ads tooNoYesOnly if you export both
Changes campaignsNo, read onlyNo, read onlyNo
SetupCloud project, OAuth, pipxOne URL, OAuth sign-inNone
CostOpen source, no price listedMonthly plan, free trialFree

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

ErrorCauseFix
CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTIONYour Cloud project only has Test accessApply for Explorer on the Google Ads API page in the Cloud console
USER_PERMISSION_DENIEDYou reach the account through a manager account the call didn't nameSet GOOGLE_ADS_LOGIN_CUSTOMER_ID to the manager ID, no dashes
NOT_ADS_USERThe Google login you used has no Google Ads accountRerun the gcloud login with the account that has access
CUSTOMER_NOT_ENABLEDThe ad account isn't fully set up or was cancelledFinish signup in Google Ads, or reactivate the account
Server missing in Claude DesktopBad JSON, a relative path, or no restartFix 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

See which ad clicks leave your store before they buy.

14-day free trial, no card. Works in Claude, Claude Code and Cursor.

Start free trial