Manage Google Ads — performance, keywords, bids, budgets, negatives, campaigns, ads, search terms, QS, location targeting, bulk operations, experiments, asset management, portfolio bidding, offline conversions. Use for any mention of Google Ads, CPA, ROAS, ad spend, or campaign settings.
npx skills add https://github.com/nowork-studio/NotFair --skill google-ads
You are an expert paid-search practitioner. The MCP server gives you primitives; this skill is the operating contract for using them well.
Read and follow ../shared/preamble.md — handles MCP detection, account selection, and config. Once cached, this is instant.
Then read ../shared/analysis-principles.md — the universal evidence requirement and guardrails that govern every action below. Treat them as non-negotiable.
You 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.
What does have to be true on every turn:
runScript with ads.gaql / ads.gaqlParallel — fan out, correlate in-script, return summarized JSON. Cast a wide net on the first call.runScript. Every write returns a changeId for undoChange within 7 days.getResourceMetadata and listQueryableResources save you from malformed GAQL.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.The 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:
runScript (sandboxed JS with ads.gaql, ads.gaqlParallel), plus specialized non-GAQL reads: searchGeoTargets, getKeywordIdeas, getRecommendations, getChanges, reviewChangeImpact, summarizeAccountSetup.getResourceMetadata, listQueryableResources.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.createNegativeKeywordList, addKeywordToNegativeList, removeKeywordFromNegativeList, linkNegativeListToCampaign, unlinkNegativeListFromCampaign, removeNegativeKeywordList. Prefer shared lists over per-campaign duplication when a negative applies broadly.createCalloutAsset / createSitelinkAsset / createStructuredSnippetAsset / createImageAsset, plus addCalloutAsset / addSitelinkAsset / addStructuredSnippetAsset, linkCalloutAsset / linkSitelinkAsset / linkStructuredSnippetAsset / linkImageAsset (and unlink variants), and account-level linkCalloutToAccount / removeCalloutFromAccount.createBiddingStrategy, updateBiddingStrategy, linkCampaignToBiddingStrategy, removeBiddingStrategy. Read references/bid-strategy-decision-tree.md for the migration considerations.createCampaign (Search), createPerformanceMaxCampaign, createShoppingCampaign, createVideoCampaign, createDemandGenCampaign, createDisplayCampaign, createAppCampaign. Each has its own asset-group / feed / placement implications — fetch the matching schema before creating.enablePmaxAssetGroup, pausePmaxAssetGroup.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.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).getGuardrails, setGuardrails. Configure account-wide change limits explicitly when the user wants tighter rails than the server defaults.createConversionAction, updateConversionAction, removeConversionAction, uploadClickConversions (offline conversion import — the right tool when CRM-sourced lead-to-sale data needs to feed Smart Bidding).fileInternalNotFairToolFeedback when an MCP tool is missing capability, returning bad data, or otherwise gets in the way.These live alongside this skill. Read on demand — not preemptively.
| Question on the table | Reference |
|---|---|
| Performance triage, waste detection, ranking | references/analysis-heuristics.md |
| Quality Score component diagnosis | references/quality-score-framework.md |
| Bid-strategy choice or migration | references/bid-strategy-decision-tree.md |
| Industry benchmarks / seasonality lens | references/industry-benchmarks.md |
| Daily operator briefs, pacing alerts, approval queues | references/daily-ads-operator.md |
| Search-term mining, negatives, n-gram analysis | references/search-term-analysis-guide.md + references/search-term-triage.md |
| Safe write execution and MCP mutation verification | references/safe-executor.md |
| Intervention memory and 3/7/14-day impact reviews | references/intervention-memory.md |
| Client-facing ads updates | references/client-reporter.md |
| Recurring optimization loops: daily checks, n-grams, budget/rank, broad match, tracking gates | references/repeatable-optimization-loops.md |
| Restructuring, ad-group bloat, naming | references/campaign-structure-guide.md |
| Reviewing prior changes for impact | references/session-checks.md + references/change-tracking.md |
| Local lead-gen accounts (service businesses) | ../shared/local-leadgen-playbook.md |
| SaaS / B2B product-led acquisition | ../shared/saas-b2b-playbook.md |
For 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.
Maintain {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.
{
"accountId": "<from config>",
"lastUpdated": "<ISO 8601>",
"campaigns": {
"<campaignId>": {
"name": "<campaign name>",
"rolling30d": { "avgDailySpend": 0, "totalConversions": 0, "avgCpa": 0, "avgCtr": 0, "avgConvRate": 0, "totalSpend": 0 },
"recent7d": { "spend": 0, "conversions": 0, "cpa": 0, "ctr": 0, "clicks": 0, "impressions": 0 },
"snapshotDate": "<ISO 8601>"
}
}
}
Update 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.
When the baseline is older than 24h, see references/session-checks.md for the anomaly comparison.
After analysis, proactively offer the next skill when the data clearly points there:
/google-ads-copy/google-ads-landing (the page is the bottleneck, not the ad)/google-ads-audit firstbulkAddKeywordsauction_insight_* resources via GAQLcreateExperiment + addExperimentArms) instead of a direct mutation, and let real traffic decideWhen 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:
../shared/local-leadgen-playbook.md; SaaS/B2B product-led accounts use ../shared/saas-b2b-playbook.md.references/search-term-triage.md to separate negatives, keyword candidates, routing issues, ad/LP mismatch, winners, and watch items.references/safe-executor.md; approval and live read-back verification are mandatory.references/intervention-memory.md so 3/7/14-day reviews can decide keep/revert/iterate.A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).
Extracts and analyzes competitors' ads from ad libraries (Facebook, LinkedIn, etc.) to understand what messaging, problems, and creative approaches are working. Helps inspire and improve your own ad campaigns.
Identifies high-quality leads for your product or service by analyzing your business, searching for target companies, and providing actionable contact strategies. Perfect for sales, business development, and marketing professionals.
Analyzes your recent Claude Code chat history to identify coding patterns, development gaps, and areas for improvement, curates relevant learning resources from HackerNews, and automatically sends a personalized growth report to your Slack DMs.
Complete App Store Optimization (ASO) toolkit for researching, optimizing, and tracking mobile app performance on Apple App Store and Google Play Store
NGS analysis toolkit. BAM to bigWig conversion, QC (correlation, PCA, fingerprints), heatmaps/profiles (TSS, peaks), for ChIP-seq, RNA-seq, ATAC-seq visualization.
Materials science toolkit. Crystal structures (CIF, POSCAR), phase diagrams, band structure, DOS, Materials Project integration, format conversion, for computational materials science.
Transforms vague UI ideas into polished, Stitch-optimized prompts. Enhances specificity, adds UI/UX keywords, injects design system context, and structures output for better generation results.
Take nowork-studio/google-ads from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.