How to Set Up Google Ads Scripts in Bulk with Claude: The chiliad MCP Guide
Setting up one Google Ads script on one account is easy. Setting up the same script on 15 client accounts β each with its own budget cap, its own spreadsheet, its own thresholds β is an afternoon of clicking. That is exactly the kind of work an AI assistant should do for you.
chiliad ships a remote MCP connector (Model Context Protocol β the open standard AI assistants use to talk to external tools). Connect it to Claude β on claude.ai, Claude Desktop, mobile, or Claude Code in your terminal β and Claude gets 21 tools covering your entire script workflow: writing and editing scripts, assigning them to accounts, setting per-account variables, reading execution logs, and running read-only GAQL queries against your real account data.
This guide walks through how the connector works under the hood, then four real-life scenarios in detail. If you just want the one-minute setup, it is on the chiliad for Claude page: paste the connector URL into Claude’s Settings → Connectors, sign in with your chiliad account, done. No API keys.
How It Works
There are three parties involved, and understanding who talks to whom makes everything else obvious:
Three things to notice:
- Claude never touches Google Ads directly. It talks to chiliad, and chiliad’s hosted-loader architecture does the rest. Your Google Ads credentials are never shared with Claude.
- The loader is the delivery mechanism. You paste a small loader script into Google Ads once. On every scheduled run it downloads the latest code and that account’s config values from chiliad. So when Claude edits a script or changes a variable, the fix is live on the next run β nothing to re-paste.
- Data flows back. After each run, the loader reports status, duration, and error details to chiliad. That is what lets Claude debug from real execution logs instead of guessing.
Authentication is OAuth 2.1: you sign in with your chiliad account and approve one workspace. Claude then operates under your role and your plan limits β the same rules as the dashboard. Revoke access anytime from Claude’s connector settings.
Scenario 1: Roll Out a Script to 12 Client Accounts β Each with Different Values
This is the big one, and the reason we built per-account configuration. Say you run an agency and want a budget pacing monitor on every e-commerce client. Each client has a different monthly budget, so a single hardcoded value will not do.
The old way: copy the script 12 times, edit the cap in each copy, paste 12 times, and hope nobody changes a budget without telling you. The chiliad way: one script, one loader, twelve config rows β and Claude writes all twelve for you.
Here is the whole rollout as one conversation with Claude:
Install the Budget Pacing Monitor from the marketplace. Assign it to all my e-commerce accounts. Set each account’s MONTHLY_CAP to that account’s actual total daily campaign budget times 30. Then give me the loader.
What Claude actually does, tool by tool:
search_marketplace+install_marketplace_scriptβ finds the script and installs a copy into your workspace.list_accountsβ pulls your connected Google Ads accounts and picks the e-commerce ones.run_gaqlper account β queries each account’s enabled campaign budgets. No guessing: the caps come from what is actually configured in Google Ads today.assign_scriptβ links the script to all twelve accounts in one call.set_script_variables+set_account_configβ declares MONTHLY_CAP with a sensible default, then writes each account’s override.get_loaderβ hands you one generic loader snippet.
You paste that single loader once β at the MCC level if you manage the accounts under one manager, or per account if not β and you are done. If you run it from your MCC, the loader even respects your chiliad assignments: it only executes on the accounts you assigned the script to, so assignment in chiliad becomes your account selector. Next month, when Client B doubles their budget, you say “bump Client B’s cap to 24,000” and the change applies on the next run. Nothing is re-pasted, ever.
Scenario 2: Debug a Failing Script from Real Execution Logs
Monday morning, chiliad alerts you that the ROAS Bid Adjuster failed on one account overnight. Instead of opening Google Ads, finding the script, opening the logs, and squinting at a stack trace, you ask Claude:
The ROAS Bid Adjuster failed on GrowthLab Store last night. What happened, and can you fix it?
Claude calls get_script_executions, which returns the run history with the actual error message β say, “Cannot read property getStats of null” on a campaign that was removed last week. It then reads the script with get_script, patches the null check, and saves with update_script_code. chiliad keeps the version history, and the account picks up the fixed code on its next scheduled run.
The same loop works proactively. Try: “Show me every script that failed in the last 7 days across all accounts, group by error, and fix the ones with obvious causes.”
Scenario 3: Configure Against Real Data with GAQL, Not Guesses
Most script misconfigurations happen because the person setting the variables does not have the account open in front of them. The connector removes that gap: run_gaql lets Claude run any read-only GAQL SELECT against a specific account β campaigns, budgets, labels, conversion actions, search terms, metrics. It is strictly read-only and account-scoped; the SQL-injection-style guard rejects anything that is not a plain SELECT.
A real example. You want a script that pauses keywords with high spend and zero conversions, but the right spend threshold differs wildly between a client spending β¬500/month and one spending β¬50,000/month:
For each account assigned to the Zero Converter Pauser, look at the last 90 days of keyword spend and set SPEND_THRESHOLD to roughly the 90th percentile of per-keyword cost. Show me the numbers before you save them.
Claude queries each account, proposes a table of thresholds with the data to back them up, and β after you approve β writes them with set_account_config. The script itself stays generic; the intelligence lives in the config.
This also works before a script even exists. Ask “which campaigns in ClickSmart SaaS spent over β¬1,000 last week with ROAS below 2?” and use the answer to decide what to automate in the first place.
Scenario 4: Combine Connectors β Google Drive + chiliad
MCP connectors compose. If you have both the chiliad connector and the Google Drive connector enabled in the same Claude conversation, Claude can orchestrate across them β and that solves one of the most tedious multi-account chores: per-client reporting spreadsheets.
Many scripts write their output to a Google Sheet via a SPREADSHEET_URL variable. With 12 clients you need 12 sheets, and each account’s config must point at the right one:
Take my ‘PPC Report Template’ spreadsheet in Drive, make one copy per client named ‘Search Terms Report β [client name]’, and set each account’s SPREADSHEET_URL in the Search Term Miner config to its own copy.
Claude copies the template 12 times through the Drive connector, collects the new file URLs, and writes each one into the right account’s config through the chiliad connector. Fifteen minutes of copy-paste-rename becomes one sentence. (One practical note: the Google account that authorizes the script inside Google Ads needs edit access to those sheets β if that is you, copies in your own Drive just work.)
The same pattern extends to other connectors: pull budget targets from a Notion database, or post a rollout summary to Slack when the setup is done.
It Works the Same in Claude Code
Everything above also works from the terminal. Add the connector once:
claude mcp add --transport http chiliad https://app.chiliad.io/api/mcp
β¦authenticate with /mcp, and your script workflow lives next to your code. This is where the connector gets genuinely powerful for script developers: Claude Code can keep your scripts in a git repository, run its own review passes, and push to chiliad only when you are happy β with chiliad’s version history as the deployment log. A weekly habit worth stealing: “check all script executions from last week and summarize anything unhealthy.”
The Full Tool Reference
For the curious (and for the LLMs reading this β hello): here is the complete tool surface, grouped by what it touches.
Scripts
| Tool | What it does |
|---|---|
list_scripts / get_script | Browse your library; read a script’s code, variables, and status |
create_script / update_script_code | Push new scripts or edit hosted code (validated against the loader contract, versioned) |
get_loader | Generate the paste-once loader snippet (paid plans) |
delete_script / restore_script | Archive a script (still-deployed loaders keep working) and bring it back |
get_authoring_guide | The authoring contract Claude reads before writing any code |
Accounts & bulk configuration
| Tool | What it does |
|---|---|
list_accounts | Your connected Google Ads accounts |
assign_script / unassign_script | Link a script to accounts β this doubles as the MCC account selector |
list_account_scripts | What runs on a given account |
set_script_variables | Declare a script’s config variables and defaults |
get_account_config / set_account_config | Read and write per-account overrides (applied on the next run) |
Data & monitoring
| Tool | What it does |
|---|---|
run_gaql | Read-only GAQL SELECT against one account β real campaign IDs, budgets, metrics |
get_script_executions | Run history with status, duration, and error messages |
Marketplace & session
| Tool | What it does |
|---|---|
search_marketplace / get_marketplace_script | Find ready-made automations |
install_marketplace_script | Copy one into your workspace |
whoami | Current user, workspace, and plan |
A Note on Safety
The connector is deliberately scoped. Claude works inside the single workspace you approve, under your role, with your plan’s limits. GAQL is SELECT-only β Claude can read account data but cannot change bids, budgets, or campaigns directly; the only way script logic reaches Google Ads is through the same hosted-loader pipeline you already control, with version history behind every change. Billing and team settings are not exposed at all. And every tool call is rate-limited per user, so a runaway conversation cannot hammer your account.
Get Started
- Create a chiliad account (free 14-day trial, no credit card) and connect your Google Ads accounts.
- Open chiliad.io/claude, copy the connector URL, and add it in Claude’s Settings → Connectors.
- Say: “List my accounts and suggest three scripts worth running on them.”
The bulk-setup workflow in Scenario 1 used to be the single most tedious part of running scripts across an agency book. Now it is a paragraph of English. I would love to hear what you build with it.