google-ads-copy — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited google-ads-copy (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Write Google Ads RSA copy and run structured tests to find winning messaging.
Read and follow ../shared/preamble.md (MCP detection, account selection) and ../shared/analysis-principles.md (evidence requirement, guardrails). Both apply throughout.
Read on demand:
references/rsa-best-practices.md — character limits, headline formulas, pinning, A/B mechanics, common mistakes. The source of truth for what to write.references/rsa-testing-lab.md — how to choose RSA test metrics, diagnose ad-group intent bloat, decide pinning, and avoid chasing Ad Strength over business outcomes.../manage/references/industry-benchmarks.md — industry CTR/CVR benchmarks for sanity-checking targets.../manage/references/quality-score-framework.md — only when QS improvement is the explicit goal.Every copy decision is grounded in business context. Read {data_dir}/business-context.json and {data_dir}/personas/{accountId}.json first.
/google-ads-audit before writing — generic copy that ignores positioning is wasted ad inventory. The full intake procedure (website crawl, schema, bootstrapping) lives in ../audit/references/business-context.md.How context shapes copy: services map to headline categories; locations earn local-specific headlines (with QS upside); brand voice sets tone and forbidden words; differentiators ARE the value-prop headlines; competitors sharpen positioning (without naming them); seasonality decides urgency vs. evergreen framing; offers feed time-sensitive variants; landing-page content must match (or conversions drop). Personas drive language: their own search-term phrasing in headlines, their pain points in descriptions, their decision-trigger as the CTA angle.
Ad strength optimizes for Google's diversity goals, not your conversion rate. The hierarchy: conversion rate > CTR > CPA > ad strength. Don't break a high-CTR ad to chase "Excellent". Do treat low ad strength as a useful diversity signal — eight distinct headlines, one per category, no repeats in description bank.
Copy must be grounded in what already converts. One runScript with ads.gaqlParallel covers almost any copy job — fan out:
ad_group_ad — current headlines, descriptions, ad-strength, per-ad clicks/CTR/conversions (the baseline to beat)keyword_view — what's converting and which QS components are weaksearch_term_view — the actual phrases customers are typing (the single best language source)campaign — the CTR/CVR benchmark each variant has to clearFor brand-wide rewrites, correlate everything in one pass. For a single ad group, scope each query with WHERE ad_group.id = …. Layer in seasonality and keyword-landscape context from business-context.json.
If the user has a CRM or lead-outcome database with the language customers actually use, mine that — customer language beats marketing language every time.
Google RSA: up to 15 headlines (30 chars max) and 4 descriptions (90 chars max). A single character over = rejected. Always count.
references/rsa-best-practices.md is the source of truth for headline formulas, description ordering, and pinning strategy. The compact rule of thumb: pin one Service+Location headline to position 1, one CTA to position 3, leave position 2 unpinned for Google to test value-prop / trust / differentiator headlines, and never pin more than 3 total.
When the user wants to test, use the MCP server's experiment tooling rather than the old "deploy two paused ads side by side" pattern:
createAdVariationExperiment is the dedicated tool for variation testing at the ad level. It manages the split, the lift comparison, and the read-back.createExperiment + addExperimentArms + scheduleExperiment. Monitor with listActiveExperiments and listExperimentAsyncErrors. Decide endgame with endExperiment, graduateExperiment, or promoteExperiment.Each variant must test a meaningfully different angle — not word swaps. "Trust & Expertise" vs. "Speed & Convenience" vs. "Price & Value" is a real test; "Call Today" vs. "Call Now" is noise.
Before writing variants, read references/rsa-testing-lab.md when the request mentions testing, pinning, Ad Strength, low CTR/CVR, or mixed-intent ad groups. It encodes the generalized pattern that many RSA problems are really ad-group/query-theme problems.
When calling a winner, the underlying question is the same regardless of mechanism: did the variant win on conversion rate (or CPA), backed by enough sample to trust the difference? Less than ~100 clicks per variant is too early. ≥20% relative CTR or CVR delta is meaningful. 2× CVR gap is decisive immediately. The experiments framework's own significance signals are the cleanest input — defer to them when present.
After a winner: pause the loser, then iterate against the winner. Never stop testing.
business-context.json / personas → recommend /google-ads-audit before writing.undoChange (assuming the entity hasn't been modified since).~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.