Skip to content

Google Ads · terminal-driven

Google Ads CLI — Drive Google Ads from Your Terminal

Google launched their official Google Ads MCP on April 28, 2026 — but it's read-only and ships with only 3 tools. There's no separate Google Ads CLI binary. Here's how to get a terminal-driven Google Ads workflow today using Claude Code + GoMarble's hosted MCP.

Used by paid media teams at

UNICEF Razorpay Havas dentsu GroupM Emma Doméstika Coterie ETS J7 Media BTA
~/marketing — claude
$ npm install -g @anthropic-ai/claude-code
+ @anthropic-ai/claude-code@2.0.0
added 23 packages in 4s

→ Add GoMarble MCP at claude.ai/settings/integrations
   URL: https://apps.gomarble.ai/mcp-api/sse
✓ Custom connector added
✓ Google Ads account 1234567890 connected

$ claude
> Use GoMarble MCP for Google Ads. Find search terms
  in the last 30 days with >$50 spend and zero conversions.
  Propose a negative keyword list and attach to my top 3
  campaigns by spend.

⏳ Running GAQL across customer 123*****890...
⏳ Filtering 4,217 search terms → 134 zero-conversion candidates
⏳ Computing top 3 campaigns by spend...
✓ Staged negative keyword list for approval

NEGATIVES (134 terms · $4,287 wasted spend last 30d):
  • free + "{exact}" — 18 terms, $612 wasted
  • cheap + "{exact}" — 11 terms, $387 wasted
  • how to + "{phrase}" — 47 terms, $1,243 wasted
  • +58 more (full list in approval queue)

  Attaching to: Search-Brand-Core, Search-DemandGen, PMax-Hero
  Approve in Claude? (y/n)

> 

Real prompt structure. Anonymized account ID. Thresholds from the workflows below.

What is the Google Ads CLI (via Claude Code + GoMarble MCP)?

Google didn't ship a separate Google Ads CLI binary the way Meta did. They shipped a read-only MCP server at github.com/googleads/google-ads-mcp with 3 tools. For terminal-driven Google Ads workflows today, the practical path is: Claude Code + GoMarble's hosted MCP. GoMarble adds the 12+ Google Ads tools Google's official MCP doesn't, including write operations via propose/approve.

Setup with Claude Code

  1. Install Claude Code: `npm install -g @anthropic-ai/claude-code`
  2. Sign up at apps.gomarble.ai/users/sign-up
  3. Connect your Google Ads account in Integrations
  4. Open claude.ai/settings/integrations → Add Custom Connector → URL: https://apps.gomarble.ai/mcp-api/sse
  5. In a terminal: `claude` then prompt with 'Use GoMarble MCP for Google Ads...'

4 workflows to try

Copy any of these into Claude Code. The CLI does the API calls; Claude parses the results and continues the conversation. Each card includes the equivalent click-path in Ads Manager UI for honest comparison.

Negative keyword sweep

Prompt to Claude

Find search terms that spent >$50 with zero conversions in the last 30 days. Propose a negative keyword list and attach to my top 3 campaigns.

Terminal command

claude 'Use GoMarble MCP. For my Google Ads account, find search terms with >$50 spend and zero conversions in last 30 days. Propose a negative keyword list, attach to top 3 campaigns by spend.'

What happens: GoMarble runs the GAQL, surfaces the candidate negatives, and uses google_ads_propose_create_negative_keyword_list to stage the operation for your one-click approval in Claude.

Replaces: Google Ads UI: Search terms report → filter by spend → manually copy zero-conversion terms → create new negative keyword list → attach to each campaign one by one. ~30-45 minutes.

Keyword opportunity from landing page

Prompt to Claude

Pull keyword ideas relevant to https://mybrand.com/category/x. Show search volume, competition, and CPC range.

Terminal command

claude 'Use GoMarble MCP. Run google_ads_keyword_discover on https://mybrand.com/category/x. Sort by volume. Highlight any term with LOW competition and >500 monthly searches.'

What happens: GoMarble calls Google's Keyword Planner API via google_ads_keyword_discover. Returns structured keyword ideas with metrics and trends.

Replaces: Keyword Planner UI: open tool → paste URL → wait for results → manually filter by competition + volume → export → triage. ~15-20 minutes per page.

Budget rebalance proposal

Prompt to Claude

