Category: Newsletters

  • ConvertKit vs. Beehiiv vs. Substack: which platform wins in 2026

    ConvertKit vs. Beehiiv vs. Substack: which platform wins in 2026

    If you’re launching a newsletter or considering a platform switch in 2026, you’re probably weighing ConvertKit, Beehiiv, and Substack. All three handle the basics—sending email, growing a list—but the pricing models, feature sets, and ideal operators diverge fast.

    Here’s the honest breakdown: what each does well, where each falls short, and who should pick which.

    Pricing structures and where they hurt

    ConvertKit bills on subscriber count. You’ll pay $29/month for up to 1,000 subscribers, $49/month for 3,000, and $79/month for 5,000. Every contact on your list counts, even if they never open. The free tier caps at 10,000 sends per month and strips out advanced automations.

    Beehiiv uses a hybrid model: the free tier supports up to 2,500 subscribers with full feature access, but you’ll hit send limits and branding. The Scale plan ($49/month) removes caps and adds custom domains, referral programs, and ad network access. If you monetise through ads or premium subscriptions, Beehiiv takes a 3% cut on top of Stripe fees until you upgrade to $99/month.

    Substack is free to send, forever. You pay nothing unless you charge readers. Then Substack takes 10% of gross subscription revenue, plus Stripe’s ~3%. No monthly fee, no subscriber caps. You’re trading platform fees for zero upfront cost.

    The pain point: ConvertKit penalises list growth. Beehiiv’s ad-network cut eats margin if you’re earning through sponsors. Substack’s 10% hurts most once you’re above $5K/month in revenue—that’s $500/month in platform fees alone.

    Feature depth and what’s actually useful

    ConvertKit leads on automation. You can build complex sequences, tag based on link clicks, segment by custom fields, and trigger emails from Zapier events. The visual automation builder is clean, and subscriber scoring helps you identify engaged readers. It’s built for creators who run multiple funnels and need granular control.

    Beehiiv focuses on growth tools. The referral program is native and easy to configure—readers unlock rewards by sharing your newsletter. The recommendation network cross-promotes you to other Beehiiv publishers. Polls, 3D analytics, and A/B testing on subject lines come standard. If you’re chasing rapid list growth and don’t need deep CRM features, Beehiiv’s toolset is optimised for that.

    Substack strips features to the bone. You get a text editor, a paywall toggle, and threading for discussions. No automation, no tagging, no custom fields. The mobile app drives discovery and reader engagement, but you can’t segment sends or personalise beyond first name. It’s a deliberate trade-off: simplicity over power.

    The decision point: pick ConvertKit if you’re running a business with lead magnets, courses, or multi-step onboarding. Pick Beehiiv if your primary goal is growing the list and monetising through ads or recommendations. Pick Substack if you want to write, charge, and ignore infrastructure.

    Who each platform is actually built for

    ConvertKit works best for course creators, coaches, and productised-service operators who treat email as the top of a conversion funnel. If you’re selling a $500 course or a $2K coaching package, the automation ROI justifies the monthly cost. You’ll use sequences to nurture cold leads and tags to segment buyers from browsers.

    Beehiiv fits media-style publishers and newsletter-first businesses aiming for five- or six-figure subscriber counts. The referral mechanics and ad network make sense if you’re optimising for reach and CPM-based revenue. If you’re planning to sell sponsorships or run your own ad placements, Beehiiv’s analytics and testimonial exports help close deals.

    Substack suits independent writers and commentary-focused creators who want readers to pay for the writing itself, not a product at the end of a funnel. The 10% fee is tolerable if you’re earning $2K–$10K/month and don’t want to manage infrastructure. Above $10K/month, the platform cut starts to sting, and migration becomes worth the effort.

    Migration friction and lock-in risks

    All three let you export your list as CSV. ConvertKit and Beehiiv support GDPR-compliant double opt-in imports; Substack requires you to email your list with a confirmation link before importing to another platform, which adds friction and drops some subscribers.

    ConvertKit’s automation and tagging data exports cleanly, but you’ll need to rebuild sequences on the new platform. Beehiiv’s referral program data doesn’t port anywhere—if you’ve built a referral flywheel, leaving means starting over. Substack’s discussion threads and community features don’t migrate; you lose the social layer.

    The lock-in hierarchy: Substack has the lowest technical lock-in but the highest social lock-in. Beehiiv locks you into growth mechanics. ConvertKit’s lock-in is workflow rebuilding, not data loss.

    If you’re just starting, pick based on where you want to be in 12 months. If you’re switching, model the cost of recreating what you’ve built versus the cost of staying. ConvertKit at $79/month is cheaper than Substack’s 10% once you’re earning $800/month. Beehiiv’s $99/month makes sense if it replaces a separate referral tool and an analytics dashboard.

    Want more tool breakdowns like this? Subscribe to One Two Three Send for weekly comparisons, no sales pitch.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • Substack’s paid subscriber import: how it works and what breaks

    Substack’s paid subscriber import: how it works and what breaks

    If you’re switching to Substack with an existing paid subscriber base, you’ll quickly discover that importing them isn’t a one-click operation. The platform treats free and paid subscribers very differently—and the tooling around paid imports is intentionally limited to protect both you and your readers from billing chaos.

    Here’s how the process actually works, what limitations you’ll hit, and the non-obvious gotcha that can cost you a month of revenue if you’re not careful.

    The two-path import: free vs. paid

    Free subscribers upload via CSV without friction. You export from your old platform, map the columns, and Substack ingests them in minutes. Paid subscribers require a different workflow because Substack needs to connect each person to an active billing relationship—either a Stripe subscription ID or a comped status you manually assign.

    If your previous platform used Stripe, Substack can import the subscription metadata directly—but only if both accounts share the same Stripe Connect relationship. That’s rare unless you were already using a Stripe-native platform like Ghost or a custom-built membership site. Most operators are coming from ConvertKit, Mailchimp, or Beehiiv, none of which expose raw Stripe subscription IDs in their CSV exports.

    That means you’ll use the comped subscriber route: you import paid subscribers as free accounts, then manually apply a “complimentary subscription” that grants them full access without charging them. Substack treats comped subs identically to paid ones for content access, but they don’t appear in your MRR calculations and won’t auto-renew unless you later convert them to a paid plan.

    The billing cutover problem

    Here’s the edge case that catches people: if you comp your existing paid subscribers and tell them to re-subscribe at their next renewal date, you’ll lose anyone whose renewal falls in the window between your import and your announcement. They’ll get charged by your old platform, then hit a paywall on Substack, and assume something broke.

    The safer approach is to cancel all subscriptions on your old platform before you import, refund any partial-month charges, and immediately comp everyone on Substack with an expiration date set to their original renewal. Then send a dedicated email explaining the transition and asking them to update their payment method before the comp expires. Substack will email them automatically seven days before expiration, but your own message converts better because it comes from you, not the platform.

    Expect 10–15% of comped subscribers to churn during this transition. That’s normal. The ones who don’t update their payment info within 30 days probably weren’t engaged enough to stay long-term anyway.

    The Stripe metadata you actually need

    If you do have access to Stripe subscription IDs—either because you’re migrating from Ghost, or because you were running Stripe directly—you’ll still need to provide Substack support with a CSV that maps each email address to its subscription ID and current billing cycle anchor date. You can’t upload this yourself; Substack’s backend team handles it manually to avoid mismatched billing states.

    Turnaround time is typically 3–5 business days, and they’ll only process it if your Stripe account is already connected to your Substack publication. If you’re switching Stripe accounts as part of the migration (common if you’re moving from a business entity to a personal one, or vice versa), you’ll need to use the comp method instead. Substack won’t connect a subscriber to a subscription ID that lives in a different Stripe account.

    When to skip the import entirely

    If you have fewer than 50 paid subscribers, the cleanest move is often to let them re-subscribe manually. Cancel their old subscriptions, refund the current billing period, and send a launch email with a discounted annual plan offer that offsets the hassle. You’ll lose some, but you’ll also avoid two weeks of support emails from people whose billing states didn’t migrate cleanly.

    For lists above 200 paid subscribers, the comp-and-convert method is worth the effort. Between 50 and 200, it depends on how hands-on you want to be and whether you’re also changing pricing or plan structure as part of the move.

    One last note: if you’re moving to Substack because you want their payment infrastructure to handle sales tax, VAT, and global compliance, make sure you’re not grandfathering in subscribers at old prices that don’t include tax. Substack’s tax automation only works on new subscriptions created after you enable it. Comped subscribers who convert will be charged tax, but anyone you migrate via Stripe ID handoff will keep their original tax treatment unless you manually update each subscription in Stripe. That’s a billing-support nightmare six months later when your accountant asks why half your EU subscribers aren’t remitting VAT.

    If you’re planning a platform migration and want step-by-step breakdowns like this every week, subscribe to One Two Three Send. We cover the tooling decisions that actually matter when you’re running a one-person content business.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • ConvertKit vs. MailerLite: which ESP fits a sub-5,000 list

    If you’re running a content business with fewer than 5,000 subscribers, you’re in the sweet spot where platform choice actually matters. Pick wrong and you’ll either overpay for features you don’t use or outgrow your tool in six months.

    ConvertKit and MailerLite both target solo operators and small teams, but they solve different problems. Here’s what each does well, where each falls short, and who should pick which.

    Pricing: where the gap widens

    MailerLite’s free tier covers up to 1,000 subscribers and includes automation, landing pages, and a website builder. You’ll pay $9/month for 1,000–2,500 subscribers, $18/month for 2,500–5,000.

    ConvertKit starts at $25/month for up to 1,000 subscribers. At 2,500 subscribers you’re paying $41/month; at 5,000 it’s $66/month. There’s a free tier capped at 300 subscribers, but it strips out automation—the main reason to use ConvertKit in the first place.

    If budget is tight and you’re just starting, MailerLite saves you $300–$600/year at the same list size. ConvertKit’s pricing assumes you’re monetising early or plan to.

    Automation: depth vs. simplicity

    ConvertKit’s visual automation builder lets you branch, tag, delay, and score subscribers based on link clicks, form submissions, product purchases, and custom events. You can build sequences that feel like decision trees. It’s overkill if you’re just sending a weekly digest, but essential if you’re running a paid community, a course funnel, or segmented content tracks.

    MailerLite’s automation is lighter. You get triggers, delays, conditions, and basic branching. It handles welcome sequences, re-engagement flows, and simple product funnels without friction. But once you need multi-step logic—like “if they clicked this link but didn’t buy, tag them and send a different sequence”—you’ll hit the ceiling fast.

    Non-obvious tip: MailerLite’s workflow editor saves every change instantly. ConvertKit requires you to manually activate automations after editing. That’s a feature, not a bug—it prevents you from accidentally breaking a live sequence. But it also means you need to remember to turn things back on.

    Forms, landing pages, and creator-focused extras

    Both platforms include landing pages and signup forms. MailerLite’s templates look cleaner out of the box and load faster. ConvertKit’s forms integrate tightly with its tagging system, so you can pre-segment subscribers at signup without Zapier.

    ConvertKit also includes a commerce layer—you can sell digital products, subscriptions, and tip jars directly through the platform. It takes a 3.5% + $0.30 transaction fee on top of Stripe’s cut, but it’s built in. MailerLite doesn’t offer native e-commerce; you’ll need to connect Gumroad, Stripe Checkout, or a course platform.

    If you’re monetising through paid newsletters or digital products, ConvertKit’s commerce tools save you from duct-taping three services together. If you’re running ads, affiliates, or sponsorships, MailerLite’s lower base cost matters more.

    Deliverability and reporting

    Both platforms maintain strong sender reputations and handle SPF/DKIM setup for you. Deliverability differences at this scale come down to list hygiene, not platform choice.

    ConvertKit’s reporting is subscriber-centric: you can see every action a single subscriber took across broadcasts, automations, and landing pages. MailerLite’s reporting is campaign-centric: opens, clicks, unsubscribes per send. ConvertKit’s view is better for understanding individual journeys; MailerLite’s is faster for diagnosing a bad campaign.

    Who should pick which

    Choose MailerLite if you’re pre-revenue, sending one or two emails per week, and need to keep costs under $20/month. It’s also the better pick if you value design flexibility and don’t need multi-step conditional logic.

    Choose ConvertKit if you’re already monetising, running segmented content tracks, or plan to sell directly through email. The automation depth and commerce tools justify the higher price once you’re past the “is this working?” phase.

    For most operators under 5,000 subscribers, the decision comes down to one question: are you optimising for cost or for automation depth? MailerLite wins the first; ConvertKit wins the second. Neither is a bad choice—just different bets on where your business is headed.

    Want more tool breakdowns like this? Subscribe to One Two Three Send and get honest comparisons, operator-focused tutorials, and no-fluff guidance every week.

  • Postmark’s message streams: separate logs for transactional and broadcast

    Postmark’s message streams: separate logs for transactional and broadcast

    Postmark ships with a feature most operators discover only after they’ve already mixed password resets with product announcements: message streams. They let you route different types of email through separate pipelines, each with its own delivery tracking, suppression list, and sender reputation.

    If you’re running both transactional email—receipts, login links, account notifications—and broadcast messages like product updates or weekly digests, message streams keep the two from contaminating each other’s deliverability.

    What message streams actually do

    Every Postmark account starts with two default streams: Transactional and Broadcasts. When you send an email via API or SMTP, you specify which stream it belongs to. Postmark then tracks opens, clicks, bounces, and spam complaints separately for each stream.

    This separation matters because transactional email—password resets, order confirmations—typically sees open rates above 60% and near-zero spam complaints. Marketing broadcasts might hit 20% opens and attract a handful of complaints, even when people opted in. If you mix them in one stream, a spike in broadcast complaints can drag down your overall sender reputation, which affects all your email, including the critical transactional stuff.

    Each stream also maintains its own suppression list. If someone marks your newsletter as spam, Postmark adds their address to the Broadcasts suppression list—but they’ll still receive password resets and receipts from the Transactional stream. You don’t lose the ability to send account-critical email just because someone unsubscribed from marketing.

    When to create custom streams

    Beyond the two defaults, you can create additional streams for specific use cases. Here are three that make sense for solo operators and small teams:

    Onboarding sequences. If you run a multi-email onboarding series—welcome, getting-started tips, feature walkthroughs—route it through a dedicated stream. Onboarding email sits between transactional and broadcast: it’s expected, but not urgent. Separating it lets you monitor completion rates and deliverability without muddying your core transactional metrics.

    Digest emails. Weekly or monthly roundups often see lower engagement than one-off broadcasts. A separate stream lets you track digest-specific open rates and adjust frequency without affecting your main broadcast reputation.

    Partner or affiliate sends. If you occasionally send email on behalf of a partner—joint webinars, co-marketing—isolate it. Partner sends introduce variables you don’t control: list quality, subject lines, content. A separate stream quarantines the risk.

    Postmark allows up to ten streams per account. You don’t pay extra for them, but each stream requires its own API token and SMTP credentials, so there’s a small setup cost.

    How to route messages to the right stream

    If you’re using Postmark’s API, you specify the stream with a MessageStream parameter in your JSON payload. For SMTP, you set the stream by choosing the correct SMTP credentials during configuration—each stream generates its own username and password.

    Most developers default to the Transactional stream for everything, then wonder why their welcome emails show up in spam. The fix: audit every email type your app sends, classify it as transactional or broadcast, and route accordingly. Receipts, password resets, and two-factor codes go to Transactional. Product updates, newsletters, and nurture sequences go to Broadcasts or a custom stream.

    The non-obvious tip: use streams to test reputation recovery

    If your broadcast deliverability tanks—inbox placement drops, spam complaints spike—create a new message stream, warm it with a small segment of your most engaged subscribers, and migrate your broadcast sends over two weeks. The new stream starts with a clean reputation. You can’t erase your domain’s history, but you can isolate future sends from past damage.

    This works because Postmark treats each stream as a separate sender profile. ISPs still see your domain and IP, but the engagement patterns and complaint rates reset. It’s not a magic fix—if your content or list quality is broken, the new stream will degrade just as fast—but it buys you time to tighten your targeting and content.

    One warning: don’t create streams just to dodge suppression lists. If someone complained about your email, they don’t want any of your marketing, regardless of which stream it comes from. Routing around suppressions will get your account suspended.

    If you’re already using Postmark and haven’t set up separate streams for transactional and broadcast email, do it this week. The deliverability buffer alone justifies the ten minutes of setup. And if you’re evaluating Postmark against other ESPs, message streams are one of the features that separate it from basic SMTP relays.

    Got a question about email infrastructure or a tool you’d like us to cover? Reply to this email—we read every response and use them to shape future articles.

  • ConvertKit’s subscriber tagging limit and how to work around it

    ConvertKit doesn’t advertise it loudly, but there’s a hard limit: 10,000 tags per subscriber. For most operators, that sounds absurdly high. But if you’ve been running automations for a year or more—especially if you tag based on link clicks, form submissions, or purchase behavior—you can hit it faster than you think.

    When you do, ConvertKit silently stops applying new tags to that subscriber. No error message in the UI. No email alert. The automation runs, the subscriber moves through the sequence, but the tag never lands. You only notice when a segment comes up empty or a conditional split sends someone down the wrong path.

    How you hit the limit without realizing it

    The most common culprit: date-stamped tags. If you’re tagging subscribers with things like clicked_link_2024-05-15 or opened_email_january_2026, you’re creating a new tag every single day or week. Multiply that across a dozen automations, and a subscriber who’s been on your list for 18 months can easily accumulate 3,000+ tags.

    Link-click tracking is another one. If you tag every link click with a unique identifier—say, clicked_affiliate_link_productA, clicked_affiliate_link_productB, and so on—you’re burning through your tag budget fast, especially if you publish daily or run frequent promotions.

    Purchase tags are safer, but only if you’re disciplined. Tagging purchased_course_A is fine. Tagging purchased_course_A_via_email_campaign_spring2026 is not. The more specific you get, the faster you hit the ceiling.

    How to audit your current tag usage

    ConvertKit doesn’t surface per-subscriber tag counts in the dashboard, so you’ll need to export your subscriber list and count manually. Go to Subscribers → Export, download the CSV, and open it in Google Sheets or Excel. Each subscriber row will have a Tags column with a comma-separated list.

    Use a formula like =LEN(A2)-LEN(SUBSTITUTE(A2,",",""))+1 to count how many tags each subscriber has. Sort descending. If anyone’s above 8,000, you’re close to the edge.

    While you’re in there, scan for patterns. Look for date-stamped tags, redundant event tags, or anything that increments indefinitely. Those are your cleanup targets.

    Two strategies to stay under the limit

    Strategy one: replace incremental tags with custom fields. Instead of tagging last_clicked_2026-05-24, create a custom field called last_click_date and update it with each action. Custom fields don’t count toward the tag limit, and you can still segment or filter by date. The tradeoff: you lose the historical record. If you need to know every date someone clicked, this won’t work. But if you only care about the most recent action, it’s cleaner.

    Strategy two: archive old tags in bulk. ConvertKit lets you remove tags from subscribers, but there’s no native “delete all tags older than X date” feature. You’ll need to export, filter by tag name pattern (e.g., anything containing 2024), then use the bulk actions menu to remove those tags from the affected subscribers. This is manual, but if you do it quarterly, it keeps your tag count manageable.

    One more option: if you’re tagging for analytics purposes—tracking which emails drove the most clicks, for example—consider moving that data out of ConvertKit entirely. Tools like Plausible or Fathom can track link clicks via UTM parameters, and you won’t burn tags on behavior you’re only measuring, not acting on.

    When the limit actually matters

    For most solo operators, 10,000 tags per subscriber is still overkill. If you’re running a simple welcome sequence, a few product-based segments, and occasional broadcasts, you’ll never get close. The limit only becomes a problem if you’re running complex, multi-branch automations that tag aggressively at every decision point.

    But if you are in that category—if you’re running a membership site, a course platform, or a content business with dozens of lead magnets and automations—this is worth auditing now, before a subscriber silently stops receiving the tags that trigger your most important sequences.

    Want more feature breakdowns like this? Subscribe to One Two Three Send for weekly deep dives on the tools that run your online business—no fluff, just the mechanics that matter.

  • ConvertKit’s subscriber score: how it ranks engagement and why it’s wrong

    ConvertKit quietly calculates an engagement score for every person on your list. It’s a single number—0 to 100—that’s supposed to tell you who cares and who doesn’t. The platform uses it to sort subscribers in reports, flag cold contacts, and guide re-engagement decisions.

    Most operators never look at it. The ones who do often misread what it measures—and make pruning or segmentation calls based on incomplete signals.

    Here’s what the score actually tracks, when it’s useful, and where it leads you astray.

    What drives the score

    ConvertKit’s engagement score weighs three behaviors:

    • Opens: How often a subscriber opens your emails in the past 90 days.
    • Clicks: How often they click links inside those emails.
    • Recency: How recently they’ve done either.

    Opens carry the most weight. A subscriber who opens every email but never clicks will score higher than someone who clicks occasionally but skips half your sends. Recency acts as a multiplier—someone who opened yesterday gets a bump over someone who opened 80 days ago, even if their long-term open rate is identical.

    The score doesn’t consider:

    • Whether they bought something
    • Whether they replied to an email
    • Whether they visited your site via a link (unless they also clicked in the email)
    • How long they’ve been subscribed

    It’s a deliverability proxy, not a business metric. ConvertKit designed it to help you identify contacts who hurt your sender reputation—not contacts who drive revenue.

    When the score matters

    The score is useful in two narrow scenarios.

    Pre-pruning cold contacts. If you’re preparing to scrub your list, sort by engagement score and review everyone below 20. These are the people who haven’t opened or clicked in months. Removing them improves your open rate and keeps inbox providers from flagging your domain. Just don’t auto-delete based on score alone—check signup date and source first. A subscriber who joined two weeks ago and hasn’t engaged yet isn’t cold; they’re new.

    Segmenting for re-engagement campaigns. Run a win-back sequence to subscribers scoring 10–30. They’re not dead, but they’re fading. A subject line refresh, a content pivot, or a simple “still interested?” email can pull them back. Anyone below 10 is harder to recover and may not be worth the send cost.

    Where the score misleads

    The engagement score breaks down when you treat it as a proxy for value.

    High scorers aren’t always your best subscribers. Someone who opens every email but never buys, never replies, and never shares your work scores higher than someone who buys twice a year but only opens when they need something. ConvertKit can’t see purchase behavior unless you tag it manually—and even then, it doesn’t factor into the score.

    Low scorers aren’t always dead weight. Plenty of valuable subscribers skim subject lines in their inbox and only open when a topic hits. They might visit your site directly, bookmark your archive, or consume your content via RSS. Their engagement score tanks, but they’re active in ways the platform can’t measure.

    The 90-day window hides seasonality. If you run a tax-prep newsletter, subscribers who engage in February and March will score poorly in June—even though they’re likely to come back next year. A hard cutoff at 90 days doesn’t account for cyclical engagement.

    What to use instead

    If you want to identify your most valuable subscribers, layer in context the score doesn’t capture:

    • Tag purchases and replies. Create segments for buyers and people who’ve replied to a broadcast. These are your highest-intent contacts, regardless of open rate.
    • Track link clicks by type. ConvertKit lets you filter by clicked link. Someone who clicks affiliate links or product pages is more valuable than someone who clicks every “read more” button.
    • Monitor unsubscribe timing. If low-engagement subscribers stick around for months without unsubscribing, they’re choosing to stay. That’s signal, even if they’re not opening.

    The engagement score is a starting point, not a verdict. Use it to spot patterns, but don’t let it override what you know about how your audience actually behaves.

    Want more tool breakdowns like this? Subscribe to One Two Three Send for weekly deep-dives on the features that shape how you run your online business—no fluff, just the mechanics that matter.

  • Transactional email vs. marketing email: when to use which

    Transactional email vs. marketing email: when to use which

    Most solo operators start with one email service provider and route everything through it: welcome emails, password resets, weekly newsletters, product updates, receipts. It’s simple, it works, and for a while there’s no reason to change.

    Then something breaks. A welcome email arrives four hours late. A password reset never shows up. Or worse: your newsletter gets a spam complaint, and suddenly all your emails—including order confirmations—land in the promotions tab or get delayed.

    The root issue is conflating two fundamentally different types of email: transactional and marketing. They serve different purposes, have different legal rules, and need different infrastructure. Mixing them creates risk you don’t see until it costs you money.

    What makes an email transactional

    Transactional emails are triggered by a user action and contain information the recipient explicitly requested or needs to complete that action. Examples:

    • Password resets and login links
    • Order confirmations and receipts
    • Account notifications (payment failed, subscription renewed)
    • Download links after a purchase
    • Two-factor authentication codes

    These emails are expected. The user did something, and your system is responding. CAN-SPAM and GDPR treat them differently because they’re not commercial messages—they’re functional infrastructure.

    Marketing emails are everything else: newsletters, product announcements, promotional offers, content roundups. They require explicit consent in most jurisdictions, must include an unsubscribe link, and are subject to stricter anti-spam rules.

    The line blurs with hybrid emails—like a receipt that also suggests related products—but if the primary purpose is commercial, it’s marketing.

    Why reputation matters more than you think

    Email service providers (Gmail, Outlook, Yahoo) track sender reputation at the domain and IP level. If you send both transactional and marketing email from the same domain, a single spam complaint on your newsletter can damage deliverability for your password resets.

    This is why companies like Stripe and Shopify send transactional email from dedicated domains (receipts come from @stripe.com, but newsletters come from subdomains or separate services). They’re isolating reputation risk.

    For solo operators, the practical version of this is: use a dedicated transactional ESP for critical emails. Route your password resets, purchase confirmations, and login links through a service built for speed and reliability. Send your newsletter through a platform optimized for bulk sends, engagement tracking, and unsubscribe management.

    Postmark is the gold standard here—transactional-only, no marketing allowed, designed for sub-second delivery. Pricing starts at $15/month for 10,000 emails, and because these are triggered sends (not bulk), most operators stay under 1,000/month. If you’re on WordPress and using a membership plugin or WooCommerce, you’re already generating transactional email. Route it through the right pipe.

    When to split your setup

    You don’t need two ESPs on day one. If you’re pre-revenue or sending fewer than 100 emails a month total, the complexity isn’t worth it. But you do need to split when:

    • You’re processing payments or running a membership site (receipts and login emails must arrive instantly)
    • Your newsletter list is growing past 500 subscribers (spam complaints become statistically inevitable)
    • You’ve had a deliverability issue with transactional email (password resets delayed, order confirmations in spam)
    • You’re sending time-sensitive notifications (webinar reminders, expiring cart links)

    The cost of a delayed or missing transactional email—lost sale, frustrated customer, support ticket—is higher than the $10–15/month for a dedicated service.

    How to route it correctly

    If you’re on WordPress, install a transactional plugin (WP Mail SMTP, Postmark’s official plugin, or Brevo‘s SMTP add-on) and configure it to handle system emails. Your membership plugin, WooCommerce, and form notifications should route through this.

    Your newsletter platform (Beehiiv, MailerLite, ConvertKit) handles everything else: weekly sends, product launches, content updates. These platforms are built for engagement tracking, A/B testing, and list segmentation—features you don’t need (and don’t want) in a password reset.

    If you’re not on WordPress, check your app’s email settings. Most SaaS tools let you configure SMTP credentials. Point transactional sends to your transactional ESP, and keep marketing sends in your newsletter tool.

    One non-obvious tip: set up separate subdomains. Send transactional email from mail.yourdomain.com and newsletters from news.yourdomain.com. This isolates reputation at the DNS level and makes it easier to debug deliverability issues later.

    If you’re routing everything through one service today and haven’t had a problem yet, you’re not wrong—you’re just early. But when you hit the threshold where mixing email types starts costing you conversions, you’ll know exactly what to fix.

    Got a question about your email setup? Reply to this email—I read every message and often turn answers into future pieces.

    Heads up — some links in this article are affiliate links. If you sign up through them, we may earn a small commission at no extra cost to you. We only recommend tools we use ourselves.

  • ConvertKit’s creator network: how it works and what it actually costs

    ConvertKit’s creator network: how it works and what it actually costs

    ConvertKit’s Creator Network is a cross-promotion engine built directly into the platform. Turn it on, and ConvertKit will recommend your newsletter to readers of similar publications—and recommend others’ newsletters to yours. It’s framed as free, mutual growth. No ad spend, no landing pages, just algorithmic matchmaking between creators.

    The pitch is compelling, especially if you’re early and desperate for subscribers. But the mechanics are more nuanced than the dashboard toggle suggests, and the costs—while not monetary—are real.

    How the network actually works

    When you enable the Creator Network, ConvertKit starts showing recommendation cards to your subscribers. These appear in two places: in a dedicated email ConvertKit sends on your behalf, or embedded at the bottom of your broadcasts if you use their default templates.

    The recommendations are algorithmic. ConvertKit looks at your content tags, subscriber behavior, and engagement patterns, then surfaces newsletters it thinks your readers will like. You don’t choose who gets recommended to your list. ConvertKit does.

    In exchange, your newsletter gets recommended to other creators’ audiences under the same logic. You’re both publisher and advertiser, simultaneously.

    ConvertKit takes a 50% cut of the exposure. If 100 of your subscribers see a recommendation card, ConvertKit will show your newsletter to roughly 50 subscribers on someone else’s list. The ratio isn’t strict, but it’s the general exchange rate.

    What it costs you (and it’s not money)

    The Creator Network is free in dollars, but expensive in control and attention.

    You’re giving ConvertKit permission to email your list. If you enable the standalone recommendation emails, ConvertKit will send a message to your subscribers that you didn’t write, on a cadence you don’t control, promoting newsletters you didn’t vet. Your readers don’t distinguish between “ConvertKit sent this” and “my newsletter sent this.” It’s your sender name. It’s your brand. You own the confusion and the unsubscribes.

    You’re training readers to expect content you didn’t create. Even if you only use in-broadcast embeds, you’re conditioning your audience to scroll past house ads. That’s fine if your newsletter is purely a growth vehicle. It’s corrosive if your newsletter is a trust engine or a product funnel.

    You’re sharing your best readers with competitors. ConvertKit recommends based on engagement. That means your most active subscribers—the ones who open, click, and convert—are exactly the ones being shown other newsletters. You’re not cross-promoting to lurkers. You’re offering your most valuable segment to someone else.

    You have no veto power. You can’t blacklist competitors. You can’t filter by monetization model or editorial quality. If ConvertKit’s algorithm decides a newsletter is similar enough, it gets shown. You’re trusting the platform’s taste and incentives to align with yours.

    When it makes sense to turn it on

    The Creator Network works best in three scenarios:

    If you’re pre-monetization and pure subscriber count is your only goal, the trade-off is reasonable. You’re swapping attention for attention, and you don’t yet have a business model to protect.

    If your newsletter is in a tightly-defined niche where most other creators are collaborators, not competitors—think local news, hyperlocal events, or hobby communities—cross-promotion strengthens the ecosystem instead of fragmenting it.

    If you’re already doing manual cross-promotions and finding it exhausting, the Creator Network automates the same dynamic. You lose control, but you gain scale and consistency.

    The non-obvious tip: use it as a discovery tool, not a growth tool

    Here’s what ConvertKit doesn’t advertise: you can enable the Creator Network, see which newsletters get recommended to your audience, then reach out to those creators directly for a manual swap or partnership.

    Turn on the network for a month. Watch the analytics. Identify which recommendations your readers actually engage with. Then disable it, email those creators, and negotiate terms you control: co-branded emails, shared lead magnets, or affiliate partnerships.

    You get the signal without the long-term cost. ConvertKit’s algorithm becomes market research, not your growth strategy.

    Want more breakdowns like this? Subscribe to One Two Three Send for weekly deep-dives on the tools and tactics that actually move online businesses forward. No fluff, no sponsored takes—just honest operator-to-operator breakdowns.

  • ConvertKit’s broadcast scheduling vs. send-time optimisation

    ConvertKit’s broadcast scheduling vs. send-time optimisation

    ConvertKit gives you two ways to schedule a broadcast: pick a fixed time, or let the platform choose based on each subscriber’s past behavior. The second option—send-time optimisation—sounds smarter. It usually isn’t.

    Most solo operators turn on send-time optimisation assuming it’s a free win. Sometimes it is. More often, it fragments your send window, dilutes your traffic spike, and makes your analytics harder to read. Here’s how to decide which method fits your business model.

    Fixed scheduling: what you’re actually choosing

    When you schedule a broadcast for 9:00 AM Eastern, every subscriber gets it at 9:00 AM Eastern. Simple. Predictable. Your entire list receives the email within a few minutes, your traffic spike is concentrated, and your open rate settles within an hour.

    This matters if you’re driving traffic to a live event, a product launch with a deadline, or a piece of content where early engagement (comments, shares, replies) creates momentum. If fifty people hit your article in the first ten minutes, your server logs show a spike, your social proof builds fast, and your analytics are clean.

    Fixed scheduling also makes troubleshooting easier. If your open rate tanks, you know exactly when the send happened and can cross-reference it with deliverability logs, spam complaints, or external factors (a news event, a holiday, a platform outage).

    Send-time optimisation: what ConvertKit is actually doing

    When you enable send-time optimisation, ConvertKit looks at each subscriber’s past open behavior and schedules delivery for the hour they’re statistically most likely to open. Someone who always opens at 6:00 AM gets it at 6:00 AM. Someone who opens at 11:00 PM gets it at 11:00 PM.

    Your send window stretches across 24 hours. Your traffic arrives in a slow trickle instead of a sharp spike. Your open rate might climb a few percentage points—or it might stay flat, because the algorithm is working with limited data and guessing based on past behavior that may not predict future attention.

    The feature works best if you have a large list (10,000+ subscribers), consistent send history (at least six months), and content that isn’t time-sensitive. A Sunday essay, a weekly roundup, or an evergreen tutorial can arrive anytime and still deliver value. A flash sale, a webinar reminder, or a breaking-news commentary cannot.

    When send-time optimisation backfires

    If you’re running a small list (under 2,000 subscribers), ConvertKit doesn’t have enough data to meaningfully optimise. The algorithm falls back to rough estimates, and you’re spreading your send across 24 hours for no measurable gain.

    If you’re tracking referral traffic in Google Analytics, a 24-hour send window makes attribution messy. Your traffic graph looks flat instead of spiked, and it’s harder to isolate which traffic came from the email versus organic search, social, or other sources.

    If you’re selling something with urgency—early-bird pricing, limited inventory, a countdown timer—send-time optimisation means some subscribers see the offer twelve hours after others. That’s not personalisation. That’s a coordination failure.

    The non-obvious tip: test it by segment, not by broadcast

    Don’t enable send-time optimisation across your entire account. Instead, create two segments: one for engaged subscribers (opened at least three of your last ten emails), one for cold subscribers (opened fewer than three). Send the engaged segment at a fixed time. Send the cold segment with send-time optimisation.

    Your engaged readers already open reliably. They don’t need algorithmic coddling—they need consistency. Your cold subscribers might benefit from a delivery time that aligns with their past (limited) engagement. If send-time optimisation lifts their open rate by even two percentage points, you’ve re-engaged a slice of your list without sacrificing the predictability your core audience expects.

    Run this for a month. Compare open rates, click rates, and unsubscribe rates across both segments. If the cold segment shows improvement, keep it. If the difference is negligible (under three percentage points), revert to fixed scheduling and simplify your workflow.

    ConvertKit’s documentation sells send-time optimisation as a set-it-and-forget-it win. It’s not. It’s a trade-off: you sacrifice timing control and traffic concentration in exchange for a potential (but not guaranteed) uptick in open rate. For most solo operators, fixed scheduling is faster to manage, easier to analyse, and just as effective.

    Want more tactical breakdowns like this? Subscribe to One Two Three Send and get one operator-focused deep dive every day.

  • Klaviyo’s conditional split: when to branch flows and when to stay linear

    Klaviyo’s conditional split: when to branch flows and when to stay linear

    Klaviyo’s conditional split is the feature that separates operators who automate thoughtfully from those who automate chaotically. It lets you fork an email flow into multiple paths based on subscriber behavior, profile data, or event properties. Someone clicked your product link? Send them a discount. They didn’t? Wait three days and try a different angle.

    The promise is elegant: personalized sequences that adapt in real time. The risk is building flows so complex you can’t debug them when something breaks—or worse, when nothing breaks but revenue stays flat because you optimized for cleverness instead of outcomes.

    Here’s how the feature actually works, when it makes you money, and when it just makes your flow chart look impressive.

    How conditional splits work in Klaviyo

    A conditional split evaluates one or more conditions at the moment a subscriber reaches that point in the flow. You define the logic: Has opened an email in this flow, Has clicked a specific link, Profile property equals X, Has placed an order since entering this flow, and dozens more.

    Klaviyo checks the condition, then routes the subscriber down the Yes path or the No path. Each branch can contain more emails, delays, and additional splits. You can nest splits inside splits, though your future self will hate you for it.

    The split happens once, at evaluation time. If someone clicks a link five minutes after they pass the split, they don’t jump branches retroactively. Timing matters.

    Klaviyo evaluates splits server-side, so there’s no delay or tracking pixel required—it’s reading from your account data in real time. That’s why splits based on opens are less reliable than splits based on clicks or purchases. Opens depend on image loading and Apple’s Mail Privacy Protection has made that signal noisier every year.

    When a split improves outcomes

    Conditional splits pay off when the two branches lead to meaningfully different next actions—and when you have enough volume to make both paths worth maintaining.

    Post-purchase flows. Split based on product category or price tier. Someone who bought a $20 ebook gets content-focused emails. Someone who bought a $2,000 course gets onboarding check-ins and a Slack invite. The optimal next email is genuinely different.

    Abandoned cart recovery. Split after the first reminder based on whether they’ve returned to the site. If they came back but didn’t buy, you know they’re warm—send a discount or a FAQ. If they haven’t returned, try social proof or a different product angle.

    Lead magnet sequences. Split based on link clicks to gauge interest. Someone who clicked your case study link three times is ready for a sales email. Someone who hasn’t clicked anything gets more educational content before you ask for the sale.

    The pattern: you’re splitting when behavior signals a different level of intent, and each path has a distinct strategic goal.

    When a split just adds complexity

    Splits fail when you’re branching for the sake of branching—or when the two paths aren’t different enough to justify the overhead.

    Splitting on opens. Open rates are unreliable signals now. Apple MPP pre-loads images for many users, so an “open” might mean they read every word or it might mean their phone cached the email while they slept. Clicks and purchases are real actions. Opens are proxy data. If you’re splitting on opens, you’re optimizing for noise.

    Too many paths too early. A five-way split after the welcome email means you’re maintaining five parallel sequences. Unless each path has a clear conversion goal and you’re sending enough volume to measure performance in each branch, you’re fracturing your learning. Simpler flows ship faster and break less.

    Splitting when a tag would work. If the goal is just to segment people for future campaigns, add a tag and keep the flow linear. Splits are for in-flow decisions. Tags are for long-term segmentation. Mixing the two leads to flows that are half automation, half CRM, and fully unreadable six months later.

    One non-obvious tip: test the No path first

    Most operators build the Yes path—the engaged, high-intent path—first, because it’s more exciting. That’s backward.

    The No path is where most of your subscribers will go, especially early in a flow when intent is uncertain. If your No path is a dead end or a lazy fallback, you’re leaving money on the table at scale.

    Build the No path as if it’s the default experience, because it is. Make it a real sequence with real value. Then build the Yes path as the exception for people who signal higher intent. Your flow will convert better and you’ll spend less time wondering why 80% of your subscribers are getting the “backup” experience.

    If you’re running email flows that do more than broadcast, Klaviyo’s conditional split is eventually unavoidable. Just make sure every branch you add is solving a real problem—not just making your flowchart look like a decision tree from a textbook.

    What’s the most complex flow you’ve built—and did it actually outperform the simple version? Reply and let us know. We’re collecting operator stories for an upcoming piece on when automation goes too far.