Newsletter copy
Quick answer
- 01What is it?
- Generate newsletter sponsorship copy with 2-3 ready-to-paste variants, tracking URLs via link-creator, and placement-spec compliance. Pulls approved angles from an upstream ICP campaign when applicable. It brings Wispr Flow's specific operating context into email marketing, so the agent is guided by a sharper source than a generic prompt.
- 02Inputs
- Context for email marketing: your goals, audience, constraints, and any source material the skill asks for.
- 03Output
- A ready-to-use result for email marketing: the analysis, copy, or recommendations the agent produces.
Add this skill
Install as a package
Installs this one skill package for your coding agent, including any supporting files that skill ships with — not every skill in the repository. Read the tutorial.
$ npx skills add retieedra-profound/skills-marketing-library --skill newsletter-copySkill instructions
The instruction file for this skill. The skill also includes other files you need to install to use it.
Newsletter Copy Generator
Generate newsletter sponsorship copy briefs with ready-to-paste variants optimized for conversion. This skill produces complete copy briefs including multiple variants, tracking URLs, and placement specs.
Adapt the paths, domains, and IDs below to your own setup. This is the anchor of a sponsorship waterfall: it ingests a deal, researches the audience and prior performance, writes copy on proven best practices, then hands off to link-creator for tracked links and to copy-editing / writing for the final voice pass.
Pre-flight reminders
Before generating copy, check the per-user state file for reminders whose surface_when matches today AND whose surface_trigger includes newsletter-copy invocation. If one matches, surface it at the top of the output and list the pending placements whose submit-by dates are within 7 days.
Integration with an upstream ICP campaign
When a newsletter placement targets an ICP that already has a campaign package, read the campaign's messaging/approved-angles.md before writing. The newsletter copy becomes a short-form render of the anchor angle for the most relevant subgroup.
Handoff flow:
- An ICP campaign produces angle cards
/newsletter-copypulls the subgroup-relevant card and writes 2-3 newsletter-length variants/link-creatorprovides the Dub tracking URL for each variant/copy-editingpolishes before send to partner/writingfinal voice pass
When NOT to use
- Paid ad copy → generated within the ICP campaign
- General copy review →
/copy-editing
Process
- Gather inputs: newsletter name, placement date(s), placement type, campaign goal
- Pull partner performance from Dub (see Phase 0.5 below), required when the partner has ≥1 shipped placement. Drives angle selection.
- Load messaging: pull ICP messaging from your product context
- Check specs: verify character limits and placement constraints
- Generate variants: write 2-3 copy variants per placement, leaning into proven winners and avoiding recently-shipped angles
- Create a unique Dub link per placement (see Tracking Standards below), one short link per date, tagged with the partner, in the Sponsorships folder
- Deliver brief: complete brief using assets/copy-brief-template.md, with the performance-analysis table at the top so rationale is transparent
- Save the brief to
sponsorships/copy/{partner-slug}/YYYY-MM-DD-{publication}-{placement}.md(one file per send date, see File Organization below)
File Organization
Every sponsorship brief lives under sponsorships/copy/.
Rules
- One folder per partner. Folder name is the lowercase-hyphenated partner slug.
- One file per placement. File name is
YYYY-MM-DD-{publication}-{placement}.md.YYYY-MM-DD= send date{publication}= specific show/newsletter (for example,flagship,ai,tech,dev,founders,pm){placement}= ad unit (for example,primary,secondary,quicklinks,takeover,midroll)
- Never merge multiple send dates into one file. If you're drafting two placements on the same day, write two separate files so each has its own Dub link, compliance check, and sign-off trail.
_library/inside a partner folder = multi-placement planning docs (quarterly plans, master briefs). Overviews, not the final copy that ships._archive/inside a partner folder = superseded drafts, deprecated messaging. Keep for reference, never ship from here.- New partner? Create the folder using the partner slug and note any quirks in a partner-specific README (for example, a partner with multiple publications under one brand).
Required Inputs
| Field | Required | Description |
|---|---|---|
| Newsletter Name | Yes | The specific newsletter and publication |
| Placement Type | Yes | Primary, Secondary, Subject Line |
| Campaign Goal | Optional | Awareness, Trial Signups, Upgrades |
| ICP | Optional | Will infer from newsletter audience |
Placement Specs
| Placement | Char Limit | Purpose |
|---|---|---|
| Subject Line | ≤45 chars | Inbox hook (rarely available) |
| Preheader | 50-90 chars | Preview text |
| Primary | 150-250 words | Main ad unit (most common) |
| Secondary | 100-125 words | Shorter placement |
Phase 0: Silent Context Load
Before generating any copy, silently read your shared product context. Extract:
company.icps, use for audience matching per newslettercompany.messaging.value_props, use as proof points and angle sourcescompany.messaging.differentiators, use when claims need backing
If these fields are still unpopulated, proceed and infer the ICP from the newsletter audience. Flag at the end.
Phase 0.5: Performance Pre-Flight (REQUIRED)
Before drafting any copy, pull performance data for prior placements with this partner. Past performance is the single best signal for what angle to write next. This step is required when the partner has ≥1 shipped placement (skip only for net-new partners with no history).
Step 1: Pull placement-level data from Dub
Use the Dub REST API directly (the workspace-ID MCP lookup can 404):
source .env && curl -s -H "Authorization: Bearer $DUB_API_KEY" \
"https://api.dub.co/links?tagIds={PARTNER_TAG_ID}&pageSize=50&sort=createdAt"
Substitute the partner's tag ID from your private lookup. Each link object returns clicks, leads, sales, saleAmount, createdAt, and key (the slug, which encodes the send date).
Step 2: Cross-reference angles with the brief files
For each link with traffic, open the matching brief in sponsorships/copy/{partner}/YYYY-MM-DD-{publication}-{placement}.md and pull the Angle line. Performance is meaningless without knowing what angle ran.
Step 3: Build the analysis table
Render a table at the top of the new brief:
| Date | Placement | Angle | Clicks | Leads | Sales | $ | Lead CVR |
Order by send date. Compute lead CVR = leads / clicks.
Step 4: Identify winners, losers, and recent angles
Write 3-5 bullets under the table covering:
- Top performer by clicks / sales / $. The structural pattern to lean into.
- Top performer by lead CVR. The hook pattern to lean into.
- Anomalies (a placement with near-zero clicks usually means it didn't ship, not that the angle failed, flag, don't penalize).
- Recently-shipped angles (last 30 days). Avoid these to prevent fatigue on overlapping subscriber bases.
- Implication for this placement. State the angle choice and why.
Step 5: Drive angle selection from the read
The copy you write should clearly inherit from the analysis. If you pick a different angle than the data supports, justify it.
When to skip Phase 0.5
- Net-new partner with no shipped placements
- Partner tag does not exist yet (create via
POST /tagsfirst) - Same-week reshoot of a placement already drafted (use the existing draft's analysis)
ICP Messaging
Pull ICP messaging from your shared product context. If not yet populated, use defaults like these until the context is refreshed:
- Knowledge Worker: Speed (type faster by speaking), ease, works everywhere
- Leaders/Executives: ROI, team productivity, premium positioning
- Developers: IDE integration, syntax awareness, prompt power
Critical Copy Rules
- No em dashes (—) and no double hyphens (--), both signal AI-generated copy. Restructure with periods, commas, or parentheses instead.
- Match ICP voice to newsletter audience, tech newsletters get developer messaging.
- Include 2+ variants per placement, for testing and flexibility.
- Use verified proof points only, keep an approved-claims reference and pull from it.
- Stay under character limits, newsletters enforce strict limits.
- Unique link per placement, never reuse a short link across multiple send dates.
Tracking Standards (Dub.co)
Every newsletter placement gets its own Dub short link so click attribution lands on the specific send date.
Link pattern
| Field | Value |
|---|---|
| Domain | ref.wisprflow.ai |
| Slug | {partner}-{mmm}{dd} (readable, year-implicit, for example partnername-apr17) |
| Destination | https://wisprflow.ai/ (or ICP-specific page if targeted) |
| Folder | Sponsorships ({FOLDER_ID}) |
| Tag | The partner's own tag (one tag per main sponsor) |
| Track conversion | true |
| Title | Wispr Flow x {Partner} {Publication} — {Placement} {Date} |
UTM shape
| Param | Value | Example |
|---|---|---|
utm_source | {partner-slug} — one source per partner, groups all publications | partnername |
utm_medium | newsletter | newsletter |
utm_campaign | {partner}-{publication}-{yyyy}-{mm} (monthly rollup per publication) | partnername-flagship-2026-04 |
utm_content | {placement-type}-{yyyy-mm-dd} (unique per placement) | primary-2026-04-17 |
Partner tags
Keep one tag per main sponsor in a private lookup. New partner? Create the tag first via POST https://api.dub.co/tags (the Dub MCP cannot create tags), then add the ID to your lookup and to your /link-creator configuration.
How to create the link
Call your Dub create-link tool with the fields above, or hand off to /link-creator. The link returned is what you paste into the copy; Dub appends the UTMs server-side on redirect.
Output Format
Deliver a complete copy brief using assets/copy-brief-template.md with:
- Campaign context and goals
- 2-3 copy variants per placement
- Character counts and compliance checks
- UTM tracking URLs
- Proof point sources
- Approval checklist
Cross-References
- copywriting: for general marketing copy
- copy-editing: for copy review and improvement
- brand-voice: for brand voice consistency checks
- writing: final humanize pass before send
References
- references/framework.md, placement specs, funnel-stage hook mapping, copy patterns, and validation checklist
- assets/copy-brief-template.md, the output brief template
Supporting file: assets/copy-brief-template.md
Newsletter Copy Brief: [Newsletter Name] - [Campaign Name]
Date: [YYYY-MM-DD] Newsletter: [Newsletter Name] Placement Type: [Primary / Secondary / Subject Line] ICP: [Audience segment] Campaign Goal: [Awareness / Trial Signups / Upgrades]
Campaign Context
Why this placement? [Brief rationale for targeting this newsletter]
Key message: [One-sentence positioning]
CTA goal: [What action do we want readers to take?]
Copy Variants
Variant A
[Paste copy here]
Character count: [X] Compliance: [✓ / ✗] (em dashes removed, char limit met)
Variant B
[Paste copy here]
Character count: [X] Compliance: [✓ / ✗]
Tracking & UTMs
Landing page: [URL] UTM parameters:
utm_source=[partner-slug]utm_medium=newsletterutm_campaign=[partner]-[publication]-[yyyy]-[mm]utm_content=[placement-type]-[yyyy-mm-dd]
Full tracking URL:
[short link from link-creator]
Proof Points Used
[List any stats, testimonials, or claims referenced in copy with sources. Verified claims only.]
Approval Status
- Copy approved by [Name]
- Tracking URLs generated
- Newsletter specs confirmed (char limits, placement details)
- Submitted to newsletter team
Supporting file: references/framework.md
Newsletter Copy Framework
Reference for /newsletter-copy. Placement specs, funnel-stage hook mapping, copy patterns, and the validation checklist. Swap the example product framing (Wispr Flow, a voice-to-text tool) for your own, and replace every proof point with a verified claim from your own approved-claims list.
Placement Specs
| Placement | Character Limit | Purpose |
|---|---|---|
| Subject Line | ≤45 chars | Inbox hook, drives open |
| Preheader | 50-90 chars | Preview text, supports subject |
| Primary | 150-250 words | Main ad unit, full pitch |
| Secondary | 100-125 words | Shorter placement, key points |
| Tertiary | ≤50 words | Brief mention, one hook |
| Link Module | Title + 10-15 words | Clickable link with description |
Match the funnel stage to the audience
Pick the hook and CTA register from where the newsletter's audience sits relative to your product.
| Stage | Hook strategy | CTA register |
|---|---|---|
| TOF (indifferent) | Curiosity, identity, "did you know" | Soft: "See how", "Learn more" |
| MOF (frustrated) | Pain point, "tired of X?", comparison | Medium: "Try it", "See the difference" |
| MOF (open) | Demo, proof, "watch this" | Medium: "Watch demo", "See it work" |
| BOF (ready) | Social proof, pricing, urgency | Hard: "Start free", "Get started" |
Concept selection
Choose 1-2 angles that best match the audience. Each angle is a one-line world the copy lives in. Examples for a voice-to-text product:
| Concept | Best for | One-line world |
|---|---|---|
| Understands you | Frustrated typists | "Talk messy. It cleans it up." |
| Works everywhere | Multi-app users | "One mic for every app." |
| Time back | Busy professionals | "Move faster, log off sooner." |
| Prompt power | Developers, AI users | "Better input, better AI output." |
Hook patterns
Categories that travel well across audiences. Write fresh lines, don't reuse stale ones.
- Playful: lightly anthropomorphize the old way of doing things.
- Historical: frame the status quo as overdue for change.
- Personal discovery: "a tool that changed how I work."
- Tutorial / how-to: lead with a concrete, repeatable win.
- Pain point: name the exact friction the reader feels.
Bullet structure
Use a bold lead plus a supporting detail. Two to four bullets, never a forced trio.
- **Faster than typing.** Dictate emails, docs, and messages in real time.
- **Cleans up as you go.** Filler words and grammar handled automatically.
- **Works in every app with no setup.** Same shortcut everywhere you type.
Social proof
Use verified, attributable proof only. Never ship a quote you cannot source, and never reuse a retired endorsement. Placeholders:
"{VERIFIED_CUSTOMER_TESTIMONIAL}" — {Name, Title, Company}
Keep a short library of approved quotes with a status column, and pull only from the approved set.
CTA patterns
| Tone | CTA |
|---|---|
| Casual | "Give your hands a break, start free today" |
| Direct | "Try it free right now" |
| Benefit | "Start turning your voice into clean text, free" |
| Urgency | "Start free →" |
Image direction
When the placement allows an image, brief the designer to:
- Show the transformation (messy input → clean output)
- Include one piece of social proof if there's room
- Keep on-image text minimal (headline + CTA)
- Use the brand palette and platform badges where relevant
Formatting rules: avoid AI tells
| Pattern | Rule | Alternative |
|---|---|---|
| Em dashes (—) | Never use | Periods, commas, colons, or "and" |
| "Delve into" | Avoid | "Explore", "look at", "check out" |
| "Leverage" | Avoid | "Use", "with", "through" |
| "Seamlessly" | Avoid | Remove or use "smoothly" |
Examples:
- Bad: "This tool, the voice typing app, works everywhere"
- Good: "This is a voice typing tool that works everywhere"
- Bad: "Get clean text, instantly" (when written with an em dash)
- Good: "Get clean text, instantly" or "Get clean text. Instantly."
Proof points: keep a verified list
Maintain a table like this and pull only from rows marked Verified. Fill it with your own claims and sources.
| Claim | Status | Source |
|---|---|---|
| {speed claim, e.g. faster than typing} | Verified | Internal testing |
| {language coverage} | Verified | Product spec |
| {works across apps} | Verified | System-level integration |
| {auto-edit feature} | Verified | Core feature |
| {compliance certifications} | Verified | Security/compliance docs |
| {customer testimonial} | Verified | Public endorsement |
Validation checklist
Before delivering the brief:
- No em dashes anywhere in copy (critical: signals AI-generated)
- Character limits respected for all placements
- Copy matches the selected ICP voice
- At least 2 variants per placement
- Proof points are verified, attributable claims (no retired quotes)
- CTAs are clear and actionable
- UTM structure is correct, unique link per send date
- Image direction aligns with brand
Common questions
How do I install Newsletter copy in Cursor, Claude Code, or Codex?
Run npx skills add retieedra-profound/skills-marketing-library --skill newsletter-copy in the project where you want it, then ask your agent for the skill by name. The --skill flag installs only Newsletter copy, not every skill in the repository.
Where does Newsletter copy come from and what license is it under?
Newsletter copy comes from the retieedra-profound/skills-marketing-library repository on GitHub. The skill is published under the MIT license.
Prefer plain text? Read the Newsletter copy guide as markdown.
Related skills
More from Marketing Engineering Podcast
More Content skills