# Bid & Scale > Google Ads your AI agent runs: it reads the account every day, proposes each fix with the numbers behind it, and applies only what your policy allows. Every change is logged and reverts in one click. Two machine surfaces expose the same engine: an MCP server at /api/mcp for agents, and a REST API at /api/v1 for your own code. **When to use Bid & Scale.** Reach for it when the job is one of these, on a Google Ads account the user owns: - **Find wasted spend** — mine search terms, propose negative keywords, and tighten match types, with the cost each term burned. - **Audit an account** — six areas scored from 90 days of the account's own data, with a 30/60/90-day roadmap and a shareable report. - **Work an optimization plan** — pacing against the operator's targets, CPA and ROAS against their band, and a ranked list of what to scale, fix, protect or reallocate. - **Make a change safely** — budgets, bids, targets, keywords, ads, audiences, schedules and experiments, each as a proposal with the numbers behind it. - **Explain what changed** — the account's change history, our own action ledger, and conversion tracking health. **When not to use it:** - **Other ad networks.** Google Ads only (Apple Ads is Tap & Scale; Meta is Reach & Scale). - **Creative production or landing pages.** It proposes ad copy and assets; it does not design or host pages. - **Guaranteed results.** It never promises ROAS or CPA; it moves inputs Smart Bidding then optimizes on. **How to call it:** - **As an agent (MCP):** connect to `https://bidandscale.com/api/mcp` over Streamable HTTP and sign in with OAuth 2.1 in the browser — there is no token to paste (a headless agent can send a `bsk_` API key as the Bearer instead). In Claude Code: `claude mcp add --transport http bidandscale https://bidandscale.com/api/mcp`. Call `gads_list_ad_accounts` first and pass the account's `projectId` to every account-scoped tool; check `gads_get_sync_status` before analysing. Server card: https://bidandscale.com/.well-known/mcp/server-card.json - **From application code (REST):** `https://bidandscale.com/api/v1` with `Authorization: Bearer bsk_…`. Spec: https://bidandscale.com/openapi.json - **Connecting Google Ads** is a browser consent the human completes: `gads_get_connection_status` returns `settingsUrl`, the page where they do it. It cannot happen over MCP. - **Safety:** reads are free and safe. Every `gads_propose_*` call is a proposal: bounded, low-risk changes apply under the operator's policy (which an API key never triggers), everything larger waits in the approval queue, and an applied change reverts with `gads_revert_action` from the state snapshotted before it moved. Creating a campaign goes live when its approval applies — stage it with `startPaused: true`. Start here: [Quickstart](https://bidandscale.com/docs/get-started/quickstart) · [MCP tools](https://bidandscale.com/docs/mcp-reference) · [Approvals](https://bidandscale.com/docs/guides/review-approvals) · [API reference](https://bidandscale.com/docs/api) ## Agents - [Connect an AI agent](https://bidandscale.com/agents): every client Bid & Scale works with, and how each connects - [Claude Code](https://bidandscale.com/agents/claude-code): One claude mcp add command, or the plugin with five slash commands. - [Cursor](https://bidandscale.com/agents/cursor): One JSON block in ~/.cursor/mcp.json. - [Codex](https://bidandscale.com/agents/codex): One codex mcp add command, shared by every Codex client. - [OpenClaw](https://bidandscale.com/agents/openclaw): One mcp.servers entry in openclaw.json, so every channel gets the tools. - [Grok bot](https://bidandscale.com/agents/grok): A remote MCP tool on the bot's xAI API requests. - [Hermes](https://bidandscale.com/agents/hermes): One HTTP MCP server in ~/.hermes/config.yaml. - [Claude](https://bidandscale.com/agents/claude): A custom connector under Customize → Connectors, on web, Desktop, and mobile. - [Claude Cowork](https://bidandscale.com/agents/claude-cowork): The same custom connector as claude.ai, enabled for Cowork. - [ChatGPT](https://bidandscale.com/agents/chatgpt): A developer-mode app, on paid plans on the web. - [Gemini CLI](https://bidandscale.com/agents/gemini): One entry in ~/.gemini/settings.json. - [Windsurf](https://bidandscale.com/agents/windsurf): One serverUrl entry in mcp_config.json. Windsurf is now Devin Desktop. - [VS Code](https://bidandscale.com/agents/vs-code): One .vscode/mcp.json file you can commit for the team. - [eve](https://bidandscale.com/agents/eve): One MCP connection file, with a scoped, expiring API key. - [Any MCP client](https://bidandscale.com/agents/mcp): One URL for any client that speaks remote MCP. ## Docs - [Introduction](https://bidandscale.com/docs): A warehouse and safe-write layer over your Google Ads accounts, with an AI copilot that optimizes them — usable from the dashboard or over MCP. - [API Reference](https://bidandscale.com/docs/api): Read your Google Ads warehouse, propose and approve changes, and hand the Ads copilot a brief — from your own code. - [GET /api/v1/accounts/{projectId}](https://bidandscale.com/docs/api/accounts/get-ad-account): One account, with its sync state and optimization targets. - [GET /api/v1/connection](https://bidandscale.com/docs/api/accounts/get-connection): Google Ads OAuth connection health for the workspace. - [GET /api/v1/accounts/{projectId}/optimization-targets](https://bidandscale.com/docs/api/accounts/get-optimization-targets): The operator's spend goal and ROAS/CPA guardrails. - [GET /api/v1/accounts/{projectId}/brief](https://bidandscale.com/docs/api/accounts/get-project-brief): The account's brief: pitch, ICP, voice and do-not-say for the copilot. - [GET /api/v1/accounts/{projectId}/sync](https://bidandscale.com/docs/api/accounts/get-sync-status): Warehouse sync state and freshness. - [GET /api/v1/accounts](https://bidandscale.com/docs/api/accounts/list-ad-accounts): List the Google Ads accounts this key can reach. - [PUT /api/v1/accounts/{projectId}/optimization-targets](https://bidandscale.com/docs/api/accounts/set-optimization-targets): Replace the account's optimization objective. - [POST /api/v1/accounts/{projectId}/sync](https://bidandscale.com/docs/api/accounts/trigger-sync): Enqueue a full re-sync of the account. - [PUT /api/v1/accounts/{projectId}/brief](https://bidandscale.com/docs/api/accounts/update-project-brief): Replace the account's brief. - [POST /api/v1/accounts/{projectId}/actions/{actionId}/approve](https://bidandscale.com/docs/api/actions/approve-action): Approve a proposed change and enqueue it for apply. - [GET /api/v1/accounts/{projectId}/actions](https://bidandscale.com/docs/api/actions/list-actions): The proposal queue. - [GET /api/v1/accounts/{projectId}/history](https://bidandscale.com/docs/api/actions/list-history): Unified change timeline: our actions plus Google Ads UI edits. - [POST /api/v1/accounts/{projectId}/actions/{actionId}/reject](https://bidandscale.com/docs/api/actions/reject-action): Reject a proposed change. - [POST /api/v1/accounts/{projectId}/actions/{actionId}/revert](https://bidandscale.com/docs/api/actions/revert-action): Undo an applied change by proposing its inverse. - [POST /api/v1/accounts/{projectId}/ad-groups/{adGroupId}/keywords](https://bidandscale.com/docs/api/ad-groups/add-keywords): Propose adding keywords to an ad group. - [GET /api/v1/accounts/{projectId}/ad-groups](https://bidandscale.com/docs/api/ad-groups/list-ad-groups): List ad groups with performance. - [POST /api/v1/accounts/{projectId}/ad-groups/{adGroupId}/name](https://bidandscale.com/docs/api/ad-groups/propose-rename-ad-group): Propose renaming an ad group. - [Agent runs](https://bidandscale.com/docs/api/agent-runs): Hand the Ads copilot a plain-English brief over HTTP and poll for the result. - [GET /api/v1/accounts/{projectId}/assets](https://bidandscale.com/docs/api/assets/list-assets): Asset links with performance, plus RSA component labels. - [GET /api/v1/accounts/{projectId}/audiences](https://bidandscale.com/docs/api/audiences/list-audiences): The audience library and current attachments, with performance. - [GET /api/v1/accounts/{projectId}/audits/{auditId}](https://bidandscale.com/docs/api/audits/get-audit-report): The full audit report. Accepts 'latest' in place of an id. - [GET /api/v1/accounts/{projectId}/audits](https://bidandscale.com/docs/api/audits/list-audit-runs): Past audit runs, newest first. - [POST /api/v1/accounts/{projectId}/audits](https://bidandscale.com/docs/api/audits/trigger-audit): Run an account audit now. - [Authentication](https://bidandscale.com/docs/api/authentication): API keys, the read/write/admin ladder, and which accounts a key can reach. - [GET /api/v1/accounts/{projectId}/ads](https://bidandscale.com/docs/api/campaigns/list-ads): List ads with performance, creative text and policy state. - [GET /api/v1/accounts/{projectId}/campaigns](https://bidandscale.com/docs/api/campaigns/list-campaigns): List campaigns with performance over the last N days. - [POST /api/v1/accounts/{projectId}/campaigns/{campaignId}/budget](https://bidandscale.com/docs/api/campaigns/propose-budget-change): Propose a new daily budget for a campaign. - [POST /api/v1/accounts/{projectId}/campaigns/{campaignId}/status](https://bidandscale.com/docs/api/campaigns/propose-campaign-status): Propose enabling or pausing a campaign. - [POST /api/v1/accounts/{projectId}/campaigns/{campaignId}/target](https://bidandscale.com/docs/api/campaigns/propose-campaign-target): Propose a new Target CPA or Target ROAS on the current strategy. - [POST /api/v1/accounts/{projectId}/campaigns/{campaignId}/name](https://bidandscale.com/docs/api/campaigns/propose-rename-campaign): Propose renaming a campaign. - [Coverage](https://bidandscale.com/docs/api/coverage): What the REST API covers today, what it never will, and what is still to come. - [Errors](https://bidandscale.com/docs/api/errors): The error envelope, what each code means, and which ones are worth retrying. - [GET /api/v1/accounts/{projectId}/experiments](https://bidandscale.com/docs/api/experiments/list-experiments): Experiments with per-arm performance and a lift readout. - [GET /api/v1/accounts/{projectId}/keywords](https://bidandscale.com/docs/api/keywords/list-keywords): List keywords with performance and Quality Score components. - [POST /api/v1/accounts/{projectId}/keywords/status](https://bidandscale.com/docs/api/keywords/propose-keyword-status): Propose enabling, pausing or removing a keyword. - [POST /api/v1/accounts/{projectId}/negative-keywords](https://bidandscale.com/docs/api/negatives/add-negative-keywords): Propose blocking search terms at campaign or ad-group level. - [GET /api/v1/accounts/{projectId}/negative-keywords](https://bidandscale.com/docs/api/negatives/list-negative-keywords): Negative keywords at both campaign and ad-group level. - [POST /api/v1/accounts/{projectId}/actions/account-tracking](https://bidandscale.com/docs/api/proposals/propose-account-tracking): Propose setting or clearing the account-level tracking template and final URL suffix. - [POST /api/v1/accounts/{projectId}/actions/ad-group-status](https://bidandscale.com/docs/api/proposals/propose-ad-group-status): Propose enabling or pausing an ad group. - [POST /api/v1/accounts/{projectId}/actions/ad-schedule-bid-modifier](https://bidandscale.com/docs/api/proposals/propose-ad-schedule-bid-modifier): Propose a bid adjustment on an ad schedule window. - [POST /api/v1/accounts/{projectId}/actions/ad-status](https://bidandscale.com/docs/api/proposals/propose-ad-status): Propose enabling or pausing an ad. - [POST /api/v1/accounts/{projectId}/actions/add-ad-schedule](https://bidandscale.com/docs/api/proposals/propose-add-ad-schedule): Propose adding ad schedule windows. - [POST /api/v1/accounts/{projectId}/actions/add-geo-targets](https://bidandscale.com/docs/api/proposals/propose-add-geo-targets): Propose targeting or excluding locations. - [POST /api/v1/accounts/{projectId}/actions/ai-max-experiment](https://bidandscale.com/docs/api/proposals/propose-ai-max-experiment): Propose a 50/50 AI Max on-vs-off experiment on a Search campaign. - [POST /api/v1/accounts/{projectId}/actions/ai-max-setting](https://bidandscale.com/docs/api/proposals/propose-ai-max-setting): Propose turning AI Max for Search on or off. - [POST /api/v1/accounts/{projectId}/actions/ai-max-text-guidelines](https://bidandscale.com/docs/api/proposals/propose-ai-max-text-guidelines): Propose AI Max text-guideline term exclusions on a Search campaign. - [POST /api/v1/accounts/{projectId}/actions/attach-audience](https://bidandscale.com/docs/api/proposals/propose-attach-audience): Propose attaching an audience to a campaign or ad group. - [POST /api/v1/accounts/{projectId}/actions/brand-exclusion](https://bidandscale.com/docs/api/proposals/propose-brand-exclusion): Propose attaching a brand exclusion list to a Search campaign. - [POST /api/v1/accounts/{projectId}/actions/campaign-bid-strategy](https://bidandscale.com/docs/api/proposals/propose-campaign-bid-strategy): Propose switching a campaign's bidding strategy type. Always review-tier. - [POST /api/v1/accounts/{projectId}/actions/change-keyword-match-type](https://bidandscale.com/docs/api/proposals/propose-change-keyword-match-type): Propose changing a keyword's match type (new sibling + pause the old one). - [POST /api/v1/accounts/{projectId}/actions/clone-ad-group](https://bidandscale.com/docs/api/proposals/propose-clone-ad-group): Propose cloning a proven ad group into another campaign. - [POST /api/v1/accounts/{projectId}/actions/clone-campaign](https://bidandscale.com/docs/api/proposals/propose-clone-campaign): Propose cloning a proven Search campaign into a new market. - [POST /api/v1/accounts/{projectId}/actions/create-ad-group](https://bidandscale.com/docs/api/proposals/propose-create-ad-group): Propose a new ad group with its keywords under an existing Search campaign. - [POST /api/v1/accounts/{projectId}/actions/create-assets](https://bidandscale.com/docs/api/proposals/propose-create-assets): Propose new sitelink, callout or snippet assets, or attaching a library asset. - [POST /api/v1/accounts/{projectId}/actions/create-campaign](https://bidandscale.com/docs/api/proposals/propose-create-campaign): Propose a new Search campaign. - [POST /api/v1/accounts/{projectId}/actions/create-custom-audience](https://bidandscale.com/docs/api/proposals/propose-create-custom-audience): Propose a keyword- or URL-based custom segment. - [POST /api/v1/accounts/{projectId}/actions/create-experiment](https://bidandscale.com/docs/api/proposals/propose-create-experiment): Propose a bid-strategy change as an A/B experiment on a Search campaign. - [POST /api/v1/accounts/{projectId}/actions/create-rsa](https://bidandscale.com/docs/api/proposals/propose-create-rsa): Propose a new responsive search ad. - [POST /api/v1/accounts/{projectId}/actions/detach-asset](https://bidandscale.com/docs/api/proposals/propose-detach-asset): Propose detaching an asset link from a campaign or the account. - [POST /api/v1/accounts/{projectId}/actions/detach-audience](https://bidandscale.com/docs/api/proposals/propose-detach-audience): Propose detaching an audience criterion. - [POST /api/v1/accounts/{projectId}/actions/device-bid-modifier](https://bidandscale.com/docs/api/proposals/propose-device-bid-modifier): Propose a device bid adjustment or device exclusion on a campaign. - [POST /api/v1/accounts/{projectId}/actions/end-experiment](https://bidandscale.com/docs/api/proposals/propose-end-experiment): Propose ending a running experiment; traffic returns to the control. - [POST /api/v1/accounts/{projectId}/actions/geo-bid-modifier](https://bidandscale.com/docs/api/proposals/propose-geo-bid-modifier): Propose a bid adjustment on a targeted location. - [POST /api/v1/accounts/{projectId}/actions/keyword-bid](https://bidandscale.com/docs/api/proposals/propose-keyword-bid): Propose a new max CPC bid for a keyword. - [POST /api/v1/accounts/{projectId}/actions/promote-experiment](https://bidandscale.com/docs/api/proposals/propose-promote-experiment): Propose promoting a winning experiment into the base campaign. Irreversible. - [POST /api/v1/accounts/{projectId}/actions/remove-ad-schedule](https://bidandscale.com/docs/api/proposals/propose-remove-ad-schedule): Propose removing an ad schedule window. - [POST /api/v1/accounts/{projectId}/actions/remove-geo-target](https://bidandscale.com/docs/api/proposals/propose-remove-geo-target): Propose removing a location target or exclusion. - [POST /api/v1/accounts/{projectId}/actions/remove-negative-keyword](https://bidandscale.com/docs/api/proposals/propose-remove-negative-keyword): Propose removing a negative keyword that blocks enabled keywords. - [POST /api/v1/accounts/{projectId}/actions/replace-ad](https://bidandscale.com/docs/api/proposals/propose-replace-ad): Propose replacing an RSA: pause the old ad and create the new one in one approval. - [Rate limits](https://bidandscale.com/docs/api/rate-limits): Per-key request limits, the separate agent-run caps, and the auto-apply ceiling. - [POST /api/v1/accounts/{projectId}/optimization-plan/dismissals](https://bidandscale.com/docs/api/reports/dismiss-recommendation): Suppress a plan recommendation, with a reason and an optional expiry. - [GET /api/v1/accounts/{projectId}/overview](https://bidandscale.com/docs/api/reports/get-account-overview): Account totals for a window, with data freshness. - [GET /api/v1/accounts/{projectId}/competitive-pressure](https://bidandscale.com/docs/api/reports/get-competitive-pressure): Week-over-week impression-share pressure per Search campaign. - [GET /api/v1/accounts/{projectId}/intraday-pulse](https://bidandscale.com/docs/api/reports/get-intraday-pulse): Today so far against the same hours on the last 7 days. - [GET /api/v1/accounts/{projectId}/optimization-plan](https://bidandscale.com/docs/api/reports/get-optimization-plan): Pacing against target plus a ranked action feed. - [GET /api/v1/accounts/{projectId}/segments](https://bidandscale.com/docs/api/reports/get-segment-performance): Performance by device, geo, day, hour, age, gender or income, per campaign. - [POST /api/v1/accounts/{projectId}/gaql](https://bidandscale.com/docs/api/reports/run-gaql-query): Run a read-only GAQL query against the live Google Ads API. - [DELETE /api/v1/accounts/{projectId}/optimization-plan/dismissals](https://bidandscale.com/docs/api/reports/undismiss-recommendation): Bring a suppressed recommendation back into the plan. - [POST /api/v1/accounts/{projectId}/research/keyword-scores](https://bidandscale.com/docs/api/research/score-keywords): Verify a keyword list against Keyword Planner demand and paid difficulty. - [POST /api/v1/accounts/{projectId}/research/keyword-suggestions](https://bidandscale.com/docs/api/research/suggest-keywords): Expand seed terms into Google's related keyword ideas, scored. - [DELETE /api/v1/runs/{runId}](https://bidandscale.com/docs/api/runs/cancel-run): Cancel a queued run. A running one cannot be interrupted. - [POST /api/v1/runs](https://bidandscale.com/docs/api/runs/create-run): Hand the Ads copilot a brief. Returns 202; poll for the result. - [GET /api/v1/runs/{runId}](https://bidandscale.com/docs/api/runs/get-run): Poll a run until it reaches a terminal status. - [GET /api/v1/runs](https://bidandscale.com/docs/api/runs/list-runs): Recent agent runs. - [GET /api/v1/accounts/{projectId}/search-terms](https://bidandscale.com/docs/api/search-terms/list-search-terms): The queries that actually triggered ads. - [GET /api/v1/accounts/{projectId}/tracking-health](https://bidandscale.com/docs/api/tracking/get-tracking-health): Conversion-value coverage, auto-tagging and UTM template checks. - [GET /api/v1/accounts/{projectId}/conversion-actions](https://bidandscale.com/docs/api/tracking/list-conversion-actions): Conversion actions and whether each counts in Conversions. - [The Ads copilot](https://bidandscale.com/docs/concepts/ads-copilot): What the copilot reads, what it proposes, and why it can never approve its own changes. - [History and auditability](https://bidandscale.com/docs/concepts/history): The unified timeline of what changed, when, why, who, and the result. - [Proposal lifecycle](https://bidandscale.com/docs/concepts/proposal-lifecycle): How a single change moves from a copilot proposal to a live edit — and back. - [Safe-apply policy](https://bidandscale.com/docs/concepts/safe-apply-policy): The rules that decide which changes apply automatically and which wait for your approval. - [The sync model](https://bidandscale.com/docs/concepts/sync-model): How the warehouse stays fresh — nightly full pulls, 6-hourly incrementals, and no webhooks. - [Workspace and accounts](https://bidandscale.com/docs/concepts/two-tier-model): How the two-tier shell maps a Google login to a workspace and each Google Ads customer to its own account. - [Quickstart](https://bidandscale.com/docs/get-started/quickstart): Connect a Google Ads account, import it, and land on your first dashboard. - [Set optimization targets](https://bidandscale.com/docs/get-started/set-optimization-targets): Give the copilot a spend goal, a ROAS floor, and a CPA band — the inputs that drive the plan and the safe-apply policy. - [Block wasted spend](https://bidandscale.com/docs/guides/block-wasted-spend): Turn the search-terms report into negative keywords that stop spend on the wrong queries. - [Configure conversion tracking](https://bidandscale.com/docs/guides/configure-tracking): Connect PostHog to enrich the dashboard with funnel data and a tracking-health check. - [Expand keywords](https://bidandscale.com/docs/guides/expand-keywords): Grow coverage with search-term silo discovery and keyword ideation, then add the winners safely. - [Review and approve changes](https://bidandscale.com/docs/guides/review-approvals): Work the queue of proposed changes, each with its risk tier and the reason it's waiting. - [Run and share an audit](https://bidandscale.com/docs/guides/run-an-audit): Get a deterministic read of account health, and generate a client-ready shareable report. - [Use the copilot](https://bidandscale.com/docs/guides/use-the-copilot): Get grounded, useful proposals out of the Ads copilot instead of vague advice. - [Work the recommendations feed](https://bidandscale.com/docs/guides/work-recommendations): Drive the account from the impact-ordered action feed instead of hunting through tables. - [MCP Reference](https://bidandscale.com/docs/mcp-reference): Operate your Google Ads accounts from Claude Code, Codex, or claude.ai — the same read and propose tools the dashboard uses, over MCP. - [gads_approve_action](https://bidandscale.com/docs/mcp-reference/approvals/gads-approve-action): Approve a pending (proposed) action so the worker applies it to Google Ads. - [gads_reject_action](https://bidandscale.com/docs/mcp-reference/approvals/gads-reject-action): Reject a pending (proposed) action — nothing runs against Google Ads and the row becomes terminal. - [gads_revert_action](https://bidandscale.com/docs/mcp-reference/approvals/gads-revert-action): Undo an APPLIED action by proposing and immediately applying the compensating change (computed server-side from the original row's snapshot, linked via reverts_action_id). - [Authorization](https://bidandscale.com/docs/mcp-reference/authorization): OAuth 2.1 for a person, a bsk_ API key for a headless agent. What each credential reaches, how to revoke it, and the projectId-first flow. - [Connect claude.ai](https://bidandscale.com/docs/mcp-reference/connect-claude-ai): Add Bid & Scale as a custom connector in claude.ai using the built-in OAuth server. - [Connect Claude Code](https://bidandscale.com/docs/mcp-reference/connect-claude-code): Add the MCP server to Claude Code or Codex over OAuth 2.1, or install the plugin. - [Errors](https://bidandscale.com/docs/mcp-reference/errors): The result envelope, and what the common errors are telling you to do next. - [gads_discover_search_term_silos](https://bidandscale.com/docs/mcp-reference/expansion/gads-discover-search-term-silos): Cluster the account's unadded search terms (last 90 days, proven demand) into 4–8 semantic keyword silos with real clicks/conversions/cost per silo. - [gads_ideate_keyword_silos](https://bidandscale.com/docs/mcp-reference/expansion/gads-ideate-keyword-silos): Generate NEW keyword silos the account is not bidding on yet, from the product/landing pages — including profession/persona-based silos (e.g. - [gads_score_keywords](https://bidandscale.com/docs/mcp-reference/expansion/gads-score-keywords): Verify a specific keyword list against Google Keyword Planner BEFORE proposing it: real average monthly searches (demand 0-100) and paid-auction difficulty 0-100 (Google's competit - [gads_suggest_keywords](https://bidandscale.com/docs/mcp-reference/expansion/gads-suggest-keywords): Discover keyword candidates from Google's own related-ideas expansion: fans each seed into the terms Google associates with it, each scored on demand (real average monthly searches - [gads_generate_free_audit](https://bidandscale.com/docs/mcp-reference/free-audit/gads-generate-free-audit): Generate a FREE AUDIT for the scoped account — a client-facing, shareable report (overall score, six category scores, strengths, weaknesses, 30/60/90-day roadmap) used to pitch a p - [gads_get_free_audit](https://bidandscale.com/docs/mcp-reference/free-audit/gads-get-free-audit): Status and result of the scoped account's latest free audit: overall score, grade, category scores, headline findings, and the public share URL when one is active. - [gads_share_free_audit](https://bidandscale.com/docs/mcp-reference/free-audit/gads-share-free-audit): Create (or revoke) the public share link for the scoped account's latest completed free audit. - [gads_list_projects](https://bidandscale.com/docs/mcp-reference/projects/gads-list-projects): List the operator's projects with their status and brief. - [gads_update_project_brief](https://bidandscale.com/docs/mcp-reference/projects/gads-update-project-brief): Replace the project's brief markdown — the operator-facing strategy doc covering pitch, ICP, value props, voice, do-not-say, and anything else worth telling the writer. - [Rate limits](https://bidandscale.com/docs/mcp-reference/rate-limits): Per-user limits on the MCP surface — generous for reads, tight for money-moving writes. - [gads_dismiss_recommendation](https://bidandscale.com/docs/mcp-reference/reads/gads-dismiss-recommendation): Suppress a recommendation from the optimization plan, with a reason. - [gads_explain_policy](https://bidandscale.com/docs/mcp-reference/reads/gads-explain-policy): Explain the safe-apply policy for this account: which propose-* changes apply automatically vs queue for operator approval, with the live limits (budget uplift ceiling, ROAS floor, - [gads_get_account_overview](https://bidandscale.com/docs/mcp-reference/reads/gads-get-account-overview): Headline performance for the connected Google Ads account over the last N days (spend, clicks, conversions, CPA, ROAS) plus campaign count and pending approvals. - [gads_get_asset_performance](https://bidandscale.com/docs/mcp-reference/reads/gads-get-asset-performance): Asset (extension) inventory + performance: campaign/account asset links (sitelinks, callouts, structured snippets, images) with 30d metrics, plus per-headline/description RSA compo - [gads_get_audit_report](https://bidandscale.com/docs/mcp-reference/reads/gads-get-audit-report): The full audit report (latest by default, or by run id): fingerprinted findings from the plan feed + tracking health + competitive pressure — each with a ready `act` payload — plus - [gads_get_change_history](https://bidandscale.com/docs/mcp-reference/reads/gads-get-change-history): Recent change history (last N days, max 30) for anomaly/audit — who changed what. - [gads_get_competitive_pressure](https://bidandscale.com/docs/mcp-reference/reads/gads-get-competitive-pressure): Competitive-pressure read per Search campaign: week-over-week impression-share family trends classified as external_pressure (rank-lost IS up + CPC up + IS down — someone is biddin - [gads_get_conversion_actions](https://bidandscale.com/docs/mcp-reference/reads/gads-get-conversion-actions): List the account's conversion actions (name, category, whether counted in the Conversions metric). - [gads_get_experiments](https://bidandscale.com/docs/mcp-reference/reads/gads-get-experiments): Experiments (A/B tests) on this account with per-arm performance over the experiment window: control vs treatment cost/conv/value/CPA/ROAS and a naive lift readout (flagged 'not si - [gads_get_funnel](https://bidandscale.com/docs/mcp-reference/reads/gads-get-funnel): End-to-end funnel for this project over the last N days: Google Ads impressions → clicks, then PostHog landing views → signups → paid, per campaign (first-touch UTM = google). - [gads_get_intraday_pulse](https://bidandscale.com/docs/mcp-reference/reads/gads-get-intraday-pulse): TODAY so far, compared against the same hours on the last 7 days. - [gads_get_optimization_plan](https://bidandscale.com/docs/mcp-reference/reads/gads-get-optimization-plan): The deterministic optimization plan for this account: the operator's targets (daily spend goal, ROAS floor, CPA band), current pacing vs the goal, and the ranked recommendation fee - [gads_get_search_terms](https://bidandscale.com/docs/mcp-reference/reads/gads-get-search-terms): Top search terms by cost over N days — the raw queries that triggered ads. - [gads_get_segment_performance](https://bidandscale.com/docs/mcp-reference/reads/gads-get-segment-performance): Warehoused segment performance for one dimension — device, geo (targeted locations), day_of_week, hour, age, gender, or income — per campaign, with labeled buckets, currency units, - [gads_get_tracking_health](https://bidandscale.com/docs/mcp-reference/reads/gads-get-tracking-health): Tracking-health check for this account: conversion VALUE coverage vs the ROAS floor (the silent count-fallback degradation), primary conversion actions excluded from the Conversion - [gads_list_action_history](https://bidandscale.com/docs/mcp-reference/reads/gads-list-action-history): Unified change history for this account: agent actions (from chat, dashboard, or MCP — with status, risk tier, reason, and whether they were auto-applied) merged with changes made - [gads_list_ad_groups](https://bidandscale.com/docs/mcp-reference/reads/gads-list-ad-groups): List ad groups with performance over N days, optionally within one campaign. - [gads_list_ads](https://bidandscale.com/docs/mcp-reference/reads/gads-list-ads): Top ads by cost over N days, with RSA headlines/descriptions and ad strength. - [gads_list_audiences](https://bidandscale.com/docs/mcp-reference/reads/gads-list-audiences): The account's audience surface: library (remarketing user lists incl. - [gads_list_audit_runs](https://bidandscale.com/docs/mcp-reference/reads/gads-list-audit-runs): Past recurring account-audit runs (the deterministic 7/14-day review+optimize loop): when each ran, headline stats, and finding counts. - [gads_list_campaigns](https://bidandscale.com/docs/mcp-reference/reads/gads-list-campaigns): List campaigns with performance over N days. - [gads_list_keywords](https://bidandscale.com/docs/mcp-reference/reads/gads-list-keywords): Top keywords by cost over N days, with quality score + components. - [gads_list_pending_actions](https://bidandscale.com/docs/mcp-reference/reads/gads-list-pending-actions): List the copilot's own proposed changes waiting for the operator's approval. - [gads_run_gaql_query](https://bidandscale.com/docs/mcp-reference/reads/gads-run-gaql-query): Run a read-only GAQL query against the LIVE Google Ads API for data not warehoused (e.g. - [gads_search_audience_ideas](https://bidandscale.com/docs/mcp-reference/reads/gads-search-audience-ideas): Search Google's in-market/affinity interest taxonomy LIVE by name (e.g. - [gads_undismiss_recommendation](https://bidandscale.com/docs/mcp-reference/reads/gads-undismiss-recommendation): Bring a previously suppressed recommendation back into the optimization plan. - [Set up over MCP](https://bidandscale.com/docs/mcp-reference/setup-over-mcp): Connect and import a Google Ads account without leaving your MCP client — the one browser step is Google consent. - [gads_discover_ad_accounts](https://bidandscale.com/docs/mcp-reference/setup/gads-discover-ad-accounts): List every Google Ads account the workspace's connection can reach (listAccessibleCustomers + MCC children), flagging which are already imported. - [gads_get_connection_status](https://bidandscale.com/docs/mcp-reference/setup/gads-get-connection-status): Where the Google Ads setup stands for this workspace: OAuth connection status (connected / error / revoked, which Google account), how many ad accounts are imported, and `settingsU - [gads_get_sync_status](https://bidandscale.com/docs/mcp-reference/setup/gads-get-sync-status): Sync freshness for the scoped account: last full/incremental sync timestamps and the latest sync run (kind, status, started/finished, error when failed). - [gads_import_ad_account](https://bidandscale.com/docs/mcp-reference/setup/gads-import-ad-account): Import a discovered Google Ads account: creates its project + ad account row and enqueues the initial 90-day backfill sync. - [gads_list_ad_accounts](https://bidandscale.com/docs/mcp-reference/setup/gads-list-ad-accounts): List the Google Ads accounts already imported into this workspace: projectId, customerId, name, currency, status, and sync freshness. - [gads_set_optimization_targets](https://bidandscale.com/docs/mcp-reference/setup/gads-set-optimization-targets): Set the scoped account's optimization objective: target daily spend, ROAS floor (percent, e.g. - [gads_trigger_audit](https://bidandscale.com/docs/mcp-reference/setup/gads-trigger-audit): Run the recurring account audit now (read-only compute — findings, deltas vs the previous audit, and the outcome review; it proposes nothing on its own). - [gads_trigger_sync](https://bidandscale.com/docs/mcp-reference/setup/gads-trigger-sync): Enqueue a full re-sync of the scoped account now (refuses while a sync is already running). - [gads_propose_account_tracking](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-account-tracking): Set (or clear) the ACCOUNT-LEVEL tracking template and/or final URL suffix — the once-for-all UTM setup that applies to every ad. - [gads_propose_ad_group_status](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-ad-group-status): Propose enabling or pausing a whole ad group — the lever for shutting down a bleeding cluster without pausing keywords one by one. - [gads_propose_ad_schedule_bid_modifier](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-ad-schedule-bid-modifier): Propose a bid adjustment on one of a campaign's ad schedule windows (-30 = bid 30% less in that window; 20 = bid 20% more). - [gads_propose_ad_status](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-ad-status): Propose enabling or pausing an existing ad — e.g. - [gads_propose_add_ad_schedule](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-add-ad-schedule): Propose adding ad schedule windows to a campaign: the days and hours its ads may serve. - [gads_propose_add_geo_targets](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-add-geo-targets): Propose adding location targets to a campaign, or excluding locations from it (negative: true), by Google geo target constant id. - [gads_propose_add_keywords](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-add-keywords): Propose adding keywords to an ad group (up to 50). - [gads_propose_add_negative_keywords](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-add-negative-keywords): Propose adding negative keywords at campaign or ad-group level (up to 100). - [gads_propose_ai_max_experiment](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-ai-max-experiment): Propose a 50/50 AI Max on vs off experiment on a Search campaign (ExperimentType.ADOPT_AI_MAX — intra-campaign, same campaign id for both arms). - [gads_propose_ai_max_setting](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-ai-max-setting): Propose enabling or disabling AI Max for Search on a Search campaign (campaign.ai_max_setting.enable_ai_max — broad/keywordless matching, text customization, final-URL expansion). - [gads_propose_ai_max_text_guidelines](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-ai-max-text-guidelines): Propose AI Max text guidelines term exclusions on a Search campaign (campaign.text_guidelines.term_exclusions — words banned from AI-generated ad copy). - [gads_propose_attach_audience](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-attach-audience): Attach an audience (remarketing user list, custom segment, or in-market/affinity interest) to a campaign or ad group. - [gads_propose_brand_exclusion](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-brand-exclusion): Propose attaching a brand exclusion list to a Search campaign (SharedSet BRANDS + negative CampaignCriterion.brand_list). - [gads_propose_budget_change](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-budget-change): Propose a new daily budget for a campaign (micros). - [gads_propose_campaign_bid_strategy](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-campaign-bid-strategy): Switch a campaign's bidding strategy TYPE (Maximize conversions / Maximize conversion value / Target CPA / Target ROAS) — e.g. - [gads_propose_campaign_status](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-campaign-status): Propose enabling or pausing a campaign. - [gads_propose_campaign_target](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-campaign-target): Adjust a campaign's Smart Bidding target (Target CPA or Target ROAS) on its CURRENT strategy — e.g. - [gads_propose_change_keyword_match_type](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-change-keyword-match-type): Change a keyword's match type in ONE approval. - [gads_propose_clone_ad_group](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-clone-ad-group): Clone a proven ad group into another Search campaign (e.g. - [gads_propose_clone_campaign](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-clone-campaign): Propose a copy of an existing Search campaign for a new market: a new campaign with its own budget and the locations and languages you give, carrying the source's ad groups (their - [gads_propose_create_ad_group](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-create-ad-group): Propose a new keyword silo: a new ad group under an existing Search campaign plus its keywords (approval-gated). - [gads_propose_create_assets](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-create-assets): Create + attach ad assets (extensions) at campaign or account level: sitelinks (2–4 recommended), callouts, structured snippets, or attach an EXISTING library asset by id (the path - [gads_propose_create_campaign](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-create-campaign): Propose a new Search campaign: its own daily budget, the campaign, and its location and language targeting, created together. - [gads_propose_create_custom_audience](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-create-custom-audience): Create a keyword/URL-based CUSTOM SEGMENT (people who searched these terms / browse sites like these). - [gads_propose_create_experiment](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-create-experiment): Run a bid-strategy change as an A/B EXPERIMENT on a Search campaign instead of a full cutover (e.g. - [gads_propose_create_rsa](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-create-rsa): Propose a new Responsive Search Ad in an ad group (approval-gated, review-tier). - [gads_propose_detach_asset](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-detach-asset): Detach an asset link (sitelink/callout/snippet/image) from a campaign or the account — the asset stays in the library. - [gads_propose_detach_audience](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-detach-audience): Detach an audience criterion from a campaign or ad group (pass the criterion resource name from listAudiences). - [gads_propose_device_bid_modifier](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-device-bid-modifier): Set a campaign's DEVICE bid adjustment (e.g. - [gads_propose_end_experiment](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-end-experiment): End a running experiment — all traffic returns to the control campaign. - [gads_propose_geo_bid_modifier](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-geo-bid-modifier): Propose a bid adjustment on one of a campaign's targeted locations (-30 = bid 30% less there; 20 = bid 20% more). - [gads_propose_keyword_bid](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-keyword-bid): Propose a new max-CPC bid (micros) for a keyword. - [gads_propose_keyword_status](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-keyword-status): Propose enabling, pausing, or removing a keyword. - [gads_propose_promote_experiment](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-promote-experiment): Promote a WINNING experiment: the treatment's changes are applied to the base campaign. - [gads_propose_remove_ad_schedule](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-remove-ad-schedule): Propose removing one ad schedule window from a campaign. - [gads_propose_remove_geo_target](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-remove-geo-target): Propose removing one location target or exclusion from a campaign. - [gads_propose_remove_negative_keyword](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-remove-negative-keyword): Propose removing a negative keyword that conflicts with (blocks) enabled positive keywords — the fix for `remove_negative` items in the optimization plan. - [gads_propose_rename_ad_group](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-rename-ad-group): Propose renaming an ad group. - [gads_propose_rename_campaign](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-rename-campaign): Propose renaming a campaign. - [gads_propose_replace_ad](https://bidandscale.com/docs/mcp-reference/writes/gads-propose-replace-ad): Replace a weak RSA in ONE approval: pause the old ad and create the new one atomically. Full text: https://bidandscale.com/llms-full.txt