Google Ads Landing Page Audit
nowork-studio/notfair-plugin
Scores Google Ads landing pages on five weighted dimensions and diagnoses why high-CTR ad groups convert poorly, with concrete fixes for each page.
Full Google Ads review that synthesizes tracking, search terms, intent mapping, negatives, structure, RSAs, budget decisions, and PMax context into a single operator read.
$ npx skills add TheMattBerman/google-ads-copilot --skill google-ads-audit -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install TheMattBerman/google-ads-copilot google-ads-audit --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/TheMattBerman/google-ads-copilot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/google-ads-audit .claude/skills/google-ads-audit && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "google-ads-audit" agent skill from https://github.com/TheMattBerman/google-ads-copilot/tree/main/skills/google-ads-audit into .claude/skills/google-ads-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-ads-audit", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/TheMattBerman/google-ads-copilot/tree/main/skills/google-ads-auditType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add TheMattBerman/google-ads-copilot --skill google-ads-audit -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install TheMattBerman/google-ads-copilot google-ads-audit --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TheMattBerman/google-ads-copilot.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/google-ads-audit .agents/skills/google-ads-audit && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "google-ads-audit" agent skill from https://github.com/TheMattBerman/google-ads-copilot/tree/main/skills/google-ads-audit into .agents/skills/google-ads-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-ads-audit", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add TheMattBerman/google-ads-copilot --skill google-ads-audit -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install TheMattBerman/google-ads-copilot google-ads-audit --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TheMattBerman/google-ads-copilot.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/google-ads-audit .cursor/skills/google-ads-audit && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "google-ads-audit" agent skill from https://github.com/TheMattBerman/google-ads-copilot/tree/main/skills/google-ads-audit into .cursor/skills/google-ads-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-ads-audit", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/TheMattBerman/google-ads-copilot.git --path skills/google-ads-audit--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add TheMattBerman/google-ads-copilot --skill google-ads-audit -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install TheMattBerman/google-ads-copilot google-ads-audit --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TheMattBerman/google-ads-copilot.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/google-ads-audit .gemini/skills/google-ads-audit && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "google-ads-audit" agent skill from https://github.com/TheMattBerman/google-ads-copilot/tree/main/skills/google-ads-audit into .gemini/skills/google-ads-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-ads-audit", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install TheMattBerman/google-ads-copilot google-ads-auditInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add TheMattBerman/google-ads-copilot --skill google-ads-audit -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/TheMattBerman/google-ads-copilot.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/google-ads-audit .github/skills/google-ads-audit && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "google-ads-audit" agent skill from https://github.com/TheMattBerman/google-ads-copilot/tree/main/skills/google-ads-audit into .github/skills/google-ads-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-ads-audit", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add TheMattBerman/google-ads-copilot --skill google-ads-audit -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install TheMattBerman/google-ads-copilot google-ads-audit --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/TheMattBerman/google-ads-copilot.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/google-ads-audit .opencode/skills/google-ads-audit && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "google-ads-audit" agent skill from https://github.com/TheMattBerman/google-ads-copilot/tree/main/skills/google-ads-audit into .opencode/skills/google-ads-audit/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "google-ads-audit", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
google-ads-auditFull Google Ads review that synthesizes tracking, search terms, intent mapping, negatives, structure, RSAs, budget decisions, and PMax context into a single operator read.
Google Ads Audit is an agent skill from TheMattBerman/google-ads-copilot. Full Google Ads review that synthesizes tracking, search terms, intent mapping, negatives, structure, RSAs, budget decisions, and PMax context into a single operator read. Pulls live data via MCP or works with manual exports. Produces a prioritized batch of action drafts.
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Marketing & SEO, covering Paid advertising. It works with Google Ads and Model Context Protocol. The repository describes itself as: Google Ads Copilot: operator kit for audits, MCP-connected reads, export-mode analysis, and draft/apply workflows. The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2c253ee. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are sql).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Google Ads Audit loads about 2.7k tokens when it runs. Until then it costs about 72 tokens; SKILL.md has 954 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from TheMattBerman/google-ads-copilot at commit 2c253ee, republished under its MIT licence (© TheMattBerman). 954 words, ~2,732 tokens.
.claude/skills/google-ads-audit/SKILL.md (or your agent's skills folder).This is the broad review. Not just a checklist. A synthesis of what the account is learning, where it is leaking, and what should change.
Read first:
google-ads/references/operator-thesis.mdgoogle-ads/references/intent-map.mdgoogle-ads/references/query-patterns.mdgoogle-ads/references/negatives-playbook.mdgoogle-ads/references/tracking-playbook.mdgoogle-ads/references/structure-playbook.mdgoogle-ads/references/rsa-playbook.mdgoogle-ads/references/budget-playbook.mdgoogle-ads/references/benchmarks.mdgoogle-ads/references/deliverable-templates.mdRead workspace if available:
workspace/ads/ files except assets.md (unless creative output is needed)workspace/ads/drafts/_index.md — check for existing pending draftsThe audit pulls data across all skill areas. Run queries in this order (each feeds into the next):
1. Account overview:
SELECT
customer.id,
customer.descriptive_name,
customer.currency_code,
customer.time_zone,
customer.auto_tagging_enabled
FROM customer2. Tracking health (check trust first):
SELECT
conversion_action.name,
conversion_action.type,
conversion_action.category,
conversion_action.counting_type,
conversion_action.include_in_conversions_metric,
metrics.conversions,
metrics.all_conversions
FROM conversion_action
WHERE segments.date DURING LAST_30_DAYS
AND conversion_action.status = 'ENABLED'
ORDER BY metrics.conversions DESC3. Campaign performance and structure:
SELECT
campaign.name,
campaign.status,
campaign.advertising_channel_type,
campaign.bidding_strategy_type,
campaign_budget.amount_micros,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.conversions_value,
metrics.cost_per_conversion,
metrics.search_impression_share,
metrics.search_budget_lost_impression_share
FROM campaign
WHERE campaign.status = 'ENABLED'
AND segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC4. Search terms (top 500 by spend):
SELECT
search_term_view.search_term,
campaign.name,
ad_group.name,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions,
metrics.conversions_value
FROM search_term_view
WHERE segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC
LIMIT 500Retrieval ladder — if the search-term query returns no rows, follow the shared retrieval ladder in data/search-term-retrieval.md. Report the resulting retrieval_mode in the audit header. Mark search-term sections as "PMax visibility-limited" when operating in pmax-fallback mode. In limited mode, note the gap and request a UI export.
5. Ad group structure:
SELECT
campaign.name,
ad_group.name,
ad_group.status,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions
FROM ad_group
WHERE campaign.status = 'ENABLED'
AND ad_group.status = 'ENABLED'
AND segments.date DURING LAST_30_DAYS
ORDER BY campaign.name6. Keyword view (targeted keywords — cross-reference with search terms):
SELECT
campaign.name,
ad_group.name,
ad_group_criterion.keyword.text,
ad_group_criterion.keyword.match_type,
ad_group_criterion.status,
metrics.impressions,
metrics.clicks,
metrics.cost_micros,
metrics.conversions
FROM keyword_view
WHERE campaign.status = 'ENABLED'
AND ad_group.status = 'ENABLED'
AND segments.date DURING LAST_30_DAYS
ORDER BY metrics.cost_micros DESC
LIMIT 2007. Existing negatives:
SELECT
campaign.name,
campaign_criterion.keyword.text,
campaign_criterion.keyword.match_type
FROM campaign_criterion
WHERE campaign_criterion.negative = TRUE
AND campaign_criterion.type = 'KEYWORD'8. RSA assets (if time permits):
SELECT
asset.text_asset.text,
asset.type,
ad_group_ad_asset_view.performance_label,
ad_group_ad_asset_view.field_type,
campaign.name,
metrics.impressions,
metrics.clicks,
metrics.conversions
FROM ad_group_ad_asset_view
WHERE segments.date DURING LAST_30_DAYS
AND campaign.status = 'ENABLED'
ORDER BY metrics.impressions DESCSee data/gaql-recipes.md for additional/variant queries.
All date-ranged queries above default to LAST_30_DAYS. If results are empty or near-zero (<$5 total spend):
DURING LAST_90_DAYSThis prevents reporting "no data" on paused or seasonal accounts that have useful history.
Ask the user for as much as they can provide:
The audit works with partial data — it will note confidence limitations.
If tracking is weak, say so immediately. Assign tracking confidence level (High/Medium/Low/Broken). Note which downstream conclusions are conditional on tracking trust.
Summarize the query and intent reality. Build or update the Intent Map. Note where intent classes are well-routed vs. poorly routed.
Identify junk, ambiguity, and routing failures. Quantify the waste. Separate "waste from bad queries" from "waste from bad structure."
Distinguish exclusion from structure problems. Default to isolation when in doubt. Also review existing negatives for harm: Check if any current negatives are blocking traffic that matches the business's services. Smart campaign auto-negatives and inherited negatives are common culprits. If harmful negatives are found, include a "Negatives to Remove" section in the negative draft.
Focus on where meaning is being mixed. Prioritize by spend impact, not by cosmetic neatness.
Check whether ads reflect real intent and LP promise. Note specific gaps between search language and ad copy.
Make support/protect/reduce/hold decisions. Gate budget scaling behind tracking confidence.
When conversion rates look suspiciously low, run a quick Fork A check (tracking) before blaming the landing page. If clicks are high but conversions are near-zero, the tag may not be firing — not the page's fault. For full landing page → conversion path diagnosis, delegate to /google-ads landing-review. See skills/google-ads-landing-review/SKILL.md and google-ads/references/landing-page-playbook.md.
Be explicit about inference vs. direct evidence. Check for branded/high-intent cannibalization.
The audit produces multiple drafts organized by priority. Not everything needs fixing at once.
Priority tiers:
For each tier with actionable findings, create a draft:
drafts/templates/tracking-draft.md → workspace/ads/drafts/YYYY-MM-DD-[account-slug]-tracking-fix.mddrafts/templates/negative-draft.md → workspace/ads/drafts/YYYY-MM-DD-[account-slug]-negatives.mddrafts/templates/structure-draft.md → workspace/ads/drafts/YYYY-MM-DD-[account-slug]-structure.mddrafts/templates/budget-draft.md → workspace/ads/drafts/YYYY-MM-DD-[account-slug]-budget-realloc.mddrafts/templates/rsa-draft.md → workspace/ads/drafts/YYYY-MM-DD-[account-slug]-rsa-refresh.mddrafts/templates/landing-review-draft.md → workspace/ads/drafts/YYYY-MM-DD-[account-slug]-landing-review.mdCross-reference dependencies between drafts. E.g., "Apply tracking fix before budget scaling."
Update workspace/ads/drafts/_index.md with all new drafts.
If 2 or more drafts are created in the same audit run, also write workspace/ads/drafts/_batch-YYYY-MM-DD-[account-slug].md with:
Do not list the _batch-*.md packet in _index.md. It is an audit packet, not a draft.
workspace/ads/intent-map.md — build or update from search termsworkspace/ads/findings.md — audit findings logworkspace/ads/negatives.md — recommended negativesworkspace/ads/learnings.md — what we learnedworkspace/ads/account.md — account context if this is first audit© TheMattBerman, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/google-ads-audit of TheMattBerman/google-ads-copilot.
Open the folder on GitHubat commit 2c253ee
Google Ads Audit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Google Ads Audit this skillTheMattBerman/google-ads-copilot | 238 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Google Ads Landing Page Auditnowork-studio/notfair-plugin | 3.9k | — | ~2.7k | Automated safety check: Pass | MIT | |
| Google Ads API MCP Setupgoogle/skills | 21k | — | ~6.1k | Automated safety check: Notes | Apache-2.0 | |
| 21 Audit Ads Performanceminhnv0807/ai-business-skills | 608 | — | ~4.6k | Automated safety check: Pass | MIT | |
| Connectindranilbanerjee/digital-marketing-pro | 855 | 1 repos | ~2k | Automated safety check: Pass | MIT | |
| Launch Ad Campaignindranilbanerjee/digital-marketing-pro | 855 | 1 repos | ~3.9k | Automated safety check: Pass | MIT |
nowork-studio/notfair-plugin
Scores Google Ads landing pages on five weighted dimensions and diagnoses why high-CTR ad groups convert poorly, with concrete fixes for each page.
google/skills
Guides developers through downloading, configuring, and installing the official open-source Google Ads MCP Server.
minhnv0807/ai-business-skills
Dung khi can ra soat CAU HINH tai khoan quang cao mot cach he thong — 6 khau tu account, campaign, adset, creative, landing den tracking, cham Health Score 0-100 va liet ke Quick Wins.
indranilbanerjee/digital-marketing-pro
Guide the connection of a known MCP integration to the plugin — looks up the connector registry via connector-status.py, checks current status, and returns transport-specific setup steps (OAuth for…
indranilbanerjee/digital-marketing-pro
Create and launch a paid ad campaign on Google, Meta, LinkedIn, or TikTok through the connected ad-platform MCP — campaign structure, audience targeting, bid strategy, negative targeting, creative…
AgriciDaniel/claude-blog
Google API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity…
TheMattBerman/google-ads-copilot
Google Ads operator system for search-term analysis, intent mapping, wasted spend control, account structure decisions, tracking diagnostics, RSA generation, budget review, account planning, and…
TheMattBerman/google-ads-copilot
Execute approved draft actions in Google Ads accounts. An agent skill from TheMattBerman/google-ads-copilot.
TheMattBerman/google-ads-copilot
Review Google Ads budget allocation and scaling decisions based on signal quality, intent clarity, tracking confidence, and structural health.
TheMattBerman/google-ads-copilot
Connected-mode onboarding, health check, and customer selection for Google Ads Copilot.
TheMattBerman/google-ads-copilot
Daily operator review for Google Ads. An agent skill from TheMattBerman/google-ads-copilot.
TheMattBerman/google-ads-copilot
Summarize all pending drafts across accounts. An agent skill from TheMattBerman/google-ads-copilot.
Works with
Categories
Full Google Ads review that synthesizes tracking, search terms, intent mapping, negatives, structure, RSAs, budget decisions, and PMax context into a single operator read. Google Ads Audit is an agent skill from TheMattBerman/google-ads-copilot. Full Google Ads review that synthesizes tracking, search terms, intent mapping, negatives, structure, RSAs, budget decisions, and PMax context into a single operator read.
Google Ads Audit fits situations like: tasks that involve Paid advertising.
Run `npx skills add TheMattBerman/google-ads-copilot --skill google-ads-audit -a claude-code`. Or copy the skill folder (skills/google-ads-audit in TheMattBerman/google-ads-copilot) into .claude/skills/google-ads-audit in your project. Claude Code loads it when a task matches its description.
Run `npx skills add TheMattBerman/google-ads-copilot --skill google-ads-audit -a codex`. Or copy the skill folder (skills/google-ads-audit in TheMattBerman/google-ads-copilot) into .agents/skills/google-ads-audit in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add TheMattBerman/google-ads-copilot --skill google-ads-audit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/google-ads-audit, .gemini/skills/google-ads-audit, .github/skills/google-ads-audit and .opencode/skills/google-ads-audit in your project.
SKILL.md names no scripts, command-line tools or credentials: Google Ads Audit is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Google Ads Audit is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.7k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Google Ads Audit: Google Ads Landing Page Audit (nowork-studio/notfair-plugin, 3.9k stars), Google Ads API MCP Setup (google/skills, 21k stars), 21 Audit Ads Performance (minhnv0807/ai-business-skills, 608 stars) and Connect (indranilbanerjee/digital-marketing-pro, 855 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
TheMattBerman (a GitHub user) maintains it in TheMattBerman/google-ads-copilot, which has 238 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on June 10, 2026.
Source: TheMattBerman/google-ads-copilot on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.