skills/content/email-copywriting/SKILL.md
Write emails people actually read. Use when crafting subject lines, structuring email content, writing CTAs, optimizing preview text, or improving open and click rates.
npx skillsauth add chunkydotdev/email-skills email-copywritingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Write emails people actually read - subject lines that get opened, body copy that gets read, and CTAs that get clicked.
spam-filter-avoidance - content patterns that trigger spam filterstemplate-design - HTML email templates that render everywhereab-testing - testing subject lines, content, and send timesonboarding-emails - welcome sequences and activation emailsemail-sequences - drip campaigns and automated sequencesemail-compliance - CAN-SPAM, GDPR, unsubscribe requirementsThe subject line determines whether your email gets opened. Average open rates hover around 22% globally, and most of the variance comes from the subject line.
Keep subject lines between 30 and 50 characters (roughly 5-9 words). Front-load the most important words - on mobile, anything past 35-40 characters gets cut off. The first 3-4 words need to carry the message on their own.
Good: Your API key expires Friday
Bad: Important information regarding the upcoming expiration of your API key
Question format - gets 21% higher open rates than statements because it engages curiosity:
Did you see the new dashboard?Ready to send your first email?How-to - promises clear value:
How to cut your bounce rate in halfHow 3 lines of code fix your deliverabilitySpecificity - numbers and concrete details outperform vague promises:
3 templates that reduced our churn by 40%Your March sending report: 12,847 deliveredCuriosity gap - incomplete information that only the email resolves:
The one setting most senders missWe changed how warmup works!!! or ??? signals spam.Re: or Fwd: on messages that aren't replies or forwards. This violates CAN-SPAM and destroys trust.Preview text is the snippet that appears after the subject line in the inbox list view. It's your second chance to earn the open.
The preview text should complement the subject line, not repeat it. Think of them as a one-two punch - the subject line hooks, the preview text sells.
| Subject Line | Bad Preview Text | Good Preview Text |
|---|---|---|
| Your March sending report | Your March sending report is ready | 12,847 delivered, 3 issues to fix |
| Ready to send your first email? | Get started with email sending | It takes 2 minutes. Here's how. |
| We changed how warmup works | Read about our warmup changes | 50% faster ramp-up, same deliverability |
If you don't set preview text explicitly, email clients pull the first visible text from your email body. This often means they show "View in browser" or "Unsubscribe" or your logo alt text - none of which help your open rate.
In HTML emails, add preview text as the first element in the body, then hide the remaining preheader space with invisible characters to prevent the email client from pulling additional body text:
<div style="display:none;max-height:0;overflow:hidden;">
Your preview text here.
͏ ͏ ͏ ͏ ͏ <!-- invisible spacers -->
</div>
How you organize the body matters as much as what you write. Three frameworks work well for email, each suited to different purposes.
Lead with the most important information. Supporting details follow. Background comes last (or gets cut).
[WHAT HAPPENED] "Your payment of $49 was processed."
[DETAILS] "Plan: Pro. Next billing date: April 15."
[ACTION IF NEEDED] "View receipt"
This works because most people scan emails, especially on mobile. If they only read the first sentence, they should get the core message. Transactional emails - receipts, alerts, status updates - should almost always use this structure.
Identify a problem the reader has. Make them feel the pain. Present your solution.
[PROBLEM] "Most teams don't know their emails are hitting spam
until a customer mentions it."
[AGITATE] "By then you've lost weeks of sends. Reputation damage
compounds - the longer it goes unnoticed, the harder
the recovery."
[SOLUTION] "Molted monitors your deliverability in real time and
alerts you the moment placement drops."
PAS works well when you know your reader's pain point. It fails when you guess wrong or when the agitation feels manipulative.
Grab attention. Build interest with relevant details. Create desire with benefits. Close with a clear action.
[ATTENTION] "We just shipped journey orchestration."
[INTEREST] "Event-driven email sequences that send based on what
users actually do, not a calendar."
[DESIRE] "Teams using it see 3x higher activation rates because
every email arrives at the right moment."
[ACTION] "Set up your first journey"
| Email type | Best framework | Why | |---|---|---| | Transactional (receipts, alerts) | Inverted pyramid | Reader needs the key info immediately | | Cold outreach | PAS | You need to earn attention by showing you understand their problem | | Product announcements | AIDA | You're building excitement toward a specific action | | Onboarding / activation | Inverted pyramid + CTA | Clear instruction, one next step | | Re-engagement | PAS | Remind them what they're missing | | Newsletters | Inverted pyramid | Lead with the best content, let readers self-select |
Different email types demand different tones. Using the wrong tone is one of the fastest ways to lose readers.
Transactional - clear, neutral, direct. These are utility emails. Don't try to be clever in a password reset email.
Subject: Reset your password
Body: Click the link below to set a new password. This link expires in 1 hour.
Onboarding - warm, encouraging, specific. Guide without condescending.
Subject: You just sent your first email
Body: Nice - your first email went out to [email protected] and was
delivered successfully. Here's what to try next.
Marketing - conversational, benefit-focused, energetic without being pushy.
Subject: 3 things that changed in March
Body: We shipped journey orchestration, revamped the dashboard, and
cut warmup time by half. Here's what each one means for you.
Cold outreach - brief, relevant, human. No pitch in the first sentence.
Subject: Quick question about your onboarding emails
Body: I noticed your trial-to-paid conversion is public at 12%.
Most of that drop happens in the first 48 hours after signup.
Would a 15-minute walkthrough of what high-converting onboarding
sequences look like be useful?
When AI agents draft emails, the copy often sounds robotic - overly formal, padded with filler, lacking personality. Good humanization follows these principles:
Three tone presets cover most needs:
Using {{first_name}} in a subject line is table stakes. It barely moves the needle anymore. Real personalization uses behavioral data to make the email genuinely relevant.
Tier 1 - Merge fields (basic):
Tier 2 - Segment-based (good):
Tier 3 - Behavioral (best):
The highest-converting emails reference exactly where the user is in their journey. Instead of time-based drips ("Day 3: here's a feature"), trigger emails based on milestones:
| Trigger event | Email content |
|---|---|
| user.signed_up | Welcome + quickstart guide |
| api.first_call made | "Nice - here's what to try next" |
| api.first_call not made after 24h | "Here's how to make your first API call" |
| email.first_sent | "Your first email is delivered" |
| Bounce rate spike | "Your bounce rate needs attention" |
The stall recovery emails - the ones that catch users who started but got stuck - consistently outperform scheduled drip emails because they're actually relevant.
Always declare fallback values for merge variables. An email that says "Hi {{first_name}}" when the data is missing looks broken. Set defaults:
{{first_name | default: "there"}}
{{company_name | default: "your team"}}
Template linting should catch undeclared variables before they reach production. Any variable used in a template but not declared in the template's variable list is a bug waiting to happen.
Emails with a single call to action increase click-through rates by up to 371% compared to emails with multiple competing CTAs. Every email should have one primary action you want the reader to take.
If you must include secondary links (e.g., documentation, a settings page), visually de-emphasize them. The primary CTA should be unmistakable.
Use action verbs that describe what happens next, not vague instructions:
| Weak CTA | Strong CTA | |---|---| | Click here | View your report | | Learn more | See the 3 new features | | Submit | Create my mailbox | | Get started | Send your first email |
First-person framing increases clicks by up to 90%. "Start my free trial" outperforms "Start your free trial."
Keep CTA text to 2-5 words. Longer than that and it stops looking like a button label.
The sentences around your CTA matter. A button that says "Set up your mailbox" works better when preceded by a reason:
Weak:
Click below to get started.
[Set up your mailbox]
Strong:
Your domain is authenticated and ready to send.
The last step is creating a mailbox - it takes about 30 seconds.
[Set up your mailbox]
78% of email opens happen on mobile devices. If your email doesn't work on a phone, it doesn't work.
Before sending, scan your email for 3 seconds on a phone-sized screen. Can you tell:
If not, restructure.
This isn't an either/or decision. Each format has a purpose.
Send multipart emails that include both HTML and plain text versions. The recipient's email client chooses which to display. This improves deliverability (spam filters view the plain text part as a positive signal) and handles clients that strip HTML.
If you send HTML without a plain text alternative, some spam filters flag the mismatch. Always include both parts.
Understanding why people leave helps you write emails that keep them. The top reasons, by frequency:
The most common reason by a wide margin. Sending more than one promotional email per day doubles unsubscribe rates.
Fix: Respect send frequency. More than 3 marketing emails per week to the same person is aggressive for most industries. Watch recipient fatigue signals - if someone hasn't engaged in 30+ days despite multiple sends, they're telling you to stop.
Fatigue scoring in production systems looks at weekly and monthly send counts, bounce history, complaint history, and days since last engagement. A recipient who's received 5+ emails in 7 days with zero engagement is a fatigue risk.
People signed up for one thing and got another, or the content stopped being useful.
Fix: Segment your audience. Send different content to different groups based on their behavior, not just their demographics. An enterprise customer and a hobbyist on a free plan shouldn't get the same email.
The sender added them to a list without explicit opt-in.
Fix: Use confirmed opt-in (double opt-in) for marketing lists. Never import purchased lists. This also protects your sender reputation - unsolicited email generates complaints that damage deliverability for all your sends.
Let subscribers control frequency and content type. A preference center that offers "weekly digest" vs. "every update" can save subscribers who would otherwise unsubscribe entirely.
The email is about what the reader gets, not what you did. "We're excited to announce our new feature" tells the reader nothing. "You can now send emails triggered by product events" tells them what changed for them.
If the most important information is in the third paragraph, most readers will never see it. Put the key message in the first 1-2 sentences.
Emails with more than 5 links trigger spam classification signals. Every link dilutes the impact of your primary CTA. Include only the links that serve the email's purpose.
Sending HTML-only emails hurts deliverability. Always include a plain text alternative. Multipart (HTML + text) is the standard.
"Monthly Update" or "Newsletter #47" tells the reader nothing about why they should open this specific email. Every subject line should promise specific value.
Most marketing emails should be 50-125 words. Transactional emails should be even shorter. If you need to explain something complex, link to a page - don't put the entire article in the email.
If you don't set preview text, the email client pulls whatever text comes first in your HTML - often navigation links, alt text, or "View in browser." This wastes prime real estate in the inbox.
Text in images isn't searchable, isn't accessible, and doesn't show when images are blocked. Use real text for important content. Reserve images for visual content that genuinely adds value.
Marketing emails must include an unsubscribe mechanism. Since 2024, Google and Yahoo require one-click unsubscribe via the List-Unsubscribe-Post header for bulk senders. Missing unsubscribe links are a template linting error that should be caught before send.
data-ai
Choose and configure an email service provider. Use when setting up email for a new project, comparing providers, migrating between providers, or adding failover.
development
Set up SPF, DKIM, and DMARC email authentication. Use when configuring a new sending domain, debugging spam/rejection issues, adding email providers, or preparing for Google/Yahoo/Microsoft bulk sender requirements.
development
Design and send transactional emails. Use when building password resets, receipts, shipping notifications, account alerts, or separating transactional from marketing streams.
development
Build welcome and activation email sequences. Use when designing signup flows, driving users to key actions, converting trials to paid, or reducing early churn.