account | GadsAccountItem or object or array of object or string or integer | Yes | - | Select the Google Ads account, ask user for it if not provided |
campaign_name | string | Yes | - | Name for the campaign |
campaign_type | string or SelectableOption | Yes | - | Campaign type. Available: ‘SEARCH’, ‘DISPLAY’, ‘PERFORMANCE_MAX’, ‘DEMAND_GEN’, ‘SHOPPING’, ‘APP’ |
status | string or SelectableOption | No | {'value': 'PAUSED', 'label': 'Paused'} | Campaign status. Default: PAUSED (recommended) |
daily_budget | number | Yes | - | Daily budget as an actual dollar value in the account currency, NOT in micros (e.g., pass 50 for $50, 12.5 for $12.50). Do not multiply by 1,000,000 — the backend converts to micros automatically. |
locations | array of string or SelectableOption | Yes | - | Target locations for the campaign. Use 2-letter ISO country codes (e.g., ‘US’, ‘CA’, ‘GB’) or Google Ads location IDs (e.g., ‘2840’ for United States). Use the ‘gads_search_geo_targets’ operation to find location IDs for cities, regions, etc. |
languages | array of string or SelectableOption | No | [{'value': 'ALL', 'label': 'All Languages'}] | Target languages for the campaign. Use 2-letter language codes (e.g., ‘EN’ for English, ‘ES’ for Spanish). Select ‘ALL’ or leave empty to target all languages (default). Not available for SEARCH campaigns (Google removed it in September 2026) or SHOPPING campaigns (they use the Merchant Center feed language). |
bidding_strategy_type | string or SelectableOption | No | - | Bidding strategy. Required for every campaign type except APP (derived from app_focus), unless a portfolio bidding_strategy is passed instead. Available: ‘MANUAL_CPC’, ‘MAXIMIZE_CONVERSIONS’, ‘MAXIMIZE_CONVERSION_VALUE’, ‘TARGET_IMPRESSION_SHARE’, ‘TARGET_SPEND’. |
target_cpa | number | No | - | Target CPA in account currency. Used for MAXIMIZE_CONVERSIONS, and required for APP campaigns whose app_focus is not INAPP_VALUE. |
target_roas | number | No | - | Target ROAS (e.g., 3.5 for 350% ROAS). Used for MAXIMIZE_CONVERSION_VALUE, and required for APP campaigns whose app_focus is INAPP_VALUE. |
location | string or SelectableOption | No | - | Target location on page (only for TARGET_IMPRESSION_SHARE) |
location_fraction | number | No | - | Impression share target % (e.g., 65 for 65%, only for TARGET_IMPRESSION_SHARE) |
cpc_bid_ceiling | number | No | - | Max CPC bid as an actual dollar value in the account currency, NOT in micros (e.g., pass 2.5 for $2.50). Do not multiply by 1,000,000 — the backend converts to micros automatically. Used for TARGET_IMPRESSION_SHARE or TARGET_SPEND bidding strategies. |
start_date | integer or string | No | - | Campaign start date (Unix timestamp or YYYY-MM-DD format) |
end_date | integer or string | No | - | Campaign end date (Unix timestamp or YYYY-MM-DD format) |
tracking_url_template | string | No | - | Campaign-level tracking URL template, for example ‘https://track.example.com/?u=\{lpurl}’. Not supported for APP campaigns. |
final_url_suffix | string | No | - | Campaign-level final URL suffix appended to landing pages, for example ‘utm_source=google&utm_campaign={campaignid}’. Not supported for APP campaigns. |
url_custom_parameters | array of object or string | No | - | Custom URL parameters as a JSON list of {“key”, “value”} objects, for example [{“key”: “channel”, “value”: “search”}]. |
campaign_group | string | No | - | Rarely needed; leave unset unless the user asks for it. Campaign group ID or resource name (customers/{cid}/campaignGroups/{id}) to add the campaign to. |
bidding_strategy | string | No | - | Portfolio bidding strategy ID or resource name (customers/{cid}/biddingStrategies/{id}). When set, the campaign uses that shared strategy and bidding_strategy_type is not needed. Not supported for APP campaigns. |
payment_mode | string or SelectableOption | No | - | Rarely needed; leave unset unless the user asks for it. Payment mode: ‘CLICKS’, ‘CONVERSIONS’, ‘CONVERSION_VALUE’, or ‘GUEST_STAY’. Leave unset for the Google default. |
frequency_caps | array of object or string | No | - | Frequency caps as a JSON list of Google Ads FrequencyCapEntry objects, for example [{“key”: {“level”: “CAMPAIGN”, “event_type”: “IMPRESSION”, “time_unit”: “DAY”, “time_length”: 1}, “cap”: 3}]. DISPLAY only. |
excluded_parent_asset_field_types | string or array of string | No | - | Rarely needed; leave unset unless the user asks for it. Account-level asset field types to exclude from this campaign, as AssetFieldType enum names (for example SITELINK, CALLOUT), list or comma-separated. |
excluded_parent_asset_set_types | string or array of string | No | - | Rarely needed; leave unset unless the user asks for it. Account-level asset set types to exclude from this campaign, as AssetSetType enum names, list or comma-separated. |
vanity_pharma | object or string | No | - | Rarely needed; leave unset unless the user asks for it. Vanity pharma display settings as JSON with vanity_pharma_display_url_mode (MANUFACTURER_WEBSITE_URL or WEBSITE_DESCRIPTION) and vanity_pharma_text (VanityPharmaText enum name). |
use_audience_grouped | boolean | No | - | Rarely needed; leave unset unless the user asks for it. Set true so the campaign targets reusable Audience resources instead of individual segments. Immutable after creation and blocks campaign-level segment exclusions. PERFORMANCE_MAX and DEMAND_GEN only. |
geo_target_type | string or SelectableOption | No | - | Geo target type setting. PRESENCE_OR_INTEREST (default): show ads to people in, regularly in, or who’ve shown interest in your targeted locations. PRESENCE: show ads only to people in or regularly in your targeted locations. |
negative_geo_target_type | string or SelectableOption | No | - | Rarely needed; leave unset unless the user asks for it. How excluded locations are matched: ‘PRESENCE’ (Google default) or ‘PRESENCE_OR_INTEREST’. Not used for APP campaigns. |
target_search_network | boolean | No | True | Include Google Search Partners (SEARCH and SHOPPING campaigns). Default: enabled |
target_content_network | boolean | No | False | Enable Display Expansion (SEARCH campaigns only) |
target_partner_search_network | boolean | No | - | Rarely needed; leave unset unless the user asks for it. Serve on the Google Partner Network (SEARCH campaigns only; available to select partner accounts). |
dynamic_search_ads_setting | object or string | No | - | Dynamic Search Ads settings as JSON (SEARCH campaigns only): {“domain_name”: “example.com”, “language_code”: “en”, “use_supplied_urls_only”: false}. |
keyword_match_type | string or SelectableOption | No | - | Rarely needed; leave unset unless the user asks for it. Campaign-level keyword match type (SEARCH campaigns only). The API only supports ‘BROAD’, which applies broad match to every keyword in the campaign; Google rejects it unless the account and bidding strategy are eligible for campaign-level broad match. |
enable_ai_max | boolean | No | False | Enable AI Max for Search (SEARCH campaigns only). Turns on Google’s AI Max optimization suite: search term matching, text customization, and final URL expansion. Default: disabled. Maps to campaign.ai_max_setting.enable_ai_max; to turn AI Max on or off for an existing campaign, use gads_mutate with a campaignOperation update on aiMaxSetting.enableAiMax. |
merchant_id | integer or string | No | - | Merchant Center account ID. Required for SHOPPING; optional for PERFORMANCE_MAX (enables PMAX for retail), DEMAND_GEN (product feed) and APP campaigns. If ID is unknown, fetch via gads_run_gaql_query: SELECT product_link.merchant_center.merchant_center_id FROM product_link WHERE product_link.type = 'MERCHANT_CENTER'. Local Inventory Ads are always on when the Merchant Center has local feeds; there is no campaign flag to disable them. For online-only serving, filter by channel: gads_update_listing_groups (Shopping ad groups) or an asset group listing group filter (Performance Max). |
campaign_priority | integer | No | - | Shopping campaign priority: 0 (low), 1 (medium), or 2 (high). Required for SHOPPING campaigns. Default: 0 |
feed_label | string | No | - | Feed label for products to advertise. Optional for SHOPPING, PERFORMANCE_MAX and DEMAND_GEN campaigns; if omitted, all products are eligible. Requires merchant_id to be set. |
listing_type | string or SelectableOption | No | - | Rarely needed; leave unset unless the user asks for it. Set ‘VEHICLES’ for vehicle ads (SHOPPING and PERFORMANCE_MAX). Immutable after creation. |
use_vehicle_inventory | boolean | No | - | Rarely needed; leave unset unless the user asks for it. Target vehicle listing inventory (SHOPPING and PERFORMANCE_MAX). Immutable after creation. |
advertising_partner_ids | string or array of string | No | - | Rarely needed; leave unset unless the user asks for it. Google Ads account IDs of advertising partners cooperating in a shared Shopping campaign, list or comma-separated. |
ignore_brand_exclusion_in_shopping_ads | boolean | No | - | Rarely needed; leave unset unless the user asks for it. Ignore account-level brand exclusions for Shopping ads in this campaign (SHOPPING only). |
disable_product_feed | boolean | No | - | Disable the optional product feed (DEMAND_GEN only). Leave unset for a standard campaign without a feed; no Merchant Center ID is needed. Ignored when no other shopping settings are supplied. |
brand_guidelines_enabled | boolean | No | - | Enable Brand Guidelines on a PERFORMANCE_MAX campaign. Immutable after creation. When enabled, supply business_name and logo_images, or reuse business_name_asset_id and logo_asset_ids from the same account. The budget, campaign and brand asset links are created together. Default: disabled. |
business_name | string | No | - | Business name text for a PERFORMANCE_MAX campaign with Brand Guidelines enabled. Alternatively supply business_name_asset_id, not both. |
logo_images | string or array of string | No | - | Square logo image URLs for a PERFORMANCE_MAX campaign with Brand Guidelines enabled. Accepts direct URLs, Google Drive share links with sharing set to ‘Anyone with the link’, or files uploaded through Markifact. Use a list or comma-separated URLs. Alternatively reuse logo_asset_ids; both sources may be combined. |
business_name_asset_id | string | No | - | Existing text asset ID or customers/{customer_id}/assets/{asset_id} resource name in this account to link as BUSINESS_NAME. Alternative to business_name; requires Brand Guidelines enabled. |
logo_asset_ids | string or array of string | No | - | Existing square image asset IDs or customers/{customer_id}/assets/{asset_id} resource names in this account to link as LOGO. List or comma-separated values; alternative or addition to logo_images. Requires Brand Guidelines enabled. |
asset_automation_settings | array of object or string | No | - | PERFORMANCE_MAX asset automation as a JSON list of {“asset_automation_type”, “asset_automation_status”} objects, for example [{“asset_automation_type”: “FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION”, “asset_automation_status”: “OPTED_OUT”}] to turn off final URL expansion. For AUTOMATED_VIDEO_CRAWL, add automated_video_crawl_setting with the sources Google may use to find videos: {“automated_video_crawl_infos”: [{“url”: “https://example.com”, “source_platform”: “LANDING_PAGE”, “enabled”: true}]}; source_platform is LANDING_PAGE, SOCIAL or YOUTUBE. |
pmax_campaign_settings | object or string | No | - | Rarely needed; leave unset unless the user asks for it. PERFORMANCE_MAX campaign settings as JSON: brand_targeting_overrides ({“ignore_exclusions_for_shopping_ads”: true}), local_services_enabled, and local_services_pmax_campaign_settings. A Local Services Performance Max campaign needs local_services_enabled true plus country_code and listing_id (the Google Business Profile listing), e.g. {“local_services_enabled”: true, “local_services_pmax_campaign_settings”: {“country_code”: “US”, “listing_id”: 1234567890}}; optional navigational_query_leads_enabled, founding_year and phone_numbers ([{“phone_number”: “+15551234567”, “country_code”: “US”, “phone_number_type”: “DESTINATION_PHONE_NUMBER_FOR_ADS”}]). |
upgraded_targeting | boolean | No | - | Rarely needed; leave unset unless the user asks for it. Enable upgraded targeting on a DEMAND_GEN campaign. Immutable after creation. |
app_focus | string or SelectableOption | No | - | App campaign focus (only for APP campaigns), matching the ‘What do you want to focus on?’ option in the Google Ads UI. Determines the campaign sub-type, optimization goal, and bid strategy. Available: ‘INSTALL_VOLUME’ (Install volume — most installs at a target cost-per-install), ‘INSTALL_INAPP’ (Install volume from users likely to take in-app actions), ‘INAPP_ACTIONS’ (In-app actions — reach new users likely to complete in-app actions), ‘ENGAGEMENT’ (App engagement — re-engage existing users, min. 50K installs), ‘INAPP_VALUE’ (In-app action value — maximize conversion value / ROAS), ‘PRE_REGISTRATION’ (App pre-registration — Android only). |
app_store | string or SelectableOption | No | - | App store for the promoted app (only for APP campaigns). ‘GOOGLE_APP_STORE’ or ‘APPLE_APP_STORE’. |
app_id | string | No | - | App identifier (only for APP campaigns). For Google Play use the package name (e.g., ‘com.example.app’); for the Apple App Store use the numeric store ID (e.g., ‘123456789’). |
conversion_actions | array of string | No | - | Conversion actions to optimize for via selective optimization (APP campaigns only). Accepts conversion action IDs (e.g., ‘987654321’) or full resource names (e.g., ‘customers/123/conversionActions/987654321’). Required for INSTALL_INAPP, INAPP_ACTIONS, ENGAGEMENT, and INAPP_VALUE; optional for INSTALL_VOLUME; must be omitted for PRE_REGISTRATION (added automatically by Google). |
view_through_conversion_optimization_enabled | boolean | No | - | Whether View-through Conversion (VTC) optimization is enabled for this campaign. Only allowed for certain Demand Gen and App campaigns; ignored for other campaign types. |
contains_eu_political_advertising | string or SelectableOption | No | - | EU political ads declaration that Google Ads requires on every new campaign: ‘CONTAINS_EU_POLITICAL_ADVERTISING’ or ‘DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING’. Defaults to DOES_NOT_CONTAIN_EU_POLITICAL_ADVERTISING when omitted. This covers the new campaign only: if Google answers EU_POLITICAL_ADVERTISING_DECLARATION_REQUIRED, existing campaigns in the account still have no declaration (campaign.contains_eu_political_advertising empty in GAQL) and Google blocks every write until they are declared, in the Google Ads UI or with gads_mutate campaign updates on containsEuPoliticalAdvertising. The customerId in Google’s error trigger is its own diagnostic, not the account this operation targeted. |