Skip to Content
Tool referenceCreate Google display campaign

Create Google display campaign (adsap_google_create_display_campaign)

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

What it does

Creates a classic standalone Display campaign in one request: budget, campaign, location and language targeting, a Display ad group and a responsive display ad. Image and video inputs are asset IDs from an earlier upload. The campaign is always created paused. Ask for a preview first.

When to use it

  • Use it when you want a classic standalone Display campaign with your own bid control, such as manual_cpc or target_cpa.
  • For a new build, consider adsap_google_create_demand_gen_campaign with the display channel selected instead.
  • Upload the images first with adsap_google_upload_asset. Landscape and square images together are capped at 15, and logos at 5.
  • Bid fields must match the strategy. cpc_bid goes with manual_cpc, target_cpa with target_cpa, and target_roas with target_roas. Any other pairing is rejected.
  • It supports a preview call. With dry_run set to true, Google validates the plan, nothing is created, and no task is used.

Worked example

You ask

“Preview a Display campaign in account 1234567890 for the spring sale. 25 a day, France, French speakers, target CPA of 15, using my uploaded banner images.”

The assistant calls adsap_google_create_display_campaign

{ "ad_account_id": "1234567890", "campaign": { "name": "Spring sale, Display", "daily_budget": 25, "bidding_strategy": "target_cpa", "target_cpa": 15 }, "geo": { "location_ids": ["2250"] }, "language_ids": ["1010"], "ad": { "final_url": "https://www.example.com/spring-sale", "business_name": "Example Store", "long_headline": "The spring sale is on: new styles at lower prices this week", "headlines": ["Spring Sale Is On", "New Styles, Lower Prices"], "descriptions": ["Shop the spring sale this week. Free returns for 30 days."], "landscape_image_asset_ids": ["30000000002"], "square_image_asset_ids": ["30000000003"] }, "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_display_campaign", "plan": { "campaign": { "name": "Spring sale, Display", "status_at_create": "PAUSED", "daily_budget": 25, "bidding_strategy": "target_cpa", "cpc_bid": null, "target_cpa": 15, "target_roas": null }, "geo": { "location_ids": ["2250"], "negative_location_ids": [] }, "language_ids": ["1010"], "ad_group": { "name": "Spring sale, Display - ad group", "type": "DISPLAY_STANDARD", "optimized_targeting": true }, "ad": { "final_url": "https://www.example.com/spring-sale", "business_name": "Example Store", "headlines": 2, "long_headline": 1, "descriptions": 1, "landscape_images": 1, "square_images": 1, "square_logos": 0, "landscape_logos": 0, "youtube_videos": 0, "call_to_action_text": null }, "operations_count": 6, "conversion_actions_found": 3 }, "bidding_strategy": "target_cpa", "google_validation": "passed", "warnings": [ "Heads-up: Google is migrating standalone Display campaigns INTO Demand Gen (no cutoff date published as of 2026-07-21). This campaign will eventually be auto-migrated; new builds may prefer a Demand Gen campaign with the Display channel enabled." ] }

How to read it

plan is what Adsap would send to Google. status_at_create is PAUSED, so nothing spends yet. The ad group name and optimized_targeting were filled in with their defaults. The counts under ad confirm which text and image assets made it into the responsive display ad.

warnings never block the call. The note about the move to Demand Gen comes back on every response from this tool. google_validation is passed when Google accepts the plan. Otherwise it holds Google’s error message. To create the campaign, the assistant repeats the call without dry_run and gets a campaign_id and an ad_group_id back.

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. 10). NOT micros, NOT cents.
campaign.bidding_strategyone of auto, maximize_clicks, manual_cpc, maximize_conversions, target_cpa, target_roasNo’auto’ (default) = Maximize Clicks. ‘target_cpa’ is the STANDALONE scheme (Display rejects a target CPA inside maximize_conversions). ‘target_roas’ has a conversion-history eligibility gate.
campaign.cpc_bidnumberNoMax CPC bid in the account currency. REQUIRED with manual_cpc; invalid otherwise.
campaign.target_cpanumberNoTarget cost per action in the account currency. REQUIRED with bidding_strategy target_cpa; invalid otherwise.
campaign.target_roasnumberNoTarget return on ad spend as a multiplier (3.5 = 350%). REQUIRED with bidding_strategy target_roas.
geoobjectYes
geo.location_idsarray of stringYesGeo target constant ids to TARGET (from adsap_google_search_geo_targets). Campaign-level, like Search.
geo.negative_location_idsarray of stringNoGeo target constant ids to EXCLUDE.
language_idsarray of stringNoLanguage constant ids (e.g. 1000 = English). Campaign-level; omit to target all languages.
ad_groupobjectNo
ad_group.namestringNoAd group name (defaults to ‘<campaign name> - ad group’).
ad_group.optimized_targetingbooleanNoOptimized targeting (default true): Google reaches beyond your criteria; the geo/language criteria stay the hard limits.
adobjectYes
ad.final_urlstringYesLanding page URL (on the ad, required).
ad.business_namestringYes
ad.long_headlinestringYesEXACTLY ONE long headline, max 90 chars (Display-specific slot).
ad.headlinesarray of stringYes
ad.descriptionsarray of stringYes
ad.landscape_image_asset_idsarray of stringYesAt least one landscape (1.91:1, min 600x314) image ASSET id from adsap_google_upload_asset. Landscape + square combined max 15.
ad.square_image_asset_idsarray of stringYesAt least one square (1:1, min 300x300) image ASSET id. Landscape + square combined max 15.
ad.logo_asset_idsarray of stringNoOptional square logos (1:1, min 128x128). Square + landscape logos combined max 5.
ad.landscape_logo_asset_idsarray of stringNoOptional landscape logos (4:1, min 512x128): a Display-only slot with no Demand Gen equivalent.
ad.youtube_video_asset_idsarray of stringNoOptional: up to 5 YouTube video ASSET ids from adsap_google_upload_asset.
ad.call_to_action_textstringNo
ad.control_specobjectNoOptional responsive-display-ad automation controls: enable_asset_enhancements (Google may enhance images/layouts) and enable_autogen_video (Google may generate video versions). Absent = Google’s enabled-by-default behavior.
dry_runbooleanNoPreview only: the request is validated and the resolved payload returned, nothing is created or changed.

Example prompts

  • “Preview a Display campaign at 25 dollars a day targeting Spain with these landscape and square images.”
  • “Create a Display campaign with target CPA at 15 dollars using the assets I uploaded.”
  • “Create the Display campaign we just previewed.”

Notes

Google is moving standalone Display into Demand Gen, and every response carries that heads-up. For new builds, consider a Demand Gen campaign with the display channel selected. The ad needs at least one landscape and one square image, exactly one long headline, and a business name.

  • 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_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_search_campaign: Create a complete Google Ads Search 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 Display 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