{"id":"d062b326-eb25-40bc-852a-9fa615e866e2","shortId":"VnqTpt","kind":"skill","title":"google-ads-write","tagline":"Safe Google Ads write operations using the Confirm-Execute-Postcheck (CEP) protocol. Activate when the user wants to pause campaigns, change bids, update budgets, add keywords, create ads, or make any modification to their Google Ads account. Every mutation requires explicit user","description":"# Google Ads Write Operations\n\nYou manage write operations to Google Ads accounts. Every mutation follows the **CEP protocol** — no exceptions.\n\n## CEP Protocol (Confirm → Execute → Post-check)\n\n### Step 1: Confirm\n\nBefore any write operation, present exactly what will change:\n\n```\n## Proposed Change\n\n**Action**: [what will happen]\n**Account**: [customer ID]\n**Target**: [campaign/ad group/keyword name and ID]\n**Before**: [current state]\n**After**: [new state]\n**Risk Level**: [Low/Medium/High]\n\nType CONFIRM to proceed.\n```\n\n### Step 2: Execute\n\nOnly after the user explicitly confirms (says \"confirm\", \"yes\", \"go ahead\", \"do it\", \"approved\"):\n- Execute the mutation via the Google Ads API\n- Log the operation with timestamp, action, parameters, and pre-state snapshot\n\n### Step 3: Post-check\n\nAfter execution:\n- Verify the change took effect by querying the updated entity\n- Report the result with before/after comparison\n- Note any follow-up actions needed\n\n## Supported Write Operations\n\n### Campaign Status\n\n```\nAction: update_campaign_status\nParams: campaign_id, status (ENABLED | PAUSED)\nRisk: Medium — affects all ads in the campaign\n```\n\n### Budget Update\n\n```\nAction: update_budget\nParams: budget_id, amount_micros (new daily budget in micros)\nRisk: Medium — affects daily spend rate\nAlways show: current budget, new budget, monthly estimate (daily × 30.4)\n```\n\n### Keyword Bid\n\n```\nAction: update_ad_group_bid / update_keyword_bid\nParams: ad_group_id or criterion_id, cpc_bid_micros\nRisk: Low-Medium — affects auction position\nAlways show: current bid, new bid, estimated position impact\n```\n\n### Negative Keywords\n\n```\nAction: create_negative_keyword\nParams: campaign_id, keyword text, match_type (BROAD | PHRASE | EXACT)\nRisk: Low — blocks unwanted traffic\nBatch: up to 50 keywords per call\nAlways show: list of keywords being added, match type, affected campaign\n```\n\n### Create RSA (Responsive Search Ad)\n\n```\nAction: create_ad\nParams: ad_group_id, headlines (3-15, max 30 chars each),\n        descriptions (2-4, max 90 chars each), final_url\nRisk: Low — new ads are created PAUSED for review\nValidation: check character limits before submitting\nAlways show: headline/description preview with character counts\n```\n\n### Create Campaign\n\n```\nAction: create_campaign\nParams: name, channel_type, daily_budget, bidding_strategy, network_settings\nRisk: High — creates new spend capacity\nAlways create PAUSED so user can review before enabling\n```\n\n### Apply Recommendation\n\n```\nAction: apply_recommendation (from Google's optimization suggestions)\nRisk: Varies — always show what the recommendation will change\n```\n\n## Safety Rules\n\n1. **Never skip confirmation** — even if the user says \"just do it all\"\n2. **Never combine destructive operations** — pause and delete are separate confirmations\n3. **Always show before/after** — the user must see what will change\n4. **Create ads PAUSED** — never create an ad in ENABLED state\n5. **Batch limit** — max 50 operations per batch, with itemized preview\n6. **No raw GAQL mutations** — use structured mutation operations only\n7. **Log everything** — every write operation is recorded for audit trail\n\n## Rollback Awareness\n\nAfter any write operation, note:\n- What was changed\n- What the previous state was\n- How to reverse it (e.g., \"To undo: pause campaign X again\" or \"To undo: set bid back to $2.50\")","tags":["google","ads","write","skills","itallstartedwithaidea","advertising-automation","agent-skills","anthropic","claude","claude-code","google-ads","mcp"],"capabilities":["skill","source-itallstartedwithaidea","skill-google-ads-write","topic-advertising-automation","topic-agent-skills","topic-anthropic","topic-claude","topic-claude-code","topic-google-ads","topic-mcp","topic-paid-search","topic-ppc","topic-python"],"categories":["google-ads-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/itallstartedwithaidea/google-ads-skills/google-ads-write","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add itallstartedwithaidea/google-ads-skills","source_repo":"https://github.com/itallstartedwithaidea/google-ads-skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 9 github stars · SKILL.md body (3,359 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:08:31.988Z","embedding":null,"createdAt":"2026-05-18T13:14:07.135Z","updatedAt":"2026-05-18T19:08:31.988Z","lastSeenAt":"2026-05-18T19:08:31.988Z","tsv":"'-15':325 '-4':332 '1':76,412 '2':116,331,425 '2.50':523 '3':153,324,436 '30':327 '30.4':235 '4':447 '5':458 '50':296,462 '6':469 '7':479 '90':334 'account':42,59,93 'action':89,145,180,187,207,238,274,316,363,393 'activ':18 'ad':3,7,33,41,49,58,138,201,240,247,306,315,318,320,342,449,454 'add':30 'affect':199,222,260,309 'ahead':128 'alway':226,263,300,354,382,403,437 'amount':213 'api':139 'appli':391,394 'approv':131 'auction':261 'audit':488 'awar':491 'back':521 'batch':293,459,465 'before/after':173,439 'bid':27,237,242,245,254,266,268,372,520 'block':290 'broad':285 'budget':29,205,209,211,217,229,231,371 'call':299 'campaign':25,185,189,192,204,279,310,362,365,513 'campaign/ad':97 'capac':381 'cep':16,64,68 'chang':26,86,88,161,409,446,499 'channel':368 'char':328,335 'charact':350,359 'check':74,156,349 'combin':427 'comparison':174 'confirm':13,70,77,112,123,125,415,435 'confirm-execute-postcheck':12 'count':360 'cpc':253 'creat':32,275,311,317,344,361,364,378,383,448,452 'criterion':251 'current':103,228,265 'custom':94 'daili':216,223,234,370 'delet':432 'descript':330 'destruct':428 'e.g':509 'effect':163 'enabl':195,390,456 'entiti':168 'estim':233,269 'even':416 'everi':43,60,482 'everyth':481 'exact':83,287 'except':67 'execut':14,71,117,132,158 'explicit':46,122 'final':337 'follow':62,178 'follow-up':177 'gaql':472 'go':127 'googl':2,6,40,48,57,137,397 'google-ads-writ':1 'group':241,248,321 'group/keyword':98 'happen':92 'headlin':323 'headline/description':356 'high':377 'id':95,101,193,212,249,252,280,322 'impact':271 'item':467 'keyword':31,236,244,273,277,281,297,304 'level':109 'limit':351,460 'list':302 'log':140,480 'low':258,289,340 'low-medium':257 'low/medium/high':110 'make':35 'manag':53 'match':283,307 'max':326,333,461 'medium':198,221,259 'micro':214,219,255 'modif':37 'month':232 'must':442 'mutat':44,61,134,473,476 'name':99,367 'need':181 'negat':272,276 'network':374 'never':413,426,451 'new':106,215,230,267,341,379 'note':175,496 'oper':9,51,55,81,142,184,429,463,477,484,495 'optim':399 'param':191,210,246,278,319,366 'paramet':146 'paus':24,196,345,384,430,450,512 'per':298,464 'phrase':286 'posit':262,270 'post':73,155 'post-check':72,154 'postcheck':15 'pre':149 'pre-stat':148 'present':82 'preview':357,468 'previous':502 'proceed':114 'propos':87 'protocol':17,65,69 'queri':165 'rate':225 'raw':471 'recommend':392,395,407 'record':486 'report':169 'requir':45 'respons':313 'result':171 'revers':507 'review':347,388 'risk':108,197,220,256,288,339,376,401 'rollback':490 'rsa':312 'rule':411 'safe':5 'safeti':410 'say':124,420 'search':314 'see':443 'separ':434 'set':375,519 'show':227,264,301,355,404,438 'skill' 'skill-google-ads-write' 'skip':414 'snapshot':151 'source-itallstartedwithaidea' 'spend':224,380 'state':104,107,150,457,503 'status':186,190,194 'step':75,115,152 'strategi':373 'structur':475 'submit':353 'suggest':400 'support':182 'target':96 'text':282 'timestamp':144 'took':162 'topic-advertising-automation' 'topic-agent-skills' 'topic-anthropic' 'topic-claude' 'topic-claude-code' 'topic-google-ads' 'topic-mcp' 'topic-paid-search' 'topic-ppc' 'topic-python' 'traffic':292 'trail':489 'type':111,284,308,369 'undo':511,518 'unwant':291 'updat':28,167,188,206,208,239,243 'url':338 'use':10,474 'user':21,47,121,386,419,441 'valid':348 'vari':402 'verifi':159 'via':135 'want':22 'write':4,8,50,54,80,183,483,494 'x':514 'yes':126","prices":[{"id":"7262d986-5ff0-4836-922c-818982ab110a","listingId":"d062b326-eb25-40bc-852a-9fa615e866e2","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"itallstartedwithaidea","category":"google-ads-skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:14:07.135Z"}],"sources":[{"listingId":"d062b326-eb25-40bc-852a-9fa615e866e2","source":"github","sourceId":"itallstartedwithaidea/google-ads-skills/google-ads-write","sourceUrl":"https://github.com/itallstartedwithaidea/google-ads-skills/tree/main/skills/google-ads-write","isPrimary":false,"firstSeenAt":"2026-05-18T13:14:07.135Z","lastSeenAt":"2026-05-18T19:08:31.988Z"}],"details":{"listingId":"d062b326-eb25-40bc-852a-9fa615e866e2","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"itallstartedwithaidea","slug":"google-ads-write","github":{"repo":"itallstartedwithaidea/google-ads-skills","stars":9,"topics":["advertising-automation","agent-skills","anthropic","claude","claude-code","google-ads","mcp","paid-search","ppc","python"],"license":"apache-2.0","html_url":"https://github.com/itallstartedwithaidea/google-ads-skills","pushed_at":"2026-04-12T16:14:29Z","description":"Google Ads Agent Skills for Claude — campaign analysis, account auditing, safe write ops, PPC math, and MCP server integration","skill_md_sha":"98c96cfae2b3a2a661c01c0482751b66eac63915","skill_md_path":"skills/google-ads-write/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/itallstartedwithaidea/google-ads-skills/tree/main/skills/google-ads-write"},"layout":"multi","source":"github","category":"google-ads-skills","frontmatter":{"name":"google-ads-write","description":"Safe Google Ads write operations using the Confirm-Execute-Postcheck (CEP) protocol. Activate when the user wants to pause campaigns, change bids, update budgets, add keywords, create ads, or make any modification to their Google Ads account. Every mutation requires explicit user confirmation before execution."},"skills_sh_url":"https://skills.sh/itallstartedwithaidea/google-ads-skills/google-ads-write"},"updatedAt":"2026-05-18T19:08:31.988Z"}}