Skip to Content
Tool referenceCreate Google Ads search campaign

Create Google Ads search campaign (adsap_google_create_search_campaign)

Platform: Google Ads · Read or write: Write · Plan: All plans · Consumes a task: Yes · Preview supported: Yes

What it does

Creates a full Google Search campaign in one request: budget, campaign, location and language targeting, an ad group, keywords and a responsive search ad. The campaign is always created paused, so nothing spends until you activate it. Ask for a preview first: Google validates the whole plan without creating anything.

When to use it

  • Use it to launch a new Search campaign from nothing. One request builds the budget, campaign, targeting, ad group, keywords and responsive search ad.
  • It needs location IDs first. Get them from adsap_google_search_geo_targets. For keyword research, use adsap_google_keyword_ideas.
  • It supports a preview call. With dry_run set to true, Google validates the full plan and nothing is created. A preview uses no task.
  • It always builds a new campaign. To add an ad group to a campaign that exists, use adsap_google_create_ad_group.
  • The schema sets the limits: 1 to 100 keywords and 3 to 15 headlines of up to 30 characters. Descriptions run from 2 to 4, up to 90 characters each.

Worked example

You ask

“Preview a Search campaign for my trail shoes in Google Ads account 1234567890. Budget 50 a day, France only, with these three keywords.”

The assistant calls adsap_google_create_search_campaign

{ "ad_account_id": "1234567890", "campaign": { "name": "Trail shoes, France", "daily_budget": 50 }, "geo": { "location_ids": ["2250"] }, "ad_group": { "name": "Trail running shoes", "keywords": [ { "text": "trail running shoes", "match_type": "PHRASE" }, { "text": "buy trail shoes", "match_type": "EXACT" }, { "text": "waterproof trail shoes", "match_type": "PHRASE" } ] }, "rsa": { "headlines": [ { "text": "Trail Running Shoes" }, { "text": "Free Delivery in France" }, { "text": "Shop the Summer Collection" } ], "descriptions": [ { "text": "Lightweight trail shoes built for grip on wet and rocky ground." }, { "text": "Order today with free returns for 30 days." } ], "final_url": "https://www.example.com/trail-shoes" }, "dry_run": true }

Adsap returns

The field names are the ones Adsap returns. The values are examples.

{ "ok": true, "dry_run": true, "platform": "google", "action": "create_search_campaign", "plan": { "campaign": { "name": "Trail shoes, France", "status_at_create": "PAUSED", "daily_budget": 50, "bidding_strategy": "maximize_conversions", "search_partners": false, "display_network": false }, "geo": { "location_ids": ["2250"], "negative_location_ids": [] }, "language_ids": [], "ad_group": { "name": "Trail running shoes", "keywords": 3, "negative_keywords": 0 }, "rsa": { "headlines": 3, "descriptions": 2, "final_url": "https://www.example.com/trail-shoes", "path1": null, "path2": null }, "operations_count": 8, "conversion_actions_found": 2 }, "bidding_strategy": "maximize_conversions", "google_validation": "passed", "warnings": [ "Found 2 enabled conversion action(s) - defaulting to Maximize Conversions." ] }

How to read it

plan is what Adsap would send to Google. status_at_create is PAUSED, so the campaign spends nothing until you switch it on. bidding_strategy shows what auto resolved to. Here conversion_actions_found is 2, so the tool picked maximize_conversions, and warnings says why. The response also carries a one-sentence human_readable_summary.

google_validation is passed when Google accepts the whole plan. Otherwise it holds Google’s error message: fix the input and preview again. To create the campaign, the assistant repeats the call without dry_run. That response adds campaign_id, ad_group_id and ad_id. To switch the campaign on later, use adsap_google_set_entity_status.

Parameters

Descriptions are shortened from the tool schema. Your assistant sees the full text.

NameTypeRequiredDescription
ad_account_idstringYesBare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix.
campaignobjectYes
campaign.namestringYes
campaign.daily_budgetnumberYesDaily budget in the ACCOUNT CURRENCY as a plain number (e.g. 12.50): NOT micros, NOT cents.
campaign.bidding_strategyone of auto, maximize_conversions, target_spendNo’auto’ (default) picks by preflight: maximize_conversions when conversion actions exist, else target_spend (Maximize Clicks). Set explicitly to override.
campaign.search_partnersbooleanNoAlso serve on Google search partner sites.
campaign.display_networkbooleanNoAlso serve on the Google Display Network.
campaign.asset_automationobjectNoOptional per-type opt-in/out of Google’s asset automations at create (e.g. {TEXT_ASSET_AUTOMATION: ‘OPTED_OUT’} stops Google generating extra RSA text). Search accepts ONLY these two types (GENERATE_IMAGE_ENHANCEMENT is rejected by Google on Search: probe-verified). Absent = Google defaults.
geoobjectYes
geo.location_idsarray of stringYesGeo target constant ids to TARGET (from adsap_google_search_geo_targets).
geo.negative_location_idsarray of stringNoGeo target constant ids to EXCLUDE.
language_idsarray of stringNoLanguage constant ids. No default. Google removes language targeting from Search campaigns in late September 2026 (ads then match on the language of the ad itself).
ad_groupobjectYes
ad_group.namestringYes
ad_group.keywordsarray of objectYesSearch keywords with match types.
ad_group.negative_keywordsarrayNo
rsaobjectYes
rsa.headlinesarray of objectYes3-15 unique headlines, each <=30 characters.
rsa.descriptionsarray of objectYes2-4 unique descriptions, each <=90 characters.
rsa.final_urlstringYes
rsa.path1stringNoDisplay-URL path segment (<=15 chars).
rsa.path2stringNoSecond path segment (<=15 chars, requires path1).
dry_runbooleanNoPreview only: the request is validated and the resolved payload returned, nothing is created or changed.

Example prompts

  • “Preview a Google Search campaign for my trail shoes at 50 dollars a day, targeting France, with these 10 keywords.”
  • “Create the Search campaign we just previewed.”
  • “Build a Search campaign for ‘emergency plumber Boston’ with a responsive search ad and Maximize Clicks bidding.”

Notes

With bidding set to auto, the tool picks Maximize Conversions when the account has conversion actions, otherwise Maximize Clicks with a warning. Google removes language targeting from Search campaigns in late September 2026.

  • adsap_google_create_app_campaign: Create a complete Google App campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED: activate later with…
  • adsap_google_create_demand_gen_campaign: Create a complete Google Ads Demand Gen campaign (YouTube, Discover, Gmail, Maps and the Google Display Network) in ONE atomic request…
  • adsap_google_create_display_campaign: Create a classic standalone Google Display campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED: activate later with…
  • adsap_google_create_pmax_campaign: Create a complete Google Ads Performance Max campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED: activate later with…
  • adsap_google_create_shopping_campaign: Create a complete standard Google Shopping campaign in ONE atomic request: budget, campaign (ALWAYS created PAUSED: activate later with…
  • adsap_google_list_campaigns: List Google Ads campaigns in a Google Ads account (cache-first; auto-refreshes from Google when the cache is missing or older than 1 hour).

Guide

Read Google Search campaigns for the workflow around this tool, and the Tool reference for every tool.

The Google Ads MCP server  page shows how to connect Google Ads to Claude, ChatGPT or Perplexity.

Last updated on