The first time I let AI generate ad copy for a client, it wrote 15 perfectly formatted headlines. Good character counts. Strong CTAs. Clean structure.

Three of them were lies.

“Free Estimates” — the shop charges $89 for diagnostics. “Open Saturdays” — they close at noon on Friday. “ASE-Certified Technicians” — true for one location, not the one we were advertising.

Nobody caught it in review. The ads went live. The client caught it two weeks later when a customer called asking about the free estimate they saw in the ad. That’s when I realized the problem isn’t AI writing bad copy. The problem is AI writing plausible copy — copy that looks right, reads right, and passes every quality check except the one that matters: is it true?

That incident is why the ad-copy-verification-standard exists. It’s open-sourced as part of my PPC AI Skills repo, and it’s now loaded automatically any time any of my 22 agents creates ad copy of any kind — RSAs, callouts, structured snippets, sitelinks. Everything.

Get the Ad Copy Verification Standard → github.com/fourteenwm/ppc-ai-skills/ad-copy-verification-standard

Free and open-sourced. Drop the SKILL.md into any Claude Code project. Every agent that generates ad copy will follow the verification protocol automatically.

The Core Problem: AI Generates Plausible, Not Accurate

Ask any LLM to write Google Ads headlines for an auto repair shop and it’ll give you beautiful output. “Expert Auto Repair.” “Same Day Service.” “5-Star Reviews.” “Open 7 Days a Week.”

None of these are verified. All of them sound right. That’s the danger.

AI doesn’t know what your client actually offers. It knows what auto repair shops typically offer. It fills in the gaps with industry patterns, and those patterns are convincing enough that humans approve them without checking.

This is worse than obviously wrong output. Obviously wrong output gets caught. Plausible-but-wrong output gets approved, goes live, and stays live until a customer or a client calls you on it.

The Rule: Empty Is Better Than Inaccurate

This is the single principle the entire skill is built on.

If the AI can’t verify a claim from the client’s actual website, the field stays empty. Not a generic placeholder. Not a “common industry practice.” Empty.

A blank headline slot in an RSA is harmless. Google will just rotate the other headlines. An inaccurate headline erodes client trust, attracts the wrong customers, and creates liability.

Every piece of my system enforces this at the code level:

# Wrong — fallback when data is missing
if not social_proof:
    headlines.append("5-Star Reviews")  # Generic placeholder

# Right — empty when data is missing
if not social_proof:
    headlines.append("")  # Leave empty, do not fabricate

I learned this the hard way. An earlier version of my RSA generation code used fallbacks — “5-Star Reviews,” “Decades of Experience,” “Quality You Can Trust” — whenever it couldn’t find real data. Every one of those fallbacks was a potential lie dressed up as best practice.

How the Verification Works

The skill enforces a four-step workflow. No shortcuts.

Step 1: Scrape the website. Before writing a single headline, the agent scrapes the client’s website and extracts every verifiable claim — services offered, credentials, hours, specializations, company history. The exact wording matters, not a paraphrase.

Step 2: Source every claim. Every headline, description, and callout gets a source citation:

Headline: "ASE-Certified Since 1986"
Source: About page — "Our ASE-certified master technicians
        have served the community since 1986"
Status: VERIFIED

No citation, no headline. It’s that simple.

Step 3: Exclude “Free” copy. Even if the website says “Free Estimates,” the skill strips it. This is a strategic decision, not a verification one — “Free” copy attracts price-sensitive shoppers, not the premium customers most shops want. The filter applies after verification: first confirm the claim exists, then exclude it anyway.

Step 4: Flag what’s missing. When the website doesn’t have enough content — and many small business sites don’t — the skill tells the user exactly what it couldn’t verify and asks them to confirm manually. It doesn’t guess.

CANNOT VERIFY:
- Saturday hours (not listed on website)
- Warranty terms (no warranty page found)
- Fleet services (not mentioned)

RECOMMENDATION:
Proceeding with verified claims only.
Please manually confirm the above if you'd
like them included in ad copy.

Templates Are for Format, Not Content

This distinction trips up most AI ad copy systems.

A template that says “format credentials as: [Credential] Since [Year]” is fine. That’s structure. A template that says “add ‘Open Saturdays’ as a callout” is dangerous — unless the website confirms Saturday hours.

The skill draws a hard line: templates provide formatting patterns. The client’s website provides content. When you mix them up, you get confident-looking ads built on assumptions.

What This Has Prevented

Since I made this skill mandatory across all 22 agents:

  • False service claims — caught multiple times. Agents defaulting to “common auto shop services” that the specific client doesn’t offer. Diesel repair on a shop that only does gas engines. Transmission work at a brake specialist.
  • Wrong hours — AI loves “Open 7 Days” and “Open Saturdays.” Most of my clients are closed on weekends. Every one of these would have been approved in a quick review because they look normal.
  • Generic social proof — “5-Star Reviews,” “Rated #1,” “Hundreds of Happy Customers.” None verified, all plausible, all removed before they reached the client.
  • Free offer mismatches — shops that charge for diagnostics being advertised with “Free Estimates.” This one generates angry phone calls.

The pattern is always the same: the AI writes something that sounds right for the industry, but isn’t right for this specific client.

How This Connects to the Account Builder

My Account Builder agent generates complete Google Ads accounts in under 15 seconds — campaigns, keywords, and fully assembled RSAs. It processes dozens of accounts.

Every RSA it creates follows this verification standard. It scrapes the property website first, extracts verified amenities and features, and only uses what it finds. If a property doesn’t mention “luxury finishes” on its site, that phrase never appears in the ads.

That’s why the Account Builder works at scale without creating cleanup work. The verification isn’t a post-build audit. It’s baked into the generation step. Bad copy never gets created in the first place.

Get the Ad Copy Verification Standard

Install in 30 seconds

→ View the skill on GitHub

Copy the SKILL.md file into your Claude Code project:

mkdir -p .claude/skills/ad-copy-verification-standard
curl -o .claude/skills/ad-copy-verification-standard/SKILL.md \
  https://raw.githubusercontent.com/fourteenwm/ppc-ai-skills/main/ad-copy-verification-standard/SKILL.md

Any agent that generates ad copy will automatically follow the verification protocol. Works with RSAs, callouts, structured snippets, sitelinks — any ad copy type.

Free. Open-sourced. MIT licensed.

The full repo has nine other PPC AI skills I use in production every day — mutation safety, SQR classification, impression share diagnostics, and more. All at github.com/fourteenwm/ppc-ai-skills.

The Bigger Point

The AI ad copy conversation is mostly about volume. How many headlines can it write. How fast can it generate variations. How many accounts can it cover.

Volume without verification is a liability factory. Every unverified headline is a promise your client might not keep. Every fabricated callout is a customer calling to ask about a service that doesn’t exist. At scale — across dozens or hundreds of accounts — those small inaccuracies multiply into a trust problem that’s harder to fix than the original manual work.

The rule is simple. Scrape the website. Source every claim. Leave the field empty if you can’t verify it. Empty is better than inaccurate.

Build the verification into the generation step, not after it. By the time bad copy exists, someone has to review it, catch it, and remove it. That’s the manual work AI was supposed to eliminate. If the copy is never created wrong in the first place, there’s nothing to catch.