Connectors · Marketing & media
Google Ads MCP server for AI agents.
actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to Google Ads and the rest of your systems. It gives your agent 179 Google Ads actions (58 reads, 112 writes and 9 that wait for a confirmation) and holds the Google Ads credential itself, so the agent never does. It paces Google Ads's limits and records every call. Connecting Google Ads needs your own Google Ads OAuth app and one admin sign-in.
100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.
claude mcp add --transport http actionlake https://connect.actionlake.com/mcpdo { action: "google_ads.customers.list_accessible", intent: "check which Google Ads account is connected"}# List accessible customers · read · 1 upstream call- 179actionsin one signed file
- 58readlook, never change
- 112writecreate and update
- 9wait for a yesdestructive, confirmed first
Set up
Connect Google Ads in three steps.
- 01
Add actionlake to Claude.
Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
https://connect.actionlake.com/mcp - 02
Connect Google Ads.
OAuth 2.0, authorization code with PKCE. You register your own OAuth app with Google Ads, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on. actionlake stores what you paste write-only, sealed under your tenant's key.
Before the first sign-in, Google Ads needs an OAuth app of your own, registered in its developer portal. actionlake has no Google Ads app to lend you.
access_tokenAccess token from one sign-in with your own OAuth apprefresh_tokenRefresh token from the same sign-in; the access token is renewed from itclient_idGoogle OAuth client id (Google Cloud console > APIs & Services > Credentials)client_secretGoogle OAuth client secretdeveloper_tokenYour Google Ads developer tokenlogin_customer_idYour Google Ads login customer id
account { op: "connections.requirements", service: "google_ads" } # free: exactly what to paste, and what is found for you - 03
Make the first call. Check before a write.
Ask in plain words; Claude picks the action. Before anything changes,
checkvalidates the call and prices it, for free.do { action: "google_ads.customers.list_accessible" }# list accessible customers · read · 1 upstream callcheck { action: "google_ads.data_links.create", input: { … } }# free: inputs, permissions, cost and confirmations, nothing sent
Google Ads at a glance
- Sign-in
- OAuth 2.0, authorization code with PKCE. You register your own OAuth app with Google Ads, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on.
- You provide
access_tokenrefresh_tokenclient_idclient_secret- Setup fields
developer_tokenlogin_customer_id- Limits we pace to
- 600 calls a minute, per connection
- API covered
- Google Ads API API v26
googleads.googleapis.com - Built from
- Google Ads's documentation, read 22 October 2026googleads.googleapis.comdevelopers.google.com
- Service file
- Version 1.0.0, signed (Ed25519)
- Cached reads
- 57 of 58 reads, for up to an hour; a write clears what it affects
- Shared entities
- 3, so ask can line Google Ads up with your other systems
- Data
- Processed and stored in Sydney, Australia. No US region yet
Capabilities
What an AI agent can do in Google Ads.
179 actions in 1 area. Every one carries its effect, so a key can allow the reads and hold the rest.
- 58readlook, never change
- 112writecreate and update
- 9destructivewait for a confirmation
Advertising
17958 read · 112 write · 9 destructive
List audience user lists · List campaigns · List client accounts under a manager · List invoices
Top actions
The Google Ads API, shaped for agents.
The ids your agent types, what each does, and the one name it shares with other systems. 5 of Google Ads's 5 action names are shared with at least one other connector, so an agent learns them once.
| Action | What it does | Effect | Same name in |
|---|---|---|---|
google_ads.user_lists.listList audience user lists | Every remarketing and Customer Match user list in the account, with type, membership status and approximate size. | read | comm.audience.list26 connectors |
google_ads.campaigns.listList campaigns | Every campaign in the account that is not removed, with status, channel, bidding strategy type, budget resource and schedule. | read | comm.campaign.list41 connectors |
google_ads.customer_clients.listList client accounts under a manager | Every account in the hierarchy below `customer_id` (itself at level 0, direct clients at level 1, and so on). | read | platform.tenant.list70 connectors |
google_ads.invoices.listList invoices | Returns all invoices associated with a billing setup, for a given month. | read | platform.invoice.list26 connectors |
google_ads.customer.getGet the customer account | The account behind `customer_id`: name, currency, time zone, whether it is a manager (MCC) account, and its status. | read | platform.tenant.get86 connectors |
google_ads.gaql.searchSearch gaql | Returns all rows that match the search query. | read | this connector |
google_ads.ad_groups.listList ad groups | Every ad group in the account that is not removed, with its campaign resource name, type, status and default CPC bid (micros). | read | this connector |
google_ads.operations.listList operations | Lists operations that match the specified filter in the request. | read | this connector |
google_ads.data_links.createCreate data links | Creates a data link. | write | this connector |
google_ads.account_links.createCreate account links | Creates an account link. | write | this connector |
google_ads.product_links.createCreate product links | Creates a product link. | write | this connector |
google_ads.data_links.removeRemove data links | Remove a data link. | destructive | this connector |
Try it
Prompts to paste into Claude.
Each one names the Google Ads actions it will call, so you know what it reads and what it changes before you send it.
- Readread
List accessible customers in Google Ads and tell me what stands out.
calls
google_ads.customers.list_accessible - Writewrite
Create data links in Google Ads. Show me exactly what you will send before you save it.
calls
google_ads.data_links.create
Governance for Google Ads
Destructive actions wait for a yes.
9 Google Ads actions are destructive. These are all of them:
- Remove data links
google_ads.data_links.remove - Delete operations
google_ads.operations.delete - Remove product links
google_ads.product_links.remove - Remove you tube video uploads
google_ads.you_tube_video_uploads.remove - Remove product link invitations
google_ads.product_link_invitations.remove - Remove automatically created assets ad group ads
google_ads.ad_group_ads.remove_automatically_created_assets - Remove campaign automatically created asset customers
google_ads.customers.remove_campaign_automatically_created_asset - Cancel operations
google_ads.operations.cancel - End experiment experiments
google_ads.experiments.end_experiment
A destructive action runs only with confirm: true. Under the human policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.
Remove data links?
intent: the user asked me to remove data links
account { op: "keys.create", name: "google-ads-agent", allowed_actions: ["google_ads.*"], cap_calls: 2000, confirm_policy: "human_for_writes", approval_rules: [ { match: "google_ads.data_links.remove", approver: "[email protected]" }, { match: "google_ads.operations.delete", approver: "[email protected]" }, { match: "google_ads.product_links.remove", approver: "[email protected]" } ]}Cost
What Google Ads costs on actionlake.
Every Google Ads action is one upstream call, the only thing actionlake bills. Searching, check, cost, account and any call Google Ads refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.
- 1upstream call per actionall 179 Google Ads actions
- 179actions pageeach page of a long list is one call
- 57reads can be cacheda cache hit costs nothing
- 100,000calls a month, freepaid plans from US$49 a month for 250,000
Action index
Every Google Ads action.
179 actions by area: the id your agent calls, what it does, and its effect.
Advertising179
google_ads.account_budget_proposals.mutateMutate account budget proposalswritegoogle_ads.account_links.createCreate account linkswritegoogle_ads.account_links.mutateMutate account linkswritegoogle_ads.ad_group_ad_labels.mutateMutate ad group ad labelswritegoogle_ads.ad_group_ads.mutateMutate ad group adswritegoogle_ads.ad_group_ads.remove_automatically_created_assetsRemove automatically created assets ad group adsdestructivegoogle_ads.ad_group_asset_sets.mutateMutate ad group asset setswritegoogle_ads.ad_group_assets.mutateMutate ad group assetswritegoogle_ads.ad_group_bid_modifiers.mutateMutate ad group bid modifierswritegoogle_ads.ad_group_criteria.mutateMutate ad group criteriawritegoogle_ads.ad_group_criterion_customizers.mutateMutate ad group criterion customizerswritegoogle_ads.ad_group_criterion_labels.mutateMutate ad group criterion labelswritegoogle_ads.ad_group_customizers.mutateMutate ad group customizerswritegoogle_ads.ad_group_labels.mutateMutate ad group labelswritegoogle_ads.ad_groups.listList ad groupsreadgoogle_ads.ad_groups.mutateMutate ad groupswritegoogle_ads.ad_parameters.mutateMutate ad parameterswritegoogle_ads.ads.mutateMutate adswritegoogle_ads.asset_generations.generate_imagesGenerate images asset generationsreadgoogle_ads.asset_generations.generate_textGenerate text asset generationsreadgoogle_ads.asset_group_assets.mutateMutate asset group assetswritegoogle_ads.asset_group_listing_group_filters.mutateMutate asset group listing group filterswritegoogle_ads.asset_group_signals.mutateMutate asset group signalswritegoogle_ads.asset_groups.mutateMutate asset groupswritegoogle_ads.asset_set_assets.mutateMutate asset set assetswritegoogle_ads.asset_sets.mutateMutate asset setswritegoogle_ads.assets.mutateMutate assetswritegoogle_ads.audience_insights.list_insights_eligible_datesList insights eligible dates audience insightsreadgoogle_ads.audiences.mutateMutate audienceswritegoogle_ads.batch_jobs.add_operationsAdd operations batch jobswritegoogle_ads.batch_jobs.list_resultsList results batch jobsreadgoogle_ads.batch_jobs.mutateMutate batch jobswritegoogle_ads.batch_jobs.runRun batch jobswritegoogle_ads.benchmarks.list_available_datesList available dates benchmarksreadgoogle_ads.benchmarks.list_locationsList locations benchmarksreadgoogle_ads.benchmarks.list_productsList products benchmarksreadgoogle_ads.benchmarks.list_sourcesList sources benchmarksreadgoogle_ads.bidding_data_exclusions.mutateMutate bidding data exclusionswritegoogle_ads.bidding_seasonality_adjustments.mutateMutate bidding seasonality adjustmentswritegoogle_ads.bidding_strategies.mutateMutate bidding strategieswritegoogle_ads.billing_setups.mutateMutate billing setupswritegoogle_ads.campaign_asset_sets.mutateMutate campaign asset setswritegoogle_ads.campaign_assets.mutateMutate campaign assetswritegoogle_ads.campaign_bid_modifiers.mutateMutate campaign bid modifierswritegoogle_ads.campaign_budgets.mutateMutate campaign budgetswritegoogle_ads.campaign_conversion_goals.mutateMutate campaign conversion goalswritegoogle_ads.campaign_criteria.mutateMutate campaign criteriawritegoogle_ads.campaign_customizers.mutateMutate campaign customizerswritegoogle_ads.campaign_drafts.list_async_errorsList async errors campaign draftsreadgoogle_ads.campaign_drafts.mutateMutate campaign draftswritegoogle_ads.campaign_drafts.promotePromote campaign draftswritegoogle_ads.campaign_goal_configs.mutateMutate campaign goal configswritegoogle_ads.campaign_groups.mutateMutate campaign groupswritegoogle_ads.campaign_labels.mutateMutate campaign labelswritegoogle_ads.campaign_shared_sets.mutateMutate campaign shared setswritegoogle_ads.campaigns.enable_p_max_brand_guidelinesEnable p max brand guidelines campaignswritegoogle_ads.campaigns.listList campaignsreadgoogle_ads.campaigns.mutateMutate campaignswritegoogle_ads.conversion_actions.mutateMutate conversion actionswritegoogle_ads.conversion_custom_variables.mutateMutate conversion custom variableswritegoogle_ads.conversion_goal_campaign_configs.mutateMutate conversion goal campaign configswritegoogle_ads.conversion_value_rule_sets.mutateMutate conversion value rule setswritegoogle_ads.conversion_value_rules.mutateMutate conversion value ruleswritegoogle_ads.custom_audiences.mutateMutate custom audienceswritegoogle_ads.custom_conversion_goals.mutateMutate custom conversion goalswritegoogle_ads.custom_interests.mutateMutate custom interestswritegoogle_ads.customer.getGet the customer accountreadgoogle_ads.customer_asset_sets.mutateMutate customer asset setswritegoogle_ads.customer_assets.mutateMutate customer assetswritegoogle_ads.customer_client_links.mutateMutate customer client linkswritegoogle_ads.customer_clients.listList client accounts under a managerreadgoogle_ads.customer_conversion_goals.mutateMutate customer conversion goalswritegoogle_ads.customer_customizers.mutateMutate customer customizerswritegoogle_ads.customer_labels.mutateMutate customer labelswritegoogle_ads.customer_manager_links.move_manager_linkMove manager link customer manager linkswritegoogle_ads.customer_manager_links.mutateMutate customer manager linkswritegoogle_ads.customer_negative_criteria.mutateMutate customer negative criteriawritegoogle_ads.customer_sk_ad_network_conversion_value_schemas.mutateMutate customer sk ad network conversion value schemaswritegoogle_ads.customer_user_access_invitations.mutateMutate customer user access invitationswritegoogle_ads.customer_user_accesses.mutateMutate customer user accesseswritegoogle_ads.customers.create_customer_clientCreate customer client customerswritegoogle_ads.customers.generate_ad_group_themesGenerate ad group themes customersreadgoogle_ads.customers.generate_audience_composition_insightsGenerate audience composition insights customersreadgoogle_ads.customers.generate_audience_definitionGenerate audience definition customersreadgoogle_ads.customers.generate_audience_overlap_insightsGenerate audience overlap insights customersreadgoogle_ads.customers.generate_benchmarks_metricsGenerate benchmarks metrics customersreadgoogle_ads.customers.generate_creator_insightsGenerate creator insights customersreadgoogle_ads.customers.generate_insights_finder_reportGenerate insights finder report customersreadgoogle_ads.customers.generate_keyword_forecast_metricsGenerate keyword forecast metrics customersreadgoogle_ads.customers.generate_keyword_historical_metricsGenerate keyword historical metrics customersreadgoogle_ads.customers.generate_keyword_ideasGenerate keyword ideas customersreadgoogle_ads.customers.generate_reach_forecastGenerate reach forecast customersreadgoogle_ads.customers.generate_shareable_previewsGenerate shareable previews customersreadgoogle_ads.customers.generate_suggested_targeting_insightsGenerate suggested targeting insights customersreadgoogle_ads.customers.generate_targeting_suggestion_metricsGenerate targeting suggestion metrics customersreadgoogle_ads.customers.generate_trending_insightsGenerate trending insights customersreadgoogle_ads.customers.get_identity_verificationGet identity verification customersreadgoogle_ads.customers.list_accessibleList accessible customersreadgoogle_ads.customers.mutateMutate customerswritegoogle_ads.customers.remove_campaign_automatically_created_assetRemove campaign automatically created asset customersdestructivegoogle_ads.customers.search_audience_insights_attributesSearch audience insights attributes customersreadgoogle_ads.customers.start_identity_verificationStart identity verification customerswritegoogle_ads.customers.suggest_brandsSuggest brands customersreadgoogle_ads.customers.suggest_keyword_themesSuggest keyword themes customersreadgoogle_ads.customers.suggest_smart_campaign_adSuggest smart campaign ad customersreadgoogle_ads.customers.suggest_smart_campaign_budget_optionsSuggest smart campaign budget options customersreadgoogle_ads.customers.suggest_travel_assetsSuggest travel assets customersreadgoogle_ads.customers.upload_call_conversionsUpload call conversions customerswritegoogle_ads.customers.upload_click_conversionsUpload click conversions customerswritegoogle_ads.customers.upload_conversion_adjustmentsUpload conversion adjustments customerswritegoogle_ads.customers.upload_user_dataUpload user data customerswritegoogle_ads.customizer_attributes.mutateMutate customizer attributeswritegoogle_ads.data_links.createCreate data linkswritegoogle_ads.data_links.removeRemove data linksdestructivegoogle_ads.data_links.updateUpdate data linkswritegoogle_ads.experiment_arms.mutateMutate experiment armswritegoogle_ads.experiments.end_experimentEnd experiment experimentsdestructivegoogle_ads.experiments.graduate_experimentGraduate experiment experimentswritegoogle_ads.experiments.list_experiment_async_errorsList experiment async errors experimentsreadgoogle_ads.experiments.mutateMutate experimentswritegoogle_ads.experiments.promote_experimentPromote experiment experimentswritegoogle_ads.experiments.schedule_experimentSchedule experiment experimentswritegoogle_ads.gaql.searchSearch gaqlreadgoogle_ads.gaql.search_streamSearch stream gaqlreadgoogle_ads.geo_target_constants.suggestSuggest geo target constantsreadgoogle_ads.goals.mutateMutate goalswritegoogle_ads.google_ads_fields.getGet google ads fieldsreadgoogle_ads.google_ads_fields.searchSearch google ads fieldsreadgoogle_ads.incentives.apply_incentiveApply incentive incentiveswritegoogle_ads.incentives.fetch_incentiveFetch incentive incentivesreadgoogle_ads.invoices.listList invoicesreadgoogle_ads.keyword_plan_ad_group_keywords.mutateMutate keyword plan ad group keywordswritegoogle_ads.keyword_plan_ad_groups.mutateMutate keyword plan ad groupswritegoogle_ads.keyword_plan_campaign_keywords.mutateMutate keyword plan campaign keywordswritegoogle_ads.keyword_plan_campaigns.mutateMutate keyword plan campaignswritegoogle_ads.keyword_plans.mutateMutate keyword planswritegoogle_ads.keyword_theme_constants.suggestSuggest keyword theme constantsreadgoogle_ads.labels.mutateMutate labelswritegoogle_ads.local_services.append_lead_conversationAppend lead conversation local serviceswritegoogle_ads.local_services_leads.provide_lead_feedbackProvide lead feedback local services leadswritegoogle_ads.multi_party_auth_review.resolveResolve multi party auth reviewwritegoogle_ads.offline_user_data_jobs.add_operationsAdd operations offline user data jobswritegoogle_ads.offline_user_data_jobs.createCreate offline user data jobswritegoogle_ads.offline_user_data_jobs.runRun offline user data jobswritegoogle_ads.operations.cancelCancel operationsdestructivegoogle_ads.operations.deleteDelete operationsdestructivegoogle_ads.operations.getGet operationsreadgoogle_ads.operations.listList operationsreadgoogle_ads.operations.waitWait operationsreadgoogle_ads.payments_accounts.listList payments accountsreadgoogle_ads.product_link_invitations.createCreate product link invitationswritegoogle_ads.product_link_invitations.removeRemove product link invitationsdestructivegoogle_ads.product_link_invitations.updateUpdate product link invitationswritegoogle_ads.product_links.createCreate product linkswritegoogle_ads.product_links.removeRemove product linksdestructivegoogle_ads.reach_plan.generate_conversion_ratesGenerate conversion rates reach planreadgoogle_ads.reach_plan.list_plannable_locationsList plannable locations reach planreadgoogle_ads.reach_plan.list_plannable_productsList plannable products reach planreadgoogle_ads.reach_plan.list_plannable_user_interestsList plannable user interests reach planreadgoogle_ads.reach_plan.list_plannable_user_listsList plannable user lists reach planreadgoogle_ads.recommendation_subscriptions.mutateMutate recommendation subscriptionswritegoogle_ads.recommendations.applyApply recommendationswritegoogle_ads.recommendations.dismissDismiss recommendationswritegoogle_ads.recommendations.generateGenerate recommendationsreadgoogle_ads.remarketing_actions.mutateMutate remarketing actionswritegoogle_ads.reservations.book_campaignsBook campaigns reservationswritegoogle_ads.reservations.quote_campaignsQuote campaigns reservationsreadgoogle_ads.resources.mutateMutate resourceswritegoogle_ads.shared_criteria.mutateMutate shared criteriawritegoogle_ads.shared_sets.mutateMutate shared setswritegoogle_ads.smart_campaign_settings.generate_p_max_draft_campaignGenerate p max draft campaign smart campaign settingswritegoogle_ads.smart_campaign_settings.get_smart_campaign_statusGet smart campaign status smart campaign settingsreadgoogle_ads.smart_campaign_settings.mutateMutate smart campaign settingswritegoogle_ads.third_party_app_analytics_links.regenerate_shareable_link_idRegenerate shareable link id third party app analytics linkswritegoogle_ads.user_list_customer_types.mutateMutate user list customer typeswritegoogle_ads.user_lists.listList audience user listsreadgoogle_ads.user_lists.mutateMutate user listswritegoogle_ads.you_tube_video_uploads.removeRemove you tube video uploadsdestructivegoogle_ads.you_tube_video_uploads.updateUpdate you tube video uploadswrite
Questions
The Google Ads MCP server, answered.
Is there a Google Ads MCP server for Claude?
Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 179 Google Ads actions, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by Google Ads.
What do I need to connect Google Ads?
Your own Google Ads OAuth app, registered with Google Ads (its client id and client secret), and the access and refresh tokens from one admin sign-in. actionlake has no Google Ads app of its own, so this is not a one-step consent. actionlake renews the access token as it expires. Plus your developer token and your login customer id. The free call account { op: "connections.requirements", service: "google_ads" } lists exactly what to paste.
Can an AI agent delete or change things in Google Ads?
Only if its key allows it, and only with an explicit confirmation. 9 Google Ads actions are destructive, including remove data links, delete operations and remove product links. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.
Will an AI agent use up my Google Ads API limit?
actionlake paces every call to the limits in the Google Ads service file: 600 calls a minute per connection. Repeated reads are answered from cache (57 Google Ads actions can be), which never reaches Google Ads.
What does a Google Ads action cost?
One upstream call, the only unit actionlake bills. A list that pages bills one call per page (179 Google Ads actions page). Cache hits, searches, dry runs and calls Google Ads refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.
Which Google Ads API does it cover?
The Google Ads API API v26 at googleads.googleapis.com. It is built from Google Ads's documentation as read on 22 October 2026. 179 actions in 1 area, each one in the signed service file (version 1.0.0).
Does actionlake keep my Google Ads data, and where?
actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your Google Ads credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.
Which AI clients can use it?
Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.
Give your agent Google Ads today.
Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.