Compare ROAS month-over-month across my Google Ads campaigns. Propose moving budget from underperformers to growers.

Terminal command

claude 'Use GoMarble MCP. Get last-month and this-month ROAS by campaign for my Google Ads account. Propose budget shifts. Show me before/after.'

What happens: GoMarble runs GAQL via run_gaql, identifies movers, and uses google_ads_propose_update_campaigns to stage the budget changes.

Replaces: Google Ads UI: pull report → compare two periods → manually compute deltas → click into each campaign → adjust budget → confirm. ~25-40 minutes.

Search query intent classification

Prompt to Claude

Classify the top 100 search queries by intent (informational, commercial, transactional). Show which intent types are driving conversions.

Terminal command

claude 'Use GoMarble MCP. Pull top 100 search queries by spend from my Google Ads account, last 30 days. Classify each by intent. Group conversions by intent type.'

What happens: Claude reads the search terms via GAQL, classifies them semantically, and surfaces patterns. No native Google Ads UI for this.

Replaces: There's no equivalent in Google Ads UI — you'd export search terms, manually categorize 100 rows in a spreadsheet, then pivot conversions by category. ~1-2 hours.

Try every workflow above on your own account.

GoMarble's hosted MCP works with these prompts the same way — plus Google, TikTok, Shopify, and Klaviyo in the same Claude session.

Start free trial

Time savings vs Ads Manager UI

Google's official MCP is read-only with 3 tools, so most write workflows happen via Claude Code + GoMarble's hosted MCP. Below: real Google Ads UI workflows vs the equivalent prompt.

Task Ads Manager UI CLI / Claude Code
Negative keyword sweep across 3 campaigns ~30-45 min <2 min
Keyword research from landing page ~15-20 min <1 min
Monthly budget rebalance across 20 campaigns ~25-40 min ~3 min
Search query intent classification (100 queries) ~1-2 hours (no native UI for this) ~2-3 min

These reflect time spent inside Google Ads UI vs the equivalent prompt against GoMarble MCP. Doesn't include the one-time setup (~5 min).

Troubleshooting common errors

Google Ads CLI (via Claude Code + GoMarble MCP) is in beta, and Meta's API quotas + OAuth scopes catch most teams in the first week. Here are the issues that come up most.

GAQL syntax error

Symptom

Claude returns "Invalid GAQL query" when running a custom query via the official MCP's search tool.

Fix

Google Ads GAQL is strict about resource names, field selection, and segmenting. Two safer paths: (1) ask Claude to write the GAQL and walk it through the resource hierarchy first; (2) skip raw GAQL — use GoMarble's structured tools (google_ads_keyword_metrics, google_ads_keyword_discover) which wrap common queries. The structured tools survive Google Ads API version updates better than raw GAQL strings.

OAuth scope error — missing ads_management

Symptom

Read works but proposed writes via GoMarble MCP fail with "Missing required scope."

Fix

When you connected your Google Ads account in GoMarble Integrations, the OAuth flow may have only granted read scope. Disconnect the account in apps.gomarble.ai → Integrations → reconnect and explicitly grant ads_management at the consent screen. Some Google Workspace admin policies block ads_management by default — coordinate with your IT admin if you see this in an enterprise environment.

Quota exhausted (developer token quota)

Symptom

Account-level operations succeed for a while, then fail with "OPERATIONS_LIMIT_EXCEEDED" or "QUOTA_ERROR".

Fix

Google Ads API has per-developer-token quotas (basic access = 15K operations/day). High-frequency reporting across many accounts can hit this. GoMarble batches calls and rotates dev tokens server-side to mitigate. For very high-volume teams, request a higher quota via Google's standard access application.

Manager account vs sub-account confusion

Symptom

Tools return data for a different account than expected, or fail with "customer_id_not_found."

Fix

Google Ads requires both the customer_id and manager_id (login_customer_id) for managed accounts. When prompting Claude, always state which account explicitly ("for customer ID 1234567890 under manager 1112223334"). GoMarble's list_accounts tool returns this hierarchy — call it first if you're unsure.

Changes I approved via Claude didn't show up in Google Ads UI

Symptom

GoMarble shows the operation as approved, but the change isn't visible in Google Ads UI.

Fix

