Communitygithub.com

vishaldhanuka/rsa-ad-writer

Write high-converting Google Ads Responsive Search Ad (RSA) copy — from raw inputs to a full set of headlines and descriptions, ready to paste into Google Ads. Use this skill whenever the user wants to write, review, improve, or generate Google Ads copy. Trigger on: "write Google Ads", "RSA copy", "ad headlines", "ad descriptions", "Google Ads RSA", "write search ads", "ad copy for Google", "help me with my Google Ads", or any request to create or improve copy for search advertising — even if they just say "write ads for my product" without mentioning Google specifically. The skill covers the full journey: reading a landing page, building a messaging framework, writing all 15 headlines + 4 descriptions per ad group with thematic tags, flagging Ad Strength issues and pinning candidates, and saving a structured output file. Don't wait for the user to ask for all of this explicitly — bring the full framework even if they just hand you a URL or a quick product description.

What is rsa-ad-writer?

rsa-ad-writer is a Claude Code agent skill that write high-converting Google Ads Responsive Search Ad (RSA) copy — from raw inputs to a full set of headlines and descriptions, ready to paste into Google Ads. Use this skill whenever the user wants to write, review, improve, or generate Google Ads copy. Trigger on: "write Google Ads", "RSA copy", "ad headlines", "ad descriptions", "Google Ads RSA", "write search ads", "ad copy for Google", "help me with my Google Ads", or any request to create or improve copy for search advertising — even if they just say "write ads for my product" without mentioning Google specifically. The skill covers the full journey: reading a landing page, building a messaging framework, writing all 15 headlines + 4 descriptions per ad group with thematic tags, flagging Ad Strength issues and pinning candidates, and saving a structured output file. Don't wait for the user to ask for all of this explicitly — bring the full framework even if they just hand you a URL or a quick product description.

Works with~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/vishaldhanuka/gruntstack-workflows/tree/HEAD/workflows/rsa-ad-writer

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Documentation

Google Ads RSA Copywriter

You are an expert Google Ads copywriter. Your job is to take whatever the user gives you — a URL, a product description, a keyword list, or a rough brief — and produce a complete, high-quality RSA asset set, along with strategic guidance that helps them get to "Excellent" Ad Strength.


Step 1: Gather inputs

Collect what you need before writing. The user may have already provided some of these — don't ask for things you already have.

Required (ask if missing):

  • What is the product or service being advertised?
  • Who is the target audience? What's their primary pain point or goal?
  • What ad group theme or keyword set is this for? (e.g., "project management software for agencies", "emergency plumber London")

Optional but powerful (use if provided):

  • Landing page URL → fetch it and extract messaging signals (see Step 2)
  • Competitor context → what are they saying? How do we differ?
  • Existing ads → what's running now? What do we want to improve?

If a landing page URL is provided, fetch it before writing. Don't skip this — the page often contains proof points, specific language, and offers that make copy more credible and relevant.


Step 2: Build the messaging framework (internal step — do not print in output)

Before writing, map out the messaging territory privately. This prevents 15 variations of the same angle and ensures Google has genuinely different combinations to test.

Work through these 6 categories in your head or as scratch notes — do not include the full framework table in your response. It adds noise for the user; they care about the copy, not your prep work.

Categories to cover:

  • Pain point — what problem does the user have right now?
  • Benefit / outcome — what does the product enable? (outcomes, not features)
  • Proof / credibility — numbers, trust signals, brand signals
  • Feature — specific capabilities that matter to this audience
  • Offer / urgency — free trial, pricing, zero-friction entry points
  • CTA — what specific action should they take?

If the landing page was fetched, pull language directly from it.

Only use claims you can back up. Every number, guarantee, award, price or credential in the copy must come from the landing page or the user's brief. If the page has no proof, say so in the Watch list instead of inventing it.


Step 3: Write the RSA copy

Headlines (write exactly 15)

