Tune a GA4-sourced conversion action
update_ga4_conversion_actionUpdate settings on a Google Ads conversion action that Google has already synced from a linked GA4 property's key event (see create_google_ads_link and mark_key_event in the Google Analytics connector - Google imports it automatically once both exist; there is no Ads API call to create or trigger that import). Use this to set primaryForGoal true, which is what actually makes it usable as a MAXIMIZE_CONVERSIONS bidding goal. Find the conversion action id first with run_gaql_report, e.g. "SELECT conversion_action.id, conversion_action.name, conversion_action.google_analytics_4_settings.event_name FROM conversion_action WHERE conversion_action.type IN ('GOOGLE_ANALYTICS_4_CUSTOM','GOOGLE_ANALYTICS_4_PURCHASE','GOOGLE_ANALYTICS_4_GENERATE_LEAD','GOOGLE_ANALYTICS_4_QUALIFY_LEAD','GOOGLE_ANALYTICS_4_CLOSE_CONVERT_LEAD')" (enum fields reject LIKE/wildcards - see run_gaql_report). Note: includeInConversionsMetric is immutable on a GA4-synced action once Google has set it - expect an IMMUTABLE_FIELD error if you try to change it; primaryForGoal and status remain changeable.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Conversion actions have no PAUSED state, unlike campaigns/ad groups/ads. | |
| customerId | No | 10-digit Google Ads customer id. Omit only if this connection has exactly one reachable account - with more than one, omitting it errors and lists the available ids to pick from. | |
| extraFields | No | Escape hatch for a field Google requires that this tool doesn't set yet - use it when a prior call to this same tool failed naming a required field and its valid values (e.g. after adding `contains_eu_political_advertising`, retry with { contains_eu_political_advertising: "DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING" }). Keys are the Ads API's own snake_case field names; nest an object to add a field under one this tool already sets (e.g. a new network_settings sub-field). Only ADDS fields not already set by this tool's own arguments - it can never override `status` or any other field already set here, so it cannot be used to bypass validation or a safety default like a campaign's PAUSED-by-default status. | |
| validateOnly | No | Dry run. When true the Google Ads API validates the change and reports any errors but applies nothing. Use this first whenever you are unsure - it is free and cannot affect spend. | |
| primaryForGoal | No | Whether campaigns scoped to primary goals only will optimize for this conversion. | |
| conversionActionId | Yes | Conversion action id, from a conversion_action GAQL query. | |
| includeInConversionsMetric | No | Whether this counts toward the account's main "Conversions" column and bidding. Often immutable on a GA4-synced action (Google sets it at import time) - expect an IMMUTABLE_FIELD error if so. |