Skip to content

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/mcp
the first call
do {  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.

  1. 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
  2. 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 app
    • refresh_tokenRefresh token from the same sign-in; the access token is renewed from it
    • client_idGoogle OAuth client id (Google Cloud console > APIs & Services > Credentials)
    • client_secretGoogle OAuth client secret
    • developer_tokenYour Google Ads developer token
    • login_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
  3. 03

    Make the first call. Check before a write.

    Ask in plain words; Claude picks the action. Before anything changes, check validates 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 v26googleads.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
  1. Advertising

    179

    58 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.

ActionWhat it doesEffectSame name in
google_ads.user_lists.listList audience user listsEvery remarketing and Customer Match user list in the account, with type, membership status and approximate size.readcomm.audience.list26 connectors
google_ads.campaigns.listList campaignsEvery campaign in the account that is not removed, with status, channel, bidding strategy type, budget resource and schedule.readcomm.campaign.list41 connectors
google_ads.customer_clients.listList client accounts under a managerEvery account in the hierarchy below `customer_id` (itself at level 0, direct clients at level 1, and so on).readplatform.tenant.list70 connectors
google_ads.invoices.listList invoicesReturns all invoices associated with a billing setup, for a given month.readplatform.invoice.list26 connectors
google_ads.customer.getGet the customer accountThe account behind `customer_id`: name, currency, time zone, whether it is a manager (MCC) account, and its status.readplatform.tenant.get86 connectors
google_ads.gaql.searchSearch gaqlReturns all rows that match the search query.readthis connector
google_ads.ad_groups.listList ad groupsEvery ad group in the account that is not removed, with its campaign resource name, type, status and default CPC bid (micros).readthis connector
google_ads.operations.listList operationsLists operations that match the specified filter in the request.readthis connector
google_ads.data_links.createCreate data linksCreates a data link.writethis connector
google_ads.account_links.createCreate account linksCreates an account link.writethis connector
google_ads.product_links.createCreate product linksCreates a product link.writethis connector
google_ads.data_links.removeRemove data linksRemove a data link.destructivethis 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.

  1. Readread

    List accessible customers in Google Ads and tell me what stands out.

    callsgoogle_ads.customers.list_accessible

  2. Writewrite

    Create data links in Google Ads. Show me exactly what you will send before you save it.

    callsgoogle_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 linksgoogle_ads.data_links.remove
  • Delete operationsgoogle_ads.operations.delete
  • Remove product linksgoogle_ads.product_links.remove
  • Remove you tube video uploadsgoogle_ads.you_tube_video_uploads.remove
  • Remove product link invitationsgoogle_ads.product_link_invitations.remove
  • Remove automatically created assets ad group adsgoogle_ads.ad_group_ads.remove_automatically_created_assets
  • Remove campaign automatically created asset customersgoogle_ads.customers.remove_campaign_automatically_created_asset
  • Cancel operationsgoogle_ads.operations.cancel
  • End experiment experimentsgoogle_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.

dogoogle_ads.data_links.removeconfirm_policy: human

Remove data links?

intent: the user asked me to remove data links

run suspended · waiting for a named person · key google-ads-agent cannot confirm itself
In the console, or from an emailed signed link.
a key for this connector
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]" }  ]}
Illustrative. Scoped to Google Ads only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

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

