# Google Ads MCP connector

The Google Ads connector lets Claude, ChatGPT, Cursor, and the Elaichi agent list and create campaigns, ad groups, ads, assets, and audiences, with every action running as the signed-in person and recorded in an audit log.

Source: https://elaichi.ai/connectors/googleads/

## Facts

| | |
| --- | --- |
| Application | Google Ads |
| Category | Marketing Automation |
| AI tools | 33 |
| Authentication | Connects over OAuth |
| Bring your own OAuth app | Yes |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. Connected tools are never listed one by one, however few there are. The endpoint advertises `search_tools` and `execute_tool` instead |

## What you can ask once Google Ads is connected

- List every live campaign across our Google Ads accounts
- Create an ad group for the spring sale campaign
- Show me the budget for the brand search campaign

## Connect Google Ads in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Google Ads.
2. Optionally set Share with, then press Connect.
3. Supply your own Google Ads app, then approve. Google Ads needs an OAuth app you register yourself, so bring its client ID and secret. One person does this once for the organization.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Google Ads tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Google Ads MCP connector for Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Google Ads MCP connector for ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Google Ads MCP connector for Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Google Ads to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Google Ads tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Google Ads through Elaichi

### Build a campaign without opening the console

Paid media. Describe the campaign, the ad groups under it, and the first ads, and the agent creates them in Google Ads in the right order. You review the result instead of clicking through five setup screens.

### See what is live across every account

Marketing. Ask which campaigns are running across all the Google Ads accounts you manage and get one list back. No switching between customer accounts to piece it together.

### Review campaign budgets before month end

Finance. Pull every campaign budget in Google Ads into one view and check it against what was approved. The agent can read budgets but cannot change them through this connector.

### Add new assets and see what exists

Creative. Upload the new headline, image, or video asset to Google Ads and ask what assets are already in the account so nothing gets duplicated.

### Keep custom audiences current

Growth. Create a custom audience for a new segment, or update an existing one when the targeting changes, and list every audience to see what is available for the next campaign.

### Set up a new client account

Account management. Create the Google Ads customer for a new client, then list the users on the account to confirm the right people have access before work starts.

## Elaichi vs Zapier MCP vs Composio for Google Ads

All three can connect Google Ads to an AI assistant, and all three have admin controls. They differ in where access lives and how you pay.

| What to check | Elaichi | Zapier MCP | Composio |
| --- | --- | --- | --- |
| Where the AI connects | One address for the whole organization. Endpoint: https://api.elaichi.ai/mcp | A server per member, created at sign-in. | An MCP endpoint per team, or an SDK. |
| Control over Google Ads tools | Allow or restrict single Google Ads tools, per role or user. | App and action restrictions on the account. | Role permissions, down to the action. |
| Record of calls | One audit entry per Google Ads call. | A History tab of tool calls. | A log of every tool call. |
| Single sign-on | SAML or OIDC, plus SCIM, on Gold. | SAML on Enterprise. | SAML and OIDC on Enterprise. |
| Price | $15 per user per month. | 2 tasks per successful call. | Billed per tool call. |