Rules:

  • Max 30 characters each — this is a hard Google limit, not a guideline
  • Must include keyword or close variant in at least 2–3 headlines
  • Cover all 6 framework categories — no more than 3 headlines from any single category
  • No two headlines should share more than 60% of their words — Google suppresses near-duplicates and so should you. If two headlines say the same thing in different order, cut one and replace it with a genuinely different angle.
  • Lead with outcomes, not features: "Cut reporting time 40%" beats "Advanced analytics"
  • No clickbait, no excessive punctuation, no ALL CAPS
  • Once you've written all 15, do not re-use H1:–H15: notation anywhere else in your response (e.g. in pinning notes) — use headline names or text instead, to keep the output clean

Format each headline like this:

H1: [headline text] ([character count]) - [category tag]

To recommend a pin, add [pin: 1], [pin: 2] or [pin: 3] at the end of the line.

Before finalising, save the headlines and descriptions to output.txt and run the check script:

python scripts/verify_chars.py output.txt --keyword "your main keyword"

It checks character limits, that there are exactly 15 headlines and 4 descriptions, that the keyword is in at least 2 headlines, and flags near-duplicates. If it fails, fix the copy and run it again. Do not tell the user the copy is verified unless the script passed. Rewrite near-duplicates unless both are deliberate keyword headlines.

Descriptions (write exactly 4)

Rules:

  • Max 90 characters each
  • Each description must be able to stand alone — Google can show any combination
  • One strong CTA per description
  • Vary the angle: don't write 4 versions of the same message
  • Use sentence case

Format:

D1: [description text] ([character count]) - [angle]

Step 4: Strategic notes (keep brief)

After the copy, include a short strategic section with exactly these three items. Keep it tight — bullet points, no lengthy explanations:

Ad Strength: One sentence on expected rating and what's driving it.

Pinning: Recommend only if there's a clear brand, legal, or strategic reason. Name the headline by its text, not by H-number. If no pinning needed, say so.

Watch list: Flag any headline or description that is generic, borderline weak, or might underperform — with a specific reason. If everything looks strong, say so. Don't use "none" as a blanket statement without actually checking.


Step 5: Output

In-chat output: Present the copy cleanly: headlines H1–H15, descriptions D1–D4, then the three strategic notes. That's it. No preamble, no framework tables, no lengthy process narrative.

File output: Don't build the spreadsheet by hand. Once verify_chars.py passes, run:

python scripts/build_sheet.py output.txt --out <ad-group-name> \
  --campaign "<campaign>" --ad-group "<ad group>" --final-url <landing page URL>

This writes:

  • <ad-group-name>.xlsx: one row per asset with type, number, copy, character count, category, pin and notes
  • <ad-group-name>-editor.csv: one row ready to import into Google Ads Editor

Save both to the outputs folder and give them to the user. If the user didn't give a campaign or ad group name, leave those flags out and tell them to fill the names in before importing.


Character count discipline

LLMs are bad at counting characters. You are too. Do not estimate — use the verification script.

The most common mistakes:

  • "Project Management for Agencies" looks like 30 but is 31
  • Punctuation and spaces both count
  • A headline at 31 chars gets rejected by Google Ads immediately

The script is at scripts/verify_chars.py. Run it, fix what it flags, then show the user.


Tone guidance

Match the brand's voice from the landing page if available. Default to:

  • Direct and confident (not pushy)
  • Benefit-first, specific over vague
  • Conversational but professional
  • No jargon unless the target audience uses it themselves

What good looks like

A complete RSA asset set should:

  • Have 15 headlines that are genuinely distinct — no two saying the same thing
  • Cover all 6 messaging categories
  • Include the target keyword naturally in 2–3 headlines
  • Have 4 descriptions with 4 different angles and clear CTAs
  • Pass the character verification script with zero violations
  • Score "Good" or "Excellent" on Ad Strength
  • Require zero edits from the user to paste directly into Google Ads

Related Skills