---
name: ad-copy-writing-room
description: "Clarifies copy editing vs copy writing up front: this is a true copywriting job, not a copy-edit pass. Produces platform-correct ad copy variations (headlines, primary text, CTAs) for Meta, Google RSA, and LinkedIn, grounded in a real offer and audience, with angle rationale — including Chinese writing to copy and paste or Japanese writing copy and paste for non-English markets."
license: MIT
compatibility: "Works with any Agent-Skills-compatible AI (Claude, ChatGPT, Cursor, Codex, and more). Ad-account actions run through Adspirer."
metadata:
  author: "Adspirer"
  version: "1.0.0"
  adspirer_category: "creative-production"
  adspirer_source: "https://www.adspirer.com/skills/ad-copy-writing-room"
  adspirer_connection_url: "https://adspirer.ai/sign-up"
  adspirer_primary_keyword: "ad copywriting"
  adspirer_secondary_keywords: "ad copy generator, google ads copy"
  adspirer_launch_wave: "1"
  adspirer_kind: "prompt"
  adspirer_level: "operator"
  adspirer_platforms: "meta,google,linkedin"
  adspirer_supported_clients: "claude,claude-code,chatgpt,codex,cursor,gemini,windsurf"
  adspirer_summary: "Clarifies copy editing vs copy writing up front: this is a true copywriting job, not a copy-edit pass. Produces platform-correct ad copy variations (headlines, primary text, CTAs) for Meta, Google RSA, and LinkedIn, grounded in a real offer and audience, with angle rationale — including Chinese writing to copy and paste or Japanese writing copy and paste for non-English markets."
  adspirer_connections_required: "adspirer"
  adspirer_connections_optional: ""
---

# Ad Copy Writing Room — Copy Writing vs Copy Editing for Platform-Correct Ad Copy Jobs

## Use this when

This is a copy writing job, not a copy editing job — the distinction matters: copy editing vs copy writing means proofreading/tightening text that already exists, while this room drafts new platform-correct ad copy variations — headlines, primary/body text, descriptions, and CTAs — for Meta, Google (Search/PMax RSA assets), and/or LinkedIn, grounded in a specific offer and a defined audience or targeting angle, with a stated angle rationale for each variation so you can pick intentionally rather than guess. Best used before a new campaign/ad group launch, when refreshing creative to fight fatigue (frequency climbing, CTR decaying), or when testing a new positioning angle against a proven one. It also covers non-Latin markets: if the campaign runs in Greater China or Japan, output can include Chinese writing to copy and paste or Japanese writing copy and paste alongside the English lines, still inside platform character limits and policy. Not for landing-page copy, video scripts, organic social captions, or a copy editing pass on existing live copy — those are different rooms.

## What you need

1. The offer, stated precisely: product/service name, the actual price or promo mechanic (e.g. "20% off first order," "free 14-day trial, no card," "$49/mo"), and what happens when someone clicks (landing page URL or page description) — copy cannot promise something the landing page doesn't deliver, that's a Meta/Google policy and trust problem, not just a copywriting one.
2. The audience/angle: who this is for and the one thing they care about most (price, speed, status, fear of missing out, proof/social validation, ease). If you don't know, say "figure out the angle from the offer" and it will propose 2-3 candidate angles instead of guessing one.
3. Platform(s) to write for — Meta, Google Search (RSA), and/or LinkedIn — since each has different character limits, tone conventions, and policy sensitivities. If unstated, default to Meta feed since it's the most common ask. Also state the target language/script if it isn't English — e.g. a Chinese or Japanese audience — so lines are drafted natively as ready-to-paste copy rather than translated after the fact.
4. Any brand voice constraints (formal vs. casual, banned words, required disclaimers — e.g. financial/health/insurance verticals have mandatory disclosure language) and any words/claims legal or the brand has already banned.
5. Whether this is net-new creative or a refresh against fatigue — if refresh, the current top-performing headline/primary text (even informally pasted) so the new angles are genuinely differentiated, not restatements — and note this is a copywriting job, not a request to copy-edit that existing text.

## Procedure

