confirm_and_apply gate as every other write. New campaigns and responsive search ads are created PAUSED. AdLoop builds and edits Search campaigns; other campaign types can be analysed but not built.
Google Ads shares one Google connection with Google Analytics, Tag Manager, Search Console and Merchant Center.
Connect
- AdLoop Cloud
- Self-hosted
The onboarding wizard (later: Settings → Google & accounts → Connect Google account) asks which Google products your AI may use and requests only those permissions. Keep Google Ads ticked; Google’s consent dialog then asks for access to your Ads data. Google offers no read-only permission for Ads, so for “analyse but never change” use a read-only API key.Then pick the account. Accounts you reach directly appear in the list; picking a manager account (MCC) opens a second list with the accounts under it, and AdLoop reaches the chosen account through the manager. I do not use Google Ads leaves the Ads tools switched off. Agencies connect Google once under Settings → Google connection and pick an Ads account per client under Settings → Clients (see Clients).Disconnect Google account revokes the grant at Google and deletes the stored token. Because all Google products share one grant, Analytics and the others disconnect with it.
Behaviour worth knowing
- Money is in account currency. The read tools compute
metrics.cost,metrics.cpaand average CPC for you. Onlyrun_gaqlreturns Google’s rawcost_micros(divide by 1,000,000). - Compact mode for audits.
get_campaign_performance,get_keyword_performance,get_search_termsandget_ad_performanceacceptcompact=true: account totals, the top ten rows and ready-made offender lists (zero-conversion spenders, low quality scores, wasteful search terms, thin ads) instead of every row. - Keyword Planner needs your market.
discover_keywordsandestimate_budgetdefault to Germany and English; pass thegeo_target_idandlanguage_idyou actually target. - Performance Max is read-only.
get_pmax_performancereports asset groups with their Ad Strength and a network breakdown; most PMax traffic lands in Google’s catch-allMIXEDnetwork, so an exact Search vs YouTube vs Display split is not available. - Recommendations are read, not applied.
get_recommendationsreturns Google’s suggestions with estimated impact and flags budget raises that mainly benefit Google; acting on one means drafting the change yourself. - Ads clicks above GA4 sessions are normal in the EU. See Consent and data gaps.
Safety specifics
Everything on the safety model applies. On top of that, for Google Ads:- The dry run asks Google.
confirm_and_applywithdry_run=truesends the exact mutates to Google in validate-only mode: Google checks them and executes nothing.DRY_RUN_FAILEDcarries Google’s error and means the real apply would fail the same way. Steps that depend on an object an earlier step would create (keywords for a list that does not exist yet, say) cannot be validated and are counted as skipped. - Budgets and bids are capped.
max_daily_budgetcaps every budget AdLoop sets.max_bid_increase_pct(default 100) caps raises of an ad group’s manual CPC and of an existing Maximize Clicks ceiling; a first-time ceiling has no baseline and is not capped. - Broad match needs Smart Bidding.
draft_campaignrefuses BROAD keywords on a campaign without Smart Bidding (Maximize Conversions, Maximize Conversion Value, Target CPA or Target ROAS);draft_keywordsanddraft_ad_groupflag them in the preview. - Targeting is mandatory. New campaigns need geo and language targets.
- Landing pages must load. Final URLs of ads and sitelinks are fetched at draft time; an error page blocks the draft. If the site is only rate-limiting or briefly down, the preview warns and lets you proceed.
- What is created paused. Campaigns and responsive search ads are created PAUSED. New ad groups are created enabled but cannot serve until one of their ads is enabled.
- Rewriting an ad is not free. Changing headlines or descriptions with
update_responsive_search_adkeeps the ad’s ID, but Google treats the creative as new: its asset-combination learning and performance history reset and it goes back through policy review. The preview says so. URL and display-path edits do not have this effect. - Location lists replace, exclusions survive.
update_campaignreplaces the positive geo and language targets with the list you pass. Negative location exclusions are kept and listed in the preview; add them withadd_negative_locations. - Removal is final.
remove_entitycannot be undone; preferpause_entity.
Tools
Reads:list_accounts, get_campaign_performance, get_ad_performance (full RSA copy), get_keyword_performance (quality scores), get_search_terms, get_negative_keywords, get_negative_keyword_lists, get_negative_keyword_list_keywords, get_negative_keyword_list_campaigns, get_recommendations, get_pmax_performance, get_asset_performance and get_detailed_asset_performance (PMax assets and top asset combinations), get_audience_performance, get_demographic_targeting, run_gaql (any Google Ads Query Language query). Planning: discover_keywords and estimate_budget (Keyword Planner, read-only).
Writes (all previewed):
- Structure:
draft_campaign,draft_ad_group,update_campaign(bidding, budget, locations, languages, networks, Maximize Clicks CPC ceiling),update_ad_group(name, manual CPC bid). - Ads:
draft_responsive_search_ad,update_responsive_search_ad. - Keywords and exclusions:
draft_keywords,add_negative_keywords,add_negative_locations,draft_demographic_targeting(age, gender, parental status, income; exclusions by default). - Shared negative keyword lists:
propose_negative_keyword_list(create and attach),add_to_negative_keyword_list,attach_shared_set_to_campaigns,detach_shared_set_from_campaigns. - Campaign assets:
draft_sitelinks,draft_callouts,draft_structured_snippets,draft_image_assets(self-hosted only: it reads image files from your disk). - Conversion actions:
draft_create_conversion_action,draft_update_conversion_action,draft_remove_conversion_action. - Status:
pause_entity,enable_entity,remove_entity.
ads. The tools that join Ads with Analytics (analyze_campaign_conversions, attribution_check, landing_page_analysis) are in the tracking toolset, see Tracking audit.
Building a campaign
- Research.
discover_keywordsfrom seed keywords or a URL, thenestimate_budgetfor the chosen keywords to see expected clicks and cost. draft_campaigncreates the budget, the campaign (PAUSED), its first ad group, keywords, and geo and language targeting in one plan. More ad groups follow withdraft_ad_group.draft_responsive_search_adper ad group: 3 to 15 headlines of up to 30 characters, 2 to 4 descriptions of up to 90, display paths of up to 15. Headlines and descriptions can be pinned to a position, at some cost to Ad Strength.- Assets: sitelinks, callouts and structured snippets on the campaign.
- Shared negatives: a new campaign does not inherit your shared negative keyword lists; attach them with
attach_shared_set_to_campaigns. - Enable the ad, then the campaign, with
enable_entity.
Not covered yet
Audiences and remarketing lists, ad schedules and bid adjustments, Performance Max asset groups, Shopping, Demand Gen and video campaigns, experiments, offline conversion uploads, and applying Google’s recommendations. Use the Google Ads interface for these; AdLoop can still report on the campaigns.Operations and limits
On AdLoop Cloud, every Google Ads tool call counts toward your workspace’s daily operations: reads, Keyword Planner lookups, drafts, dry runs and applies, and thetracking tools that read Ads. health_check and list_accounts are not counted. See plans and limits. Self-hosted, the only limits are the ones Google sets for your Cloud project’s access level.
What AdLoop stores
On AdLoop Cloud: an encrypted refresh token, your Google email address, the permissions you granted, and the selected Ads account (ID, name, currency, and the manager account it is reached through). Campaign and performance data pass through and are never stored; the change log records what was changed. Self-hosted, the token stays in~/.adloop/token.json and the audit log in ~/.adloop/audit.log on your machine. See the privacy policy for the full description.