Author: onetwothreeadmin

  • ChatGPT Canvas: when to write in the sidebar vs. the chat window

    ChatGPT Canvas: when to write in the sidebar vs. the chat window

    ChatGPT’s Canvas feature rolled out quietly in late 2024, and most solo operators still treat it like a slightly fancier text box. That’s a mistake. Canvas fundamentally changes how you should interact with the model when you’re drafting, editing, or iterating on long-form content.

    If you’re still pasting drafts back and forth between Google Docs and the chat window, or if you’ve tried Canvas once and dismissed it because “the chat works fine,” this is worth understanding properly.

    What Canvas actually does

    Canvas opens a split-pane interface. Your prompt stays in the left chat window. The output appears in a dedicated editing pane on the right. You can highlight sections, ask ChatGPT to rewrite specific paragraphs, adjust tone, or insert new sections—all without re-generating the entire document.

    The key difference: Canvas treats your draft as a persistent artifact you refine, not a disposable output you replace. The chat window treats every response as a new answer. Canvas treats it as an evolving document.

    That distinction matters when you’re writing newsletter drafts, landing pages, email sequences, or long-form articles. It matters less when you’re asking one-off questions or generating lists.

    When to use Canvas

    Use Canvas when you’re iterating on structure, not just tweaking words.

    If you’re drafting a 1,200-word article and you realize the second section is too technical, you don’t want ChatGPT to regenerate the whole piece. You want to highlight paragraphs 4–7 and say “make this less jargon-heavy.” Canvas lets you do that. The chat window forces you to either accept the entire rewrite or manually splice fragments together.

    Use Canvas when you need version control inside the same session.

    Canvas saves previous versions as you edit. If ChatGPT rewrites your intro and you hate it, you can roll back without losing the rest of the draft. In the chat window, once a response scrolls up, it’s effectively gone unless you scroll back and copy-paste.

    Use Canvas when you’re working on something longer than 400 words.

    Short outputs—social captions, subject lines, single-paragraph rewrites—don’t benefit much from Canvas. The overhead of opening the pane isn’t worth it. But once you’re past 400–500 words, the ability to target edits and preserve context becomes a significant time-saver.

    When to stick with the chat window

    Use the chat window for exploratory prompts.

    If you’re brainstorming headline ideas, asking ChatGPT to explain a concept, or generating a list of content angles, the chat window is faster. Canvas adds friction when you don’t need persistence.

    Use the chat window for quick rewrites or single-use outputs.

    Need three variations of a CTA? Want to rewrite one sentence five different ways? The chat window is built for rapid, disposable iteration. Canvas is built for refinement over multiple rounds.

    Use the chat window when you’re chaining prompts that don’t need a shared artifact.

    If you’re asking ChatGPT to analyze your traffic data, then draft an email, then suggest three A/B test ideas, those are separate tasks. Canvas doesn’t help. The chat window’s linear thread is easier to follow.

    The non-obvious trick: use Canvas as a scratch pad, not a final draft tool

    Here’s the workflow most operators miss: don’t start in Canvas. Start in the chat window, then move to Canvas once you have a rough structure worth refining.

    Prompt ChatGPT in the chat window with your outline, audience, and key points. Let it generate a rough first draft. If the structure is close, then open Canvas and paste it in. Now you can refine section by section without regenerating the whole thing every time you tweak the intro.

    This two-stage approach—chat for generation, Canvas for refinement—saves 20–30 minutes on any piece over 800 words. You’re not fighting the tool’s defaults. You’re using each interface for what it’s good at.

    One more thing: Canvas has a tone slider and a length adjuster in the toolbar. Most people ignore them. Don’t. If you highlight a paragraph and drag the tone slider toward “casual,” ChatGPT rewrites just that section without you writing a new prompt. It’s faster than typing “make this less formal” every time.

    When this matters for your business

    If you’re writing one newsletter a week, this probably saves you 15–20 minutes per issue. If you’re drafting landing pages, email sequences, or long-form SEO content, it’s the difference between spending two hours on a draft and spending three.

    Canvas isn’t a mandatory feature. But if you’re still copying and pasting between tools, or if you’re regenerating entire drafts because one paragraph didn’t land, you’re working harder than you need to.

    Try this: Next time you draft anything over 600 words with ChatGPT, start in the chat window and move to Canvas after the first output. Refine in Canvas. See if it’s faster. If it’s not, go back to the chat window. But most operators who test this properly don’t go back.

    If you found this useful, reply and let me know what AI tool you want broken down next. I read every response.

  • WordPress auto-updates: which ones to enable, which to avoid

    WordPress auto-updates: which ones to enable, which to avoid

    WordPress has offered automatic updates since 2013, but most operators still treat the feature like a binary choice: all on or all off. That’s a mistake. The auto-update system has four distinct layers, and each one carries different risk and reward.

    Here’s how to configure them without waking up to a broken site.

    Core updates: three tiers, three strategies

    WordPress core has three update types, and the defaults are smarter than most people realize.

    Minor releases (e.g., 6.4.1 to 6.4.2) auto-update by default. These are security and critical bug fixes. Leave this enabled. The risk of a minor version breaking your site is vanishingly small compared to the risk of running unpatched software. In eight years of managing client sites, I’ve seen exactly one minor update cause a conflict—and it was with a plugin that was already deprecated.

    Major releases (e.g., 6.4 to 6.5) are disabled by default, and you should keep them that way unless you’re running a very simple site with minimal plugins. Major versions introduce new features and can break theme or plugin compatibility. Schedule these manually, ideally in a staging environment first.

    Development and beta builds are off by default. Never enable these on a production site. They’re for testing only.

    You can control core auto-updates in Dashboard → Updates → Advanced Options, or via the WP_AUTO_UPDATE_CORE constant in wp-config.php.

    Plugin auto-updates: the risk matrix

    Since WordPress 5.5, you can toggle auto-updates per plugin. This is where most operators get it wrong—they either enable everything or nothing.

    The correct approach is risk-based. Enable auto-updates for:

    • Security plugins (Wordfence, Solid Security, etc.). Delaying a security patch is worse than the small chance of a bad update.
    • Actively maintained utilities with narrow scope—contact forms, analytics snippets, small performance helpers. If a plugin does one thing and is updated frequently, auto-update is usually safe.
    • Plugins from established vendors with good release practices. WooCommerce, Yoast, Jetpack, and similar have staged rollouts and rarely ship breaking changes in patches.

    Disable auto-updates for:

    • Page builders and theme frameworks. Elementor, Divi, Advanced Custom Fields, WPBakery—anything that touches your front-end rendering or content structure. Updates here can cascade across hundreds of pages.
    • Plugins you’ve customized via hooks or filters. Auto-updates will overwrite nothing, but new versions may deprecate the functions you’re relying on.
    • Anything that hasn’t been updated in over a year. If the developer isn’t actively maintaining it, the next update could be panicked, untested, or abandoned entirely.

    On a typical content site, I’ll have auto-updates enabled for about 60% of installed plugins. On a membership site with custom checkout flows, closer to 30%.

    Theme auto-updates: almost never

    Themes control your entire front-end. A bad update can break layouts, remove custom CSS, or interfere with child theme overrides.

    Disable auto-updates for your active theme. Period. The only exception: you’re using a bare-bones starter theme (like GeneratePress or Astra) with zero customizations, and all your design work lives in a child theme or site-specific plugin.

    You can leave auto-updates enabled for inactive themes if you want to keep them patched for security, but the smarter move is just to delete any theme you’re not using. An inactive theme is still executable code that can be exploited.

    Translation auto-updates: safe to enable

    Translation files auto-update by default, and there’s no reason to turn this off. They’re low-risk, non-executable, and keeping them current improves localization accuracy. Leave it alone.

    What happens when an auto-update fails

    WordPress has a rollback mechanism. If a plugin or theme update triggers a fatal error during activation, the system will attempt to restore the previous version and send you an email with the error log.

    This works—most of the time. But it’s not a substitute for backups. If you’re enabling auto-updates for anything beyond minor core releases, you need automated daily backups with off-site storage. Most managed WordPress hosts (including BigScoots) include this. If you’re on unmanaged hosting, use UpdraftPlus, BlogVault, or a server-level solution.

    The notification problem

    Auto-updates are only useful if you know they happened. WordPress sends email notifications for core updates and failed plugin updates, but successful plugin updates are silent by default unless you enable the auto_plugin_update_send_email filter.

    Add this to your theme’s functions.php or a site-specific plugin:

    add_filter( 'auto_plugin_update_send_email', '__return_true' );

    Now you’ll get an email every time a plugin auto-updates. If you’re running multiple sites, route these to a dedicated email address or a Slack channel via Zapier.

    One non-obvious tip: staging auto-updates

    If you’re using a host with staging environments, configure your staging site to auto-update everything—core, plugins, themes. Then schedule a weekly automated check (via uptime monitor or a simple cron job) to verify the staging site still loads.

    If staging breaks, you’ll know before the same update hits production. If it doesn’t, you can manually push the updates live with confidence. This is the closest you’ll get to zero-touch maintenance without the risk.

    Got a WordPress setup question we should cover? Reply to this email—we read every one.

    Some links in this post are affiliate links — we earn a small commission if you sign up through them, at no cost to you. We only recommend tools we actually use.

  • How to Run Three Facebook Pages Without Touching Facebook

    How to Run Three Facebook Pages Without Touching Facebook

    The single highest-leverage change most newsletter operators can make to their Facebook strategy isn’t writing better posts. It’s not switching topics. It’s not hiring a designer. It’s not posting from inside Facebook.

    Posting directly from Facebook means: open Facebook, get pulled into the algorithm for 20 minutes, write something less considered than you intended, hit Post, repeat tomorrow. The post itself is fine. What kills the operation is everything around it — the context-switching, the inconsistency, the days you forget, the algorithmic detour every time you log in to do five minutes of work.

    A scheduler fixes that by letting you write a month of content in one sitting and never log into Facebook again for posting. We use Publer for this across the Love-To-Visit network. Here’s why, how, and what to expect.

    Disclosure: the Publer link in this post is an affiliate link. If you sign up through it we may earn a referral fee. We use Publer ourselves — we wouldn’t be writing about it if we didn’t.

    Why a scheduler matters more than the content

    Most operators we talk to think their Facebook problem is the content. It almost never is. The pattern looks like this:

    • Week one: post every day, traffic spikes, motivated.
    • Week two: post most days, the spike fades, energy drops.
    • Week three: post twice. The Page goes quiet. The algorithm notices.
    • Week four: post once, “I should really get back into this.”
    • Week eight: dormant Page. Re-energise plan. Same cycle.

    This isn’t a content problem — the posts in week one were the same quality as the ones that never got written in week four. It’s a cadence problem. Facebook’s algorithm rewards consistency. Erratic posting halves your reach for the same content.

    A scheduler attacks this at the root. You don’t post on Tuesday because you remember — you post on Tuesday because Tuesday’s slot was filled three weeks ago. The cadence is no longer dependent on whether you have energy that morning.

    Three concrete benefits we measured on our own Pages after switching:

    • Reach went up ~30% over four weeks — not because the posts were better, but because we hit the algorithm’s “active Page” threshold every week.
    • Content batches got better — writing 12 posts in one sitting forces you to think about variety and themes. Writing one post a day, you reach for whatever’s top-of-mind.
    • Time spent on Facebook dropped from ~2 hrs/week to ~30 min/week. The 30 minutes is the batch session; the rest is replies. No more pulled-into-the-feed detours.

    Why we picked Publer

    There are roughly six serious schedulers in this category — Buffer, Hootsuite, Later, Loomly, SocialBee, and Publer. We tested most of them. Here’s the case for Publer specifically:

    • Free tier is actually usable. Buffer’s free tier capped at 10 scheduled posts per Page when we last checked. Hootsuite scrapped its free plan entirely. Publer’s free tier is 5 social accounts and unlimited scheduled posts — enough to run a small Page for free, forever, if you don’t need the AI assistant or analytics.
    • Native Facebook coloured-background text posts. Most schedulers can’t post these — you get a regular text post instead. Publer supports the full set of Facebook background presets. Worth ~30% reach uplift on text-only posts in our testing.
    • First-comment automation. Drop a link in the first comment and Facebook stops penalising the main-post reach. Publer has a dedicated First Comment field. Hootsuite makes you write a follow-up reminder; Buffer doesn’t support it at all on the free plan.
    • Bulk CSV upload. Spreadsheet of posts → 50 scheduled posts in one minute. Critical when you batch-write.
    • Recycle queue. Evergreen posts can be set to auto-recycle every N days, which keeps a small Page active even between fresh content batches.
    • The pricing. The Pro plan is $12-15/month for 10 social accounts and the AI assistant; that’s roughly half what Hootsuite charges for similar features.

    Where Publer falls short: the analytics view is decent but not as deep as Sprout Social or even Buffer’s paid tier. If you’re doing serious agency-level reporting across 50+ accounts, it’s not the right tool. For an operator running 1–10 Pages, it’s the best fit.

    The 20-minute setup

    1. Sign up. Go to Publer, free plan is fine to start. Email + password, no credit card required.
    2. Connect your Facebook Page. In Publer’s dashboard: Add Account → Facebook → Connect → pick the Page. Publer requests pages_manage_posts, pages_read_engagement, and a few others — the same scopes a custom Facebook App would need.
    3. Set your weekly schedule. Publer’s Calendar view lets you pick the times you want posts to fire each day. Three a day at 8am / 1pm / 7pm is a reasonable starting point for a brand Page.
    4. Write your first batch. Compose 5-10 posts in the Library: text, image, link, and (this is the trick) at least 2 coloured-background text posts. Mix the formats — the algorithm penalises Pages that look formulaic.
    5. Hit Schedule. Posts drop into the next open slots. Calendar view shows the whole week at a glance. Edit / move / delete is drag-and-drop.
    6. Set up first-comment for your link posts. When the post body has a link, Facebook tends to suppress reach. Move the link into the First Comment field instead and put the hook in the body. Publer fires the comment automatically when the post lands.

    Total time: roughly 20 minutes the first time, 10 minutes for each subsequent batch. A month of content for a single Page in 30 minutes is realistic once you have your post-format library.

    What batching does that daily posting can’t

    The behaviour change you get from a scheduler isn’t just convenience — it’s a different writing pattern. Daily-posting forces you into reactive content (whatever’s interesting today). Batch-posting forces you into themed content (what does this Page stand for, and what does a month of it look like?).

    For our travel Pages, a month of content typically breaks down like:

    • 40% destination spotlights — one place per post, sensory and specific.
    • 20% practical tips — “what nobody told us about renting a car in X”.
    • 15% historical / cultural facts — the hook story. These travel best.
    • 15% recurring formats — weekly photo prompt, Friday “where would you go this weekend” question.
    • 10% link drops — back to the website / newsletter, with the link in the first comment.

    You can’t think this clearly about your mix when you’re writing one post at 7am. Batching forces it.

    Honest expectations for the first 30 days

    The scheduler isn’t a growth lever. It’s a consistency lever. You’ll see:

    • Posts shipping every day, with zero willpower spent. This is the biggest win. Two months of consistent posting is worth more than two viral posts.
    • Slow reach uplift over the first 30 days — 15–40% in our experience — as the algorithm registers the Page as active.
    • Engagement starts to compound by month two. The first month you’re rebuilding the algorithmic relationship with your audience. Don’t judge results until day 60.
    • You’ll discover formats that work. One coloured-background text post about an obscure local custom outperformed a beautiful destination photo for us by 5x. You only learn this by shipping enough volume to see signal.

    What you won’t see: 10x growth, viral posts, a sudden flood of new newsletter subscribers. Schedulers fix the operations problem. The content problem is still yours. They just stop you from hiding behind “I didn’t have time to post” when the real issue is that the Page wasn’t a priority.

    The simplest test you can run this week

    1. Sign up for Publer’s free plan (no card required).
    2. Connect one Facebook Page.
    3. Block 30 minutes on a Saturday and write 14 posts — two per day for a week.
    4. Schedule them across the next 7 days at the times you’d actually post manually.
    5. Don’t open Facebook all week. Reply only to comments via Publer’s Inbox view (it pipes Facebook DMs and post comments into one screen).
    6. Compare reach + engagement on those 14 posts to the previous 14 you posted manually.

    If the scheduled batch outperforms the manual batch, you’ve found your new permanent workflow. If it doesn’t, the issue was the content all along — in which case at least you’ve reclaimed two hours a week.

    Either way, Publer’s free plan costs nothing to test. The 30-minute batch is the cheapest experiment you can run on your Facebook strategy.

    Try it: publer.com

  • Google Analytics 4’s debug mode: catch tracking errors before they cost you

    Google Analytics 4’s debug mode: catch tracking errors before they cost you

    Most operators treat Google Analytics like a black box. You drop the tracking code on your site, events fire, and you trust the dashboard to tell the truth. But when conversion data goes missing or attribution breaks, you’re stuck guessing what happened three weeks ago.

    GA4’s debug mode solves this. It’s a real-time event inspector that shows you exactly what’s being tracked, what’s broken, and what’s being ignored — before bad data compounds into bad decisions.

    What debug mode actually does

    Debug mode is a testing layer that sits between your site and GA4’s servers. When enabled, it pipes all event data into a dedicated real-time report called DebugView, where you can see:

    • Every event as it fires, with full parameter details
    • User properties being set or updated
    • Validation errors (missing required fields, malformed values)
    • Events that aren’t configured to show up in standard reports

    It doesn’t change what gets tracked — it just makes the tracking visible while you’re testing. Once you turn it off, everything reverts to normal collection.

    This matters because GA4 silently drops events that don’t meet its schema. If you’re firing a custom event with a parameter name longer than 40 characters, GA4 won’t tell you — it’ll just ignore it. Debug mode surfaces these failures immediately.

    How to turn it on

    There are three ways to enable debug mode, depending on your setup.

    If you’re using Google Tag Manager: Open your GA4 configuration tag, expand “Fields to Set,” and add a field called debug_mode with the value true. Publish the container. This enables debug mode for all users, so only do this in a staging environment or with a separate GTM container.

    If you’re using gtag.js directly: Add debug_mode: true to your config call:
    gtag('config', 'G-XXXXXXXXXX', { debug_mode: true });

    If you want to test without changing code: Install the Google Analytics Debugger extension for Chrome. It enables debug mode for your browser session only, so you can test on a live site without affecting real user data.

    Once enabled, open GA4, go to Admin → DebugView (under the Property column), and interact with your site in another tab. Events should appear within seconds.

    What to check first

    Start with your conversion events. If you’re tracking newsletter signups, course purchases, or affiliate clicks as conversions, fire each one manually and watch DebugView.

    Look for:

    • Missing parameters. If your purchase event is supposed to include value and currency, but DebugView shows them as absent, GA4 won’t report revenue correctly.
    • Wrong data types. If you’re sending value: "29.00" as a string instead of a number, GA4 will reject it. DebugView flags type mismatches.
    • Events firing multiple times. If a single button click triggers three sign_up events, you’re inflating your conversion count. DebugView’s timestamp column makes duplicates obvious.
    • Events that never fire. If you expect to see a scroll event at 90% but it never appears, your trigger is misconfigured.

    One non-obvious thing: DebugView also shows you the engagement_time_msec parameter on every event. If this is always zero, it means GA4 thinks users aren’t engaging with your content — which can suppress your pages in Search Console’s performance reports.

    When to leave it on (and when not to)

    Debug mode is a diagnostic tool, not a permanent setting. Leaving it enabled in production clutters your DebugView report with noise and creates a false sense that everything’s being tracked (it is — for you, but not necessarily for users without the flag).

    Turn it on when:

    • You’re testing a new event or parameter
    • Conversion counts suddenly drop and you suspect a tracking break
    • You’re migrating from Universal Analytics and validating parity
    • You’re onboarding a new developer and want to show them what “correct” looks like

    Turn it off once you’ve validated the setup. If you need ongoing monitoring, use GA4’s standard real-time report instead — it’s less granular, but it reflects what actual users are sending.

    One more thing: debug mode doesn’t work with the GA4 measurement protocol (server-side tracking). If you’re sending events from your backend, you’ll need to validate those with GA4’s event builder or by checking the raw HTTP response codes.

    Want more operator-focused breakdowns of the tools that actually matter? Subscribe to One Two Three Send — one article like this, delivered weekly, no fluff.

  • Buffer vs. Typefully: which tool fits your content rhythm?

    Buffer vs. Typefully: which tool fits your content rhythm?

    If you’re running a content business solo or with a small team, you’ve probably tried to maintain some kind of social media presence. And if you’ve tried that for more than a week, you’ve looked at scheduling tools.

    Buffer and Typefully both solve the same surface problem—getting posts out the door without living inside Twitter or LinkedIn all day. But they’re built around completely different assumptions about how you work, and picking the wrong one will quietly make your workflow worse.

    Here’s what actually matters when you’re choosing between them.

    What each tool assumes about you

    Buffer assumes you’re managing multiple brands or clients, posting across several platforms, and want a central command center. It’s built for marketers who need to see everything in one place: a unified calendar, team collaboration, and analytics that roll up across Twitter, LinkedIn, Facebook, Instagram, and more.

    Typefully assumes you’re a solo operator or small team focused primarily on Twitter and LinkedIn, writing threaded content, and treating social as a writing practice—not a marketing channel. It’s designed around the composition experience first, scheduling second.

    That philosophical difference shows up everywhere.

    Pricing and what you actually get

    Buffer’s free plan gives you three social channels and ten scheduled posts per channel. If you need more, the Essentials plan starts at $6/month per channel. A typical setup—Twitter, LinkedIn, maybe Facebook—runs you $18/month. The Team plan ($12/channel/month) adds collaboration and approval workflows.

    Typefully’s free plan is more generous for Twitter-focused operators: unlimited scheduling on one Twitter account, basic analytics, and the core writing tools. The Creator plan ($12.50/month) adds LinkedIn, thread formatting, analytics, and auto-retweets. The Professional plan ($25/month) brings in team features and auto-plugs (automatic promotional replies to high-performing tweets).

    If you’re only posting to Twitter and LinkedIn and don’t need a visual calendar, Typefully’s free tier will cover you. If you’re juggling Instagram, Facebook, and client accounts, Buffer’s multi-platform approach makes more sense—but you’ll pay per channel.

    Where the workflow diverges

    Buffer’s strength is the calendar view. You can see a week or month at a glance, drag posts around, identify gaps, and treat scheduling like editorial planning. It integrates with Canva for image creation, supports first-comment scheduling on Instagram, and has a browser extension that makes sharing links fast.

    But Buffer’s composition interface is basic. You’re writing in a small text box. If you’re drafting threads or long-form LinkedIn posts, you’re fighting the UI.

    Typefully inverts that priority. The editor is clean, distraction-free, and purpose-built for threads. You can see character counts per tweet, preview how threads will unfold, and use slash commands to insert plugins (auto-promote your newsletter, add a link to your bio page, insert a call-to-action). The “Drafts” view functions more like a writing inbox than a calendar.

    Typefully also has a feature Buffer doesn’t: the ability to auto-RT your own tweets after a set delay, giving good content a second chance at reach without manual work.

    Where Typefully falls short is multi-platform posting. If you need to post the same update to Twitter, LinkedIn, and Facebook simultaneously, Buffer handles that in one action. Typefully treats Twitter and LinkedIn as separate composition contexts, which is more accurate to how the platforms work—but slower if you’re cross-posting identical content.

    Analytics and what they tell you

    Buffer gives you unified analytics across all connected platforms: reach, engagement, clicks, and top posts. It’s useful for reporting to a client or tracking overall performance, but it’s not deep. You won’t get follower growth trends or per-tweet breakdowns without upgrading to the Analyze add-on ($35/month).

    Typefully’s analytics are narrower but more actionable for solo operators. You see impressions, engagement rate, and profile visits per tweet. The “Top Tweets” view helps you identify what’s working so you can write more of it. The auto-retweet feature uses this data to resurface high performers automatically.

    Neither tool replaces native platform analytics for serious deep dives, but Typefully’s feedback loop—write, schedule, see what worked, write again—feels tighter.

    Which one to pick

    Choose Buffer if you’re managing multiple platforms (especially Instagram or Facebook), need a visual content calendar, or are coordinating with a team that needs approval workflows. It’s a solid, stable tool for multi-channel marketers.

    Choose Typefully if Twitter and LinkedIn are your primary channels, you write threaded content regularly, and you want the scheduling tool to feel like a writing environment. The free tier is legitimately usable, and the Creator plan is cheaper than Buffer’s equivalent if you’re only using two platforms.

    One more variable: if you’re already paying for a tool like Notion or Airtable and building your own content calendar there, Typefully’s lighter workflow might complement that better. Buffer wants to be your calendar.

    Want more tool breakdowns like this? One Two Three Send runs these comparisons every week. Subscribe here and get them in your inbox, no fluff attached.

  • Stripe’s payment links vs. checkout sessions: which one to use

    Stripe’s payment links vs. checkout sessions: which one to use

    Stripe offers two ways to collect payment without building a full checkout flow: payment links and checkout sessions. They look similar on the surface—both generate a Stripe-hosted page where customers enter their card details—but they solve different problems and scale differently.

    If you’re selling a course, accepting sponsorships, or launching a paid tier, knowing which tool to reach for saves you from either over-engineering or outgrowing your setup in three months.

    What payment links do well

    Payment links are static URLs you generate once in the Stripe dashboard. You pick a product, set a price, click “Create link,” and get a URL like buy.stripe.com/abc123. You paste that into an email, a Notion page, a Linktree, or anywhere else.

    They’re dead simple. No code. No integration. You can create one in under 60 seconds.

    They work best when:

    • You’re selling one or two products with fixed pricing
    • You want to test demand before building infrastructure
    • You need to send a payment request to a specific person (e.g., a sponsor invoice)
    • You’re embedding buy buttons in no-code tools like Carrd or Notion

    The trade-off: payment links are not dynamic. You can’t pass custom data, adjust pricing per customer, or trigger complex logic after payment. Every link points to the same product at the same price. If you want to sell three tiers, you need three separate links.

    When checkout sessions make more sense

    Checkout sessions are generated programmatically via Stripe’s API. Instead of a static URL, your server (or a tool like Zapier, Make, or a membership plugin) creates a unique session each time someone clicks “Buy.” That session can include custom line items, coupon codes, customer metadata, or pre-filled email addresses.

    You need a bit of code—or a tool that wraps the API—but you get control in return.

    Checkout sessions shine when:

    • You’re selling multiple SKUs or pricing tiers from one page
    • You want to pass user data (email, name, UTM params) into Stripe’s metadata
    • You need to apply dynamic discounts or generate invoices on the fly
    • You’re integrating with a CRM, membership site, or email platform that reacts to purchase events

    For example: if you run a course platform and want to tag buyers in ConvertKit the moment they pay, a checkout session can include the buyer’s email and course ID in metadata. A webhook listens for checkout.session.completed, pulls that metadata, and fires the tag. Payment links can’t do that.

    Pricing and limits

    Both options use the same Stripe transaction fees: 2.9% + 30¢ for cards in the U.S. There’s no additional cost for using payment links vs. sessions.

    Payment links support subscriptions, one-time payments, and even “customer chooses price” donation-style flows. Checkout sessions support the same, plus more flexibility around tax collection (Stripe Tax), installment plans, and multi-currency pricing.

    One gotcha: payment links expire after 90 days of inactivity if you’re on a free Stripe account and haven’t processed volume recently. Checkout sessions expire after 24 hours by default (you can extend this to 30 days), but they’re generated fresh each time, so expiration is rarely an issue in practice.

    Which one to pick

    Start with a payment link if you’re testing, selling one thing, or need something live in the next five minutes. It’s faster than building anything, and you can always upgrade later.

    Move to checkout sessions when you need:

    • Dynamic pricing or product selection
    • Integration with your CRM, ESP, or membership tool
    • Custom metadata or post-purchase automation
    • A branded checkout domain (Stripe lets you use checkout.yourdomain.com with sessions, not links)

    Most solo operators start with payment links for their first product, then switch to sessions once they’re running webinars, cohort courses, or tiered sponsorships. The migration is straightforward—your Stripe account, customer data, and reporting stay the same. You’re just changing how the checkout URL gets generated.

    If you’re already using WordPress and want a middle ground, plugins like WP Simple Pay generate checkout sessions without writing code. You build a shortcode-based button, and the plugin handles the API call behind the scenes.

    One more thing: whichever option you pick, turn on Stripe’s email receipts in your dashboard settings. A shocking number of operators forget this, and customers assume the payment didn’t go through when they don’t get confirmation. That’s a support ticket you don’t need.

    Want more breakdowns like this? Reply and tell us which tool or feature you’re trying to figure out—we’ll cover it in a future issue.

  • Cloudflare’s waiting room: when traffic spikes become revenue spikes

    Most indie operators dream about traffic spikes. A Reddit front page. A viral tweet. A mention in a big newsletter. Then the spike happens and the site goes down for two hours, taking sales pages, signup forms, and credibility with it.

    Cloudflare’s waiting room feature solves this by creating a virtual queue when traffic exceeds your threshold. Visitors see a branded holding page instead of a 503 error. They’re admitted automatically as capacity frees up. Your infrastructure stays online. Nobody sees a broken site.

    It’s not a caching trick or a CDN boost. It’s actual traffic control—and for solo operators running lean infrastructure, it’s worth understanding even if you never turn it on.

    How it actually works

    You define a threshold: say, 500 concurrent users on your checkout page or course login. When traffic crosses that line, new visitors enter a queue. They see a countdown timer and their queue position. The page auto-refreshes when it’s their turn.

    Cloudflare tracks visitors using a session cookie, so someone who closes the tab and returns doesn’t lose their spot. Sessions expire after 15 minutes of inactivity by default, though you can adjust that.

    The waiting room sits in front of specific paths—/checkout, /buy, /enroll—not your entire domain. Static pages, your blog, and your homepage can still serve normally while the bottleneck stays protected.

    Setup takes about ten minutes. You create the waiting room in the Cloudflare dashboard, define your traffic cap, customize the holding page HTML and CSS, then map it to the URL paths you want protected. No code changes on your end unless you want deeper control.

    When solo operators actually need this

    Most don’t. If your site runs on managed WordPress hosting with auto-scaling or you’re serving static content through a Jamstack setup, you probably have enough overhead to absorb spikes.

    But three scenarios make waiting rooms worth the setup cost:

    Limited backend capacity during launches. You’re selling a cohort-based course with 100 spots. Enrollment opens at noon. Five thousand people hit the page in the first three minutes. Your payment processor can handle it, but your WordPress backend can’t serve that many dynamic pages simultaneously. A waiting room meters the flow and keeps Stripe links working.

    Expensive per-request infrastructure. You’re running a tool with server-side processing—an image optimizer, a report generator, something that does real work per visitor. Each request costs CPU and RAM. A traffic flood doesn’t just slow the site; it racks up hosting bills. Waiting rooms cap your exposure.

    Critical conversion paths you can’t afford to break. You’re launching a one-time product with narrow margins. If the sales page goes down during launch hour, you lose the revenue permanently. A waiting room adds 20 seconds of wait time but ensures every visitor sees a working buy button.

    If none of those apply, you don’t need it. Caching, a solid host, and a CDN will cover most spikes.

    Pricing and platform limits

    Waiting rooms live on Cloudflare’s Business plan and above—$200/month as of early 2025. The Pro plan ($20/month) doesn’t include them. Free and Pro users see the feature grayed out in the dashboard.

    That’s steep for a solo operator, but if you’re already paying for Business-tier features—advanced firewall rules, custom SSL for SaaS, image optimization APIs—the waiting room becomes a bundled safety net rather than a standalone purchase.

    If you’re not on Business and a launch is coming, you can upgrade for one month, enable the waiting room, then downgrade after the event. Cloudflare doesn’t penalize plan switching. Just note that waiting room configs persist but won’t activate on lower tiers.

    The non-obvious tip: test with query parameters

    Waiting rooms activate based on concurrent sessions, not total visits. That makes them hard to test. You can’t simulate a thousand-user spike from your laptop.

    Cloudflare lets you force a waiting room preview by appending ?__cf_waitingroom=1 to your protected URL. That drops you into the queue regardless of actual traffic. Use it to check your custom HTML, test the countdown timer, confirm session cookies work, and make sure your brand colors don’t clash with the default layout.

    Run this test on mobile and desktop, and confirm that your holding page includes a clear message explaining why visitors are waiting and how long they should expect it to take. The default Cloudflare template is functional but generic. Sixty seconds spent customizing the copy reduces abandonment measurably.

    One more thing: if you’re protecting a path like /buy, make sure your email links, ad campaigns, and social posts all point to the exact protected URL. A waiting room on /buy won’t catch traffic landing on /purchase or a homepage button leading somewhere else. Traffic control only works when all roads lead through the same gate.

    Hit reply if you’ve used Cloudflare waiting rooms during a launch—or if you’ve survived a spike without them. I’m tracking real-world operator experiences for a follow-up piece on traffic resilience patterns.

  • Stop Buying Subscribers. Start Trading Them.

    Stop Buying Subscribers. Start Trading Them.

    Most operators trying to grow a newsletter run into the same wall around 1,000 subscribers. Organic search drips a few signups a day. Social posts spike traffic for 24 hours then go quiet. Paid ads on Meta or X cost $3–$8 per email when they work, more when they don’t. Referrals — actual reader-to-reader forwarding — are the gold standard but slow until you have enough subscribers for the math to compound.

    The piece most operators miss is mutual recommendation: appearing in the recommendation list of newsletters whose audience overlaps with yours, and showing those same newsletters to your readers. It’s how Substack’s “Recommended by other writers” works inside their platform; it’s how SparkLoop and Beehiiv‘s recommendation marketplaces work as a paid layer; and it’s the single channel new operators consistently underestimate.

    The “Other newsletters you might like” widget in One Two Three Send Pro is the same idea — free, and built into the WordPress plugin.

    What the widget does

    The plugin runs a central directory at onetwothreesend.com — a registry of newsletters built on One Two Three Send Pro. When you install the plugin and opt in, two things happen:

    1. Your newsletter appears in other publishers’ widgets — both on their websites and at the bottom of their daily emails. A reader who’s enjoying their newsletter sees a card with your name, your one-line description, and a Subscribe button.
    2. Your widget shows other publishers’ newsletters — the same way, on your blog posts and at the bottom of your emails.

    Four cards by default. Each Subscribe link routes through a tracked redirect, so both sides can see how many clicks each surface produces.

    Why mutual recommendation outperforms most other channels

    1. The intent match is excellent. Someone reading another travel-newsletter operator’s post is, by definition, a person who likes reading travel newsletters. They’ve already qualified themselves on the medium and the topic. Conversion from that audience is typically 2–10× a cold paid ad on Meta, because the reader is already doing the thing you want them to keep doing.

    2. The cost is ad inventory you weren’t selling. The bottom of every blog post and every email is real estate that, if you’re not running the widget, is empty. Trading that space for similar inventory on someone else’s newsletter is free. The “cost” is showing four other newsletters to your readers — and if you’ve curated the network well, that’s a feature, not a leak.

    3. It compounds with size. A widget with 4 newsletters in it is mildly useful. A widget with 50 newsletters in the registry (where the algorithm picks the 4 most-relevant for each impression) is a small Times Square billboard. Each newsletter that joins makes the widget more useful for everyone. Networks of this kind typically hit a tipping point at 30–50 members where the rate of new subscribers from the widget overtakes referrals for new operators.

    What you actually see on each surface

    On every blog post: the widget appears at the end of the article body as a labelled section — Other newsletters you might like — with four cards. Subscribe buttons go to each partner newsletter’s signup form.

    At the bottom of every newsletter email: the same four newsletters, rendered in email-safe inline tables so it works in Gmail, Outlook, Apple Mail, and the rest — not just modern browsers.

    No widget on: admin pages, RSS feeds, REST output, the home page or category archives, your own newsletter posts (those build their own widget already), and any post where you’ve placed the shortcode manually so we don’t duplicate it.

    The 60-second setup

    Once you have One Two Three Send + One Two Three Send Pro installed:

    1. Go to Newsletter → Network.
    2. Click Join the network.
    3. Confirm your newsletter name, description, and signup URL. The description is what shows up under your name in everyone else’s widget — keep it to one line and lead with the value.
    4. Save.

    That’s it. The plugin starts publishing your listing to the central registry within a minute. Other sites’ widgets refresh their cached recommendations every few hours, so you should start appearing on partner sites within a day. Your own widget activates once at least three other newsletters have joined — otherwise the widget hides itself rather than show a barely-populated panel.

    To override the default count for a specific page, drop the shortcode in manually:

    		

    Other newsletters you might like

    Irish Videos

    A daily newsletter and blog celebrating Ireland — its places, culture, music, history and the stories worth sharing from the Emerald Isle.

    Subscribe

    Love Germany

    Love Germany — in your inbox Castles, hidden gems and the best places to visit in Germany. One short email, every day.

    Subscribe

    Springbokfans

    The best Springbok updates, straight to your inbox. Only when something worth reading actually happens.

    Subscribe

    Scottish Rugby Fans

    The best Scottish rugby updates, straight to your inbox — Six Nations, the Nations Championship, Glasgow and Edinburgh. Only when there's something worth reading.

    Subscribe

    Newsletters via the One Two Three Send network.  ·  Want your newsletter featured here? Click here

    Cap is 10 cards.

    What to put in the description line

    The line under your newsletter name is the entire pitch. People read eight words and decide whether to click. Bad descriptions look like this:

    “A newsletter about productivity, time management, focus, and getting more done in less time with proven techniques.”

    Good descriptions look like this:

    “One small experiment to get unstuck. Mondays.”

    The first one is a list of topics. The second is a contract: what you’ll get, when you’ll get it. Lead with the benefit, name the cadence, stop.

    A few patterns that work:

    • The benefit + the cadence: “Smarter ad copy. Every Tuesday.”
    • The audience + the value: “For solo SaaS founders. The one growth tactic I tried this week.”
    • The hook + the proof: “The newsletter that made me $40k. Free.”

    Avoid adjective stacking (“the best, smartest, most insightful…”), listing every topic (“…covering marketing, sales, retention, hiring…”), and generic claims (“trusted by thousands of readers”). They all eat your eight words and say nothing.

    Honest expectations

    The widget is not a button you press to get subscribers. Real numbers from running this on a small travel-newsletter network:

    • First 30 days: 5–15 new subscribers per week if you’re a small site with 200–1,000 weekly visitors. Roughly 0.5–1.5% click-through rate on widget impressions; about 30% of clicks convert when the partner newsletter and yours overlap topically.
    • Once your daily email goes to 3,000+ subscribers: 20–80 new subscribers per week, mostly via the email-bottom widget rather than the blog one (email gets read; blog posts compete with everything else).
    • The network effect kicks in around 30 members: below that, your widget might only show 4 partners and reader fatigue (“oh, those four again”) shows up. Recommend the plugin to other operators in your space — every additional member makes everyone’s widget more useful.

    The widget will not turn a newsletter nobody wants into one people want. It amplifies whatever signal your newsletter already has. If your retention is poor and your open rate is 12%, the widget will bring in subscribers who will also unsubscribe. If your newsletter is genuinely good and you’re stuck below 1,000 because nobody knows about you, the widget is one of the best free channels available.

    Click tracking and stats

    Every Subscribe-button click routes through the central registry’s click endpoint, so both sides see where their clicks come from. You can read your own outgoing-and-incoming click counts at Newsletter → Network → Stats. Useful for two things:

    • Spotting which partners send the best subscribers — open rate of subscribers from each source, after 30 days. Bad-fit traffic shows up as a 60% open-rate drop in the first week.
    • Spotting when you’ve outgrown the description — if your CTR (Subscribe clicks ÷ widget impressions) drops below 0.5%, you’ve either changed audiences (the description no longer matches what they’ll get) or the partners on the widget no longer overlap with you. Time to rewrite the line.

    What the widget is not

    • Not a paid placement. Nobody’s buying recommendations. The network is mutual — you appear if and only if you also show others.
    • Not Substack Recommendations. Substack’s system only works inside Substack and lives in publication settings. This widget is your own real estate, on your own domain, in your own email.
    • Not affiliate-driven. No commission. The point is reader exchange.
    • Not curated by us. Every newsletter that joins appears. Spam protection is automated (failed delivery rate, complaint rate, listing takedown reports). If you find a partner that’s a poor fit, you can hide specific listings from your widget without leaving the network.

    The minimum viable test

    If you’ve never used the widget before, this is the smallest test that tells you whether it’s worth keeping on:

    1. Install One Two Three Send + One Two Three Send Pro.
    2. Join the network (Newsletter → Network → Join).
    3. Leave it on for 30 days. Don’t change anything else — no new lead magnet, no new content cadence, no new referral push.
    4. After 30 days, check Newsletter → Stats for incoming subscriber count from the widget vs. your usual weekly average.

    If you got more than 50 new subscribers from the widget alone, it’s a permanent channel. If you got 5 and the partner newsletters were a poor fit, your description is the issue (rewrite it) or your topical neighborhood is thin in the network (recruit a few peers).

    Either way: the widget costs nothing to keep on, and the first 30 days will tell you whether to invest in better description copy or recruit more partners. Most operators discover that “a small percentage of every email and every blog post” turns into their third or fourth largest acquisition channel after a few months.

    Some links in this post are affiliate links — we earn a small commission if you sign up through them, at no cost to you. We only recommend tools we actually use.

  • Claude Projects vs. ChatGPT custom instructions: which to use when

    Claude Projects vs. ChatGPT custom instructions: which to use when

    If you’re using AI to write, research, or automate any part of your online business, you’ve probably hit the same wall: the tool forgets everything between sessions. You end up re-explaining your audience, your voice, your product, and your preferences every single time.

    Both Anthropic and OpenAI offer solutions. Claude has Projects. ChatGPT has custom instructions (and now GPTs, though those are a different beast). They solve the same problem—context persistence—but they work in fundamentally different ways, and picking the wrong one costs you time.

    How Claude Projects work

    Claude Projects let you create a named workspace with its own knowledge base. You upload documents, paste style guides, add background about your business, and then every conversation inside that Project has access to that material.

    Each Project can hold up to 200,000 tokens of reference material (roughly 150,000 words). That’s enough for a full brand guide, product documentation, past article archives, customer research notes, and your editorial calendar all in one place.

    The big advantage: you can have multiple Projects. One for customer support replies, one for content writing, one for course development. Each stays isolated. The AI doesn’t mix context from your SaaS docs into your newsletter drafts.

    Projects are available on Claude Pro ($20/month) and the API. The free tier doesn’t get them.

    How ChatGPT custom instructions work

    Custom instructions are a single set of persistent guidelines that apply to every conversation in your account. You get two text fields: one for context about you, one for how you want ChatGPT to respond.

    The context field is where you explain your business, audience, products, and role. The response field is where you set tone, format preferences, and constraints (e.g., “always use American English,” “never use exclamation marks,” “keep answers under 300 words”).

    The limitation: it’s global. You can’t scope instructions to specific use cases unless you manually turn them off, edit them, or work around them in your prompts. If you want formal tone for client emails and casual tone for social posts, you’re stuck toggling or overriding.

    Custom instructions are free on all ChatGPT tiers, including the free plan. GPT-4 and GPT-4o respect them. GPTs (the custom chatbot builder) bypass custom instructions entirely and use their own system prompts instead.

    When to use Claude Projects

    Use Projects when you have distinct workflows with different context needs. If you’re writing a newsletter, managing a membership community, and building a course, those are three separate Projects. Each gets its own voice guide, audience research, and example library.

    Projects also shine when you need to reference large documents repeatedly. Upload your entire content archive, and Claude can pull from it without you pasting excerpts into every prompt. It’s particularly useful for research-heavy work—competitor analysis, SEO audits, or synthesizing reader feedback.

    The major downside: you have to remember to switch Projects. If you’re in your “newsletter” Project and ask a question about your course, Claude won’t know what you’re talking about. It’s not smart enough to auto-switch.

    When to use ChatGPT custom instructions

    Use custom instructions when your needs are consistent across everything you do. If you’re a solo operator with one brand, one voice, and one audience, global context works fine. Set it once, forget it.

    Custom instructions also work well for constraints and formatting preferences that apply universally. Things like “never use jargon,” “default to bullet points,” or “cite sources inline” belong here. You don’t want to re-specify those in every Project or GPT.

    The catch: if your work varies in tone or scope, custom instructions become a lowest-common-denominator compromise. You’ll end up writing longer prompts to override the defaults, which defeats the purpose.

    The hybrid approach

    Most operators I’ve talked to don’t pick one. They use both tools for different parts of the business.

    Claude Projects handle the heavy, structured work: content production, documentation, research synthesis. ChatGPT with custom instructions handles the quick, ad-hoc stuff: drafting emails, brainstorming headlines, troubleshooting code snippets.

    If you’re paying for both—Claude Pro and ChatGPT Plus both run $20/month—this split makes sense. If you’re only paying for one, pick based on where you spend the most time. Content-heavy businesses lean Claude. Generalists lean ChatGPT.

    Reply to this email if you’re using Projects or custom instructions in a way that’s working (or not). I’m collecting notes for a follow-up on how operators are actually structuring their AI workflows.

    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.

  • What MailerLite is, and how to use it with the One Two Three Send plugin

    What MailerLite is, and how to use it with the One Two Three Send plugin

    For most operators starting a newsletter in 2026, the question isn’t which email platform to pick — it’s which platform won’t bankrupt me before I have any readers. MailerLite‘s answer is the most generous free tier in the industry: 1,000 subscribers and 12,000 emails per month, free, no time limit, no credit card needed. That changes the math for anyone in the first year of a newsletter where revenue is zero and you don’t yet know if the project will work.

    This post is the operator’s guide to MailerLite: what it actually is, the cost math past the free tier, the step-by-step setup with the One Two Three Send plugin, and the honest comparison vs Mailchimp, Beehiiv, ConvertKit, and Substack.

    What MailerLite is, in one paragraph

    MailerLite is a Lithuanian-founded (now GoDaddy-owned) email marketing platform that’s been building toward “the simplest professional email tool” since 2010. It’s the closest thing the industry has to “Mailchimp without the Mailchimp pricing surprises” — a clean drag-and-drop editor, automations, landing pages, signup forms, A/B testing, and an API/SMTP interface that integrates with anything. About 1.5 million businesses use it. The deliverability reputation is solid (not as obsessive as Postmark but materially better than Mailchimp on the same lists in our testing). The killer feature for new operators is a free tier that actually lets you run a newsletter at scale, not a 14-day trial that converts you to $30/month before your first subscriber arrives.

    The case for MailerLite

    Three reasons it shows up in operator stacks more than most people realize:

    1. The free tier is real. Most “free” email platforms are time-limited (14 days), volume-limited (300 emails total), or feature-crippled to push you to upgrade. MailerLite’s free tier gives you 1,000 subscribers and 12,000 sends per month with the full editor, automation, and landing-page tools. The only feature gate is removal of the MailerLite footer — which costs $9/month if you care, $0 if you don’t.

    2. The editor doesn’t fight you. Mailchimp’s editor was the industry standard until about 2018, when they started progressively breaking it for power users. MailerLite kept the editor simple. Drag a block in, type in it, save. Operators coming from Substack (“just give me a textbox”) tolerate it. Operators coming from Mailchimp (“why does this require six clicks?”) love it.

    3. Automations and landing pages are bundled. Welcome sequences, abandoned-form recovery, paid-tier upgrade flows — all built in, no Zapier glue, no third-party email-automation tool layered on top. Same with landing pages: you can build a signup form + thank-you page + welcome email in 20 minutes without leaving the platform.

    The cost reality, with real numbers

    The pricing is structured by subscriber count (not email volume), which is the right unit for newsletter operators.

    SubscribersMailerLiteMailchimp StandardConvertKit CreatorSubstack
    0–1,000$0 (free)$20$1510% of revenue
    2,500$25$45$2910% of revenue
    5,000$39$75$4910% of revenue
    15,000$99$200$14910% of revenue
    50,000$289$385+$37910% of revenue

    For a paid newsletter at $5/month with 5,000 subscribers (50% paid = $12,500/month revenue), Substack takes $1,250/month. MailerLite plus a $20/month Postmark or SES bill takes $59 total. The break-even on switching off Substack to a self-hosted MailerLite + One Two Three Send stack is roughly 250 paid subscribers — at that point the platform fees you’re saving cover the entire stack with money to spare.

    Setup with the One Two Three Send plugin

    The pro plugin has a built-in MailerLite provider — pick it from the dropdown and you’re 90% there. About 10 minutes if you already have a domain.

    Step 1 — Sign up and verify your domain

    Sign up at mailerlite.com. You’ll be asked some onboarding questions about your business; pick “Newsletter” or “Content creator” — answers don’t affect anything functional. Once in, go to Account → Domains and add the domain you want to send from. MailerLite gives you four DNS records to add: SPF, DKIM (two records), and a Return-Path CNAME. Add them all at your DNS provider, click Verify. Done within 10 minutes.

    Skipping any of these — especially the DKIM pair — costs you 5–10% deliverability at Gmail. Don’t skip them.

    Step 2 — Get your API key

    From the MailerLite console, go to Integrations → MailerLite API. Click “Generate new token.” Name it “OTTS plugin.” Copy the token — you’ll only see it once.

    Step 3 — Configure the plugin

    In your WordPress admin, go to Newsletter → Settings → Provider. Pick MailerLite from the dropdown. Paste the API key. Click Save.

    If the pro plugin isn’t installed (you’re on the free One Two Three Send only), the MailerLite option won’t appear — install the pro companion plugin first (it’s free if you’re on the One Two Three Send newsletter list).

    Step 4 — Map your subscriber list

    One Two Three Send keeps subscribers in WordPress (in the otts_subscribers table). MailerLite keeps them in their own subscriber database. The plugin’s MailerLite provider syncs WP subscribers into a MailerLite group of your choice when they sign up. In Settings, pick the MailerLite group ID you want new signups to join (create one in MailerLite first — usually just “Newsletter Subscribers”). Existing subscribers get one-way-synced on the next save.

    Step 5 — Send your first test

    From Newsletter → New Newsletter, write a quick test or generate a draft, hit Send Test to your admin address. The plugin pushes it to MailerLite’s API; MailerLite delivers. Activity shows up in MailerLite’s Reports tab within 30 seconds. Click into the campaign to see the open rate, click rate, and unsubscribe count — all the things MailerLite does well that you’d otherwise need a separate analytics tool for.

    How MailerLite compares to the alternatives

    vs Mailchimp — Mailchimp is what people pick when they don’t know what else to pick. Pricing is roughly 2× MailerLite at every tier above the free plan. Deliverability has slipped over the last 5 years (independent benchmarks consistently put Mailchimp behind both MailerLite and ConvertKit at Gmail). The editor is bigger and more complicated; the automations are slightly more powerful. If you’re already on Mailchimp and don’t have time to migrate, fine. If you’re starting fresh, MailerLite is the better default.

    vs BeehiivBeehiiv is the modern Substack competitor, built specifically for paid newsletters with built-in monetization, referral programs, and a publisher network. The free tier (up to 2,500 subscribers) is generous. Beehiiv is the right pick if you want the publishing platform AND the email engine in one product. MailerLite is the right pick if you want a sending engine and you’re publishing on WordPress.

    vs ConvertKit (now Kit) — Kit is the creator-economy platform of choice — built for course creators, membership site operators, and people who sell digital products through their list. The tagging and segmentation are best-in-class. Pricing is comparable to MailerLite at the low end, slightly more expensive past 5K subscribers. If your business is “newsletter that sells courses,” Kit. If your business is “newsletter,” MailerLite.

    vs Substack — Substack is the easiest path to a paid newsletter at zero technical cost. They take 10% of revenue forever. The math for switching off Substack to MailerLite + WordPress + One Two Three Send: at 250 paid subscribers ($5/month each = $1,250/month revenue), you’re paying Substack $125/month and MailerLite + Postmark + hosting would cost $40 total. The catch is the migration friction — getting your subscribers off Substack onto your own list is the part most operators put off until they’ve already overpaid by years.

    vs Brevo (formerly Sendinblue)Brevo‘s free tier is volume-based (300 emails/day) instead of subscriber-based, which makes it good for transactional but bad for newsletter sends to a 1,000-subscriber list. Stay on MailerLite for newsletters.

    Pitfalls operators hit (in the order they hit them)

    1. Importing a “stale” list. MailerLite’s compliance team reviews your first import. If you upload a list that’s been sitting in a spreadsheet for two years, hasn’t been emailed in months, or includes addresses you got from a giveaway, expect MailerLite to suspend the account pending review. Send to the freshest, most-engaged segment first to establish reputation, then add the older addresses gradually. This isn’t unique to MailerLite — every legitimate provider does this — but they’re stricter than most.

    2. The 5,000-character limit on automation emails. Newsletter content rarely runs into this, but operators who paste long-form essays into welcome-email automations sometimes hit it. Split into multiple emails or reduce the length.

    3. Forgetting to set up DKIM properly. The DKIM records are TWO records (most providers use one). If you only added one, your DKIM signing is broken and Gmail will mark you as Unauthenticated. Check both are showing green in MailerLite’s Domains section before sending real campaigns.

    4. The “engaged subscribers only” reflex. MailerLite has a feature called “send only to engaged subscribers” (people who opened in the last 90 days). Toggle that on to protect deliverability, but don’t ALSO be aggressively pruning your list — you’ll lose subscribers who just don’t open every send but would resubscribe given a re-engagement nudge. Engagement send + occasional re-engagement campaign is the right combo, not “only ever email the openers.”

    5. Form duplicate-handling. If a subscriber fills out your One Two Three Send form AND ALSO a MailerLite-hosted form (e.g. on a landing page), you can end up with the same address counted twice. The plugin de-dupes on the WordPress side; MailerLite de-dupes on theirs. Keep signups going through one path (your WP form, synced via the plugin) and skip MailerLite’s standalone forms unless you have a specific reason.

    6. The ‘paid plan starts immediately’ surprise. If you upgrade from Free to a paid tier, you’re billed for that month in full immediately, prorated only on subsequent months. Time the upgrade for the first day of a calendar month if you can.

    Long-term maintenance

    Less than running your own SES, more than pure Substack.

    Weekly: glance at the Reports tab. Open rates trending down means a deliverability problem; click rates trending down means a content problem. Both are fixable, but only if you notice.

    Monthly: prune subscribers who haven’t opened in 180 days. MailerLite has a built-in “Inactive subscribers” segment — review it, send a re-engagement campaign, then suppress the people who still don’t engage. Inbox providers downgrade your reputation when you keep mailing to inactive addresses.

    Quarterly: review your DNS records. Once a year, a domain registrar will quietly drop a record during a settings reshuffle and nobody will notice for two months. The MailerLite Domains tab shows live verification status; check it.

    Annually: rotate your API token. Generate a new one in MailerLite, paste it into One Two Three Send, deactivate the old one a week later. Ten minutes of maintenance for a meaningful security win.

    When MailerLite is the wrong choice

    If you’re sending more than 100,000 emails a day from a single account, MailerLite’s per-subscriber pricing stops being competitive. At that volume, an SES + custom dashboard setup costs roughly half. Consider migrating only when you’re consistently above that threshold for 3+ months.

    If your business depends on advanced segmentation across dozens of tags, custom fields, and complex automation flows (think course-creator operations selling 10+ products into the same list), Kit or HubSpot is a better fit. MailerLite handles 80% of segmentation needs cleanly; the last 20% is where you outgrow it.

    If your audience is concentrated in compliance-heavy industries (financial services, healthcare, legal) where you need detailed audit trails for every send, MailerLite’s audit logging is adequate but not specialized. Higher-end ESPs aimed at enterprise compliance (Iterable, Klaviyo’s Enterprise tier) are worth the extra cost.

    For everyone else: MailerLite paired with One Two Three Send is the most cost-effective newsletter stack available to operators in 2026 — free until you cross 1,000 subscribers, predictably-priced after that, and meaningfully better at deliverability than the platform most operators default to. The only reason not to start here is inertia.

    Some links in this post are affiliate links — we earn a small commission if you sign up through them, at no cost to you. We only recommend tools we actually use.