GoMarble's propose/approve pattern stages writes server-side and executes them via the Google Ads API. Confirm: (1) check the operation status in apps.gomarble.ai → Activity, (2) refresh Google Ads UI (changes can take 1-5 minutes to propagate even after API success), (3) check the Change History in Google Ads UI to confirm the API-originated change.

Where the CLI stops — and GoMarble extends

GoMarble's hosted MCP adds 12+ Google-specific tools including write operations (campaign/ad group/keyword/budget updates via propose/approve), Keyword Planner integration, Bing/Meta/TikTok in the same prompt, and Shopify revenue reconciliation.

What the Google Ads CLI (via Claude Code + GoMarble MCP) can't do

  • Read-only — can't pause campaigns, adjust budgets, or push changes
  • Only 3 tools (list_accessible_customers, search, get_resource_metadata)
  • Self-hosted — DevOps overhead
  • Google Ads only — no cross-platform context

Add GoMarble's hosted MCP

  1. Sign up at apps.gomarble.ai/users/sign-up
  2. Connect Google Ads in Integrations
  3. Add Custom Connector in claude.ai/settings/integrations
  4. In Claude Code: prompt Claude with 'Use GoMarble MCP for Google Ads ...'
https://apps.gomarble.ai/mcp-api/sse

Combined sample prompt

Use GoMarble MCP for Google Ads. Find wasted spend in last 30 days, propose a negative keyword list, and create it across my top 3 campaigns. Show me the final list before approval.

Which option, when?

Option Use when Limits
Google's official MCP (googleads/google-ads-mcp) You're an engineer building custom read-only GAQL analyses and don't mind self-hosting Read-only; 3 tools; self-hosted
Claude Code + GoMarble Hosted MCP You want terminal-driven Google Ads workflows with full read + write access today Requires a GoMarble subscription — see gomarble.ai/pricing for public tiers
GoMarble Platform (web dashboard) You want scheduled jobs, dashboards, Agent Mode, non-technical teammate access Web UI rather than terminal-native
“Most agencies I know have someone whose entire job is just… reporting. That's not strategy. That's data janitor work. The team at GoMarble AI built something that actually fixes this. 20+ AI agents that do the thinking for you.”
Nick Shackelford
Partner, Drinkbrez.com
“And guessing is why most AI-powered ads fail. That's why I tested GoMarble. Because it doesn't guess.”
Gabriele Milan
Consultant
“And every week, I said to myself: 'There's got to be a simpler way.' And then I tested GoMarble AI.”
Hugo
CEO, LA FRAISE

Frequently asked

Is there an official Google Ads CLI?
Not as a standalone binary like Meta's `@meta/ads-cli`. Google released the Google Ads MCP server on April 28, 2026 (read-only, 3 tools) at github.com/googleads/google-ads-mcp. For terminal-driven Google Ads workflows today, the practical path is Claude Code + GoMarble's hosted MCP.
Why didn't Google ship a CLI like Meta did?
Google scoped their v1 release narrow — just 3 read-only tools via an MCP server. Their stated intent is for developers to build custom tooling on top of GAQL. This is different from Meta's approach (29 tools, read + write, both MCP and CLI interfaces).
Can I do write operations against Google Ads from the terminal?
Yes — through GoMarble's hosted MCP. GoMarble exposes google_ads_propose_create_campaign, google_ads_propose_update_ads, google_ads_propose_create_negative_keyword_list, and more. Writes go through a propose/approve flow so accidental mutations get caught before hitting the API.
Does Claude Code work with Google Ads natively?
Not directly — Claude Code is a CLI for Claude itself. To make it useful for Google Ads, you connect it to an MCP server (Google's read-only one or GoMarble's full-coverage one). Most teams choose GoMarble's because the write coverage and multi-platform breadth do more in the same prompt.
What about Bing Ads, LinkedIn Ads, TikTok Ads from the terminal?
GoMarble's hosted MCP covers all of them. The same Claude Code session can call Google + Bing + LinkedIn + TikTok + Meta in a single prompt. No CLI exists for these platforms individually.

Related reading

Run all your paid media from one terminal session.

GoMarble's hosted MCP gives Claude Code access to Google + every other ad platform + Shopify + Klaviyo + GA4 + competitor research in one connection.

Sources: Google Ads MCP server: Developer integration guide · googleads/google-ads-mcp on GitHub · Announcing official MCP support for Google services