> ## Documentation Index
> Fetch the complete documentation index at: https://docs.markifact.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create Campaign

> Creates a new empty Google Ads campaign with specified settings (Search, Display, Performance Max, AI Max, Demand Gen, or Shopping campaigns)

Creates a new empty Google Ads campaign with specified settings (Search, Display, Performance Max, AI Max, Demand Gen, or Shopping campaigns).

| | |
| - | - |
| **App** | Google Ads |
| **Operation ID** | `gads_create_campaign` |
| **Type** | Action |
| **Connection** | `gads` (required) |
| **Credits per run** | 1 |
| **Agent / MCP tool** | Yes |
| **Requires approval** | Yes (write operation) |

## Inputs

| Field | Type | Required | Default | Description |
| - | - | - | - | - |
| `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). |
| `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 campaigns only). 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, business name and logo must be linked as campaign assets. Default: disabled. |
| `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 (\{"country\_code": "US"}). |
| `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. |

### GadsAccountItem

| Field | Type | Required | Default | Description |
| - | - | - | - | - |
| `value` | string | Yes | - | |
| `label` | string | Yes | - | |
| `managerId` | string | Yes | - | The manager ID for the Google Ads account. Ask  user to use the dropdown to select accounts, this manager id is selected background and not shown to the user. |

### SelectableOption

| Field | Type | Required | Default | Description |
| - | - | - | - | - |
| `value` | string | Yes | - | |
| `label` | string | Yes | - | |

## Output

**Type**: `Dict`

Returns created campaign details.

**Fields**: `campaign_id`, `campaign_name`


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.