Sources: Zapier MCP [docs](https://docs.zapier.com/mcp/get-started/quickstart), [security](https://docs.zapier.com/mcp/manage/security), [usage](https://docs.zapier.com/mcp/features/usage); Composio [docs](https://docs.composio.dev/docs/composio-connect), [gateway](https://composio.dev/mcp-gateway), [enterprise](https://composio.dev/enterprise), [pricing](https://composio.dev/pricing). Checked September 2026.

Longer take: [Zapier MCP alternative](/blog/zapier-mcp-alternative/) and [when you don't need an MCP gateway](/blog/when-you-dont-need-an-mcp-gateway/).

## Frequently asked questions

### How do I connect Google Ads to Claude?

Connect Google Ads in Elaichi first, then in Claude go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp as the endpoint. Google Ads needs an OAuth application registered inside your own Google Ads account, so one person brings that client ID and secret to Elaichi once, after which everyone signs in with their normal Google account. Nobody else on the team ever handles the secret.

### Does Google Ads work with ChatGPT and Cursor as well as Claude?

Yes. The Google Ads connection in Elaichi is reached through the same endpoint, https://api.elaichi.ai/mcp, from Claude, ChatGPT, Cursor, any other MCP client, and the Elaichi agent. You connect Google Ads once and every client can use it.

### What can an AI agent actually do with my Google Ads data?

With Google Ads connected, an agent can list your customer accounts, campaigns, ad groups, ads, budgets, assets, bidding strategies, users, and audiences, and it can create new campaigns, ad groups, ads, assets, and custom audiences. It can also update a custom audience. Short, concrete asks like "list the campaigns in the brand account" work better than long paragraphs.

### Does connecting Google Ads give the AI access to every account I manage?

The agent sees exactly the Google Ads accounts the signed-in person can see, and nothing more. Elaichi can narrow that further by restricting which actions a team's toolbox includes, but it can never widen it beyond what Google Ads already allows that person.

### Can my team share one Google Ads connection?

Yes. One person connects Google Ads in Elaichi and shares it with a team, and nobody else has to touch the client ID or secret. Each teammate still signs in as themselves, so every campaign or audience change in the audit log is tied to the person who made it.

### Can I stop an agent from changing things in Google Ads?

Yes. Restrictions in Elaichi work per action, so you can allow listing Google Ads campaigns and budgets while blocking anything that creates or updates them. A restricted action is never advertised to Claude, ChatGPT, or Cursor at all, so no prompt can reach it.

### What happens to a Google Ads connection when someone leaves?

Offboarding a person in Elaichi ends their access to Google Ads through every client at once. If they connected a shared Google Ads account, it keeps working for everyone else on the team. Disconnecting Google Ads once in Elaichi removes it from every client at the same time.

### Does the Google Ads MCP connector work with Gemini, Codex, Claude Code or other MCP clients?

Yes. Google Ads is reached over the same MCP endpoint every client uses, so anything that speaks MCP can call it — Gemini, Codex, Claude Code, Windsurf, Cline, Zed and OpenCode among them — alongside Claude, ChatGPT, Cursor, and the Elaichi Agent. The tools on offer and the access behind them are identical whichever client asks. Only the setup screen differs.

### Is Elaichi an alternative to Zapier MCP for Google Ads?

Yes. Both let Claude, ChatGPT or Cursor use Google Ads. Zapier MCP fits a team that already automates in Zapier, since each person signs in and acts as themselves in that account. Elaichi fits when IT wants one address for the whole company, per-tool rules by role, and a record of every Google Ads call.

### How is Elaichi different from Composio for Google Ads?

Composio gives AI agents tools and sign-in handling across 1,000+ apps, for developers building agents or people using an assistant, billed per tool call. Elaichi gives a company's own people governed access to Google Ads: one address, restrictions per role or user, and $15 per user per month. Both have role permissions and a log of every call.

## All 33 Google Ads tools

Every tool below is callable through https://api.elaichi.ai/mcp once Google Ads is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List all Google Ads customers** (List). List the client accounts under the connected manager account (MCC) in Google Ads via a GAQL query on customer_client joined with customer (API v18). Each row has customer_client (id, descriptive_name, level, manager, status, currency_code, time_zone, test_account, hidden, client_customer) and the customer settings. Uses the manager id from the connected credentials; no parameters required.

- **Create a Google Ads customer** (Create). Create a new client account under the connected manager account in Google Ads (API v18, customers:createCustomerClient). The new account inherits the manager and must specify descriptive_name, currency_code and time_zone. Returns: resourceName of the new customer and an invitationLink when email_address was given. Required: customerClient.

- **Get single Google Ads customer by ID** (Get). Get a single Google Ads customer (account) by id via GAQL on the customer resource (API v18): descriptive_name, currency_code, time_zone, manager flag, auto_tagging, conversion tracking, call reporting and remarketing settings, optimization score. Required: id (the 10-digit customer id).

- **List all Google Ads campaigns** (List). List campaigns with their budget, bidding strategy and campaign group in a Google Ads account with a fixed Google Ads Query Language (GAQL) query over the campaign resource (API v17). Each row contains the selected fields grouped by resource: accessible_bidding_strategy, bidding_strategy, campaign, campaign_budget, campaign_group. Required: customer_id.

- **Create a Google Ads campaign** (Create). Create, update or remove campaigns in a Google Ads account (API v17, campaigns:mutate). Send a list of operations; a create needs name, advertising_channel_type, status, campaign_budget (resource name) and a bidding strategy field such as manual_cpc or maximize_conversions. Returns the resource name of each affected campaign. Required: customer_id, operations.

- **List all Google Ads ads fields** (List). Look up the Google Ads API field metadata for a resource, field, segment or metric name (API v18, googleAdsFields:search): data type, whether it is selectable, filterable and sortable, which resources it can be selected with, and enum values. Useful for building GAQL queries. Required: truto_resource_name.

- **List all Google Ads ad groups** (List). List ad groups with their campaign and bidding strategy in a Google Ads account with a fixed Google Ads Query Language (GAQL) query over the ad_group resource (API v18). Each row contains the selected fields grouped by resource: accessible_bidding_strategy, ad_group, bidding_strategy. Required: customer_id.

- **Create a Google Ads ad group** (Create). Create, update or remove ad groups in a Google Ads account (API v18, adGroups:mutate). A create needs name, campaign (resource name), status and optionally type and cpc_bid_micros. Returns the resource name of each affected ad group. Required: customer_id, operations.

- **List all Google Ads ad group ads** (List). List ads within ad groups (ad_group_ad) including the full ad definition for every ad format in a Google Ads account with a fixed Google Ads Query Language (GAQL) query over the ad_group_ad resource (API v18). Each row contains the selected fields grouped by resource: ad_group_ad, campaign. Required: customer_id.

- **Create a Google Ads ad group ad** (Create). Create, update or remove ads in ad groups of a Google Ads account (API v18, adGroupAds:mutate). A create needs ad_group (resource name), status and an ad object with final_urls and one ad format, e.g. responsive_search_ad with headlines and descriptions. Returns the resource name of each affected ad. Required: customer_id, operations.

- **Get single Google Ads ad by ID** (Get). Get a single ad by id in a Google Ads account using the REST ads resource (API v18). Returns the Ad object: resourceName, id, type, finalUrls, displayUrl, name, and the format-specific fields such as responsiveSearchAd headlines and descriptions. Required: customer_id, id.

- **List all Google Ads campaign budgets** (List). List campaign budgets in a Google Ads account with a fixed Google Ads Query Language (GAQL) query over the campaign_budget resource (API v18). Each row contains the selected fields grouped by resource: campaign_budget. Required: customer_id.

- **Get single Google Ads campaign budget by ID** (Get). Get one campaign budget by id from a Google Ads account using a GAQL query on campaign_budget (API v18). Returns the selected campaign_budget fields. Required: customer_id, id.

- **List all Google Ads assets** (List). List assets (images, text, sitelinks, callouts, videos and other asset types) in a Google Ads account with a fixed Google Ads Query Language (GAQL) query over the asset resource (API v18). Each row contains the selected fields grouped by resource: asset. Required: customer_id.

- **Create a Google Ads asset** (Create). Create assets in a Google Ads account (API v18, assets:mutate): text, image (base64 data), YouTube video, sitelink, callout, call, lead form and other asset types. Returns the resource name of each created asset. Required: customer_id, operations.

- **List all Google Ads bidding strategies** (List). List portfolio bidding strategies in a Google Ads account with a fixed Google Ads Query Language (GAQL) query over the bidding_strategy resource (API v18). Each row contains the selected fields grouped by resource: bidding_strategy. Required: customer_id.

- **List all Google Ads users** (List). List the users with access to a Google Ads account via GAQL on customer_user_access (API v18): email, access_role, user_id, inviter and creation time. Defaults to the connected manager account when customer_id is omitted. Optional: customer_id.

- **Get single Google Ads user by ID** (Get). Get one user's access record on a Google Ads account by user id via GAQL on customer_user_access (API v18). Returns: emailAddress, userId, accessRole, inviterUserEmailAddress, accessCreationDateTime, resourceName. Required: id (user id). Optional: customer_id.

- **Create a Google Ads custom audience** (Create). Create a custom audience in a Google Ads account (API v17, customAudiences:mutate) from keywords, URLs, apps or place categories. Returns the resource name of the new audience. Required: customer_id, operations.

- **Update a Google Ads custom audience by ID** (Update). Update a custom audience in a Google Ads account (API v17, customAudiences:mutate with update operations and an update_mask). Returns the resource name of the updated audience. Required: customer_id, operations.

- **List all Google Ads custom audiences** (List). List custom audiences (interest and search-intent audiences built from keywords, URLs, apps and places) in a Google Ads account with a fixed Google Ads Query Language (GAQL) query over the custom_audience resource (API v17). Each row contains the selected fields grouped by resource: custom_audience. Required: customer_id.

- **Get single Google Ads custom audience by ID** (Get). Get one custom audience by id from a Google Ads account using a GAQL query on custom_audience (API v17). Returns the selected custom_audience fields. Required: customer_id, id.

- **List all Google Ads audiences** (List). List audiences (combined audience definitions with dimensions such as age, gender, interests and user lists) in a Google Ads account via GAQL on the audience resource (API v17). Rows are returned as searchStream chunks each holding results[] of {audience}. Required: customer_id.

- **Get single Google Ads audience by ID** (Get). Get one audience by id in a Google Ads account via GAQL on the audience resource (API v17). Returned as searchStream chunks with results[] holding the matching audience. Required: customer_id, id.

- **List all Google Ads user list** (List). List user lists (remarketing and Customer Match lists) with their type, size, membership settings and rules in a Google Ads account with a fixed Google Ads Query Language (GAQL) query over the user_list resource (API v18). Each row contains the selected fields grouped by resource: user_list. Required: customer_id.

- **Get single Google Ads user list by ID** (Get). Get one user list by id from a Google Ads account using a GAQL query on user_list (API v18). Returns the selected user_list fields. Required: customer_id, id.

- **Create a Google Ads user list** (Create). Create a user list in a Google Ads account (API v18, userLists:mutate), e.g. a Customer Match list (crm_based_user_list with upload_key_type CONTACT_INFO) or a rule-based list. Returns the resource name of each created list. Required: customer_id, operations.

- **Create a Google Ads add user datum** (Create). Upload hashed customer data (emails, phone numbers, addresses) directly to a Customer Match user list in a Google Ads account (API v18, customers:uploadUserData). Suitable for small uploads; use offline_user_data_job for large or scheduled uploads. Values must be normalized and SHA-256 hashed. Returns: uploadDateTime, receivedOperationsCount. Required: customer_id, operations, customerMatchUserListMetadata.

- **List all Google Ads offline user data job** (List). List offline user data jobs (Customer Match and store sales uploads) with their status and type in a Google Ads account with a fixed Google Ads Query Language (GAQL) query over the offline_user_data_job resource (API v18). Each row contains the selected fields grouped by resource: offline_user_data_job. Required: customer_id.

- **Create a Google Ads offline user data job** (Create). Create an offline user data job in a Google Ads account (API v18, offlineUserDataJobs:create) for a Customer Match user list or store sales upload. Then call add-operations with the hashed identifiers and run to start processing. Returns: resourceName of the job. Required: customer_id, job.

- **Get single Google Ads offline user data job by ID** (Get). Get one offline user data job by id from a Google Ads account using a GAQL query on offline_user_data_job (API v18). Returns the selected offline_user_data_job fields. Required: customer_id, id.

- **Google Ads offline user data job add operations** (Add). Add user data operations to a pending offline user data job in a Google Ads account (API v18, offlineUserDataJobs:addOperations). Each operation creates or removes a user identified by hashed email, hashed phone, address info, mobile id or third-party id. Call repeatedly in batches, then run the job. Returns partialFailureError and warning details if any. Required: customer_id, offline_user_data_job_id, operations.

- **Google Ads offline user data job run** (Run). Start processing an offline user data job in a Google Ads account (API v18, offlineUserDataJobs:run) after its operations have been added. Processing is asynchronous: poll offline_user_data_job.get until status is SUCCESS or FAILED. Returns a long-running operation with name and done. Required: customer_id, offline_user_data_job_id.