See pricing

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 proposalswrite
  • google_ads.account_links.createCreate account linkswrite
  • google_ads.account_links.mutateMutate account linkswrite
  • google_ads.ad_group_ad_labels.mutateMutate ad group ad labelswrite
  • google_ads.ad_group_ads.mutateMutate ad group adswrite
  • google_ads.ad_group_ads.remove_automatically_created_assetsRemove automatically created assets ad group adsdestructive
  • google_ads.ad_group_asset_sets.mutateMutate ad group asset setswrite
  • google_ads.ad_group_assets.mutateMutate ad group assetswrite
  • google_ads.ad_group_bid_modifiers.mutateMutate ad group bid modifierswrite
  • google_ads.ad_group_criteria.mutateMutate ad group criteriawrite
  • google_ads.ad_group_criterion_customizers.mutateMutate ad group criterion customizerswrite
  • google_ads.ad_group_criterion_labels.mutateMutate ad group criterion labelswrite
  • google_ads.ad_group_customizers.mutateMutate ad group customizerswrite
  • google_ads.ad_group_labels.mutateMutate ad group labelswrite
  • google_ads.ad_groups.listList ad groupsread
  • google_ads.ad_groups.mutateMutate ad groupswrite
  • google_ads.ad_parameters.mutateMutate ad parameterswrite
  • google_ads.ads.mutateMutate adswrite
  • google_ads.asset_generations.generate_imagesGenerate images asset generationsread
  • google_ads.asset_generations.generate_textGenerate text asset generationsread
  • google_ads.asset_group_assets.mutateMutate asset group assetswrite
  • google_ads.asset_group_listing_group_filters.mutateMutate asset group listing group filterswrite
  • google_ads.asset_group_signals.mutateMutate asset group signalswrite
  • google_ads.asset_groups.mutateMutate asset groupswrite
  • google_ads.asset_set_assets.mutateMutate asset set assetswrite
  • google_ads.asset_sets.mutateMutate asset setswrite
  • google_ads.assets.mutateMutate assetswrite
  • google_ads.audience_insights.list_insights_eligible_datesList insights eligible dates audience insightsread
  • google_ads.audiences.mutateMutate audienceswrite
  • google_ads.batch_jobs.add_operationsAdd operations batch jobswrite
  • google_ads.batch_jobs.list_resultsList results batch jobsread
  • google_ads.batch_jobs.mutateMutate batch jobswrite
  • google_ads.batch_jobs.runRun batch jobswrite
  • google_ads.benchmarks.list_available_datesList available dates benchmarksread
  • google_ads.benchmarks.list_locationsList locations benchmarksread
  • google_ads.benchmarks.list_productsList products benchmarksread
  • google_ads.benchmarks.list_sourcesList sources benchmarksread
  • google_ads.bidding_data_exclusions.mutateMutate bidding data exclusionswrite
  • google_ads.bidding_seasonality_adjustments.mutateMutate bidding seasonality adjustmentswrite
  • google_ads.bidding_strategies.mutateMutate bidding strategieswrite
  • google_ads.billing_setups.mutateMutate billing setupswrite
  • google_ads.campaign_asset_sets.mutateMutate campaign asset setswrite
  • google_ads.campaign_assets.mutateMutate campaign assetswrite
  • google_ads.campaign_bid_modifiers.mutateMutate campaign bid modifierswrite
  • google_ads.campaign_budgets.mutateMutate campaign budgetswrite
  • google_ads.campaign_conversion_goals.mutateMutate campaign conversion goalswrite
  • google_ads.campaign_criteria.mutateMutate campaign criteriawrite
  • google_ads.campaign_customizers.mutateMutate campaign customizerswrite
  • google_ads.campaign_drafts.list_async_errorsList async errors campaign draftsread
  • google_ads.campaign_drafts.mutateMutate campaign draftswrite
  • google_ads.campaign_drafts.promotePromote campaign draftswrite
  • google_ads.campaign_goal_configs.mutateMutate campaign goal configswrite
  • google_ads.campaign_groups.mutateMutate campaign groupswrite
  • google_ads.campaign_labels.mutateMutate campaign labelswrite
  • google_ads.campaign_shared_sets.mutateMutate campaign shared setswrite
  • google_ads.campaigns.enable_p_max_brand_guidelinesEnable p max brand guidelines campaignswrite
  • google_ads.campaigns.listList campaignsread
  • google_ads.campaigns.mutateMutate campaignswrite
  • google_ads.conversion_actions.mutateMutate conversion actionswrite
  • google_ads.conversion_custom_variables.mutateMutate conversion custom variableswrite
  • google_ads.conversion_goal_campaign_configs.mutateMutate conversion goal campaign configswrite
  • google_ads.conversion_value_rule_sets.mutateMutate conversion value rule setswrite
  • google_ads.conversion_value_rules.mutateMutate conversion value ruleswrite
  • google_ads.custom_audiences.mutateMutate custom audienceswrite
  • google_ads.custom_conversion_goals.mutateMutate custom conversion goalswrite
  • google_ads.custom_interests.mutateMutate custom interestswrite
  • google_ads.customer.getGet the customer accountread
  • google_ads.customer_asset_sets.mutateMutate customer asset setswrite
  • google_ads.customer_assets.mutateMutate customer assetswrite
  • google_ads.customer_client_links.mutateMutate customer client linkswrite
  • google_ads.customer_clients.listList client accounts under a managerread
  • google_ads.customer_conversion_goals.mutateMutate customer conversion goalswrite
  • google_ads.customer_customizers.mutateMutate customer customizerswrite
  • google_ads.customer_labels.mutateMutate customer labelswrite
  • google_ads.customer_manager_links.move_manager_linkMove manager link customer manager linkswrite
  • google_ads.customer_manager_links.mutateMutate customer manager linkswrite
  • google_ads.customer_negative_criteria.mutateMutate customer negative criteriawrite
  • google_ads.customer_sk_ad_network_conversion_value_schemas.mutateMutate customer sk ad network conversion value schemaswrite
  • google_ads.customer_user_access_invitations.mutateMutate customer user access invitationswrite
  • google_ads.customer_user_accesses.mutateMutate customer user accesseswrite
  • google_ads.customers.create_customer_clientCreate customer client customerswrite
  • google_ads.customers.generate_ad_group_themesGenerate ad group themes customersread
  • google_ads.customers.generate_audience_composition_insightsGenerate audience composition insights customersread
  • google_ads.customers.generate_audience_definitionGenerate audience definition customersread
  • google_ads.customers.generate_audience_overlap_insightsGenerate audience overlap insights customersread
  • google_ads.customers.generate_benchmarks_metricsGenerate benchmarks metrics customersread
  • google_ads.customers.generate_creator_insightsGenerate creator insights customersread
  • google_ads.customers.generate_insights_finder_reportGenerate insights finder report customersread
  • google_ads.customers.generate_keyword_forecast_metricsGenerate keyword forecast metrics customersread
  • google_ads.customers.generate_keyword_historical_metricsGenerate keyword historical metrics customersread
  • google_ads.customers.generate_keyword_ideasGenerate keyword ideas customersread
  • google_ads.customers.generate_reach_forecastGenerate reach forecast customersread
  • google_ads.customers.generate_shareable_previewsGenerate shareable previews customersread
  • google_ads.customers.generate_suggested_targeting_insightsGenerate suggested targeting insights customersread
  • google_ads.customers.generate_targeting_suggestion_metricsGenerate targeting suggestion metrics customersread
  • google_ads.customers.generate_trending_insightsGenerate trending insights customersread
  • google_ads.customers.get_identity_verificationGet identity verification customersread
  • google_ads.customers.list_accessibleList accessible customersread
  • google_ads.customers.mutateMutate customerswrite
  • google_ads.customers.remove_campaign_automatically_created_assetRemove campaign automatically created asset customersdestructive
  • google_ads.customers.search_audience_insights_attributesSearch audience insights attributes customersread
  • google_ads.customers.start_identity_verificationStart identity verification customerswrite
  • google_ads.customers.suggest_brandsSuggest brands customersread
  • google_ads.customers.suggest_keyword_themesSuggest keyword themes customersread
  • google_ads.customers.suggest_smart_campaign_adSuggest smart campaign ad customersread
  • google_ads.customers.suggest_smart_campaign_budget_optionsSuggest smart campaign budget options customersread
  • google_ads.customers.suggest_travel_assetsSuggest travel assets customersread
  • google_ads.customers.upload_call_conversionsUpload call conversions customerswrite
  • google_ads.customers.upload_click_conversionsUpload click conversions customerswrite
  • google_ads.customers.upload_conversion_adjustmentsUpload conversion adjustments customerswrite
  • google_ads.customers.upload_user_dataUpload user data customerswrite
  • google_ads.customizer_attributes.mutateMutate customizer attributeswrite
  • google_ads.data_links.createCreate data linkswrite
  • google_ads.data_links.removeRemove data linksdestructive
  • google_ads.data_links.updateUpdate data linkswrite
  • google_ads.experiment_arms.mutateMutate experiment armswrite
  • google_ads.experiments.end_experimentEnd experiment experimentsdestructive
  • google_ads.experiments.graduate_experimentGraduate experiment experimentswrite
  • google_ads.experiments.list_experiment_async_errorsList experiment async errors experimentsread
  • google_ads.experiments.mutateMutate experimentswrite
  • google_ads.experiments.promote_experimentPromote experiment experimentswrite
  • google_ads.experiments.schedule_experimentSchedule experiment experimentswrite
  • google_ads.gaql.searchSearch gaqlread
  • google_ads.gaql.search_streamSearch stream gaqlread
  • google_ads.geo_target_constants.suggestSuggest geo target constantsread
  • google_ads.goals.mutateMutate goalswrite
  • google_ads.google_ads_fields.getGet google ads fieldsread
  • google_ads.google_ads_fields.searchSearch google ads fieldsread
  • google_ads.incentives.apply_incentiveApply incentive incentiveswrite
  • google_ads.incentives.fetch_incentiveFetch incentive incentivesread
  • google_ads.invoices.listList invoicesread
  • google_ads.keyword_plan_ad_group_keywords.mutateMutate keyword plan ad group keywordswrite
  • google_ads.keyword_plan_ad_groups.mutateMutate keyword plan ad groupswrite
  • google_ads.keyword_plan_campaign_keywords.mutateMutate keyword plan campaign keywordswrite
  • google_ads.keyword_plan_campaigns.mutateMutate keyword plan campaignswrite
  • google_ads.keyword_plans.mutateMutate keyword planswrite
  • google_ads.keyword_theme_constants.suggestSuggest keyword theme constantsread
  • google_ads.labels.mutateMutate labelswrite
  • google_ads.local_services.append_lead_conversationAppend lead conversation local serviceswrite
  • google_ads.local_services_leads.provide_lead_feedbackProvide lead feedback local services leadswrite
  • google_ads.multi_party_auth_review.resolveResolve multi party auth reviewwrite
  • google_ads.offline_user_data_jobs.add_operationsAdd operations offline user data jobswrite
  • google_ads.offline_user_data_jobs.createCreate offline user data jobswrite
  • google_ads.offline_user_data_jobs.runRun offline user data jobswrite
  • google_ads.operations.cancelCancel operationsdestructive
  • google_ads.operations.deleteDelete operationsdestructive
  • google_ads.operations.getGet operationsread
  • google_ads.operations.listList operationsread
  • google_ads.operations.waitWait operationsread
  • google_ads.payments_accounts.listList payments accountsread
  • google_ads.product_link_invitations.createCreate product link invitationswrite
  • google_ads.product_link_invitations.removeRemove product link invitationsdestructive
  • google_ads.product_link_invitations.updateUpdate product link invitationswrite
  • google_ads.product_links.createCreate product linkswrite
  • google_ads.product_links.removeRemove product linksdestructive
  • google_ads.reach_plan.generate_conversion_ratesGenerate conversion rates reach planread
  • google_ads.reach_plan.list_plannable_locationsList plannable locations reach planread
  • google_ads.reach_plan.list_plannable_productsList plannable products reach planread
  • google_ads.reach_plan.list_plannable_user_interestsList plannable user interests reach planread
  • google_ads.reach_plan.list_plannable_user_listsList plannable user lists reach planread
  • google_ads.recommendation_subscriptions.mutateMutate recommendation subscriptionswrite
  • google_ads.recommendations.applyApply recommendationswrite
  • google_ads.recommendations.dismissDismiss recommendationswrite
  • google_ads.recommendations.generateGenerate recommendationsread
  • google_ads.remarketing_actions.mutateMutate remarketing actionswrite
  • google_ads.reservations.book_campaignsBook campaigns reservationswrite
  • google_ads.reservations.quote_campaignsQuote campaigns reservationsread
  • google_ads.resources.mutateMutate resourceswrite
  • google_ads.shared_criteria.mutateMutate shared criteriawrite
  • google_ads.shared_sets.mutateMutate shared setswrite
  • google_ads.smart_campaign_settings.generate_p_max_draft_campaignGenerate p max draft campaign smart campaign settingswrite
  • google_ads.smart_campaign_settings.get_smart_campaign_statusGet smart campaign status smart campaign settingsread
  • google_ads.smart_campaign_settings.mutateMutate smart campaign settingswrite
  • google_ads.third_party_app_analytics_links.regenerate_shareable_link_idRegenerate shareable link id third party app analytics linkswrite
  • google_ads.user_list_customer_types.mutateMutate user list customer typeswrite
  • google_ads.user_lists.listList audience user listsread
  • google_ads.user_lists.mutateMutate user listswrite
  • google_ads.you_tube_video_uploads.removeRemove you tube video uploadsdestructive
  • google_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.