Skip to main content
Glama
741,183 tools. Updated 2026-11-04 01:22

"Resources for Managing Google Ads Effectively" matching MCP tools:

  • Who am I? Returns the signed-in account: email, @handle, plan + limits, counts of sites/domains/drives, and connected DNS providers. Call this first to orient before managing sites or domains.
    ConnectorNo auth
  • Upload a video FILE (MP4 in the ADSAP creative library) to YouTube for use in Google Ads video slots, and get back a YouTube video asset. Use this when the user has a video file but NO YouTube channel — the video goes to a Google-managed 'ad storage' YouTube channel owned by the ad account, stays UNLISTED, and never appears on any public channel. If the user already has the video on YouTube, skip this tool and pass the YouTube id/asset directly to the campaign tool instead. TWO STEPS, always: (1) action 'upload' with the storage_path of the file — returns upload_resource_name immediately; (2) action 'status' with that upload_resource_name — YouTube processing usually takes a few MINUTES, so poll every ~30s; while it is still processing you get state UPLOADED and still_processing: true, and once it reaches PROCESSED the tool mints the video asset automatically and returns asset_id + video_id. Feed the result into a video slot: adsap_google_create_demand_gen_campaign uses the VIDEO ID (ad.youtube_video_ids), while adsap_google_create_display_campaign (youtube_video_asset_ids) and adsap_google_create_app_campaign (video_asset_ids) use the ASSET ID. The video title CANNOT be changed after upload (Google marks it immutable) — set it correctly on the upload call. Max 256 MB. ad_account_id is the bare 10-digit customer ID. For Meta video uploads use adsap_upload_creative instead.
    ConnectorAPI key
  • Create a complete Google Ads Demand Gen campaign (YouTube, Discover, Gmail, Maps and the Google Display Network) in ONE atomic request: budget, campaign (ALWAYS created PAUSED — activate later with adsap_google_set_entity_status), a typeless ad group with channel controls, ad-group-level location/language targeting, and ONE ad. Use dry_run: true first — Google validates the whole chain without creating anything; show the plan, get confirmation, then execute. Two ad types (ad.ad_type): 'multi_asset' = image ad (1-5 headlines <=30 chars, 1-5 descriptions <=90, business name <=25, 1-5 logos, at least one landscape 1.91:1 or square 1:1 image from adsap_google_upload_asset, optional portrait 4:5 and tall-portrait 9:16, combined images <=20); 'video_responsive' = YouTube video ad (1-5 YouTube video ids, 1-5 headlines <=40, 1-5 long headlines <=90 REQUIRED, 1-5 descriptions <=90, 1-5 logos). Daily budget minimum is 5 (Google enforces a 5 USD local-currency-equivalent floor for Demand Gen). Channels: default ALL_CHANNELS; or channels.selected booleans (youtube_in_stream/youtube_in_feed/youtube_shorts/discover/gmail/display/maps — display: true is how you reach the Google Display Network). bidding_strategy 'auto' picks maximize_conversions when the account has conversion tracking, else maximize clicks; target_roas needs conversion history (Google rejects otherwise). ad_account_id is the bare 10-digit customer ID. For Search use adsap_google_create_search_campaign, for Performance Max adsap_google_create_pmax_campaign; for Meta use adsap_create_campaign.
    ConnectorAPI key
  • Create a complete standard Google Shopping campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED — activate later with adsap_google_set_entity_status), location targeting, a Shopping ad group, the product ad, and an 'All products' listing group. Product data, images and landing pages come from the linked Merchant Center — there are NO creative inputs. REQUIRES an ACTIVE Merchant Center link on the account (clean NO_MERCHANT_LINK error if none; merchant_id is auto-resolved when exactly one link exists). Use dry_run: true first — Google validates the whole chain without creating anything; show the plan, get confirmation, then execute. campaign_priority (0-2) only arbitrates between the account's OWN standard Shopping campaigns — a retail Performance Max campaign ALWAYS outranks standard Shopping for the same products; say so when the account also runs retail PMax. feed_label (from adsap_google_list_feed_labels) restricts the campaign to one Merchant Center feed label; omit to advertise all feeds. Language targeting does not exist for Shopping (ad language follows the product feed). bidding_strategy: 'auto' picks Maximize Clicks; 'manual_cpc' REQUIRES cpc_bid and gives full bid control (the classic reason to prefer standard Shopping over PMax); 'target_roas' needs conversion history (~15 conversions/30 days). ad_account_id is the bare 10-digit customer ID. For Performance Max (incl. retail) use adsap_google_create_pmax_campaign; for Meta catalog ads use adsap_create_campaign.
    ConnectorAPI key
  • Create a complete Google App campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED — activate later with adsap_google_set_entity_status), location + language targeting, an ad group, and the app ad. App campaigns promote a mobile app across Google Search, Google Play, YouTube, Discover and the Display Network — Google mixes the ad from your text (and optional media) automatically. The ad links to the app's store listing AUTOMATICALLY: there is no URL input, ever. Any PUBLIC store app id works (no app ownership or Play/Firebase link is required to create): Android app_id is the package name (e.g. com.example.app), iOS app_id is the numeric App Store id (e.g. 570060128) with app_store 'apple_app_store'. v1 optimizes INSTALLS at your target_cpi (target cost per install, plain number in the account currency); Google recommends a daily_budget of roughly 50x target_cpi — lower is allowed but slows learning (a warning says so). Text: 2-5 headlines (max 30 chars) + 1-5 descriptions (max 90). Optional media: image_asset_ids / video_asset_ids from adsap_google_upload_asset (images 1.91:1, 4:5 or 1:1 up to 5MB; videos are YouTube assets 10-60s) — text-only is fully valid. In-app-action, value, engagement and pre-registration goals are NOT supported in v1. If the account has no conversion tracking a warning is returned — relay it (Android installs normally auto-track once a Google Play link exists). Use dry_run: true first — Google validates the whole chain without creating anything; show the plan, get confirmation, then execute. ad_account_id is the bare 10-digit customer ID. For website campaigns use adsap_google_create_search_campaign / adsap_google_create_pmax_campaign; for Meta app ads use adsap_create_campaign with an app objective.
    ConnectorAPI key
  • Manage a Google Ads campaign or ad group's targeting AFTER creation: GEO, LANGUAGE and AUDIENCES. op 'add' at campaign level (default): up to 100 locations (negative: true = exclude) and/or 50 languages, OR up to 50 audiences (audiences cannot combine with geo/languages in one call — separate calls). op 'add' at ad-group level (level: 'ad_group' + ad_group_id): audiences only. AUDIENCES: pass user_list_id items (audience segments from adsap_google_list_audiences) — campaign-level TARGETING works on Search/Shopping only; campaign-level EXCLUSION (negative: true) also on Display/Performance Max; ad-group level (target or exclude) on Search/Display/Shopping. DEMAND GEN is different: pass audience_id items (Audience resources) on the AD GROUP — nothing at campaign level. Video supports no audience edits. The same user list cannot be attached at BOTH campaign and ad-group level. 'mode' ('targeting' = narrow delivery to the audiences | 'observation' = full reach, bid adjustments only) sets the audience targeting setting — combinable with the audience add or standalone; Google's default with NO mode set is TARGETING, so pass mode: 'observation' for Search/Shopping unless the user explicitly wants to narrow reach. op 'remove': remove ONE criterion by composite id "<parent_id>:<criterion_id>" (level 'campaign' → campaign criterion, 'ad_group' → ad-group criterion). Geo/language criterion ids EQUAL their constant ids (France on campaign 123 = "123:2250"); AUDIENCE criterion ids are Google-internal — capture them from the add response (created_criteria[].entity_id). Criteria are immutable: to change one, remove it and add the replacement. Always dry_run: true first. For campaign negative KEYWORDS use adsap_google_manage_keywords op 'add_negative'.
    ConnectorAPI key

