Category: Newsletters

  • Substack’s custom domain setup: DNS propagation vs. SSL timing

    Substack’s custom domain setup: DNS propagation vs. SSL timing

    Substack's custom domain setup: DNS propagation vs. SSL timing
    Photo: F1jmm via Wikimedia Commons (CC BY-SA 3.0)

    When you point a custom domain at Substack, the platform tells you it can take “up to 24 hours” for everything to work. That’s technically true, but misleading—because your domain will resolve to Substack’s servers long before the SSL certificate provision finishes.

    This creates a specific problem: readers who visit your new domain during the gap see either a certificate warning or a “not secure” flag in their browser. If you’re migrating from a self-hosted archive or another platform, that window matters more than Substack’s docs suggest.

    What actually happens during the setup window

    Substack’s custom domain process has two distinct phases that don’t finish at the same time.

    First, DNS propagation. You add a CNAME record pointing your subdomain (usually newsletter.yourdomain.com) to subdomain.substack.com. Most DNS providers push that change globally within 5–15 minutes. Once it propagates, requests to your domain resolve to Substack’s infrastructure.

    Second, SSL certificate provisioning. After Substack detects the CNAME, it requests a Let’s Encrypt certificate for your domain. This involves a challenge-response validation that can take anywhere from 10 minutes to several hours, depending on Let’s Encrypt’s queue and how aggressively Substack’s automation retries.

    The gap between the two creates the problem. Your domain is live and serving pages—but without a valid HTTPS certificate. Browsers warn users. Email clients flag links. If you announce the migration before SSL finishes, a portion of your audience sees errors.

    How long the SSL delay actually lasts

    In practice, most Substack custom domains finish SSL provisioning within 90 minutes of DNS propagation completing. I’ve migrated eight newsletters to custom domains on Substack since early 2025; six took under an hour, one took three hours, and one required a support ticket after stalling for 12 hours.

    The stall case was a domain that had previously pointed to another newsletter platform. Substack’s system appeared to cache an older validation attempt and didn’t retry automatically. Support cleared it manually within 20 minutes of the ticket.

    Substack doesn’t expose provisioning status in the dashboard. The settings page shows “DNS configured” as soon as the CNAME resolves, but there’s no separate indicator for “SSL active.” You have to test the domain in a browser and check for the padlock.

    The non-obvious timing trick

    Set up your custom domain at least 48 hours before you announce the migration.

    Substack allows you to configure a custom domain without switching your publication’s primary URL immediately. Once the CNAME is added and SSL finishes provisioning, the custom domain works as an alias—readers can visit it, links resolve correctly, but your posts and emails still use the yourname.substack.com address.

    This gives you a clean testing window. Verify SSL, check that archive links work, confirm that your website’s nav links resolve correctly. Then switch the primary domain in Substack’s settings when you’re ready to announce.

    The switch itself is instant. Substack updates all post URLs and sets up 301 redirects from the old subdomain to the new domain. Emails sent after the switch use the custom domain in from-addresses and link URLs.

    One edge case: if you’re moving from another platform entirely (say, WordPress or Ghost) and pointing an existing domain at Substack, you lose the testing window. The CNAME change is live immediately, so there’s no way to preview without breaking the old site. In that case, either accept the SSL gap or set up the Substack publication on a temporary subdomain first, migrate content, then switch the CNAME during a low-traffic window.

    What to tell readers during the gap

    If you’re migrating during business hours and can’t wait out the SSL delay, send a heads-up email before you flip the CNAME. Something like: “We’re moving to [new domain] today. If you see a security warning in the next hour, that’s expected—refresh in 15 minutes and it’ll clear.”

    Most readers won’t visit during the gap, but the ones who do will appreciate knowing it’s temporary. Browser warnings make people assume they’ve been phished; a short explanation prevents that panic.

    For newsletters with large back catalogs, check your most-linked posts after SSL provisions. Substack’s redirects handle yourname.substack.com/p/post-slug to newsletter.yourdomain.com/p/post-slug correctly, but if you’ve previously shared links with UTM parameters or other query strings, test a few samples to confirm they resolve.

    One Two Three Send publishes operator-focused breakdowns like this one every day. Subscribe to get them in your inbox, or reply with questions about your own custom domain setup—we’ll cover edge cases in a future Q&A piece.

  • ConvertKit vs. MailerLite vs. Beehiiv: landing page builders compared

    Most newsletter platforms now bundle landing page builders alongside their email tools. The pitch is compelling: skip the WordPress plugin maze or the monthly Carrd subscription and build your signup page where your subscribers live.

    But the feature sets vary wildly. Some platforms give you a drag-and-drop canvas with custom code access. Others lock you into three templates and call it a day. If you’re choosing a platform partly based on landing page capability—or wondering whether to migrate—here’s what ConvertKit, MailerLite, and Beehiiv actually offer in 2026.

    ConvertKit: functional but rigid

    ConvertKit’s landing page builder uses a template system with limited layout flexibility. You pick from roughly a dozen pre-built designs, swap the headline and image, adjust colors, and publish to a convertkit.com subdomain or your own custom domain.

    The editor is intentionally constrained. You can’t rearrange sections or add custom HTML blocks. Form fields are tied to your ConvertKit account, so multi-step opt-ins or conditional logic require workarounds using their visual automation tool.

    What it does well: Speed. You can ship a decent-looking page in under ten minutes. The templates are mobile-responsive by default, and the form-to-subscriber pipeline is instant—no webhook delays or API keys to configure.

    Where it falls short: Customization. If your brand requires a specific layout—hero image on the right, testimonial grid below the fold—you’re out of luck unless that exact template exists. There’s no CSS panel, no custom code injection, and no A/B testing at the page level (only at the form level).

    Pricing note: Landing pages are included on all ConvertKit plans, starting at $25/month for up to 1,000 subscribers.

    MailerLite: drag-and-drop with design latitude

    MailerLite offers a block-based builder that feels closer to a lightweight page builder than a form wrapper. You drag in text blocks, images, buttons, countdown timers, and embedded videos. Each block has spacing, alignment, and styling controls.

    You can add custom HTML and CSS if you need it, which makes MailerLite the most flexible option here for operators comfortable tweaking code. The platform also supports A/B testing at the page level—two headlines, two hero images, winner determined by conversion rate.

    What it does well: Design freedom without requiring a separate tool. If you want a two-column layout with a form on the left and social proof on the right, you can build it in fifteen minutes. The custom domain setup is straightforward: add a CNAME record, verify, done.

    Where it falls short: The template library is smaller than ConvertKit’s, and the drag interface can feel finicky when nesting blocks inside containers. If you’re not design-confident, you’ll spend more time fiddling with padding than writing copy.

    Pricing note: Free plan supports landing pages for up to 1,000 subscribers. Paid plans start at $10/month and add A/B testing, custom HTML, and removal of MailerLite branding.

    Beehiiv: built for growth operators, priced accordingly

    Beehiiv’s landing page builder sits somewhere between ConvertKit’s rigidity and MailerLite’s flexibility. You get templates, block-level editing, and the ability to embed custom code—but the real differentiator is integration with Beehiiv’s referral and monetization tools.

    Landing pages can display referral progress bars, show subscriber counts as social proof, and integrate with Beehiiv’s Boost network for cross-promotion. If you’re running a growth-focused newsletter and want the landing page to pull double duty as a referral hub, Beehiiv is the only platform here that supports it natively.

    What it does well: Growth mechanics. The referral milestone display, the subscriber count badge, and the optional “Powered by Beehiiv” removal all cater to operators treating their newsletter as a serious business. The analytics dashboard shows page views, conversion rate, and referral source attribution in one view.

    Where it falls short: Cost. Landing pages are included on all plans, but the free tier caps you at 2,500 subscribers and includes Beehiiv branding. The Scale plan ($42/month) is where you unlock custom domains, remove branding, and access A/B testing. If you’re just starting out, that’s steep compared to MailerLite’s free option.

    Who should use which

    Pick ConvertKit if you want to ship a signup page fast, don’t need layout control, and already use ConvertKit for email. The landing page builder won’t wow anyone, but it won’t slow you down either.

    Pick MailerLite if you’re design-comfortable, want A/B testing without paying ConvertKit prices, or need the flexibility to inject custom code for tracking pixels or embedded widgets. It’s the best value here for solo operators on a budget.

    Pick Beehiiv if your newsletter strategy includes referral programs, cross-promotion, or monetization features that require tight integration between the landing page and the platform. You’ll pay more, but the growth tools justify it if you’re past the hobbyist stage.

    One last note: none of these builders rival a dedicated tool like Carrd or Webflow for pure design capability. But if you’re optimizing for speed and operational simplicity—one login, one billing relationship, one support queue—the built-in option usually wins.

    Reply with the platform you’re using and whether the landing page builder actually ships for you. I’m curious how many operators still reach for WordPress or a standalone tool despite these built-in options improving every year.

    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.

  • Postmark’s message streams: when to split transactional vs. broadcast

    Postmark’s message streams: when to split transactional vs. broadcast

    Postmark's message streams: when to split transactional vs. broadcast
    Photo by Monique Carrati on Unsplash

    Postmark gives you message streams—separate channels within your account for different email types. Most operators set up one stream for transactional emails (password resets, receipts) and another for broadcast or marketing sends (newsletters, announcements). The separation isn’t just organizational; it protects your sending reputation and gives you independent analytics for each stream.

    But knowing when to configure multiple streams versus sticking with the defaults requires understanding how email providers evaluate sender reputation—and what happens when a broadcast complaint rate bleeds into your transactional deliverability.

    How message streams actually work

    When you create a Postmark server, you get a default transactional stream. Each stream has its own API token, SMTP credentials, and sending domain configuration. You can add a broadcast stream (or additional streams) from the server settings.

    The critical part: each stream maintains a separate sending reputation with inbox providers like Gmail, Outlook, and Yahoo. If your broadcast newsletter gets flagged for spam complaints, it won’t directly hurt the deliverability of your password-reset emails—assuming they’re routed through different streams.

    Postmark enforces different rules per stream type. Transactional streams require a validated sending domain and won’t let you include unsubscribe links by default. Broadcast streams require an unsubscribe link in every message and track engagement metrics like opens and clicks more aggressively.

    When to use separate streams

    If you send both transactional emails (login codes, purchase confirmations, account notifications) and any volume of marketing or editorial content, configure two streams. The separation protects your critical infrastructure emails from the inherent risk of broadcast sending.

    Broadcast emails—even legitimate newsletters—generate complaint rates between 0.01% and 0.1% under normal conditions. A single user who clicks “report spam” instead of unsubscribe can nudge your sender score. If that same reputation score governs your password-reset emails, you’ve introduced unnecessary risk into account-access workflows.

    Here’s a concrete scenario: you run a paid membership site. Members get a weekly digest (broadcast stream) and order confirmations when they purchase add-ons (transactional stream). One week, your digest subject line underperforms and complaint rates spike to 0.15%. Gmail starts filtering your digests to spam. Because you separated streams, your order confirmations still land in the primary inbox—members can complete purchases without friction.

    Volume matters too. If you send fewer than 100 broadcast emails per month, the added complexity of a second stream may outweigh the benefit. But once you cross 500–1,000 broadcast sends monthly, or if your transactional volume is mission-critical, split them.

    Configuration and the non-obvious part

    Setting up a broadcast stream takes about five minutes. In your Postmark server settings, add a new message stream, select “Broadcast,” and configure the same sending domain you use for transactional (or a subdomain if you want additional separation). Copy the new API token or SMTP credentials into your app or newsletter tool.

    The non-obvious tip: use custom metadata fields to tag every broadcast send with campaign identifiers, even if you’re not running formal A/B tests. Postmark’s activity feed lets you filter by metadata, which becomes essential when diagnosing deliverability issues three months later. Tagging each broadcast with campaign_id or content_type turns your message stream into a queryable log.

    Also, monitor your suppression list separately for each stream. A user who unsubscribes from your newsletter (broadcast stream) can still receive order confirmations (transactional stream). Postmark handles this automatically, but if you’re syncing suppression lists to an external CRM, you need to respect stream boundaries or risk compliance problems.

    When one stream is fine

    If you only send transactional email—no newsletters, no announcements, no drip campaigns—don’t bother with a broadcast stream. The same applies if your “broadcast” volume is truly negligible: a quarterly update to 50 people doesn’t justify the overhead.

    Some operators use Postmark exclusively for transactional sends and route newsletters through a dedicated ESP like MailerLite or Beehiiv. That’s a valid architecture, especially if you need advanced segmentation or monetization features that Postmark doesn’t provide. In that case, your Postmark account stays single-stream and handles only the high-stakes account emails.

    The deciding factor is risk tolerance. If a deliverability hiccup in your broadcast sends could lock users out of their accounts, separate the streams. If your broadcast content is low-risk or low-volume, the default configuration works.

    Want more tool breakdowns like this? Subscribe to One Two Three Send for weekly deep-dives into the features that actually matter for solo operators and small teams.

    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 visual automation builder: when branches multiply, performance tanks

    ConvertKit’s visual automation builder: when branches multiply, performance tanks

    ConvertKit's visual automation builder: when branches multiply, performance tanks
    Photo: Hannah Krafcik via Wikimedia Commons (CC BY-SA 4.0)

    ConvertKit’s visual automation builder is one of the cleanest interfaces in email marketing. Drag a trigger, add conditions, branch subscribers into different paths—it feels intuitive until you hit about 40 nodes and the canvas starts choking.

    If you’re running a content-driven business with segmented onboarding, product launches, or behaviour-based nurture sequences, you’ve probably felt this. The builder loads slowly. Clicks lag. Moving a single node can freeze your browser for three seconds.

    This isn’t a bug—it’s a design tradeoff. Visual builders prioritise clarity over scalability, and ConvertKit’s canvas renders every node, connection, and conditional rule in real time. Past a certain threshold, that becomes expensive.

    When the visual builder works perfectly

    ConvertKit’s automation canvas excels at linear workflows with light branching. If you’re building a welcome sequence that forks based on one or two subscriber actions—clicked a link, purchased a product, tagged as interested in Topic A vs. Topic B—the visual layout makes logic auditable at a glance.

    A typical high-performing automation in this range:

    • One trigger (subscribed to a form)
    • 3–5 emails spaced over 7–14 days
    • 2–3 conditional branches based on clicks or tags
    • 1–2 goal events that exit subscribers early

    Total node count: 15–25. The canvas loads instantly. Changes save in under a second. You can onboard a VA or collaborator by screenshotting the flow.

    Where it breaks down

    Problems appear when you start layering complexity:

    Nested conditionals. Branch on purchase status, then branch again on engagement level, then fork by content preference. Each layer doubles your node count. A four-level decision tree can balloon to 60+ nodes before you’ve sent ten emails.

    Event-based re-entry. If your automation triggers on “tag added” and you’re using tags liberally across your system—post interactions, product interest signals, engagement scores—subscribers can enter the same automation multiple times. ConvertKit handles this, but visualising those re-entry paths on a single canvas creates spaghetti.

    Time delays at scale. ConvertKit’s visual builder treats every wait period as a discrete node. If you’re spacing emails across 90 days with variable delays based on activity, you’re adding 10–15 wait nodes just for pacing. Combine that with branching and you’re over 50 nodes easily.

    At that scale, the canvas becomes a liability. Loading takes 8–12 seconds. Dragging nodes to reorganise triggers a visual refresh that can pause your browser. Editing a condition three layers deep requires zooming, panning, and waiting for the interface to catch up.

    The workaround: split automations and use sequences

    ConvertKit offers two tools for sending automated emails: visual automations and sequences (the older, list-based drip feature). Most operators default to automations because the interface is newer and more flexible. But sequences are faster, simpler to manage, and handle high-volume evergreen content better.

    Use sequences for linear email courses or onboarding. If your workflow is mostly “send email 1, wait 2 days, send email 2, wait 3 days…” with minimal branching, a sequence is faster to build and never lags. You lose conditional logic, but you gain speed and reliability.

    Use automations for decision points, then hand off to sequences. Build a short automation (under 20 nodes) that handles the initial triage—tag based on link clicks, segment by purchase history, apply a custom field. Then use an action step to subscribe users to the appropriate sequence. The sequence handles delivery; the automation handles routing.

    This hybrid approach keeps individual automations lightweight and makes debugging easier. If a subscriber isn’t receiving emails, you can check the sequence separately from the routing logic.

    Split large automations by goal or time horizon. Instead of one 60-node “master onboarding” automation, build three:

    • Days 1–7: Welcome, core content, initial segmentation
    • Days 8–30: Nurture based on engagement tags
    • Days 31+: Long-term re-engagement or upsell

    Each automation stays under 25 nodes. Subscribers flow from one to the next via tags or custom field updates. You lose the single-canvas overview, but you gain maintainability.

    One non-obvious tip: name every node

    ConvertKit lets you label individual automation nodes with custom names. Most people skip this. Don’t.

    When you’re troubleshooting why a subscriber didn’t receive an email, ConvertKit’s activity log shows which automation nodes they passed through—but only by name. If all your conditional branches are labelled “Condition” and all your emails are “Email,” the log is useless.

    Name every node descriptively: “Check if purchased Product A,” “Send case study email—Topic B,” “Wait 3 days after click.” It takes an extra 10 seconds per node when you’re building, but it saves 10 minutes every time you debug.

    If you’re running ConvertKit automations that feel sluggish or impossible to audit, the problem isn’t the tool—it’s the architecture. Keep individual automations under 30 nodes, offload linear sequences to the sequence builder, and split complex workflows by stage. The visual builder works best when you don’t ask it to do everything at once.

    What’s the most complex automation you’ve built? Hit reply and let me know where it broke—I’ll feature anonymised examples in a future roundup.

  • Newsletter double opt-in: when confirmed subscribers hurt growth more than spam

    Newsletter double opt-in: when confirmed subscribers hurt growth more than spam

    Newsletter double opt-in: when confirmed subscribers hurt growth more than spam
    Photo by Jacob Padilla on Unsplash

    Most newsletter advice treats double opt-in as gospel: make subscribers confirm their email address before you send them anything. It cuts spam, protects deliverability, and proves intent.

    But it also kills between 20% and 40% of legitimate signups who never click the confirmation link—not because they’re uninterested, but because the email lands in spam, they forget, or friction wins.

    The question isn’t whether double opt-in is safer. It is. The question is whether that safety is worth the subscribers you’re losing before you ever get a chance to send them anything useful.

    What double opt-in actually costs

    When someone submits your signup form with single opt-in, they’re added to your list immediately. You send them a welcome email. They read it or they don’t.

    With double opt-in, they submit the form, receive a confirmation email, and must click a link before you’re allowed to send them anything else. If they don’t click within a set window—usually 24 to 72 hours—they never make it onto your list.

    Industry averages show confirmation rates between 60% and 80%. That means for every 100 signups, you’re losing 20 to 40 people who filled out your form but never confirmed.

    Some of those are bots, typos, or low-intent submissions. But many are real people whose confirmation email went to spam, got buried, or arrived during a moment when they’d already moved on.

    If you’re running paid acquisition, that’s ad spend converted into nothing. If you’re growing organically, it’s momentum you worked for and didn’t capture.

    When single opt-in makes sense

    Single opt-in works best when you control the signup context and the cost of a bad email address is low.

    If you’re collecting signups at the end of a blog post, in a lead magnet download flow, or embedded in a tool someone just used, intent is high and the person is present. They want the thing you’re offering right now. Making them wait and hunt for a confirmation link adds friction exactly when they’re most engaged.

    Single opt-in also makes sense if you’re paying for traffic. Whether that’s Facebook ads, Twitter promoted posts, or sponsored placements, every unconfirmed signup is wasted money. You’re optimizing your funnel to convert clicks into subscribers, and double opt-in chops your conversion rate without improving the quality of traffic you’re buying.

    Platforms like Beehiiv and MailerLite both default to double opt-in but let you switch to single opt-in in settings. If your welcome email has a strong call-to-action—download this, read that, reply here—you’ll know within the first send whether someone is engaged. A confirmation email doesn’t tell you more than that first real message does.

    When double opt-in is worth the friction

    Double opt-in makes sense when list quality matters more than list size, or when you’re in a high-risk deliverability environment.

    If you’re sending sponsorship pitches, cold outreach, or anything that could trigger spam complaints, every bad address on your list is a threat to your sender reputation. Double opt-in filters out typos, role addresses, and people who weren’t paying attention.

    It’s also essential if you’re in a regulated space—anything involving GDPR, health data, or financial services. Proving that someone explicitly confirmed their subscription is a legal safeguard, not just a best practice.

    And if you’re growing through co-marketing, giveaways, or partnerships where someone else is driving signups, double opt-in protects you from low-intent submissions. A partner might send you 500 email addresses, but if only 200 confirm, you’ve learned something important about the quality of that traffic before it damages your open rates.

    The hybrid approach: single opt-in with a cleanup sequence

    You don’t have to choose between growth and quality. Single opt-in gets people on your list immediately, and a well-designed welcome sequence filters out the dead weight within the first week.

    Send your welcome email immediately after signup. If someone doesn’t open it within 48 hours, send a short follow-up: “Did you mean to subscribe?” If they don’t engage with either message, tag them as inactive and stop sending.

    This approach captures the high-intent signups who would’ve confirmed anyway, while identifying the low-quality ones before they drag down your metrics. You’re not asking people to confirm—they confirm by opening, clicking, or replying.

    Most platforms let you automate this. In MailerLite, you can trigger a conditional sequence based on whether someone opened the first email. In Beehiiv, you can tag non-openers and exclude them from future sends.

    The result is a list that grows faster than double opt-in would allow, but cleans itself before unengaged subscribers become a long-term problem.

    Want more breakdowns like this? Subscribe to One Two Three Send and get one operator-focused article like this in your inbox daily.

    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.

  • Newsletter archive search: when readers can’t find what you wrote

    Newsletter archive search: when readers can’t find what you wrote

    Newsletter archive search: when readers can't find what you wrote
    Photo: Unknown via Wikimedia Commons (Public domain)

    A reader emails: “I know you wrote about WordPress caching last month—where is it?” You know you sent it. You can see it in your sent folder. But when they search your archive page, nothing turns up.

    Archive search is one of those features newsletter platforms advertise but rarely explain. Some index subject lines only. Others index the first 200 characters. A few index the full body—but only if you’re on a paid tier. And almost none tell you which approach they use until you test it yourself.

    Here’s what actually gets indexed on the platforms solo operators use most, and what to do when search fails.

    What gets indexed on each platform

    Beehiiv indexes the full email body on all tiers, including free. Search works across subject lines, body text, and author names if you’ve enabled bylines. The index updates within a few minutes of sending. One caveat: if you use custom HTML blocks, only plain text inside those blocks gets indexed—images, buttons, and styled div containers are ignored.

    Substack indexes subject lines and body text, but search results prioritize exact matches in titles first. If your subject line was vague (“Issue #47”) and the meat of the topic is buried in paragraph three, it won’t surface until a reader scrolls past a dozen other posts. Substack’s archive search also doesn’t support Boolean operators—no “AND,” “OR,” or quoted phrases.

    ConvertKit offers archive search only if you’ve enabled the public archive feature, which is off by default. When enabled, it indexes subject lines and the first 500 characters of body text. Anything below the fold in your email—your detailed how-to, your step-by-step breakdown—doesn’t get indexed. If you bury the lede, readers won’t find it.

    MailerLite doesn’t offer built-in archive search at all. The public archive page displays a reverse-chronological list with subject lines and send dates. Readers have to use browser find (Cmd+F) and hope the subject line matches what they remember. For a catalog of 50+ emails, that’s borderline unusable.

    When to use tags and categories instead

    If your archive grows past 30 posts, search alone won’t save readers. They need filters—by topic, by format, by content type. Beehiiv lets you tag posts and surface those tags as filters on your archive page. Substack offers Sections, which let you split your newsletter into topic-based streams (each with its own archive and RSS feed).

    ConvertKit doesn’t support tags or categories in the public archive view. If you need taxonomy, you’ll need to maintain a separate landing page with manual links—or migrate to a platform that supports it natively.

    The non-obvious move: if you publish consistently on a topic (say, WordPress hosting or AI prompts), create a dedicated landing page that lists all related posts with short descriptions. Link to it from your welcome email and your site nav. That page becomes your real archive. The platform’s built-in search becomes a backup.

    What breaks when readers search from mobile

    Most newsletter platforms serve the same archive page to mobile and desktop, but mobile browsers handle search differently. Safari on iOS doesn’t support in-page search widgets that rely on JavaScript—if your platform uses a custom search bar (instead of a plain HTML form), iOS readers get a broken experience. They tap the search icon, nothing happens, and they leave.

    Beehiiv and Substack use standard HTML forms, so mobile search works. ConvertKit’s archive search widget relies on JavaScript and fails silently on older mobile browsers. MailerLite, again, offers no search at all.

    Test your archive page on an actual phone, not just a resized browser window. Open it in Safari, Chrome, and Firefox mobile. Try searching for a post you know exists. If the search bar doesn’t respond or returns zero results for a term you know is there, your readers are hitting the same wall.

    When to embed a third-party search tool

    If your archive has 100+ posts and your platform’s search isn’t cutting it, you can embed a third-party site search tool. Algolia offers a free tier for up to 10,000 searches per month. You’ll need to generate a JSON feed of your archive (most platforms support RSS; convert it to JSON with a script or a tool like Feed43), push it to Algolia’s index, and embed their search widget on a custom landing page.

    This works if you host a separate website alongside your newsletter (common for operators who publish on Substack but maintain a WordPress site for SEO). It doesn’t work if you rely solely on the platform’s hosted archive—Substack and Beehiiv don’t let you inject third-party JavaScript into their archive pages.

    The simpler fix: write better subject lines. If every email is titled “Weekly Update” or “Issue #23,” no search tool will help. Use the subject line to signal the topic clearly. “WordPress object caching: Redis vs. memcached” beats “Performance tips” every time.

    Want more tool breakdowns like this? Subscribe to One Two Three Send and get one operator-focused deep-dive every day—no fluff, just what actually works and what breaks.

    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.

  • Beehiiv’s Boost network: how the referral swap works and who qualifies

    Beehiiv’s Boost network: how the referral swap works and who qualifies

    Beehiiv's Boost network: how the referral swap works and who qualifies
    Photo by Haithem Ferdi on Unsplash

    Beehiiv‘s Boost network lets you trade recommendations with other newsletters—your publication shows up in someone else’s inbox, theirs shows up in yours. The pitch is simple: pay-per-subscriber acquisition without managing individual cross-promo deals.

    But Boost isn’t a passive referral lottery. The network uses an internal matching algorithm, a credit system, and quality gates that determine whether your newsletter gets shown at all. If you’re considering it—or already enrolled and wondering why results are inconsistent—here’s how the mechanics actually work.

    How the credit system allocates impressions

    Boost runs on credits, not cash. You earn credits when another newsletter recommends yours to their readers. You spend credits when Beehiiv shows your newsletter to someone else’s audience.

    Each recommendation costs one credit. If someone subscribes after seeing your Boost placement, you’re charged that credit. If they don’t subscribe, you still pay—the credit covers the impression, not the conversion.

    You can buy credits directly (around $1–$2 per credit depending on volume), or earn them by letting other newsletters appear in your recommendations. The latter is how most operators start: you allocate a percentage of your subscriber recommendations to Boost partners, and Beehiiv credits your account based on impressions served.

    The non-obvious part: credit earn rates aren’t uniform. Beehiiv weighs your newsletter’s engagement, open rates, and subscriber quality. A newsletter with 5,000 engaged readers earns more credits per impression than one with 20,000 cold subscribers. The platform doesn’t publish the exact formula, but operators report earn-rate variance between 0.6× and 1.4× depending on performance.

    Who sees your newsletter—and who doesn’t

    Boost placements aren’t random. Beehiiv’s algorithm tries to match newsletters by topic, audience overlap, and engagement profile. If you run a B2B SaaS newsletter, you’re more likely to appear in recommendations for other business-focused publications than in a gardening newsletter’s rotation.

    But topic match is only one filter. Beehiiv also applies a quality floor. Newsletters with open rates below ~30%, high spam-complaint rates, or recent deliverability issues get deprioritized or removed from Boost rotation entirely. The platform doesn’t send warnings—you’ll just stop seeing credit accrual or impression delivery.

    There’s also an implicit size gate. Boost works best for newsletters between 1,000 and 50,000 subscribers. Below 1,000, your earn rate is too low to generate meaningful credit flow. Above 50,000, the network’s inventory can’t deliver enough relevant impressions to match your spending pace, and you’ll end up buying credits instead of earning them.

    When Boost makes sense—and when it doesn’t

    Boost is worth testing if:

    • You’re between 2,000–25,000 subscribers and growth has plateaued
    • Your open rate is consistently above 35%
    • You’re comfortable letting 10–20% of your recommendation slots go to Beehiiv’s algorithm
    • Your niche has enough adjacent newsletters in the network (B2B, tech, finance, and creator economy are well-represented; hyper-local or non-English niches are sparse)

    It’s not worth it if:

    • You’re under 1,000 subscribers—earn rates are too low, and you’ll pay cash for every placement
    • Your content is highly specific or regional; the algorithm struggles to find relevant matches
    • You’ve already built strong 1:1 cross-promo relationships—direct swaps give you more control and often better conversion rates

    Typical cost-per-subscriber via Boost ranges from $1.50 to $4.00 depending on niche and how well your newsletter converts cold traffic. That’s competitive with paid ads but less predictable. Some operators report CPS under $1; others burn through $500 in credits and acquire 80 subscribers, most of whom churn within two sends.

    One non-obvious tip: front-load your best content

    Boost subscribers arrive cold. They clicked a recommendation, but they don’t know you yet. If your welcome sequence is generic or your next few sends are off-brand, they’ll unsubscribe fast—and Beehiiv’s algorithm will notice.

    Operators who see sustained Boost performance treat the first three emails as an onboarding sprint: high-value, hyper-relevant, and faster-paced than their usual cadence. If your regular newsletter goes out weekly, consider sending Boost-sourced subscribers a second touchpoint within 48 hours. Retention after three emails is the strongest signal Beehiiv uses to keep recommending your newsletter.

    If you’re already on Beehiiv and considering Boost, run a small test: allocate 10% of recommendations for 30 days, track cost-per-subscriber and 30-day retention separately, and compare it to your other acquisition channels. If CPS and retention both land in your top three sources, scale up. If not, redirect the effort to direct cross-promo outreach or paid social.

    Using Beehiiv and want to compare notes on what’s working? Reply to this email—I’ll feature anonymized operator data in a future case study.

    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 broadcast send-time personalisation: how it decides

    ConvertKit broadcast send-time personalisation: how it decides

    ConvertKit broadcast send-time personalisation: how it decides
    Photo by Kit (formerly ConvertKit) on Unsplash

    ConvertKit’s broadcast scheduler includes a checkbox labelled “Optimise send time.” When enabled, the platform doesn’t deliver your email at the moment you hit publish—it queues each subscriber’s copy for a window it thinks they’re most likely to engage.

    The feature sounds useful. In practice, it works well for some operators and creates confusion for others. Here’s what actually happens under the hood, when the algorithm helps, and when you’re better off choosing a fixed send time.

    What the algorithm looks at

    ConvertKit’s send-time optimisation scans each subscriber’s engagement history: opens, clicks, and the timestamps associated with both. It looks for patterns—does this person consistently open emails around 7 a.m. Eastern? Do they engage more on weekday mornings or weekend afternoons?

    If the platform identifies a statistically significant pattern, it schedules delivery within a window it predicts will perform better than a one-size-fits-all broadcast time. If no pattern exists—new subscribers, inactive readers, or those with erratic habits—it defaults to your account’s standard send time or the time you manually set when creating the broadcast.

    The optimisation window spans roughly 24 hours. ConvertKit won’t hold a broadcast for days, but it will stagger delivery across morning, afternoon, and evening slots depending on subscriber behaviour.

    When it helps

    Send-time optimisation works best when you have a large, engaged list with diverse time zones and consumption habits. If you’re sending to 10,000 subscribers spread across North America, Europe, and Asia, the feature can lift open rates by 2–8% compared to a single fixed time.

    It’s also useful when your content isn’t time-sensitive. Evergreen tutorials, weekly roundups, and educational sequences don’t lose value if they arrive six hours later than your publish click. The algorithm prioritises engagement over synchronicity.

    Operators who publish frequently—three or more broadcasts per week—also see better results. The platform accumulates more engagement data, which sharpens its predictions. If you send once a month, there’s less signal to work with.

    When manual scheduling wins

    Time-sensitive broadcasts break the optimisation logic. If you’re announcing a product launch, a limited-time discount, or commentary tied to a news event, you want simultaneous delivery. Staggering emails across 24 hours means some subscribers see the offer after it’s expired or the news cycle has moved on.

    Small lists—under 1,000 subscribers—don’t benefit much either. The algorithm needs volume to identify statistically meaningful patterns. With a few hundred people, manual scheduling based on your own audience knowledge often outperforms the automated approach.

    And if your list skews heavily toward a single time zone or demographic, the optimisation adds complexity without much upside. A newsletter serving U.S. East Coast professionals during weekday work hours doesn’t need personalised delivery windows—everyone’s already in the same behaviour bucket.

    One non-obvious tip

    ConvertKit’s send-time optimisation relies on opens as its primary engagement signal, but open tracking has degraded since Apple’s Mail Privacy Protection rolled out in 2021. A meaningful percentage of your subscribers now register artificial opens the moment an email hits their inbox, regardless of when they actually read it.

    This skews the algorithm’s predictions. If you notice erratic or counterintuitive delivery patterns—emails going out at odd hours, open rates drifting downward despite optimisation being enabled—try disabling the feature for two or three broadcasts and compare performance. Manual scheduling at a consistent, tested time often performs better when open-tracking reliability is compromised.

    You can also cross-reference your ConvertKit open data with click data, which remains accurate. If the platform says a subscriber opens at 6 a.m. but consistently clicks at noon, the optimisation may be misfiring. In that case, fall back to manual control.

    Want more breakdowns like this? Subscribe to One Two Three Send for weekly deep-dives on the tools and tactics that actually move the needle for solo operators.

  • ConvertKit’s custom field limits: when segmentation hits a ceiling

    ConvertKit’s custom field limits: when segmentation hits a ceiling

    ConvertKit's custom field limits: when segmentation hits a ceiling
    Photo: Caladusp via Wikimedia Commons (CC BY-SA 4.0)

    ConvertKit lets you add up to 100 custom fields per account. That sounds generous until you’ve been running a newsletter for two years, tagging readers by interest, purchase history, geography, onboarding date, referral source, content preferences, and engagement tier.

    Then you hit the wall.

    The limit isn’t documented prominently. You discover it when the “Add Field” button grays out, or when an automation fails to create a new field and your sequence quietly stops working.

    What counts toward the limit

    Every custom field you create—whether it’s a text field, number, or date—counts toward the 100-field cap. This includes:

    • Active fields currently in use
    • Archived fields you’re no longer using but haven’t deleted
    • Fields created by integrations (Zapier, API calls, third-party forms)

    Deleting a field frees up a slot, but only if you’re certain no automation or segment references it. ConvertKit doesn’t warn you before deletion, and there’s no “undo.”

    Tags, by contrast, are unlimited. Subscribers are unlimited. It’s only custom fields—the structured data layer—that hits a ceiling.

    Where operators waste field slots

    Most operators I’ve audited are using 40–60 fields. The bloat comes from:

    Redundant date fields. Separate fields for “trial_start,” “trial_end,” “first_purchase,” “last_purchase,” “onboarding_completed.” You can often collapse these into tags with date-based automations, or store only the field you’ll actually query.

    One-off campaign tracking. A field for every lead magnet, webinar, or promo. If you’re not segmenting on it after 90 days, archive or delete it.

    Text fields that should be tags. A “interests” field with comma-separated values like “SEO, WordPress, email” is harder to segment than three tags. ConvertKit’s segment builder can combine tags with AND/OR logic; custom field text matching is clunkier.

    Legacy fields from old integrations. A Typeform you used once in 2024, a Zapier zap you turned off, a WordPress plugin you uninstalled. Each left fields behind.

    How to design segments that scale

    If you’re approaching the limit—or want to avoid it—here’s the structure that works:

    Use tags for categorical data. Interests, content preferences, lead sources, engagement tiers. Tags are unlimited, combinable, and easier to audit.

    Reserve custom fields for values you’ll calculate or compare. Numbers (purchase count, total spend, engagement score), dates (signup date, last click), or IDs (Stripe customer ID, external CRM reference).

    Audit every 90 days. Export your field list. Flag anything unused in the last quarter. Archive first, delete after another 30 days if no automations break.

    Document field purpose and owner. Keep a spreadsheet. Column A: field name. Column B: what it tracks. Column C: which automations or segments use it. Column D: date created. When you hit 80 fields, you’ll thank yourself.

    What happens if you hit the cap

    Automations that try to create or update a field beyond the 100th slot fail silently. The automation continues, but the field write doesn’t happen. You won’t get an error email. The subscriber moves to the next step as if nothing broke.

    If you’re relying on that field for downstream segmentation—say, tagging high-intent leads based on a quiz score—you’ll lose data without noticing until you spot the gap in your reports.

    ConvertKit support can’t raise the limit. It’s a hard platform cap, same across all pricing tiers.

    The workaround: delete unused fields, or rethink your data model. Some operators move complex segmentation logic into an external CRM (like Brevo or a dedicated CDP) and sync only the essential fields back to ConvertKit. That adds complexity, but it scales past 100.

    When to stay under 50

    If you’re running a solo operation with fewer than 10,000 subscribers, aim to stay under 50 fields. It forces clarity. Every field you add should answer: “What decision does this let me make that I can’t make with tags?”

    If the answer is “nothing,” use a tag.

    Most operators don’t need purchase history in a custom field—they need a “purchased” tag and a “last_purchase_date” field for recency-based re-engagement. That’s two slots instead of five.

    ConvertKit’s segmentation is powerful, but it rewards restraint. The ceiling exists whether you plan for it or not.

    Hit a segmentation problem you can’t solve with tags? Reply and tell us what you’re trying to track—we’ll feature operator solutions in a future issue.

    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.

  • Newsletter referral programs pay per signup—but measure net growth

    Newsletter referral programs pay per signup—but measure net growth

    Newsletter referral programs pay per signup—but measure net growth
    Photo by Defrino Maasy on Unsplash

    Most newsletter referral programs report one number: gross signups. Someone shares your link, three people subscribe, you see +3 in the dashboard. The referring subscriber unlocks a reward tier. Everyone’s happy.

    Except gross signups don’t tell you whether those three people are still reading 60 days later—or whether they bounced the moment the referrer claimed their prize.

    If you’re running a referral program through Beehiiv, SparkLoop, or a similar tool, you need to track net referral growth: how many referred subscribers remain engaged after the incentive window closes. Otherwise, you’re paying for churn with extra steps.

    Why gross referral counts mislead

    Referral programs reward the act of signing someone up, not the quality of that subscriber. If your reward tiers unlock at 3, 10, or 25 referrals, the person sharing your link is optimized for volume. They’ll post it in group chats, tag friends who aren’t interested, or share it in communities where your topic is tangential at best.

    Those signups count. The platform credits them. But six weeks later, half of them have unsubscribed or gone cold. Your list grew by 25, but your engaged audience grew by 12. You paid the referrer’s reward in full.

    This isn’t theoretical. One operator I spoke with ran a referral campaign offering a $50 Amazon gift card at 10 referrals. Average churn rate for referred subscribers in the first 90 days: 48%. For organic signups in the same period: 22%. The campaign grew the list by 340 subscribers. Six months later, 140 of them were still active. Cost per retained subscriber: higher than a modest Facebook ad budget would have delivered.

    What to measure instead

    Track referral cohorts separately from organic signups, and measure engagement at 30, 60, and 90 days post-signup. Most ESPs let you tag subscribers by source; if yours doesn’t, add a hidden field or custom property when someone arrives via a referral link.

    Compare:

    • Open rate at day 30: Are referred subscribers opening at the same rate as organic signups?
    • Unsubscribe rate by day 60: When does referred churn plateau?
    • Click rate on monetized content: If you’re running sponsorships or affiliate links, do referred subscribers engage with revenue-driving content?

    If referred subscribers churn or disengage faster than organic, your referral program is subsidizing vanity metrics. A list of 10,000 with 40% engagement beats 15,000 with 25% engagement in every scenario that matters: deliverability, sponsor value, product conversion.

    When referral programs still make sense

    Referral mechanics work when:

    • Your content has strong word-of-mouth fit—people genuinely want to share it, and the reward is a bonus, not the primary driver.
    • You’re willing to adjust reward tiers based on retention data, not just signup volume.
    • You can afford to treat referred subscribers as a separate, lower-intent cohort and nurture them differently in your first 90 days.

    If you’re below 1,000 subscribers and still defining your audience, a referral program will accelerate list growth but may also dilute signal. You’ll spend months figuring out what content works for two different cohorts instead of one.

    Above 5,000 subscribers, referral programs become more defensible—but only if you’re already retaining >70% of organic signups past 90 days. If your baseline retention is weak, a referral program will amplify the problem, not solve it.

    One non-obvious fix

    Delay reward fulfillment by 60 days. Instead of unlocking rewards the moment a referrer hits 10 signups, unlock them 60 days after the tenth signup—and only if at least 7 of those 10 are still subscribed.

    This shifts the incentive from volume to quality. Referrers will share your link with people more likely to stick around, because they only get paid if those subscribers stay. It also filters out referral farmers who game the system by cycling through throwaway emails.

    Most referral platforms don’t support conditional reward logic natively, but you can build it with a weekly script that checks subscriber status and manually triggers rewards. It’s friction, but it’s worth it if you’re spending four figures a year on referral incentives.

    If you’re running a referral program right now: pull your referral cohort data for the last 90 days and compare retention to organic signups. If referred churn is more than 10 percentage points higher, either tighten your reward criteria or redirect that budget to a channel with better unit economics.

    Want more breakdowns like this? Subscribe to One Two Three Send—we cover the operational details most online-business newsletters skip.

    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.