---
name: google-ads-create-asset
description: "Use when creating Google Ads assets (sitelinks, callouts, structured snippets, images). Loaded after the create master skill."
---
# Google Ads — Create / Update Asset

Tools: `google_ads_propose_create_asset`, `google_ads_propose_update_asset`, `google_ads_propose_update_pmax_asset_group`. Tool schemas describe shape; this skill covers the business rules.

## What this covers
- **Sitelinks** — link text + final URL, attached at customer / campaign / ad-group scope
- **Structured snippets** — header + values, attached at scope
- **Images** — uploaded image + image_field_type, attached at scope
- **PMax asset group updates** — separate tool for PMax-specific link/status flips

## V1 Capability Surface (non-schema)

- **Sitelink description rule:** if `description1` is set, `description2` is also required (and vice versa). Single-description sitelinks reject.
- **Structured snippet header:** must be one of Google's canonical English headers (Brands, Models, Services, Types, Styles, Featured Hotels, etc.). Custom headers reject.
- **Image content-type:** the propose tool runs an HTTP HEAD on `image_url` before queueing — non-200, non-`image/*`, or unreachable URLs are rejected at validation, not at execute time.
- **Image field-type ↔ scope:** `AD_IMAGE` is only valid at `ad_group` scope. Other `image_field_type` values are valid at customer / campaign / ad_group scope.

## Status Convention (link statuses)

- New asset links default to `ENABLED`.
- Update can flip between `ENABLED` and `PAUSED` via `link_changes[]`. No removal.
- **`AUTOMATICALLY_CREATED` link statuses cannot be flipped** — they're managed by Google's auto-asset system. Propose tool rejects up front; surface that to the user.

## IMAGE Asset Immutability

IMAGE asset content (the binary, the name) cannot be updated post-create. To "replace" an image, create a new image asset and detach (pause) the old one. Do not propose name or content edits on an existing IMAGE asset.

## PMax Asset Group Updates

The PMax tool only applies to campaigns with `advertising_channel_type = PERFORMANCE_MAX`. If the user asks to use it on a Search campaign, reject and route to `prompts/skills/google_ads/create/asset` instead.

Headline / long-headline / description updates on a PMax asset group are full-replacement — provide the complete final list.

## Error Handling

| `error_code` | Common trigger | Fix |
|---|---|---|
| 601 | Snippet header non-canonical, sitelink description1/2 mismatch, AD_IMAGE outside ad_group scope, image URL fails HEAD probe | Read `validation_errors[]` |
| 403 | URL on a denied domain, asset-name dupe under same scope, IMAGE content-edit attempt | Surface |

## Output After Execution

> Done. Attached sitelink "<link_text>" to campaign `<campaign_name>` (asset id `<id>`).
