[Connect AI to your data](/about/connect-ai-to-marketing-data) November 13, 2026

# Connect Claude to Google Ads with Google’s MCP server

Run Google’s Google Ads MCP server for Claude Code or as a claude.ai connector, with the Cloud project access that replaced developer tokens.

![](/images/65d75b0ae8d69ef95785a5d6_david-pombar.webp)

**[David Pombar](/authors-guides/david-pombar)** Swiss army knife at Trackingplan

9 min read · 1891 words

> **TL;DR** Google publishes an official Google Ads MCP server, and Claude reaches it two ways: run it on your computer for Claude Code, or deploy it on Google Cloud Run and add its URL as a custom connector in claude.ai. Both need a Google Cloud project with the Google Ads API enabled and Explorer access or higher, because developer tokens were retired on September 9, 2026. For a one-off look, download a report as a Google Sheet and let Claude read it through the Google Drive connector. Before acting on what Claude finds, add Trackingplan MCP: it checks the conversion tags, click IDs and consent behind each Google Ads number, so budget doesn’t follow a broken signal.

Most results for this question point you to a connector service. You don’t need one. Google maintains the server, documents the setup for Claude and Claude Code, and the only thing you host is a small Python process. This guide is part of a series on [connecting AI assistants to marketing data](/guides/connect-ai-to-marketing-data).

![A long row of vintage mission control consoles with switches, dials and dark screens, seen from desk level](/images/connect-claude-to-google-ads-console.jpg)

Every console reads what the instruments send it. Image: Mike Renlund, Wikimedia Commons, CC BY 2.0

## First, the access model changed

