MARKETING · MARKETING
Campaigns, ad groups, keywords, and budgets in their own Ads account.
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
google_ads_add_ad_group_labelWRITEAttach an existing label to an ad group. Purely organizational.
google_ads_add_campaign_labelWRITEAttach an existing label to a campaign. Purely organizational.
google_ads_add_keywordsWRITEAdd up to 100 keywords to one ad group in a single batch. EVERY KEYWORD IS ADDED PAUSED — google_ads_enable_keyword is the separate step that starts it matching searches and buying clicks. cpc_bid_micros applies to every keyword in the batch and is the most each will pay for one click; omit it to inherit the ad group's bid.
google_ads_add_negative_keywordsWRITEAdd up to 100 negative keywords to a campaign, stopping it matching those searches. THIS IS THE SPEND-REDUCING WRITE and it takes effect immediately. Feed it from google_ads_list_search_terms.
google_ads_add_shared_criteriaWRITEAdd up to 100 negative keywords to a shared set. Every campaign the set is attached to stops matching them.
google_ads_apply_recommendationWRITEApply one of Google's recommendations. WHAT THIS DOES DEPENDS ENTIRELY ON THE RECOMMENDATION: a CAMPAIGN_BUDGET recommendation raises a budget, a TARGET_CPA_OPT_IN changes the bidding strategy, a KEYWORD adds keywords. Read it with google_ads_list_recommendations and check its type and its cost impact first. Google publishes no un-apply.
google_ads_attach_ad_group_assetWRITEAttach an existing asset to one ad group, overriding what the campaign attaches for that field type.
google_ads_attach_asset_group_assetWRITEPut an existing asset into a Performance Max asset group in a given field type. This is how a PMax asset group's ad strength is improved.
google_ads_attach_campaign_assetWRITEAttach an existing asset to a campaign in a given field type, e.g. a sitelink or a callout. The asset begins showing with that campaign's ads once Google approves it.
google_ads_attach_shared_setWRITEAttach a shared negative list to a campaign, so the campaign stops matching everything in it. Spend-reducing.
google_ads_create_account_budget_proposalWRITEPropose an ACCOUNT-level budget: a ceiling on what this whole account may be invoiced for between two dates. proposed_spending_limit_micros is REQUIRED — an account budget with no ceiling is exactly the unbounded-spend case Agentic Fabriq refuses to ship. The proposal must still be approved by Google; read it back with google_ads_list_account_budget_proposals.
google_ads_create_adWRITECreate a responsive search ad in an ad group. ALWAYS CREATED PAUSED — google_ads_enable_ad is the separate step that starts it serving. Google requires at least 3 headlines (30 characters each) and 2 descriptions (90 characters each); it will reject fewer. The landing page in final_urls is the customer's own and Agentic Fabriq never chooses it.
google_ads_create_ad_groupWRITECreate an ad group inside a campaign. ALWAYS CREATED PAUSED — google_ads_enable_ad_group is the separate step that starts it serving. cpc_bid_micros is the most this ad group will pay for one click; omit it to inherit the campaign's bidding strategy.
google_ads_create_ad_group_bid_modifierWRITEAdd an ad-group-level bid multiplier for a device type, e.g. bid 1.3x on mobile. bid_modifier is bounded to 0.1-10.0.
google_ads_create_asset_groupWRITECreate an asset group inside a Performance Max campaign. ALWAYS CREATED PAUSED. An asset group with too few assets will not serve; read ad_strength back with google_ads_list_asset_groups.
google_ads_create_audienceWRITECreate an audience from existing user lists. Creating one changes nothing about delivery until it is used as a targeting criterion.
google_ads_create_bidding_strategyWRITECreate a bidding strategy campaigns can share. Every type here requires the target it is defined by — a strategy with no target is the unbounded-bid case Agentic Fabriq does not ship. Creating a strategy spends nothing until a campaign is attached to it.
google_ads_create_campaignWRITECreate a campaign against an existing budget. IT IS ALWAYS CREATED PAUSED and there is no argument that changes that — starting it costs money, so that is a second, separately-granted, confirmation-gated step (google_ads_enable_campaign). Supply the budget's resource name from google_ads_list_campaign_budgets or create one first.
google_ads_create_campaign_bid_modifierWRITEAdd a campaign-level bid multiplier for an interaction type, e.g. bid 1.2x on calls. bid_modifier is bounded to 0.1-10.0 in the schema and in the connector.
google_ads_create_campaign_budgetWRITECreate a DAILY budget a campaign can spend against. amount_micros is REQUIRED and is the ceiling: it is what Google may spend per day, in micros of the account currency (1,000,000 micros = 1 unit, so 50 dollars a day is 50000000). Creating a budget spends nothing on its own — nothing is charged until a campaign referencing it is enabled.
google_ads_create_campaign_criterionWRITEAdd one campaign-level targeting criterion or exclusion: a location, a language, or a negative keyword that applies to the whole campaign. Use google_ads_suggest_geo_target_constants to find a location id.
google_ads_create_campaign_draftWRITECreate a private draft copy of a campaign. Nothing about the live campaign changes and the draft spends nothing; it exists so changes can be made and then either promoted onto the original or run as an experiment.
google_ads_create_campaign_groupWRITECreate a campaign group for organizing campaigns in reporting. Changes nothing about delivery or spend.
google_ads_create_conversion_actionWRITECreate a new conversion action. What an account counts as a conversion is what every automated bidding strategy in it optimizes toward, so this is a bidding change wearing a measurement hat. Created ENABLED because a conversion action that is not enabled records nothing and is therefore inert — it cannot spend money.
google_ads_create_conversion_custom_variableWRITECreate a custom variable that uploaded conversions can carry, for example a deal stage or a product line. Additive and inert until an upload sets it.
google_ads_create_customer_clientWRITECreate a brand-new Google Ads account underneath this manager (MCC) account, with a name, currency and time zone. IRREVERSIBLE THROUGH THE API: Google publishes no way to delete an account — only a person can cancel one in the Google Ads UI. Requires a developer token with Basic access or above; Explorer access cannot reach account creation at all.
google_ads_create_experimentWRITECreate a campaign experiment. Created in SETUP status and running nothing until google_ads_schedule_experiment starts it, so this spends nothing on its own.
google_ads_create_experiment_armWRITEAdd an arm to an experiment: the control arm names the existing campaign, the treatment arm gets a copy. traffic_split is the percentage of traffic this arm receives and the two arms must sum to 100.
google_ads_create_image_assetWRITECreate a reusable image asset from IMAGE BYTES, supplied base64-encoded. Deliberately NOT from a URL: an operation that takes a URL Agentic Fabriq then fetches is a server-side request forgery sink, and no image asset is worth one.
google_ads_create_labelWRITECreate a label that can then be attached to campaigns, ad groups and ads. Labels change nothing about delivery or spend.
google_ads_create_shared_setWRITECreate a reusable negative-keyword or negative-placement list. Empty until google_ads_add_shared_criteria puts members in it, and inert until google_ads_attach_shared_set attaches it to a campaign.
google_ads_create_text_assetWRITECreate a reusable text asset — a headline, description, callout or structured snippet — that can then be attached to a campaign, ad group or asset group. Creating one changes nothing about delivery.
google_ads_create_user_listWRITECreate a RULE-BASED remarketing list — one that fills itself from site traffic matching a URL rule. Agentic Fabriq deliberately does not create Customer Match lists, which are built by uploading the identities of real people.
google_ads_detach_ad_group_assetWRITEDetach an asset from an ad group. The inverse of google_ads_attach_ad_group_asset.
google_ads_detach_campaign_assetWRITEDetach an asset from a campaign. It stops showing with that campaign's ads. The asset itself is untouched and can be re-attached with google_ads_attach_campaign_asset.
google_ads_detach_shared_setWRITEDetach a shared negative list from a campaign. The campaign starts matching those searches again, so it increases spend. The inverse of google_ads_attach_shared_set.
google_ads_dismiss_recommendationWRITEDismiss a recommendation so it stops being suggested. Changes nothing about the account's delivery or spend. There is no un-dismiss in the API — Google will re-surface the recommendation on its own if the condition persists, and a person can restore it in the Google Ads UI. That absence is stated here rather than implied.
google_ads_enable_adWRITESet an ad to ENABLED. THIS STARTS SERVING and buying clicks, provided its ad group and campaign are also enabled. The inverse is google_ads_pause_ad.
google_ads_enable_ad_groupWRITESet an ad group to ENABLED. THIS STARTS SPENDING: its ads begin serving against the campaign's budget, provided the campaign is also enabled. The inverse is google_ads_pause_ad_group.
google_ads_enable_campaignWRITESet a campaign to ENABLED. THIS STARTS SPENDING MONEY: an enabled campaign buys clicks against its daily budget from the next few minutes onward. Read the campaign's budget with google_ads_list_campaign_budgets and its end date with google_ads_list_campaigns before calling this. The inverse is google_ads_pause_campaign, which ships in the same migration.
google_ads_enable_keywordWRITESet a keyword to ENABLED. THIS STARTS SPENDING: it begins matching searches and buying clicks. The inverse is google_ads_pause_keyword.
google_ads_end_experimentWRITEEnd an experiment immediately, returning all traffic to the base campaign and discarding the trial arm's remaining schedule. This is the inverse of google_ads_schedule_experiment and it is the SAFE direction — it reduces spend — but it cannot be undone, so it is confirmation-gated.
google_ads_generate_keyword_forecast_metricsREADForecast the clicks, impressions and COST a proposed set of keywords and bids would produce over a date range. Read-only — it spends nothing — and it is the right call BEFORE google_ads_add_keywords, because it prices the change first.
google_ads_generate_keyword_historical_metricsREADReturn average monthly searches, competition and top-of-page bid range for keywords you name. Read-only. One request per second per account.
google_ads_generate_keyword_ideasREADAsk the Keyword Planner for keyword ideas from seed words or a URL, with each idea's average monthly searches and competition. Read-only and spends nothing. Google rate-limits this to ONE REQUEST PER SECOND per account, and Explorer-level developer tokens cannot reach the planning services at all.
google_ads_get_customerREADRead one Google Ads account's own settings: its descriptive name, currency, time zone, whether it is a manager, whether it is a TEST account, its auto-tagging and tracking-template settings and its optimization score. Read this before any write — a test account cannot serve ads or produce metrics, and mistaking one for a live account is the most common way a Google Ads integration appears broken when it is working.
google_ads_get_google_ads_fieldREADRead the metadata for one named field, e.g. campaign.status: its data type, its enum values, and whether it is selectable, filterable and sortable.
google_ads_get_identity_verificationREADReport where this account stands in Google's advertiser identity verification programme, including any deadline. An unverified account can have its ads stopped, so this is a diagnostic worth reading before concluding a campaign is misconfigured.
google_ads_graduate_experimentWRITEConvert the experiment's trial arm into an INDEPENDENT campaign with its own budget, which then spends on its own alongside the original. Both campaigns run afterwards, so total spend goes up. Supply the budget the graduated campaign will use.
google_ads_list_accessible_customersREADList every Google Ads account the connected Google login can reach DIRECTLY, as resource names like customers/1234567890. START HERE: every other Google Ads tool needs a customer_id and this is the only call that needs none. Note what it does NOT return: accounts reachable only THROUGH a manager account are not listed — use google_ads_list_customer_clients with a manager's id for those.
google_ads_list_account_budget_proposalsREADList proposals to create, change or end an account budget, with their approval status. The precondition read for google_ads_create_account_budget_proposal and the only way to see a proposal id before withdrawing one.
google_ads_list_account_budgetsREADList the ACCOUNT-level budgets — the invoicing ceilings for the whole account over a period — with how much has been served against each. Distinct from campaign budgets, which are the daily ceilings google_ads_list_campaign_budgets reads.
google_ads_list_ad_group_assetsREADList creative assets attached at ad-group level with their field type and approval status.
google_ads_list_ad_group_bid_modifiersREADList ad-group-level bid multipliers, for example a device modifier that bids more on mobile.
google_ads_list_ad_group_criteriaREADList EVERY criterion on an ad group, not only keywords: audiences, age ranges, genders, placements, topics and their bid modifiers. `negative = true` means an exclusion.
google_ads_list_ad_group_labelsREADList which labels are attached to which ad groups.
google_ads_list_ad_groupsREADList ad groups with their status, type, campaign, and the bids that apply to them. The `resource_name` of each row is what every ad-group write takes, and `ad_group.campaign` is what links it upward.
google_ads_list_adsREADList the ads in this account with their type, status, POLICY APPROVAL STATUS and landing-page URLs. approval_status is the diagnostic for 'our ad is not showing': DISAPPROVED means Google is refusing to serve it, and no amount of bidding fixes that.
google_ads_list_asset_group_assetsREADList which assets are in which asset group and what field type each fills — the read that tells you a PMax asset group is missing headlines.
google_ads_list_asset_groupsREADList the asset groups of Performance Max campaigns, with their ad strength, landing pages and primary status. Ad strength is the diagnostic for an underperforming PMax campaign.
google_ads_list_asset_setsREADList asset sets — collections of assets such as location groups or business-profile feeds — with their type and status.
google_ads_list_assetsREADList the account's creative assets — text, images, sitelinks, callouts — with their type, source and landing pages. NOTE: the HTTP authorization token on a Business Profile location set and the lead-form webhook secret are withheld from these rows by Agentic Fabriq; they are the customer's credentials for other systems and an agent has no use for them.
google_ads_list_audiencesREADList the account's audiences with their name, description, scope and status. Produces the audience resource names targeting writes need.
google_ads_list_batch_jobsREADList the batch jobs on this account with their status, operation counts and progress. Agentic Fabriq does not CREATE batch jobs — a job takes an arbitrary array of mutate operations, which would let one granted action reach every write in the API — but a job created elsewhere is visible here, which is how an unexplained bulk change gets found.
google_ads_list_bidding_strategiesREADList the account's PORTFOLIO bidding strategies — strategies shared across campaigns — with their type, their targets (target CPA, target ROAS, CPC ceiling) and how many campaigns use each. Changing one changes what every campaign attached to it pays, which is why google_ads_update_bidding_strategy is destructive.
google_ads_list_billing_setupsREADList how this account pays: each billing setup, its status, the payments account behind it and the period it covers. No payment instrument, card number or bank detail is ever returned — Google does not publish one on this resource.
google_ads_list_campaign_assetsREADList the creative assets attached at campaign level — sitelinks, callouts, images, promotions — with the field type each occupies and its approval status.
google_ads_list_campaign_bid_modifiersREADList the campaign-level bid multipliers — for example a 1.2 modifier on calls means the account bids 20% more for that interaction. The precondition read for changing one.
google_ads_list_campaign_budgetsREADList the DAILY budgets in this account: the amount in micros, whether the budget is shared, how many campaigns reference it, and Google's own recommended amount. READ THIS BEFORE CHANGING A BUDGET — writing the previous amount_micros back is the only undo Google publishes.
google_ads_list_campaign_criteriaREADList what a campaign targets or excludes at the campaign level: locations, languages, devices, audiences, and campaign-level negative keywords. `negative = true` means an exclusion.
google_ads_list_campaign_draft_async_errorsREADList the errors a draft promotion produced. Promotion is asynchronous, so a failure surfaces HERE and nowhere else — without this read a failed promotion is silent.
google_ads_list_campaign_draftsREADList the drafts of campaigns in this account — a draft is a private copy you can change and then either promote onto the live campaign or run as an experiment. The precondition read for promoting one.
google_ads_list_campaign_groupsREADList the campaign groups used to organize campaigns for reporting.
google_ads_list_campaign_labelsREADList which labels are attached to which campaigns. Pair with google_ads_list_labels to resolve each label resource name to its text.
google_ads_list_campaign_shared_setsREADList which shared negative-keyword or placement lists are attached to which campaigns.
google_ads_list_campaignsREADList this account's campaigns with their status, channel type, bidding strategy, budget resource name, start and end dates and labels. Configuration only — for spend and clicks use google_ads_report_campaign_performance. The `resource_name` field of each row is what every campaign write takes.
google_ads_list_change_eventsREADWHO CHANGED WHAT, WHEN. Every configuration change in the account with the user's email, the resource, the operation and the exact fields touched. Google restricts this to the LAST 30 DAYS and to 10,000 rows per query, and REQUIRES a change_date_time filter — Agentic Fabriq supplies the last 30 days when you give no dates. This is the diagnostic that makes every write in this connector supportable: it is how an unexpected spend change gets attributed.
google_ads_list_change_statusREADList which resources changed since a point in time and whether each was added, changed or removed. Cheaper than the full change history when the question is 'what moved', not 'who moved it'. Google keeps 90 days.
google_ads_list_conversion_actionsREADList what this account counts as a conversion: each action's type, category, counting rule, attribution window, default value, and whether it is included in the `conversions` metric that automated bidding optimizes toward. Read this before believing any conversion number.
google_ads_list_conversion_custom_variablesREADList the custom variables that can be attached to an uploaded conversion, with their tags. Produces the resource names google_ads_upload_click_conversions needs to send one.
google_ads_list_custom_audiencesREADList custom audiences — audiences defined by interests, URLs or apps rather than by a membership list.
google_ads_list_customer_client_linksREADList the DIRECT client links a manager account holds, with each link's status and whether the client is hidden. Unlike google_ads_list_customer_clients this shows only one level and shows PENDING invitations as well as accepted links.
google_ads_list_customer_clientsREADWalk the manager-account hierarchy below one account: every child account, its id, name, currency, time zone, whether it is itself a manager, whether it is a test account, and how many levels below it sits. This is the read that produces the customer ids the mutate tools require when the connected login reaches accounts through an MCC — google_ads_list_accessible_customers only returns direct grants. Pass the MANAGER's id as customer_id and the manager's id again as login_customer_id.
google_ads_list_customer_conversion_goalsREADList the account-level conversion goals: which conversion categories are biddable, meaning which ones automated bidding is allowed to optimize toward.
google_ads_list_customer_manager_linksREADList the manager (MCC) accounts linked ABOVE this account and the status of each link. The manager ids here are the values to send as login_customer_id.
google_ads_list_customer_user_accessREADList every user with access to this account, their access role (ADMIN, STANDARD, READ_ONLY, EMAIL_ONLY), when it was granted and who invited them. RETURNS EMAIL ADDRESSES — third-party personal data — which is why it sits under its own permission and not under account:read. There is deliberately no matching write: Agentic Fabriq does not edit the permission system it is being permitted by.
google_ads_list_customer_user_access_invitationsREADList invitations to access this account that have not yet been accepted, with the invited email address, the role offered and the invitation's status. Also returns email addresses.
google_ads_list_experiment_armsREADList the arms of an experiment: which is the control, which campaigns each arm runs and how the traffic is split between them.
google_ads_list_experiment_async_errorsREADList the errors an experiment's asynchronous promotion or graduation produced. Those run asynchronously, so a failure surfaces HERE and nowhere else.
google_ads_list_experimentsREADList campaign experiments with their status, schedule, promote status and the long-running operation behind each. Read before ending, graduating or promoting one.
google_ads_list_invoicesREADList this account's invoices for one month, with their totals and the billing setup they belong to. Monthly invoicing must be enabled on the account; accounts on automatic card payments have no invoices and Google answers with an empty list rather than an error.
google_ads_list_keywordsREADList the keywords in this account with their text, match type, status, bid and quality score. Only KEYWORD criteria are returned — for audiences, demographics and placements use google_ads_list_ad_group_criteria.
google_ads_list_labelsREADList the labels defined in this account, with their text and colour. Produces the label resource names every label-assignment write needs.
google_ads_list_negative_keywordsREADList the campaign-level negative keywords — the searches a campaign refuses to match. Filtered to negative KEYWORD criteria by a fixed clause. Ad-group-level negatives are in google_ads_list_ad_group_criteria.
google_ads_list_offline_conversion_upload_summariesREADReport the health of recent offline conversion uploads: how many events succeeded, how many are pending, the success rate and when the last upload happened. THIS IS THE DIAGNOSTIC for 'our CRM conversions stopped importing' — without it that question ends at a silence.
google_ads_list_payments_accountsREADList the payments accounts this account can be billed through, with their ids and names. Needed to create a billing setup, which Agentic Fabriq deliberately does not expose — see docs/coverage/google_ads.md.
google_ads_list_recommendation_subscriptionsREADList which recommendation types this account has subscribed to AUTO-APPLY. Read-only in Agentic Fabriq and deliberately so: creating a subscription is a standing rule that changes budgets and bids forever with no action row behind any of it. Listing them is how you DETECT one — an account with an auto-apply subscription is an account whose spend changes without anybody calling a tool.
google_ads_list_recommendationsREADList Google's own optimization recommendations for this account, each with the campaign or budget it applies to, whether it has been dismissed, and Google's estimate of its impact on impressions, clicks and COST. Read the impact.potential_metrics.cost_micros before applying anything: a recommendation is Google advising the account to spend more, and it is usually right about the impressions.
google_ads_list_remarketing_actionsREADList the account's remarketing actions — the tags that build remarketing lists from site traffic.
google_ads_list_search_termsREADList the ACTUAL SEARCHES people typed that caused an ad to serve, with the campaign and ad group each matched. This is the diagnostic behind every 'why did we pay for that click' question and the input to google_ads_add_negative_keywords. For the metrics on each term use google_ads_report_search_term_performance.
google_ads_list_shared_criteriaREADList the individual exclusions inside a shared set.
google_ads_list_shared_setsREADList the account's shared sets — reusable negative-keyword and negative-placement lists — with how many members each has and how many campaigns use it.
google_ads_list_user_listsREADList remarketing and customer lists with their type, size, membership duration and whether each is eligible for Search or Display. size_for_search below Google's minimum is why a remarketing campaign is not serving.
google_ads_pause_adWRITESet an ad to PAUSED. It stops serving immediately and nothing is lost; google_ads_enable_ad puts it back.
google_ads_pause_ad_groupWRITESet an ad group to PAUSED. It stops serving immediately and nothing is lost — its keywords, ads and history are untouched and google_ads_enable_ad_group puts it back.
google_ads_pause_campaignWRITESet a campaign to PAUSED. It stops serving and stops spending immediately, and nothing is lost: its settings, keywords, ads and history are untouched and google_ads_enable_campaign puts it back. This is the safe half of the pair and needs no confirmation.
google_ads_pause_keywordWRITESet a keyword to PAUSED. It stops matching searches immediately and keeps its quality-score history; google_ads_enable_keyword puts it back. This is the right way to stop a keyword spending.
google_ads_promote_campaign_draftWRITECopy the draft's configuration onto the LIVE campaign it was made from, overwriting it. THE PRE-PROMOTION CONFIGURATION IS NOT RECOVERABLE through the API. Runs asynchronously — the response carries a long-running operation and google_ads_list_campaign_drafts reports when it finishes.
google_ads_promote_experimentWRITEOverwrite the BASE campaign with the experiment arm's configuration. The base campaign's previous configuration is not recoverable through the API. Asynchronous — check google_ads_list_experiment_async_errors afterwards.
google_ads_remove_account_budget_proposalWRITEWithdraw a pending account budget proposal. This is the inverse of google_ads_create_account_budget_proposal and it is why that operation is shippable: a proposal that has not been approved can be taken back.
google_ads_remove_adWRITESet an ad to REMOVED. TERMINAL — Google publishes no un-remove. Its historical metrics survive. Pause it instead unless you are certain.
google_ads_remove_ad_groupWRITESet an ad group to REMOVED, taking every keyword and ad in it with it. TERMINAL — Google publishes no un-remove. Pause it instead unless you are certain.
google_ads_remove_ad_group_bid_modifierWRITERemove an ad-group-level bid modifier, returning that device to the ad group's base bid.
google_ads_remove_ad_group_labelWRITEDetach a label from an ad group. The inverse of google_ads_add_ad_group_label.
google_ads_remove_asset_groupWRITERemove an asset group from a Performance Max campaign. Its assets survive in the account and can be reused; the grouping does not.
google_ads_remove_asset_group_assetWRITETake an asset out of a Performance Max asset group. Removing below Google's minimum for a field type will stop the group serving. The inverse of google_ads_attach_asset_group_asset.
google_ads_remove_audienceWRITERemove an audience. Every ad group and campaign targeting it loses that targeting, which changes who sees the ads and therefore what is spent.
google_ads_remove_bidding_strategyWRITERemove a shared bidding strategy. Every campaign using it is left without one and STOPS SERVING until a strategy is set, so check non_removed_campaign_count first. The inverse is google_ads_create_bidding_strategy plus pointing the campaigns back.
google_ads_remove_campaignWRITESet a campaign to REMOVED. TERMINAL: Google publishes no un-remove for a campaign — a REMOVED campaign can never be enabled again, only recreated from scratch. Its historical metrics survive for reporting. google_ads_pause_campaign is almost always what is actually wanted.
google_ads_remove_campaign_bid_modifierWRITERemove a campaign-level bid modifier, returning bids for that interaction to the campaign's base bid.
google_ads_remove_campaign_budgetWRITERemove a budget. Every campaign that referenced it stops delivering until it is given another one, so check reference_count with google_ads_list_campaign_budgets first. A removed budget cannot be restored, only recreated with google_ads_create_campaign_budget.
google_ads_remove_campaign_criterionWRITERemove one campaign-level criterion. REMOVING A NEGATIVE CRITERION WIDENS what the campaign matches, which increases spend; removing a positive one narrows it. The inverse of google_ads_create_campaign_criterion.
google_ads_remove_campaign_draftWRITEDiscard a draft without promoting it. The live campaign is untouched. This is the inverse of google_ads_create_campaign_draft and the safe way out of a draft you do not want.
google_ads_remove_campaign_groupWRITERemove a campaign group. The campaigns in it are untouched.
google_ads_remove_campaign_labelWRITEDetach a label from a campaign. The inverse of google_ads_add_campaign_label.
google_ads_remove_conversion_actionWRITERemove a conversion action. Every automated bidding strategy optimizing toward it loses its signal and its historical conversions stop being reported. google_ads_update_conversion_action with status=PAUSED stops the recording without the loss and is almost always what is wanted.
google_ads_remove_experimentWRITERemove an experiment that has not been promoted. The base campaign is untouched. The inverse of google_ads_create_experiment.
google_ads_remove_experiment_armWRITERemove an arm from an experiment that has not started. The inverse of google_ads_create_experiment_arm.
google_ads_remove_keywordsWRITESet up to 100 keywords to REMOVED in one batch. TERMINAL, and it also discards their accumulated quality-score history, which does not come back if you re-add the same text. google_ads_pause_keyword is almost always what is actually wanted.
google_ads_remove_labelWRITERemove a label from the account. It is detached from everything it was attached to; nothing else about those objects changes.
google_ads_remove_negative_keywordsWRITERemove up to 100 campaign negative keywords. THIS WIDENS WHAT THE CAMPAIGN MATCHES and therefore increases spend — it is the inverse of google_ads_add_negative_keywords and it is the direction that costs money, which is why it is marked destructive.
google_ads_remove_shared_criteriaWRITERemove exclusions from a shared set. Widens what every attached campaign matches, so it increases spend. The inverse of google_ads_add_shared_criteria.
google_ads_remove_shared_setWRITERemove a shared set, detaching it from every campaign. THOSE CAMPAIGNS IMMEDIATELY START MATCHING THE SEARCHES THE LIST WAS EXCLUDING, which is a spend increase. Check reference_count with google_ads_list_shared_sets first.
google_ads_remove_user_listWRITERemove a remarketing list and its membership. Google publishes no restore — rebuilding it means re-accumulating members over the list's duration, which for a 540-day list is eighteen months.
google_ads_report_account_performanceREADImpressions, clicks, CTR, average CPC, cost, conversions and conversion value for the whole account, broken down by day. Costs are in MICROS of the account currency: divide cost_micros by 1,000,000.
google_ads_report_ad_group_performanceREADPer-ad-group impressions, clicks, cost and conversions by day. Costs are in MICROS.
google_ads_report_ad_performanceREADPer-ad impressions, clicks, cost and conversions by day, alongside each ad's policy approval status — so an ad with zero impressions can be told apart from an ad Google is refusing to serve.
google_ads_report_age_range_performanceREADImpressions, clicks, cost and conversions by age bracket. Only campaigns with demographic targeting produce rows.
google_ads_report_asset_performanceREADImpressions, clicks and conversions per creative asset, with its text and the field type it fills. The read behind 'which headline is working'.
google_ads_report_campaign_performanceREADPer-campaign impressions, clicks, cost, conversions, search impression share and top-of-page rate, broken down by day. The report an ads question usually means. Costs are in MICROS.
google_ads_report_conversion_action_performanceREADConversions and conversion value broken down by WHICH conversion action produced them, per campaign. The read that says whether the conversions a bidding strategy is chasing are the ones the business cares about. It reports NO COST: Google does not attribute spend to a conversion action, so cost cannot be selected alongside this breakdown. Use google_ads_report_campaign_performance for spend.
google_ads_report_device_performanceREADPer-campaign impressions, clicks, cost and conversions split by device — mobile, desktop, tablet, connected TV. The input to a device bid modifier.
google_ads_report_gender_performanceREADImpressions, clicks, cost and conversions by gender bracket. Only campaigns with demographic targeting produce rows.
google_ads_report_geo_performanceREADImpressions, clicks, cost and conversions by country, region and city. The read behind 'where is our money going'. The country arrives as country_criterion_id — the geo target constant id — because geographic_view does not support a country SEGMENT; region and city arrive as names.
google_ads_report_keyword_performanceREADPer-keyword impressions, clicks, cost, conversions and QUALITY SCORE by day. Quality score is the diagnostic for an expensive keyword: a low one raises what every click costs.
google_ads_report_landing_page_performanceREADImpressions, clicks, cost and conversions by landing-page URL. The read that separates 'the ads are bad' from 'the page is bad'.
google_ads_report_search_term_performanceREADWhat people ACTUALLY SEARCHED, with the impressions, clicks, cost and conversions each search produced and how it matched. Sorted by cost, this is the fastest route from 'we are spending too much' to a list for google_ads_add_negative_keywords.
google_ads_report_shopping_performanceREADImpressions, clicks, cost and conversions per PRODUCT for Shopping and Performance Max campaigns. Produces rows only where a Merchant Center account is linked.
google_ads_schedule_experimentWRITEStart an experiment running. FROM THIS POINT THE TREATMENT ARM SPENDS the split of the campaign's budget its traffic_split names. The inverse is google_ads_end_experiment, which returns all traffic to the base campaign.
google_ads_searchREADRun ANY GAQL query against ANY of the resources this API publishes. GAQL CANNOT WRITE — its published grammar has no INSERT, UPDATE, DELETE, DDL or statement separator, only SELECT / FROM / WHERE / ORDER BY / LIMIT / PARAMETERS — but it can read everything, so this is a separate permission from the shaped reports. Shape: SELECT field, field FROM resource WHERE predicate ORDER BY field LIMIT n. Exactly one FROM resource; there are no joins and no subqueries. Use google_ads_search_google_ads_fields to discover selectable fields. Agentic Fabriq imposes a row cap and rewrites an oversized or missing LIMIT rather than refusing the query. There is NO page size: Google fixes this endpoint's page at 10,000 rows and rejects a request that asks for another. Bound the result with LIMIT in the query, and walk pages with page_token.
google_ads_search_google_ads_fieldsREADQuery Google's own metadata about every field the API publishes: which resource it belongs to, its data type, whether it is SELECTABLE, FILTERABLE or SORTABLE, and which other fields can be selected alongside it. THIS IS HOW AN AGENT DISCOVERS WHAT GOOGLE_ADS_SEARCH CAN ASK FOR without guessing — the field set changes four times a year. The query is GAQL-shaped but takes NO FROM CLAUSE: the resource is implicit, and naming it is an error.
google_ads_suggest_geo_target_constantsREADTurn a place name — 'London', 'California', 'Canada' — into the geo target constant resource name every location-targeting write needs. Needs no customer_id: the geo target constants are global.
google_ads_suggest_keyword_themesREADSuggest keyword themes for a Smart campaign from a business description or a landing page. Read-only.
google_ads_update_adWRITEChange a responsive search ad's headlines, descriptions or landing pages. Note the resource here is the AD, not the ad-group-ad: use the `ad_group_ad.ad.id` from google_ads_list_ads to build customers/<cid>/ads/<ad id>. Editing an ad RESETS ITS LEARNING and sends it back through policy review, so it stops serving for a while.
google_ads_update_ad_groupWRITEChange an ad group's name or bids. Does not change status — that is google_ads_enable_ad_group / google_ads_pause_ad_group. Only the fields you supply are changed.
google_ads_update_assetWRITEChange an asset's internal name or its landing-page URLs. An asset's TEXT and IMAGE BYTES are immutable in Google Ads — to change either, create a new asset and re-attach it.
google_ads_update_asset_groupWRITEChange an asset group's name, landing pages, display paths or status. Only the fields you supply are changed.
google_ads_update_audienceWRITEChange an audience's name or description. Only the fields you supply are changed.
google_ads_update_bidding_strategyWRITEChange a shared strategy's target or name. THE BLAST RADIUS IS EVERY CAMPAIGN ATTACHED TO IT, not the one you were thinking about — read campaign_count with google_ads_list_bidding_strategies first.
google_ads_update_campaignWRITEChange a campaign's name, dates, tracking template or bidding targets. Does NOT change status — enabling, pausing and removing are separate operations so an operator can grant editing without granting spending. Only the fields you supply are changed.
google_ads_update_campaign_budgetWRITEChange a budget's daily amount or name. RAISING amount_micros RAISES WHAT THIS ACCOUNT SPENDS, on every campaign sharing the budget, within minutes. Read google_ads_list_campaign_budgets first and keep the previous amount_micros — writing it back is the only undo Google publishes. Only the fields you supply are changed; anything you omit is left exactly as it was.
google_ads_update_conversion_actionWRITEChange a conversion action's name, category, default value, counting rule, attribution window or whether it feeds the biddable `conversions` metric. Turning include_in_conversions_metric OFF silently changes what every automated bidding strategy in the account is optimizing for. Only the fields you supply are changed.
google_ads_update_conversion_custom_variableWRITEChange a custom variable's name or status. Its TAG is immutable.
google_ads_update_customerWRITEChange this account's own settings: its descriptive name, whether auto-tagging (the gclid parameter Google appends to landing-page URLs) is on, its account-wide tracking template and its final-URL suffix. Read google_ads_get_customer first and write the previous value back to undo. Cannot change who has access and cannot spend money. Turning auto_tagging_enabled OFF breaks conversion import for every campaign in the account.
google_ads_update_experimentWRITEChange an experiment's name, description or schedule. Only the fields you supply are changed.
google_ads_update_keywordWRITEChange one keyword's bid or landing page. Does not change status — that is google_ads_enable_keyword / google_ads_pause_keyword. A keyword's TEXT and MATCH TYPE are immutable in Google Ads: to change either, remove it and add a new one.
google_ads_update_user_listWRITEChange a remarketing list's name, description, membership duration or open/closed status. Shortening membership_life_span_days DROPS existing members who joined longer ago than the new value.
google_ads_upload_call_conversionsWRITEReport conversions from phone calls, matched on the caller's number and the time of the call. Feeds automated bidding the same way google_ads_upload_click_conversions does. NOTE this one DOES carry a phone number, which is personal data about the advertiser's own caller; send only numbers the advertiser is entitled to process.
google_ads_upload_click_conversionsWRITEReport conversions that happened outside Google — a CRM sale, a closed deal — back against the click that caused them, identified by the gclid Google appended to the landing-page URL. This feeds automated bidding, so a wrong upload moves spend. Carries no personal identifier: the gclid is an opaque token the advertiser already holds. Set validate_only true first — Google reports every rejected row individually and the reasons are specific.
google_ads_upload_conversion_adjustmentsWRITERestate the value of a conversion already reported, or RETRACT it entirely. This is the inverse of google_ads_upload_click_conversions and it is why that operation is shippable: an over-reported conversion that would otherwise train bidding on a lie can be taken back.
Put Google Ads behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.