Matching MCP Servers

Matching MCP Connectors

  • Updates an existing ad group's settings. This call changes nothing in Google Ads on its own: it returns a preview of the change and a one-time confirm_token. The change is made only by confirm_changes with that token, within 10 minutes. ENABLED switches the ad group's ads and keywords on at once, and a higher bid can raise what it spends. Args: customer_id: The Google Ads customer ID (numbers only, no hyphens). ad_group_id: The ID of the ad group to update. name: New ad group name. Optional. status: New status. One of: ENABLED, PAUSED. REMOVED is refused: an ad group is never deleted here, pause instead. Optional. cpc_bid_micros: New default max CPC bid in micros of the account's currency. Optional. Returns: Dictionary with the updated resource name and confirmation message. Tools revision: 057a6aa5.
    ConnectorOAuth
  • Notiz ins Änderungsjournal des Workspace schreiben — nach jeder Änderung aufrufen. Google Ads bietet seine Notizen-Funktion nicht per API an; dieses Journal ist der Ersatz, deckt alle Quellen ab und überdauert das 30-Tage-Fenster des Google-Änderungsverlaufs. Einträge werden nach 24 Monaten automatisch gelöscht. Braucht Schreibrecht im Workspace (Read-only-Zugänge: Fehler). note: was geändert wurde und warum, inkl. Vorher→Nachher (z.B. "Kampagne X: Tagesbudget 50 € → 80 €, Grund: starker ROAS im Juli"). source: optionale Quelle (google_ads, meta_ads, wordpress, …) — wird von journal_list nicht zurückgegeben, blendet die Notiz aber für Zugänge ohne diese Quelle aus; die Quelle daher auch im Notiztext nennen. workspace: Slug des Kunden-Workspace (optional bei nur einem Workspace).
    ConnectorOAuth
  • Switch the project owner between Pro and Scale, or cancel the subscription (effectively dropping to Free at period end). Returns `{kind, newPlan, effectiveAt, applied}` — `applied=true` means Paddle was charged immediately, otherwise the change is queued for the current period end. Use preview_plan_change first to see the dollar impact. Owner-only; requires a token minted with the billing scope.
    Connector
    Destructive
    No auth
  • Screen a person by NAME for bankruptcy exposure ('konkursgjenganger'): leadership roles (chair / managing director) held in companies that later went bankrupt, tenure-weighted, from the dated role history. Use this for HISTORICAL leaders who are no longer in any role index and so cannot be reached via search_persons/get_person. The match is name-based (no national ID), so a hit is a REVIEW FLAG to verify (birth year / address), not a verdict. PII-sensitive — requires the search_full_enabled tier.
    ConnectorNo auth
  • Uninstall a release and remove the resources it created, including volume data. Use it, not delete_resource, for anything install_template created. Provide the release `name`.
    Connector
    Destructive
    OAuth
  • Beispiel: „Welche Firmen führt eine Person namens Maria Huber?“ Find every company a person runs or represents - across BOTH registers in one call (cross-border person search). Read-only. Parameters: - name (required): person name substring, case-insensitive, e.g. "Mustermann". - country (optional, default "all"): "AT" | "DE" | "all". - page_size (optional, default 25): results per country. - status (optional, default "all"): "active" | "inactive" | "all". Returns the merged search_companies envelope ({countries, results, per_country, notices}) plus ``person_query``; every result card carries ``country``, ``company_id`` and the matched manager. AT matches the primary managing director, DE matches all managing directors AND registered signatories. IMPORTANT: matching is by name and the registers publish birth YEAR only - a shared name across companies or countries does not prove the same person (the notice says so; use birth years and context to corroborate). For general company search use search_companies with other filters; manager_name can be combined there too.
    ConnectorOAuth
  • Get Google Ads performance insights for an account, at campaign, ad-group, or keyword level (cache-first with auto-refresh from Google). Returns an account summary with previous-period comparison, a sortable per-entity table, and an optional daily timeseries. Metrics on both the summary and every row: cost, impressions, clicks, conversions, conversions_value + derived roas/ctr/cpc/cpm/cost_per_conversion/cvr; all_conversions, all_conversions_value, cost_per_all_conversion, view_through_conversions, cross_device_conversions (all_* counts EVERY conversion action, `conversions` counts only the ones included in bidding); engagements, engagement_rate, interactions, interaction_rate; video_views (TrueView/YouTube), video_view_rate, avg_cpv, video_p25/p50/p75/p100_rate; youtube_comments, youtube_likes, youtube_shares (v25 social engagement on Shorts ads on YouTube — 0 outside YouTube/Shorts delivery); and the competitive set search_impression_share, search_lost_is_budget, search_lost_is_rank, top_impression_pct, abs_top_impression_pct. The competitive metrics are Search-network only and read 0 for Display/PMax/Video delivery. search_lost_is_budget is CAMPAIGN LEVEL ONLY (the Google API does not report it for ad groups or keywords) so the key is ABSENT at the other levels rather than 0; at campaign level impression share plus the two lost shares add up to 100%. quality_score (1-10, null when Google reports none) appears only at keyword level. When Google capped most days in range, meta.share_metrics_note is set and rows carry search_share_is_approximate: report those three share figures as estimates. ad_account_id is the bare 10-digit customer ID from adsap_google_list_ad_accounts. Keyword-level row ids are "<ad_group_id>:<criterion_id>" — pass them as-is to adsap_google_set_entity_status / adsap_google_update_entity (entity_type keyword). Only entities with impressions in range appear (PMax has no ad groups/keywords by design). Note: Google reports plain Clicks/CTR/CPC (no Meta-style link-click split). For Meta insights use adsap_get_insights.
    ConnectorAPI key
  • Create a complete Google Ads Performance Max campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED — activate later with adsap_google_set_entity_status), location/language targeting, and one asset group with text assets plus images previously created via adsap_google_upload_asset. Use dry_run: true first — Google validates the whole chain without creating anything; show the plan, get confirmation, then execute. Asset-group minimums (enforced): 3-15 headlines (<=30 chars), 1-5 long headlines (<=90), 2-5 descriptions (<=90, at least one <=60), business name (<=25), 1-5 logo images (1:1, min 128x128), 1-20 landscape images (1.91:1, min 600x314), 1-20 square images (1:1, min 300x300). Video is optional — without one, Google may auto-generate video from your assets. bidding_strategy 'auto' resolves to maximize_conversions with a conversion-tracking preflight warning when the account has no conversion actions. retail: true attaches the account's ACTIVE Merchant Center link (fails cleanly if none). ad_account_id is the bare 10-digit customer ID. For Search campaigns use adsap_google_create_search_campaign; for Meta use adsap_create_campaign.
    ConnectorAPI key
  • Manage Google Ads Search keywords AFTER creation. op 'add': add up to 100 keywords (and/or ad-group negatives via negative: true) to an EXISTING ad group — atomic batch, per-keyword optional cpc_bid. op 'add_negative': add campaign-LEVEL negative keywords (block queries across every ad group in the campaign). op 'replace': change one keyword's text and/or match type ATOMICALLY (Google keyword text/match type are immutable, so this is remove + re-add in one request — the keyword gets a NEW id and its performance history restarts; status and bid carry over). op 'remove': remove one ad-group keyword/negative (keyword_id) or one campaign negative (campaign_negative_id). Ids are composite "<parent_id>:<criterion_id>" — ad-group keyword ids come from adsap_google_get_insights level keyword; created ids are returned by the add ops. Always dry_run: true first. For pause/enable use adsap_google_set_entity_status; for per-keyword bid changes alone use adsap_google_update_entity with updates.cpc_bid.
    ConnectorAPI key
  • Add location targeting, device exclusions, and/or an ad schedule (day-parting) to a Google Ads campaign. A campaign with no locations serves everywhere Google allows, so set locations before enabling a campaign meant for specific markets. Locations and schedule blocks are added alongside existing ones. Excluding a device sets that device's bid adjustment to -100%, which overwrites any adjustment already set for it. Undo any of these with remove_campaign_criterion.
    Connector
    Destructive
    OAuth
  • Draft a new Google business description (up to 750 characters; 250+ reads best). Google suspends listings over this field, so the draft is refused if it contains a link, phone number, email, prices or offers, HTML, all-caps shouting, or repeated keywords. Write it about what the business actually does, from my_google_profile. Creates a DRAFT only — nothing on Google changes. Show the owner the draft this returns, word for word, and publish it with publish_change only after they say yes.
    ConnectorNo auth
  • Stage campaign changes for review. Does NOT execute anything. Each operation: {"platform": "google_ads"|"meta_ads", "level": "campaign"|"ad_set"|"ad" (default campaign; ad_set = Google ad group), "object_id": "<id of that object>", "set": {"daily_budget": <number, MAJOR account-currency units>, "status": "ACTIVE"|"PAUSED"}, "account_id": optional, for multi-account companies}. daily_budget: Meta campaign or ad set, Google campaign only (Google ad group spend is governed by the campaign budget). Ads take status only. Returns proposal_id + a current→new diff preview. Show the preview to the user; call apply_change(proposal_id) only after they confirm. Proposals expire in 1h.
    ConnectorAPI key
  • The advertisers matching a brand name in Google's ad library, with their ids. Use when: before ads_get_advertiser_ads on Google, because that library is keyed by advertiser id and one brand has one entry per region. Not for: the ads themselves, use ads_get_advertiser_ads with the id this returns. The other libraries, which search their ads directly with ads_search_ads. Returns: List. rows[]: platform, id, name, region, ads_estimate, website. Cost: 1 credit. Cached 7 days. Example: {"platform": "google", "query": "lululemon", "region": "US"}
    ConnectorAPI key
  • Draft an update to an existing campaign — returns a PREVIEW, does NOT apply. Only the parameters passed are changed; omitted ones stay as they are, and at least one change is required. Replacing geo targets keeps the campaign's negative geo exclusions (the preview lists them). A budget change shows the current amount; when the budget is shared with other campaigns, the preview names them and needs a double confirmation, because the new amount covers all of them. A bidding change on a campaign in a portfolio bid strategy takes it out of the portfolio, also with a double confirmation. Returns a preview with a plan_id plus any warnings; nothing changes until confirm_and_apply applies it. Google Ads API: https://developers.google.com/google-ads/api/docs/start
    ConnectorAPI key
  • Attach an existing brand list to one or more campaigns — returns a PREVIEW. Creates a CampaignCriterion.brand_list per campaign. This is NOT the CampaignSharedSet linkage used for negative keyword lists — brand lists are criteria, and `negative` decides the role. The shared_set_id comes from get_brand_lists; get_brand_list_campaigns lists existing attachments. Returns a preview with a plan_id; nothing changes until the returned plan_id is applied with confirm_and_apply. Google Ads API: https://developers.google.com/google-ads/api/docs/start
    ConnectorAPI key