Upload Google Ads assets (adsap_google_upload_asset)
Platform: Google Ads · Read or write: Write · Plan: Early Access · Consumes a task: No · Preview supported: Yes
What it does
Creates Google Ads assets from images in your Adsap creative library, text, or YouTube videos, up to 20 per request. Image assets come back with their size and the slots they can fill, such as landscape, square, portrait or logo. The returned asset IDs feed the Performance Max, Demand Gen, Display and App create tools. A preview validates the batch without creating anything.
When to use it
- Use it before the Performance Max, Demand Gen, Display or App create tools. Those tools take image asset IDs, and this tool creates them.
- Images are read from your Adsap creative library by
storage_bucketandstorage_path. The path must sit under your own user prefix, or the call is rejected. - Set
field_type_hintwhen you know the slot. If the image does not fit that slot, the call fails with the exact reason. - Images must be GIF, JPG or PNG files of 5120 KB at most. Text assets are capped at 90 characters.
- It supports a preview call. With
dry_runset totrue, the batch is checked and nothing is created. This tool uses no tasks.
Worked example
You ask
“Check my two summer images for Google Ads account 1234567890 before I build a Performance Max campaign. Do not create anything yet.”
The assistant calls adsap_google_upload_asset
{
"ad_account_id": "1234567890",
"assets": [
{
"type": "image",
"storage_bucket": "temp-uploads",
"storage_path": "00000000-0000-4000-8000-000000000000/summer-landscape.jpg",
"field_type_hint": "MARKETING_IMAGE"
},
{
"type": "image",
"storage_bucket": "temp-uploads",
"storage_path": "00000000-0000-4000-8000-000000000000/summer-square.png"
}
],
"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": "upload_asset",
"assets": [
{
"index": 0,
"type": "image",
"name": "summer-landscape.jpg - 1789689600000-0",
"source": "temp-uploads/00000000-0000-4000-8000-000000000000/summer-landscape.jpg",
"width": 1200,
"height": 628,
"mime": "image/jpeg",
"file_kb": 412,
"eligible_field_types": ["MARKETING_IMAGE"]
},
{
"index": 1,
"type": "image",
"name": "summer-square.png - 1789689600000-1",
"source": "temp-uploads/00000000-0000-4000-8000-000000000000/summer-square.png",
"width": 1200,
"height": 1200,
"mime": "image/png",
"file_kb": 655,
"eligible_field_types": ["SQUARE_MARKETING_IMAGE", "LOGO"]
}
],
"google_validation": "passed",
"warnings": []
}How to read it
Each entry in assets matches one input, by index. width and height are read from the file itself. eligible_field_types lists the slots the image can fill. MARKETING_IMAGE is landscape and SQUARE_MARKETING_IMAGE is square. A square image of 128 pixels or more also fits LOGO. An empty list means the image fits no slot, and warnings says so. name was filled in from the file name, because the call sent none.
google_validation is passed when Google accepts the batch. Otherwise it holds Google’s error message. To create the assets, the assistant repeats the call without dry_run. Each entry then also carries an asset_id. Pass those IDs to a create tool such as adsap_google_create_pmax_campaign.
Parameters
Descriptions are shortened from the tool schema. Your assistant sees the full text.
| Name | Type | Required | Description |
|---|---|---|---|
ad_account_id | string | Yes | Bare 10-digit Google Ads customer ID (from adsap_google_list_ad_accounts). No dashes, no act_ prefix. |
assets | array of object | Yes | Up to 20 assets per request, all-or-nothing. |
dry_run | boolean | No | Preview only: the request is validated and the resolved payload returned, nothing is created or changed. |
Example prompts
- “Upload the five product images from my creative library to Google Ads as assets.”
- “Create Google Ads assets from these three YouTube videos.”
- “Preview uploading my logo and banner images as Google assets.”
Notes
The batch is all-or-nothing: if one asset fails, none are created.
Related tools
adsap_google_list_creative_assets: List the creative assets already in a Google Ads account’s library: IMAGE (with dimensions + which PMax/Demand Gen image slots each fits)…adsap_google_upload_video: Upload a video FILE (MP4 in the Adsap creative library) to YouTube for use in Google Ads video slots, and get back a YouTube video asset.
Guide
Read Google Ads 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.