TL;DR: Google's official Google Ads MCP server lets Claude query your ad account in plain English. It is read-only. It runs reports through three tools and cannot change a bid, a budget, or a campaign. Since September 9, 2026 you no longer need a developer token. Access runs through your own Google Cloud project, and Explorer access for live accounts is approved automatically in most cases. This post covers the setup in order, five queries worth running on a Shopify account before Black Friday, what the connection can't tell Claude, and how Google's August 31 policy change affects the third-party servers that offer write access.
Searches for "google ads mcp" went from about 260 a month in October 2025 to 2,400 in August 2026. Most of what ranks is Google's own developer documentation or connector vendors' product pages. The docs are written for developers, and the vendor pages are written to sell a connector. Neither explains what a Shopify operator should ask once the connection works, or how Google's August policy change affects the vendors that sell write access.
This post is for operators running Shopping, Performance Max, or Search for a Shopify store who use Claude, Codex, or Grok and want answers from the account without exporting CSVs.
What the official Google Ads MCP server does, and what it doesn't
Google released the server as open source in October 2025 (announcement, repo). The latest release, v0.0.5, shipped October 9, 2026. It exposes three tools.
| Tool | What it does |
|---|---|
list_accessible_customers |
Lists the Google Ads accounts your login can see |
search |
Runs a Google Ads Query Language (GAQL) query and returns the rows |
get_resource_metadata |
Describes a report resource and the fields, segments, and metrics it accepts |
That is the whole tool list. Claude turns your question into GAQL, a SQL-like query language, runs it with search, and reads the rows back. When a query fails because a field doesn't exist, Claude can call get_resource_metadata to check the resource and try again.
Google's documentation (updated October 30, 2026) puts the limit plainly. "This implementation is strictly read-only. It cannot modify bids, pause campaigns, or create new assets."
That may change. A pull request from the project's maintainer, still open on October 30, adds write tools for creating assets, uploading video, and managing labels. Each change would be validated first and then confirmed by the user. It does not touch bids, budgets, or campaign status. A separate pull request from an outside contributor that added pause, budget, bid, and negative-keyword tools was closed without merging on October 24.
Google's docs also mention a hosted endpoint for allowlisted pilot participants. For everyone else, the server runs on your own machine.
The server is built on Google Ads API v25, and the current API is v26.1 (released October 28). Anything added in v26 isn't queryable until the server updates.
How to connect Google Ads to Claude, Codex, or Grok
Getting a developer token used to be the slow part. You applied, waited, and could be turned down if Google read your use case wrong. Google retired developer tokens on September 9, 2026. Access now follows the Google Cloud project your credentials come from.
You need a Google Cloud project, Python 3.10 or newer, pipx, and the gcloud CLI. After that, setup takes six steps. Steps 1 to 4 are the same in every app. Steps 5 and 6 are for Claude, and Codex and Grok have their own sections after them.
- Create a Google Cloud project and enable the Google Ads API in it. That grants Test access straight away. Test access only works on test accounts.
- Apply for Explorer access from the Google Ads API Overview page in the Cloud Console. Google says approval is automated in most cases. Explorer allows 2,880 API operations a day on live accounts, and one person asking Claude questions uses a small part of that. Basic (15,000 a day) requires brand verification, and Standard (unlimited) is a manual audit that takes about 10 business days. You don't need either for this. (Access levels.)
- Create an OAuth client of type Desktop app in the same project, and download its JSON file.
- Sign in with Application Default Credentials, using a Google account that has access to your ad account. (Further down, I explain why that account should have read-only access.)
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
The command prints the path of a credentials file. Copy it.
- Add the server to Claude. For Claude Code, put this block in a
.mcp.jsonfile in your project folder. For Claude Desktop, the same block goes inclaude_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_APPLICATION_CREDENTIALS": "PATH_TO_CREDENTIALS_JSON",
"GOOGLE_PROJECT_ID": "YOUR_PROJECT_ID",
"GOOGLE_ADS_LOGIN_CUSTOMER_ID": "YOUR_MANAGER_CUSTOMER_ID"
}
}
}
}
Leave out GOOGLE_ADS_LOGIN_CUSTOMER_ID if you sign in to the brand's account directly rather than through a manager (MCC) account. The README still shows a GOOGLE_ADS_DEVELOPER_TOKEN line too. The server only sends a token if you set one, and Google's docs say tokens are no longer required, so leave that out as well. To pin a release instead of running the latest code, use pipx run --spec "google-ads-mcp==0.0.5" google-ads-mcp as the command.
- Restart Claude and ask it to list your accessible customers. If your account names come back, you're connected.
Expect a few things on the first day.
- Costs come back in micros, so $12.40 shows up as
12400000. Tell Claude to divide by 1,000,000 before it reports anything. - Account IDs go in without dashes.
- The first query on an unfamiliar report often fails on a field name. Let Claude check the resource with
get_resource_metadataand retry. That loop is how the server is meant to be used. - An error saying your project isn't approved for production means you're still on Test access. Go back to step 2.
Using Codex instead of Claude
Codex can start the server the same way Claude does. The ChatGPT desktop app, the Codex CLI, and the Codex IDE extension share one MCP configuration, so you add the server once. After steps 1 to 4, run this in a terminal.
codex mcp add google_ads \
--env GOOGLE_APPLICATION_CREDENTIALS=PATH_TO_CREDENTIALS_JSON \
--env GOOGLE_PROJECT_ID=YOUR_PROJECT_ID \
--env GOOGLE_ADS_LOGIN_CUSTOMER_ID=YOUR_MANAGER_CUSTOMER_ID \
-- pipx run --spec git+https://github.com/googleads/google-ads-mcp.git google-ads-mcp
Or add the same server to ~/.codex/config.toml by hand.
[mcp_servers.google_ads]
command = "pipx"
args = ["run", "--spec", "git+https://github.com/googleads/google-ads-mcp.git", "google-ads-mcp"]
startup_timeout_sec = 60
[mcp_servers.google_ads.env]
GOOGLE_APPLICATION_CREDENTIALS = "PATH_TO_CREDENTIALS_JSON"
GOOGLE_PROJECT_ID = "YOUR_PROJECT_ID"
GOOGLE_ADS_LOGIN_CUSTOMER_ID = "YOUR_MANAGER_CUSTOMER_ID"
Codex gives a server 10 seconds to start by default. The first pipx run downloads and installs the server from GitHub, which can take longer than that, so the file version raises the limit to 60 seconds. If you used the codex mcp add command, add the startup_timeout_sec line to the entry it wrote. Check the connection with codex mcp list, then ask Codex to list your accessible customers.
Google's README documents a second Codex route. You run the server on its own in HTTP mode with an OAuth client ID and secret, then connect with codex mcp add google_ads --url http://localhost:8080/mcp and codex mcp login google_ads. Codex then holds only its own sign-in and never sees the credentials file. That is worth the extra setup if several apps will share one server. The README's Docker build includes a fix for a sign-in problem with an earlier Codex release, so use that build rather than pipx run for this route.
Using Grok instead of Claude
It depends which Grok you mean.
Grok's command-line tool starts local servers the same way Claude Code does. Its MCP docs show grok mcp add taking a command, with environment variables set in ~/.grok/config.toml, so the config file is the simpler route here.
[mcp_servers.google_ads]
command = "pipx"
args = ["run", "--spec", "git+https://github.com/googleads/google-ads-mcp.git", "google-ads-mcp"]
env = { GOOGLE_APPLICATION_CREDENTIALS = "PATH_TO_CREDENTIALS_JSON", GOOGLE_PROJECT_ID = "YOUR_PROJECT_ID", GOOGLE_ADS_LOGIN_CUSTOMER_ID = "YOUR_MANAGER_CUSTOMER_ID" }
It waits 30 seconds for a server to start by default.
Grok on grok.com and Grok Bot can't use this setup. Both connect to MCP servers from xAI's or Cursor's servers, not from your computer. Grok's custom connector docs say the server must be reachable over the public internet and that Grok rejects localhost and private addresses. Grok Bot runs on a cloud computer and reaches remote servers the same way.
To use either one, you would run the Google Ads server in its HTTP mode at a public address, through the README's Cloud Run deployment or a tunnel such as ngrok, and connect Grok to that URL. Two cautions before you do. First, the URL can then reach your ad account from anywhere, and the README's Cloud Run command leaves Cloud Run's own access check off, so the server's OAuth sign-in is the only lock. Second, neither xAI nor Google documents Grok's sign-in working with this server, and Codex needed a fix for the same sign-in flow. Grok Bot can also run a server by command on its own cloud computer, but that means copying a credentials file with full access to your ad account onto a machine you don't control.
For most operators, the command-line tool is the Grok option worth setting up.
Five Google Ads checks to run on a Shopify account before Black Friday
These five cover the Google questions that matter most for a Shopify account in Q4. Each one has a query you can paste or hand to Claude, what to look for, and the decision it supports. All of them only read. Every change they point to, you make in Google Ads yourself.
1. Where Shopping and Performance Max spend goes, by product
SELECT
segments.product_item_id,
segments.product_title,
campaign.name,
metrics.cost_micros,
metrics.conversions,
metrics.conversions_value
FROM shopping_performance_view
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC
LIMIT 50
Ask Claude to add a ROAS column (conversion value divided by cost) and keep the rows sorted by spend. Then compare each product to its own break-even ROAS, not the account average. A $28 tin at a 70% margin and a $90 bundle at a 45% margin don't break even at the same number. The break-even ROAS calculator gives you the number for each product.
You're looking for two groups. The first is products in the top 20 by spend that stayed below break-even for the whole 30 days. Those go into their own listing group or asset group with less budget, or out of the campaign. The second is products well above break-even that get almost no spend, which are candidates for their own campaign or asset group.
Two cautions. Since June 15, 2026, this report includes Performance Max data from every network, so comparisons across that date show a one-time jump (Google's note). And the conversion value here is what Google claims, which is not the same as what Shopify recorded. More on that below.
2. Search terms you pay for that never convert
SELECT
campaign_search_term_view.search_term,
campaign.name,
campaign.advertising_channel_type,
metrics.cost_micros,
metrics.clicks,
metrics.conversions,
metrics.conversions_value
FROM campaign_search_term_view
WHERE segments.date DURING LAST_30_DAYS
AND metrics.cost_micros > 20000000
ORDER BY metrics.cost_micros DESC
LIMIT 200
This report gives per-term cost for Search and Performance Max campaigns. Google drops the Performance Max rows if you add keyword-related segments, so leave those out. The threshold above is $20 of spend in 30 days; adjust it to the account.
Ask Claude for the terms with zero conversions, grouped by theme, such as competitor names, the wrong product type, "free" and "DIY" searches, jobs, and wholesale. A common rule of thumb treats any term that has spent twice your target cost per purchase without a sale as a negative-keyword candidate. Claude can format the list for bulk upload. Review it before you add it. A negative that blocks a term that does convert costs you sales, and this report won't show you those.
3. Products Google can't show, or shows with limits
SELECT
shopping_product.item_id,
shopping_product.title,
shopping_product.status,
shopping_product.issues,
metrics.impressions,
metrics.cost_micros
FROM shopping_product
WHERE shopping_product.status != 'ELIGIBLE'
AND segments.date DURING LAST_30_DAYS
This report reads products from the Merchant Center account linked to Google Ads. Each product's status is ELIGIBLE, ELIGIBLE_LIMITED, or NOT_ELIGIBLE, and issues lists what's blocking it, including the attribute at fault.
The fixes happen in Shopify and Merchant Center. Typical causes are a missing GTIN, a price that doesn't match the landing page, an image with a promo overlay, or a policy flag. Ask Claude to group the issues by cause and rank them by how many products each one affects. Start with your bestsellers. One limited bestseller during BFCM usually costs more than twenty disapproved long-tail SKUs.
If Claude can also see your Shopify catalog, run a second pass and list the active products that never appear in check 1. When a product that sells well on Shopify gets no Google impressions at all, the cause is usually the feed or a listing-group exclusion nobody remembers adding.
4. Brand vs non-brand, and what it does to your ROAS
Run the check 2 query again without the cost threshold. Then give Claude your brand terms, meaning the brand name, product line names, the founder's name if people search for it, and the misspellings you've seen. Ask it to split every term into brand and non-brand and total the cost, conversions, and conversion value on each side.
Many people who search your brand name would have bought without the ad. If 60% of a Performance Max campaign's conversion value comes from brand searches, most of its 4x ROAS comes from customers who were already looking for you. Non-brand ROAS is the number that shows whether Google is finding new customers.
If brand terms carry a large share of Performance Max value, you can add brand exclusions to the Performance Max campaign and run brand in a separate Search campaign, where you set the bid and see the cost. Performance Max's reported ROAS will drop when you do. The non-brand results are the same as before; the brand share was raising the average.
Claude can't infer your brand terms from the account. They belong in your brand files (in the DTC Stack, that's the Brand Brain), so every skill that reads those files works from the same list.
5. Budget pacing into BFCM
SELECT
campaign.name,
campaign.advertising_channel_type,
campaign.primary_status_reasons,
campaign_budget.amount_micros,
metrics.cost_micros,
metrics.conversions_value,
metrics.search_budget_lost_impression_share
FROM campaign
WHERE campaign.status = 'ENABLED'
AND segments.date DURING LAST_7_DAYS
Look for campaigns whose primary_status_reasons include BUDGET_CONSTRAINED, and for Search campaigns losing impression share to budget. Those are the campaigns that will run out of money first on the days you most want them running.
Two rules shape BFCM budgets. Google can spend up to twice a campaign's average daily budget on a single day, but it won't charge more than 30.4 times the daily budget in a month. And automated bidding takes time to adjust after a budget change. Ask Claude to compare each campaign's last-7-day spend with its daily budget, estimate what it needs from November 27 through December 1 at your planned offer, and write the budget changes as a dated table. Then make the changes in Google Ads a few days ahead, not on the morning of the sale.
The BFCM operator plan covers the offer and discount math behind those targets, and the BFCM readiness check scores the rest of your setup.
What the MCP doesn't give Claude
The MCP gives Claude the account's numbers and nothing about the business behind them. Every check above depends on facts the account doesn't hold. Check 1 needs your margin for each product. Check 2 needs to know that "magnesium for kids" is a market you chose not to serve. Check 4 needs your brand terms. Once the diagnosis turns into new ad copy, Claude also needs your positioning, your customers' language, and the claims you're allowed to make. For a supplement brand, that last one decides whether a new headline gets flagged.
Without that context, Claude still answers. It flags your best-margin product as unprofitable because it assumed one margin for the whole catalog, or suggests a negative for a phrase your customers use. Those answers sound as confident as the right ones. This is the problem context engineering addresses. A model can only work from what it reads before it starts.
In the DTC Stack, that context is the Brand Brain, a set of structured files for products, margins, personas, positioning, objections, and guardrails that every skill reads. The DTC Ad Creative System has an Ad Diagnostic Mode with three Google decision trees, for low Search CTR, high non-brand CPC, and underperforming Performance Max campaigns. It was built around a pasted export. With the MCP connected, Claude can pull the columns those trees need (CTR, CPC, conversions, cost per conversion, Quality Score for Search, ad strength for Performance Max) in one query and run the diagnosis on the result. The replacement headlines and descriptions it writes come from the Brand Brain.
Read-only vs write access, and which changes to make yourself
The official server can't write because it has no write tools. The OAuth credential behind it has full access. Google Ads has no read-only OAuth scope, and the server's own code says access is "restricted to read methods by the tools this server exposes." The credentials file that gcloud creates can change any account your Google login can manage, through any tool that picks it up.
Three rules follow from that.
- Sign in with a read-only Google Ads user. Add a Google account to the ad account with Read only access and use that account for the
gcloudlogin. If the credentials file leaks or another tool picks it up, it can't change anything. - Treat the credentials file like a password. Keep it out of the project folder, out of git, and out of shared drives. The
.mcp.jsonfile only holds its path. - Make the expensive changes yourself. Budgets, bid strategies and targets, campaign status, and conversion actions are where one wrong change spends real money before anyone notices. Let Claude draft them as a table, then apply them in Google Ads.
Third-party servers with write access
If you want Claude to make changes, several vendors run hosted Google Ads MCP servers with write tools. Markifact lists budget, bid strategy, bid, status, and negative-keyword tools and says every write waits for your approval. Windsor.ai lists 34 Google Ads write actions, including pausing campaigns, setting budgets and target ROAS, and pushing negative keywords. Pipeboard says it can create, edit, and pause campaigns. Zapier's MCP only sets campaign status.
Google changed the rules for this category on August 31, 2026. Its developer policy now covers MCPs by name and prohibits a "third-party hosted interface, secondary API, wrapper service, or MCP server, proxy endpoint" that re-exposes Google Ads capabilities. Agencies and advertisers must use "their own Google Cloud Platform account," and "end users of your tool will need to manually sign in to make changes to their accounts." The policy still allows your own automated use, and open-source tools that users download and connect with their own credentials. The official server is that kind of tool.
I haven't seen Google act against a named vendor, and some vendors say Google has reviewed and approved them. Before you connect one, ask it these four questions.
- Whose Google Cloud project do the API calls go through?
- Where is your OAuth token stored?
- Does every change need my approval, or can the agent act alone?
- What happens to the integration if Google's compliance review goes against you during Q4?
If you only need to read the account, you don't need a hosted vendor for Google Ads.
Google Ads MCP vs Meta Ads MCP vs an analytics aggregator
| Google Ads MCP (official) | Meta Ads MCP (official) | Polar, Kleio, or Triple Whale MCP | |
|---|---|---|---|
| Who runs it | You, on your machine | Meta, hosted at mcp.facebook.com/ads |
The vendor, hosted |
| Can it change the account | No | Yes (campaigns, ad sets, ads, catalogs) | No |
| Sign-in | Your Google Cloud project and OAuth credentials | Facebook Login for Business, or your own Meta app since July 16, 2026 | The vendor's login or API key |
| Limits on the agent | The tool list | Rules per ad account, such as read-only or no budget changes | Read-only |
| Best for | Why one Google account performs the way it does | Reading and running Meta campaigns | Whether paid media makes money across channels |
Meta's server can write, and since July it supports rules that limit what an agent can do in each ad account. Google's server can't write at all, so the governance work on Meta is larger. The Meta MCP compliance post covers what to set up before an agent pushes ads live.
The aggregator answers a different question. Google reports the conversions Google claims, Meta reports the ones Meta claims, and both claim some of the same orders. An aggregator such as Polar, Kleio, or Triple Whale starts from Shopify orders and attributes them across channels. It can tell you whether blended spend makes money and how many customers were new. That's why the Customer Intelligence Engine pulls ads data through an aggregator first.
In practice, use the aggregator to decide whether Google gets more budget or less, and use the Google Ads MCP to find out why at the level of products, search terms, and feed issues. If you run both channels every week, the Monday Ad Op recipe is a routine to run them in.
FAQ
Is the Google Ads MCP server free?
The server is open source under the Apache 2.0 license and costs nothing. Google doesn't list a usage fee for the Google Ads API. You still pay for your ads and for your Claude plan.
Can Claude manage my Google Ads account?
Not with the official server. Claude can read and analyze the account, but Google's docs say the server cannot modify bids, pause campaigns, or create new assets. Some third-party hosted servers offer write tools. Google's August 31, 2026 developer policy restricts hosted wrapper services, so ask any vendor how it complies before you connect it.
Is the official Google Ads MCP read-only?
Yes, as of November 1, 2026. An open pull request from the maintainer would add write tools for assets, video uploads, and labels, with each change validated and confirmed by the user first. It has not been merged, and it doesn't cover bids or budgets.
Do I need a developer token?
No. Google sunset developer tokens on September 9, 2026, and API access now depends on the Google Cloud project your credentials come from. For live accounts, apply for Explorer access in the Cloud Console. Google says approval is automated in most cases.
How is the Google Ads MCP different from the Google Ads API?
The MCP server sits on top of the API. It wraps the API's reporting calls in three tools Claude can use, so you ask in plain English and Claude writes the query. Anything the server doesn't expose, including every change to the account, still needs the API itself or the Google Ads interface.
Should I connect the Google Ads MCP or the Meta Ads MCP first?
Connect the one where most of your spend goes. Meta's server is hosted by Meta and can make changes, so set its agent rules before you use it. Google's runs on your machine and only reads, so setup takes longer and the risk is lower.
Can I use the Google Ads MCP with Codex or Grok?
Yes, with Codex and with Grok's command-line tool. Both can start the server on your computer the same way Claude does, using the credentials from the same first four setup steps. Grok on grok.com and Grok Bot only connect to servers on a public URL, so they need the server hosted in its HTTP mode, which takes more setup and is a bigger security decision.
Should ads data come through Polar or Kleio instead?
For deciding budget across channels, yes. An aggregator attributes Shopify orders across Google, Meta, and email, which the platforms' own reports can't do. For diagnosing a Google account by product, search term, or feed issue, connect the Google Ads MCP. Brands spending on both channels usually end up using both connections.
Where this leaves you
Three open items could change the details above. The maintainer's write-tools pull request may merge, adding assets, video, and labels with a confirmation step. The server still targets API v25, and a move to v26 would bring the newer report fields. Google may also start enforcing its August policy against hosted write-access servers, which would narrow the vendor options. Until Google's own write tools ship with confirmation built in, read-only is a sensible default for most operators.
Set it up with a read-only user, run the five checks before Black Friday, and make the changes they point to yourself. If you want Claude to read your margins, brand terms, and claims rules alongside the account, and turn the diagnosis into new ads, that is what the DTC Stack does. To see what AI tools already say about your store, the free AI visibility audit takes a few minutes.
Builds AI marketing systems for DTC and Shopify brands doing $1M-$50M. Creator of The DTC Stack.
Make AI sound like your brand, not a bot.
Answer 7 questions, get a custom Brand Voice file you can paste into Claude, Cursor, or any AI tool for instantly better output. It's one piece of the 49-file Brand Brain - free.
Build My Brand Voice - FreeJust want the playbooks? The Operator's Brief - new skill drops and AI workflows for $1M-$50M Shopify brands. No fluff, no spam.
Build your Brand Brain. Ship on-brand content in minutes.
The DTC Stack is a Brand Brain + 21 AI execution skills for product pages, emails, ads, SEO, and more. One purchase, lifetime access. Works with Claude, Cursor, Copilot, and 30+ AI tools.
One-time purchase. Instant access. Lifetime updates.