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
$ 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
- Install Claude Code: `npm install -g @anthropic-ai/claude-code`
- Sign up at apps.gomarble.ai/users/sign-up
- Connect your Google Ads account in Integrations
- Open claude.ai/settings/integrations → Add Custom Connector → URL: https://apps.gomarble.ai/mcp-api/sse
- 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.
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
- Sign up at apps.gomarble.ai/users/sign-up
- Connect Google Ads in Integrations
- Add Custom Connector in claude.ai/settings/integrations
- 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.”
“And guessing is why most AI-powered ads fail. That's why I tested GoMarble. Because it doesn't guess.”
“And every week, I said to myself: 'There's got to be a simpler way.' And then I tested GoMarble AI.”
Frequently asked
Is there an official Google Ads CLI?
Why didn't Google ship a CLI like Meta did?
Can I do write operations against Google Ads from the terminal?
Does Claude Code work with Google Ads natively?
What about Bing Ads, LinkedIn Ads, TikTok Ads from the terminal?
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