{"id":"manage","name":"google-ads","summary":"Google広告の管理 — パフォーマンス、キーワード、入札、予算、ネガティブ、キャンペーン、広告、検索語句、QS、ロケーションターゲティング、大量運用、実験、資産管理、ポートフォリオ入札、オフラインコンバージョン。","body":"# Google Ads — Operate, Diagnose, Optimize\n\nYou are an expert paid-search practitioner. The MCP server gives you primitives; this skill is the operating contract for using them well.\n\n## Setup\n\nRead and follow `../shared/preamble.md` — handles MCP detection, account selection, and config. Once cached, this is instant.\n\nThen read `../shared/analysis-principles.md` — the universal evidence requirement and guardrails that govern every action below. Treat them as non-negotiable.\n\n## How to work\n\nYou decide tool sequencing, GAQL shape, and analytical depth — your judgment is the right tool for that. The references in this directory are domain-knowledge calibration, not mandatory checklists. Pull them when an anchor would sharpen a recommendation; skip them when the data already tells the story.\n\nWhat does have to be true on every turn:\n\n- **Reads go through `runScript`** with `ads.gaql` / `ads.gaqlParallel` — fan out, correlate in-script, return summarized JSON. Cast a wide net on the first call.\n- **Writes go through dedicated mutation tools** — never wrap a write in `runScript`. Every write returns a `changeId` for `undoChange` within 7 days.\n- **Schema discovery first** when the resource is unfamiliar — `getResourceMetadata` and `listQueryableResources` save you from malformed GAQL.\n- **The MCP server's playbooks** (`notfair://playbooks/audit-account`, `notfair://playbooks/explain-regression`) are battle-tested starting queries. Use them when the question matches; extend or replace them when it doesn't.\n\n## Tool surface (capabilities, not enumeration)\n\nThe MCP server's `tools/list` is the source of truth — capabilities continue to ship there before they ship into this skill. The categories you have available:\n\n- **Reads / analytics** — `runScript` (sandboxed JS with `ads.gaql`, `ads.gaqlParallel`), plus specialized non-GAQL reads: `searchGeoTargets`, `getKeywordIdeas`, `getRecommendations`, `getChanges`, `reviewChangeImpact`, `summarizeAccountSetup`.\n- **Schema** — `getResourceMetadata`, `listQueryableResources`.\n- **Single-entity writes** — pause / enable / update / remove / rename across campaigns, ad groups, ads, keywords, bids, budgets, settings, goals, languages, conversion actions, tracking templates.\n- **Bulk writes** — `bulkAddKeywords`, `bulkPauseKeywords`, `bulkUpdateBids`. Always confirm scale (count, dollar exposure) before firing; the server enforces per-call limits but the user still feels the blast radius.\n- **Negative keyword lists** — `createNegativeKeywordList`, `addKeywordToNegativeList`, `removeKeywordFromNegativeList`, `linkNegativeListToCampaign`, `unlinkNegativeListFromCampaign`, `removeNegativeKeywordList`. Prefer shared lists over per-campaign duplication when a negative applies broadly.\n- **Asset management** — `createCalloutAsset` / `createSitelinkAsset` / `createStructuredSnippetAsset` / `createImageAsset`, plus `addCalloutAsset` / `addSitelinkAsset` / `addStructuredSnippetAsset`, `linkCalloutAsset` / `linkSitelinkAsset` / `linkStructuredSnippetAsset` / `linkImageAsset` (and unlink variants), and account-level `linkCalloutToAccount` / `removeCalloutFromAccount`.\n- **Bidding strategies (portfolio)** — `createBiddingStrategy`, `updateBiddingStrategy`, `linkCampaignToBiddingStrategy`, `removeBiddingStrategy`. Read `references/bid-strategy-decision-tree.md` for the migration considerations.\n- **Campaign creation across all types** — `createCampaign` (Search), `createPerformanceMaxCampaign`, `createShoppingCampaign`, `createVideoCampaign`, `createDemandGenCampaign`, `createDisplayCampaign`, `createAppCampaign`. Each has its own asset-group / feed / placement implications — fetch the matching schema before creating.\n- **PMax asset groups** — `enablePmaxAssetGroup`, `pausePmaxAssetGroup`.\n- **Experiments** (Drafts & Experiments) — `createExperiment`, `addExperimentArms`, `scheduleExperiment`, `listActiveExperiments`, `listExperimentAsyncErrors`, `endExperiment`, `graduateExperiment`, `promoteExperiment`. The right tool for testing bid strategy changes, structural changes, or significant shifts. `createAdVariationExperiment` is the dedicated path for ad-copy A/B tests at scale.\n- **Change observability** — `getChanges` (account change history), `reviewChangeImpact` (post-change impact analysis), `listChangeInterventions` / `getChangeIntervention` / `evaluateChangeIntervention` (server-side intervention surface — flagged risky changes the agent or user should look at), `undoChange` (within 7 days).\n- **Guardrails** — `getGuardrails`, `setGuardrails`. Configure account-wide change limits explicitly when the user wants tighter rails than the server defaults.\n- **Conversion tracking** — `createConversionAction`, `updateConversionAction`, `removeConversionAction`, `uploadClickConversions` (offline conversion import — the right tool when CRM-sourced lead-to-sale data needs to feed Smart Bidding).\n- **Feedback** — `fileInternalNotFairToolFeedback` when an MCP tool is missing capability, returning bad data, or otherwise gets in the way.\n\n## Reference library\n\nThese live alongside this skill. Read on demand — not preemptively.\n\n| Question on the table | Reference |\n|---|---|\n| Performance triage, waste detection, ranking | `references/analysis-heuristics.md` |\n| Quality Score component diagnosis | `references/quality-score-framework.md` |\n| Bid-strategy choice or migration | `references/bid-strategy-decision-tree.md` |\n| Industry benchmarks / seasonality lens | `references/industry-benchmarks.md` |\n| Daily operator briefs, pacing alerts, approval queues | `references/daily-ads-operator.md` |\n| Search-term mining, negatives, n-gram analysis | `references/search-term-analysis-guide.md` + `references/search-term-triage.md` |\n| Safe write execution and MCP mutation verification | `references/safe-executor.md` |\n| Intervention memory and 3/7/14-day impact reviews | `references/intervention-memory.md` |\n| Client-facing ads updates | `references/client-reporter.md` |\n| Recurring optimization loops: daily checks, n-grams, budget/rank, broad match, tracking gates | `references/repeatable-optimization-loops.md` |\n| Restructuring, ad-group bloat, naming | `references/campaign-structure-guide.md` |\n| Reviewing prior changes for impact | `references/session-checks.md` + `references/change-tracking.md` |\n| Local lead-gen accounts (service businesses) | `../shared/local-leadgen-playbook.md` |\n| SaaS / B2B product-led acquisition | `../shared/saas-b2b-playbook.md` |\n\nFor business context (services, brand voice, personas, unit economics), read `{data_dir}/business-context.json` and `{data_dir}/personas/{accountId}.json`. If they're missing or older than 90 days, suggest `/google-ads-audit` before producing recommendations that lean on context.\n\n## Account baseline\n\nMaintain `{data_dir}/account-baseline.json` for cross-session anomaly detection. Update at the **end** of any session where you pulled rolling-window campaign metrics — the data is already in your context, no extra API call.\n\n```json\n{\n  \"accountId\": \"<from config>\",\n  \"lastUpdated\": \"<ISO 8601>\",\n  \"campaigns\": {\n    \"<campaignId>\": {\n      \"name\": \"<campaign name>\",\n      \"rolling30d\": { \"avgDailySpend\": 0, \"totalConversions\": 0, \"avgCpa\": 0, \"avgCtr\": 0, \"avgConvRate\": 0, \"totalSpend\": 0 },\n      \"recent7d\": { \"spend\": 0, \"conversions\": 0, \"cpa\": 0, \"ctr\": 0, \"clicks\": 0, \"impressions\": 0 },\n      \"snapshotDate\": \"<ISO 8601>\"\n    }\n  }\n}\n```\n\nUpdate formula: `rolling30d = (0.7 × previous_rolling30d) + (0.3 × recent7d × (30/7))`. New campaigns: initialize `rolling30d` from `recent7d` directly. Cap at 50 campaigns (spend > $0 in last 30 days) so the file stays small.\n\nWhen the baseline is older than 24h, see `references/session-checks.md` for the anomaly comparison.\n\n## Conditional handoffs\n\nAfter analysis, proactively offer the next skill when the data clearly points there:\n\n- **CTR persistently below benchmark across 2+ ad groups** → `/google-ads-copy`\n- **High CTR, low CVR across multiple ad groups** → `/google-ads-landing` (the page is the bottleneck, not the ad)\n- **No business context, or context >90 days old** → `/google-ads-audit` first\n- **Converting search terms not yet keywords (3+ conversions)** → offer to add them with `bulkAddKeywords`\n- **Impression-share decline tied to new competitor pressure** → pull `auction_insight_*` resources via GAQL\n- **Significant structural / bidding change considered** → propose an experiment (`createExperiment` + `addExperimentArms`) instead of a direct mutation, and let real traffic decide\n\n## Recurring optimization posture\n\nWhen the user asks for an ongoing/repeatable improvement pattern — \"check today's keywords\", \"what should we do next\", \"keep improving this campaign\", \"clean up wasted spend\", \"should we scale?\" — start with `references/daily-ads-operator.md`, then pull the narrowest supporting reference. The default posture is:\n\n1. **Measure signal first** — conversion tracking, goal settings, recent changes, budget pacing, and pending intervention reviews.\n2. **Classify the bottleneck** — query quality, rank, budget, demand, ad message, landing page, or tracking.\n3. **Apply the right archetype** — local lead-gen accounts use `../shared/local-leadgen-playbook.md`; SaaS/B2B product-led accounts use `../shared/saas-b2b-playbook.md`.\n4. **Triage search terms before scaling** — use `references/search-term-triage.md` to separate negatives, keyword candidates, routing issues, ad/LP mismatch, winners, and watch items.\n5. **Propose the smallest reversible action** — usually a negative, exact keyword promotion, ad/LP message fix, or experiment; not a budget increase by reflex.\n6. **Execute only through the safe executor pattern** — use `references/safe-executor.md`; approval and live read-back verification are mandatory.\n7. **Record the intervention** — use `references/intervention-memory.md` so 3/7/14-day reviews can decide keep/revert/iterate.\n8. **Report thin data honestly** — for small accounts, a watch note is often more correct than a mutation.","author":"@nowork-studio","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/nowork-studio/notfair-plugin/tree/main/google-ads/manage","license":"MIT","category":"writing","lang":"en","tokens":2373,"stars":0,"calls30d":2,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"evals/evals.json","size":12262,"sha256":"673883b1a60da51a99676f838d7989e9788c243abbfab4be7e49b1faffe64243"},{"path":"references/analysis-heuristics.md","size":5377,"sha256":"9d4ab8a6318a44d602feffb45b6fbefe0fdb0791e239cb1700a1d43f518cddb6"},{"path":"references/bid-strategy-decision-tree.md","size":16690,"sha256":"c03c4a641320b837d51f7ff7a804a24172bb788b728736c677dbeda42c06a0c9"},{"path":"references/campaign-structure-guide.md","size":16444,"sha256":"c8b506a1e94c516fa56c7d1d920f58abd46e684e69841ce933b4b82b77957137"},{"path":"references/change-tracking.md","size":2742,"sha256":"2ad5e80eec4521e54590691442334a123abaaee209eb9744792f2f866cc806a9"},{"path":"references/client-reporter.md","size":1818,"sha256":"a135385fd3c1e069a0ef8249846c2fd87aee8e54b9947d6b5354db9ea648b931"},{"path":"references/daily-ads-operator.md","size":3717,"sha256":"8de4a82a4aaefa3f866522151dd877598ca8d130a967e31d56d6d411d91d9922"},{"path":"references/industry-benchmarks.md","size":15402,"sha256":"3674ae4f8250e9bf560bf2c36aad53269dc1bc056424345c1efb1a6162781e37"},{"path":"references/intervention-memory.md","size":2272,"sha256":"3e2c475d5f5dbf80f29b32c7de373004c6a760f123a4cd9c2271f7316e74ce8d"},{"path":"references/quality-score-framework.md","size":5087,"sha256":"5826daa99d0502285d351d80183b5c77ea4a29d06d9cccbeb2d0e951b6c71ad8"},{"path":"references/repeatable-optimization-loops.md","size":8788,"sha256":"fc3655e9ae6dfc831c9d36a1245c5dc5f39f0468e933d77c31fc64c016d886e9"},{"path":"references/safe-executor.md","size":3113,"sha256":"1e1da9c9e20499c520d6a4896ff95a53db202953dbe2a9f9944dc8746e956f6f"},{"path":"references/search-term-analysis-guide.md","size":18924,"sha256":"a084caef45bbf52eaac9f72cf3546cfa9925c0a202c8d86e14a195e9dcd14794"},{"path":"references/search-term-triage.md","size":3144,"sha256":"d7473c17764c65b9922a7353c061f2df10da5b56ee898beb489a313ed33df72b"},{"path":"references/session-checks.md","size":2597,"sha256":"164771cf82a4f07a4b1e5e6db69e346df0561ec61a8c4b2912cba0c0d48b385c"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[{"code":"injection.preauthorise","kind":"injection","where":"SKILL.md:29","excerpt":"Always confirm","message":"pre-authorises approvals on the user’s behalf","severity":"warn"}],"scannedAt":"2026-08-22","hasScripts":false,"networkEndpoints":[]}}