Skip to Content
Tool referenceCreate Google app campaign

Create Google app campaign (adsap_google_create_app_campaign)

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

What it does

Creates a full Google App campaign in one request: budget, campaign, location and language targeting, an ad group and the app ad. Google assembles the ad from your headlines, descriptions and optional media, and links it to the store listing on its own. The campaign is always created paused and optimizes for installs at your target cost per install. Ask for a preview first.

When to use it

  • Use it to promote a mobile app with a new App campaign. Google builds the ads from your text and optional media.
  • It needs the public store ID of the app. Android uses the package name. iOS uses the numeric App Store ID with app_store set to apple_app_store.
  • target_cpi is required: your target cost per install, as a plain number in the account currency.
  • Images and videos are optional. They are asset IDs from adsap_google_upload_asset. Text alone is valid: 2 to 5 headlines and 1 to 5 descriptions.
  • 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 an App campaign for our Android app com.example.app in account 1234567890. France, French speakers, 60 a day, target 2 per install.”

The assistant calls adsap_google_create_app_campaign

{ "ad_account_id": "1234567890", "campaign": { "name": "Example app installs, France", "daily_budget": 60, "app_id": "com.example.app", "app_store": "google_play", "target_cpi": 2 }, "geo": { "location_ids": ["2250"] }, "language_ids": ["1010"], "ad": { "headlines": ["Plan Your Trail Runs", "Free Route Maps"], "descriptions": ["Find trails near you and track every run."] }, "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_app_campaign", "plan": { "campaign": { "name": "Example app installs, France", "status_at_create": "PAUSED", "daily_budget": 60, "app_id": "com.example.app", "app_store": "GOOGLE_APP_STORE", "bidding_goal": "OPTIMIZE_INSTALLS_TARGET_INSTALL_COST", "target_cpi": 2 }, "geo": { "location_ids": ["2250"], "negative_location_ids": [] }, "language_ids": ["1010"], "ad_group": { "name": "Example app installs, France - ad group", "type": "none (App campaign ad groups take no type)" }, "ad": { "headlines": 2, "descriptions": 1, "images": 0, "youtube_videos": 0, "destination": "app store listing (no URL)" }, "operations_count": 6, "conversion_actions_found": 1 }, "google_validation": "passed", "warnings": [ "Google recommends a daily budget of roughly 50x your target cost-per-install (100.00 for your target of 2) - lower budgets are allowed but can slow learning." ] }

How to read it

plan is what Adsap would send to Google. status_at_create is PAUSED, so nothing spends yet. app_store comes back in Google’s own naming. The ad group name was filled in because the call sent none. destination confirms the ad points at the store listing.

warnings never block the call. Here the budget of 60 is under 50 times the target_cpi of 2, so the tool warns that learning may be slow. 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. 50). NOT micros, NOT cents. Google recommends roughly 50x target_cpi.
campaign.app_idstringYesThe app to promote. Android: the package name (e.g. com.example.app). iOS: the numeric App Store id as a string (e.g. 570060128).
campaign.app_storeone of google_play, apple_app_storeYesWhich store the app_id lives in. Mismatches fail with a clear Google error.
campaign.target_cpinumberYesTarget cost per install in the account currency as a plain number (e.g. 1.50). Drives the campaign’s target-CPA bidding.
campaign.bidding_goalone of installsNov1 supports only ‘installs’ (OPTIMIZE_INSTALLS_TARGET_INSTALL_COST). Other goals are rejected.
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, 1010 = French). Campaign-level; omit to target all languages.
ad_groupobjectNo
ad_group.namestringNoAd group name (defaults to ‘<campaign name> - ad group’). App campaign ad groups take no type and no criteria.
adobjectYes
ad.headlinesarray of stringYes2-5 headlines, max 30 chars each. Google enforces a floor of 2.
ad.descriptionsarray of stringYes1-5 descriptions, max 90 chars each.
ad.image_asset_idsarray of stringNoOptional: up to 20 image ASSET ids from adsap_google_upload_asset (1.91:1, 4:5 or 1:1; JPG/PNG up to 5MB).
ad.video_asset_idsarray of stringNoOptional: up to 20 YouTube video ASSET ids from adsap_google_upload_asset (asset_type youtube_video; videos must be 10-60s).
dry_runbooleanNoPreview only: the request is validated and the resolved payload returned, nothing is created or changed.

Example prompts

  • “Preview an App campaign for com.example.app on Android at 5 dollars per install, targeting the US and Canada.”
  • “Create an iOS App campaign for App Store id 570060128 with these headlines.”
  • “Create the App campaign we just previewed.”

Notes

The tool takes no URL input, ever. Google recommends a daily budget of about 50 times the target cost per install; lower is allowed but slows learning. In-app action, value and pre-registration goals are not supported.

  • 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_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 App 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