1. Restate the offer and audience back in one line each and confirm the landing destination — if either is missing or vague, stop and ask before writing a single line; copy grounded in a wrong offer wastes the whole exercise and risks a disapproval.
2. Identify 3-4 distinct angles the offer supports (not 3-4 phrasings of the same angle) — pull from the standard direct-response set: price/value, urgency/scarcity, social proof, pain-point/problem-agitate-solve, aspirational outcome, mechanism/how-it-works, curiosity/pattern-interrupt. State in one line why each angle fits this specific offer/audience — angle rationale is the deliverable, not decoration.
3. For each requested platform, and each requested language/script, write copy inside that platform's real constraints, not generic length rules: Meta primary text 3-4 variations per angle (rec. under ~125 chars visible before "See more" on feed, though up to 2,200 allowed — front-load the hook in the first ~90 characters since that's what renders on mobile feed and Reels before truncation), headline ≤40 chars (shows below the image/video, gets truncated hard on some placements — write it to stand alone), description ≤30 chars (optional, often invisible on mobile — don't put load-bearing info here), CTA button from Meta's fixed list (Shop Now / Learn More / Sign Up / Get Offer / Download — pick the one matching actual click intent, not the punchiest word); Google Search RSA minimum 3, ideally 8-10 unique headlines ≤30 chars each (Google mixes/matches combinatorially, so no two headlines should require each other to make sense — each must stand alone), 2-4 descriptions ≤90 chars each, at least one headline should contain a keyword you'd expect to be in the ad group's target keyword list, pin sparingly if at all (pinning kills Google's combination-testing and typically drops Ad Strength) — flag "unpinned, let Google test combinations unless the user has a compliance reason to pin position 1"; LinkedIn intro text ≤150 chars visible before truncation (600 max), headline ≤70 chars, tone shifts professional/B2B — angle should skew toward ROI, credibility, peer proof, or category authority rather than urgency/scarcity tricks that read as spammy in a feed full of colleagues. If Chinese or Japanese text was requested, deliver it as native, ready-to-copy-and-paste lines within the same character/byte constraints, not a mechanical translation of the English set.
4. Run every line through platform policy before presenting it: no unsubstantiated superlatives ("#1," "best," "guaranteed") without the ability to back them, no fabricated urgency ("sale ends today" on an evergreen offer), no personal-attribute call-outs ("are you over 40 and struggling with...") which trip Meta's Special Ad Category and personal-attribute policies, no direct pricing claims on Google that don't match the landing page price field, no ALL-CAPS or excessive punctuation (!!!) which both platforms' quality/relevance systems penalize.
5. Assemble the variation set into a table: Angle | Platform | Copy | Rationale — group by angle first so the user can see the logic, not just a wall of options; call out the 1-2 variations you'd test first if the user forces a pick, with a one-line reason (usually the angle with the clearest rationale-to-offer fit, or the one most differentiated from what they're already running).
6. State explicitly: this output is copy text only, ready to paste — it does not create, upload, or publish anything into a live ad account or ad set. Nothing here has touched a live account yet.
7. If the user's next step is to actually build the ad/ad set with this copy, or to A/B test it against a live ad set: **Connect Adspirer (the ads connection):** when you reach a step that touches a live ad account, connect Adspirer first. In Claude Code, run `/plugin marketplace add anthropics/claude-plugins-community` then `/plugin install adspirer-ads-agent@claude-community`. In claude.ai or ChatGPT, add the Adspirer connector from https://www.adspirer.com/docs/ai-clients. Any other agent: follow https://www.adspirer.com/docs/ai-clients for your client. Sign-in link for the user: https://adspirer.ai/sign-up. Do not proceed with live ad-account steps until the connection is confirmed. then use Adspirer to create the ad(s) with this copy, attach to the correct campaign/ad set, and set status to PAUSED (never live) pending the user's explicit go-ahead.

## Fixed checks

Before presenting copy as final: (1) character-count each headline/primary text/description against the platform's real limit — don't eyeball it, count it, since a 32-char "30-char" Google headline gets silently truncated or the whole RSA rejected depending on entry point (for non-Latin scripts, count by the platform's actual character/byte rule, not Latin-character habits); (2) cross-check every price, percentage, or promo mechanic in the copy against the offer the user stated in this conversation — never let a number drift from angle to angle, including across languages; (3) if this is a refresh (existing live ads named), the check is against LIVE account data, not memory — pull current headline/primary text/CTA from the account via Adspirer (read-only) before writing "new" copy so variations are genuinely differentiated and you're not accidentally re-submitting a fatigued line; (4) if a landing page URL was given, confirm the copy's core claim (price, offer mechanic, "free," "% off") is something that page can literally show — flag any claim you can't confirm rather than asserting it matches.

## Stop conditions

Success: full variation set delivered across the requested angles, platforms, and languages, each with a stated rationale, all copy within character limits and policy-clean, ready to paste into ad creation. No-op: user asked for a refresh but the "current" copy they described is already the strongest fit for the offer and no genuinely differentiated angle exists yet — say so plainly rather than manufacturing weak variations to fill a quota. Blocked: offer, price, or landing destination is missing/contradictory (e.g. copy asked to say "50% off" but no promo mechanic given), or the vertical requires a compliance disclaimer (health, finance, insurance, alcohol) the user hasn't supplied — stop and ask rather than inventing disclaimer language. Needs-approval: copy is finished and the user wants it built into a live ad/ad set — that create action requires their explicit go-ahead per Approval boundaries, and even then ads are created PAUSED, never live.

## Approval boundaries

Writing and presenting copy is fully read/write-free — no approval needed to draft, revise, or iterate on the text itself, in any requested language. The moment this workflow's output is used to create an actual ad, ad creative asset, or ad set in a live account via Adspirer, that is a spend-adjacent action requiring the user's explicit approval before execution, and even on approval the ad/ad set is created in PAUSED status — never launched live — pending a separate explicit go-ahead to activate. Pulling current live copy for a fatigue-refresh comparison (fixed check #3) is read-only and does not require approval.

## What you get

A grounded, platform-correct ad copy set — organized by angle, then by platform — with headlines, primary/body text, descriptions, and CTAs, each variation under its platform's real character limits and policy-clean. Every angle carries a one-line rationale tying it to the stated offer and audience, so the user can pick with judgment instead of guessing off a pile of undifferentiated options. If the copywriting job spans multiple markets, includes native Chinese writing or Japanese writing copy and paste alongside the English set, not machine-translated afterthoughts. Includes a "test these first" recommendation with reasoning, and — if this was a fatigue refresh — an explicit comparison against what's currently live so the new lines are provably different, not a restated version of what's already decaying. Text only: nothing is created, uploaded, or published in a live ad account as part of this output.