If you set up the Google Ads API before September, forget the developer token. [Google’s access levels page](https://developers.google.com/google-ads/api/docs/api-policy/access-levels) says developer tokens “were sunset on September 9, 2026”, and access now belongs to the Google Cloud project that owns your OAuth client or service account.

| Level | How you get it | What it allows |
| --- | --- | --- |
| Test | Enable the Google Ads API in the project | Test accounts only |
| Explorer | Apply in the Cloud console; Google may approve it automatically | 2,880 operations a day on production accounts |
| Basic | Apply after brand verification of the project | 15,000 operations a day |
| Standard | Apply after Basic; a manual audit follows | No daily cap |

To apply, open the **Google Ads API** overview page in the Cloud console, expand ** Upgrade access level** and click ** Apply for access**. For one person asking questions, that is usually plenty. Without it, every call to a real account fails with `CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION`.

![Diagram of three routes from Google Ads to Claude: the MCP server run locally for Claude Code, the server on Cloud Run added as a claude.ai custom connector, and a report downloaded as a Google Sheet read through the Drive connector](/images/connect-claude-to-google-ads-routes.webp)

## Route 1: Claude Code, with the server on your machine

**For:** an analyst or marketer who is comfortable in a terminal and wants answers today. Nothing is exposed to the internet, and the server runs with your own Google credentials.

**You need:** Python 3.10 or later, pipx, the gcloud CLI, and an OAuth client from your API-enabled project, downloaded as a JSON file. The steps follow [Google’s Google Ads MCP server page](https://developers.google.com/google-ads/api/docs/developer-toolkit/mcp-server).

1.  Create Application Default Credentials 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=PATH_TO_CLIENT_SECRET_JSON
    ```
    
    The command prints where it saved the credentials file.
    
2.  Add the server to Claude Code. The `--` separates Claude’s options from the command that starts the server, as [Claude Code’s MCP docs](https://code.claude.com/docs/en/mcp) explain:
    
    ```
    claude mcp add \
      --env GOOGLE_CLOUD_PROJECT=PROJECT_ID \
      --env GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIALS_JSON \
      --transport stdio --scope user google-ads-mcp \
      -- pipx run --spec google-ads-mcp==0.0.6 google-ads-mcp
    ```
    
    `--scope user` makes it available in every project. If you reach client accounts through a manager account, add `--env GOOGLE_ADS_LOGIN_CUSTOMER_ID=` followed by its 10 digits without hyphens.
    
3.  Start Claude Code and run `/mcp` to check that `google-ads-mcp` is connected.
    

Google’s page also gives the same server as a JSON block for `~/.claude/settings.json`, if you prefer to edit the file.

## Route 2: claude.ai, with the server on Cloud Run

**For:** a team that wants Google Ads in the Claude web, desktop and mobile apps, where each person signs in with their own Google account.

**You need:** someone who can deploy to Cloud Run, an OAuth client of type ** Web application**, and a Claude plan that allows custom connectors. [Anthropic’s connector docs](https://claude.com/docs/connectors/custom/add-unlisted.md) list Free (one custom connector), Pro, Max, Ultra, Team and Enterprise.

1.  In the OAuth client, add `https://claude.ai/api/mcp/auth_callback` as an authorized redirect URI. Under **APIs & Services > OAuth consent screen > Data Access**, add the `https://www.googleapis.com/auth/adwords` scope. If the consent screen is still in ** Testing**, add each person under ** Audience > Test users**.
2.  Build the image with Cloud Build and deploy it with `gcloud run deploy`, passing the client ID and the secret as `GOOGLE_ADS_MCP_OAUTH_CLIENT_ID` and `GOOGLE_ADS_MCP_OAUTH_CLIENT_SECRET`. Google’s page has both commands.
3.  Copy the service URL Cloud Run assigns and set it as `GOOGLE_ADS_MCP_BASE_URL` with `gcloud run services update`.
4.  In Claude, go to **Customize > Connectors**, select ** Add**, then ** Add custom connector**. Enter a name and the service URL with `/mcp` at the end, then click ** Continue**.
5.  For **OAuth client**, choose ** Use your own OAuth client** and enter the client ID and secret. Click ** Add**, then ** Connect**, and sign in with Google.

On Team and Enterprise, an Owner adds it under **Organization settings > Connectors** and members connect with their own accounts.

One warning from Google’s page matters here. The deploy uses `--allow-unauthenticated` so Claude can reach the service, and the OAuth variables are what protect it. Deploy without them and the server falls back to the container’s service account credentials, open to anyone with the URL.

## What the server can read and change

**Reads:** `search_search` runs any Google Ads Query Language (GAQL) query, so campaigns, ad groups, keywords, search terms, assets and conversions are all in reach. `customers_list_accessible_customers` returns the accounts your login can see, and `metadata_get_resource_metadata` tells Claude which fields a resource has.

**Writes:** creating assets (text, image, sitelink, callout and others), uploading videos (local only) and managing labels. Each write is proposed first as a dry run with a checksum, and only committed after you approve and Claude sends the same checksum back.

**Not there:** budgets, bids, campaign status, keywords and audiences. In this release, Claude can read them and can’t change them.

To lock it down further, set `labels: false` and `assets: false` in a `tools_config.yaml`, and list the read categories as `true`, since Google warns that categories left out of the list are turned off. In Claude, the connector’s **Tool permissions** can also set any tool to ** Needs approval** or ** Blocked**.

## No server: a Google Sheet and the Drive connector

**For:** a single analysis, or a team without a Cloud project.

1.  In Google Ads, open the page with the table you want, such as campaigns or search terms.
2.  Click the download icon above the table, then **Download**, and choose ** Google Sheets**. [Google Ads Help](https://support.google.com/google-ads/answer/2404176) lists the formats.
3.  In Claude, connect Google Drive under **Customize > Connectors**, then ask about the sheet by name.

The Drive connector is built and run by Google and reads Sheets. The trade-off is that Claude sees a snapshot, with the columns you chose, and nothing it can query again. If your Google Ads data already lands in a warehouse, the [BigQuery route](/guides/connect-bigquery-to-claude) gives Claude history it can query; the [ChatGPT version of this guide](/guides/connect-chatgpt-to-google-ads) sets up that transfer step by step.

## Trackingplan MCP: check the signal before you shift budget

Claude will tell you which campaign has the best cost per conversion. It can’t tell you that the conversion tag stopped firing on mobile last Tuesday, that gtag and GTM both count the same purchase, or that Consent Mode drops signals in one market. Smart Bidding learns from those same numbers, so a broken signal costs twice: once in the decision you make, once in the bids Google makes.

Trackingplan closes that gap. It monitors every conversion, UTM and consent signal on real traffic, without pause: missing values, duplicates, wrong currency, a gclid lost on a redirect. Each gap comes quantified in money and routed to whoever owns the tag, before bidding acts on it.

Attribution is part of that watch. Auto-tagging, the gclid and your UTM naming are what tie a conversion to a campaign, and when one breaks, Trackingplan flags the campaigns attributed to the wrong source instead of leaving it to the next month’s report.

Its audits, run on demand or scheduled daily or weekly, go further: they check what each conversion tag receives and end with the fix to ask for in GTM, so the signal Google Ads optimizes on gets better, not only watched.

[Trackingplan MCP](/docs/mcp-endpoint) puts that evidence in Claude, next to spend, impressions, clicks and reported conversions per campaign from Google Ads and ten other ad networks: Meta Ads, LinkedIn Ads, TikTok Ads, Snapchat Ads, Pinterest Ads, Microsoft Ads, X Ads, Amazon Ads, Apple Search Ads and Reddit Ads. No Cloud project or credentials to set up: an admin connects the accounts once ([Ad Platforms](/docs/ad-platforms)) and each person signs in as themselves. It reads; it never bids or changes a campaign.

## What to ask once it’s connected

| Ask | What Claude does |
| --- | --- |
| “List the accounts I can access and their currency.” | Lists the accounts, then a GAQL query per account |
| “Search terms with spend and no conversions in the last 30 days, sorted by cost.” | Writes and runs the GAQL, then groups the waste |
| “Which Performance Max campaigns lost the most conversions week over week?” | Compares two date ranges and names the campaigns |
| “Check which ad groups have fewer than three headlines.” | Reads the assets and lists the gaps |
| “Write the GAQL for this report and save it as a CSV in this folder.” | In Claude Code, saves both the query and the file |

Ask Claude to show the GAQL it ran. It is short, readable, and the quickest way to see whether the date range or the filter is the one you meant.

## Before you trust the answers

Claude reads the conversions Google Ads reports. It doesn’t see the tag that produced them. A conversion tag that stopped firing after a release, a purchase counted twice by gtag and GTM, or consent that never reaches Google: each one arrives as a clean number, and Claude explains it with the same confidence as a real trend. If the figures already disagree with GA4, [this checklist](/blog/google-ads-conversions-dont-match-analytics) is the place to start.

An AI agent can only reason about what it can see. Connect [Trackingplan MCP](#trackingplan-mcp-check-the-signal-before-you-shift-budget) next to Google’s server and Claude sees the tag behind the number before you act on it.

## FAQ

### How do I connect Claude to Google Ads?

Use Google’s official Google Ads MCP server. Run it on your computer and add it to Claude Code with claude mcp add, or deploy it on Google Cloud Run and add its URL as a custom connector in claude.ai. Both need a Google Cloud project with the Google Ads API enabled and Explorer access or higher.

### Do I still need a Google Ads developer token?

No. Google sunset developer tokens on September 9, 2026. API access levels now belong to the Google Cloud project that owns your OAuth client or service account: Test when you enable the API, then Explorer, Basic and Standard.

### Can Claude change my Google Ads campaigns?

Only in a narrow way. The server can create assets, upload videos and manage labels, each with a propose-and-confirm step. It has no tools for budgets, bids or campaign status, and a read-only mode turns off the asset and label tools.

### Is there a Google Ads connector in Claude’s directory?

Google’s own instructions don’t use one. For claude.ai they add the server you deploy as a custom connector, and for Claude Code a local server. If you find a Google Ads listing in the directory, check who publishes it: Anthropic notes that verification isn’t a security audit.

Part of[Connect Claude or ChatGPT to your marketing data](/guides/connect-ai-to-marketing-data)

On this page

1.  [*01*First, the access model changed](#first-the-access-model-changed)
2.  [*02*Route 1: Claude Code, with the server on your machine](#route-1-claude-code-with-the-server-on-your-machine)
3.  [*03*Route 2: claude.ai, with the server on Cloud Run](#route-2-claude-ai-with-the-server-on-cloud-run)
4.  [*04*What the server can read and change](#what-the-server-can-read-and-change)
5.  [*05*No server: a Google Sheet and the Drive connector](#no-server-a-google-sheet-and-the-drive-connector)
6.  [*06*Trackingplan MCP: check the signal before you shift budget](#trackingplan-mcp-check-the-signal-before-you-shift-budget)
7.  [*07*What to ask once it’s connected](#what-to-ask-once-it-s-connected)
8.  [*08*Before you trust the answers](#before-you-trust-the-answers)
9.  [*09*FAQ](#faq)

**Stop babysitting tags**

Trackingplan audits your real user data around the clock and flags issues before they cost you.

[Start free trial →](https://app.trackingplan.com/signup)

![](/images/65d75b0ae8d69ef95785a5d6_david-pombar.webp)

**David Pombar** Swiss army knife at Trackingplan

Read more from David, a Senior Product Strategist with 18+ years in digital product development and an atypical error detection knack.

Share Copy link [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fwww.trackingplan.com%2Fguides%2Fconnect-claude-to-google-ads) [X](https://twitter.com/intent/tweet?url=https%3A%2F%2Fwww.trackingplan.com%2Fguides%2Fconnect-claude-to-google-ads&text=Connect%20Claude%20to%20Google%20Ads%20with%20Google%E2%80%99s%20MCP%20server)

Read next

[All Guides →](/guides)

-   [
    
    8 minConnect AI to your dataNovember 13, 2026
    
    ### Connect ChatGPT to Google Ads: three official routes
    
    Bring Google Ads data into ChatGPT through BigQuery, Google’s MCP server as a custom app, or Codex, and see which plan each route needs.
    
    by **David Pombar**](/guides/connect-chatgpt-to-google-ads)
-   [
    
    7 minConnect AI to your dataNovember 13, 2026
    
    ### Connect GA4 to Claude with Google’s MCP server
    
    Set up Google’s Analytics MCP server in Claude Desktop, Claude Code or claude.ai, see what it reads and changes, and the no-code fallback through Sheets.
    
    by **David Pombar**](/guides/connect-ga4-to-claude)
-   [
    
    9 minConnect AI to your dataNovember 13, 2026
    
    ### How to connect an AI assistant to Meta Ads Manager
    
    Connect Claude or ChatGPT to Meta Ads through Meta’s ads MCP server, decide what it may change, and see which account access each route needs.
    
    by **David Pombar**](/guides/connect-ai-to-meta-ads)

Trackingplan

## See everything. Miss nothing.

Your implementations audited around the clock with real-time, real-user data. Real-time alerts about errors or changes in your data, campaigns, pixels, privacy and consent. Let AI flag issues before they cost you.

[Start free trial →](https://app.trackingplan.com/signup) [Book a demo](/demo)
