Author: onetwothreeadmin

  • ConvertKit’s visual automation builder vs. classic rules: which to use

    ConvertKit’s visual automation builder vs. classic rules: which to use

    ConvertKit gives you two ways to automate what happens after someone subscribes, clicks a link, or buys a product: the visual automation builder and the older rules-based system. They look different, they feel different, and they solve different problems.

    If you’ve ever clicked into Automations and felt paralyzed by the blank canvas—or built a simple rule and wondered why everyone raves about visual workflows—you’re not alone. The platform doesn’t make it obvious when to use which, and picking wrong costs you time or flexibility down the road.

    Here’s how to decide.

    What each one actually does

    The visual automation builder is the flowchart interface. You drag triggers, conditions, actions, and delays onto a canvas. It handles multi-step sequences, conditional logic, tagging, field updates, and webhook calls. You can see the whole journey at a glance.

    The rules system is text-based and hidden under Settings → Rules. Each rule is a single if-this-then-that statement: “If someone subscribes to Form A, tag them with Lead Magnet B.” No branching, no delays, no visual feedback.

    Both run in the background. Both fire instantly. But they’re built for different levels of complexity.

    When to use the visual builder

    Use the visual automation builder when your subscriber journey has more than one step, or when the next action depends on what someone does (or doesn’t do).

    Examples where it shines:

    • Onboarding sequences with conditional branches based on link clicks or form submissions
    • Lead nurture flows that tag people differently depending on which resource they download
    • Product launch sequences that change behavior based on purchase status
    • Re-engagement campaigns triggered by inactivity, with different paths for openers vs. non-openers

    The visual builder also makes debugging easier. You can see where subscribers are in the flow, spot bottlenecks, and identify where people drop off. If you’re running anything more complex than a single tag or email, the canvas pays for itself in clarity.

    One non-obvious tip: use the Wait Until condition instead of fixed delays when timing matters. Instead of “wait 3 days,” set “wait until tag is added” or “wait until custom field changes.” It keeps automations responsive to real behavior, not arbitrary calendars.

    When rules are faster (and safer)

    Rules are better when you need a single, permanent action that should never change based on subscriber behavior.

    Use rules for:

    • Auto-tagging every new subscriber to a specific form
    • Assigning a custom field (like “source” or “signup date”) the moment someone joins
    • Moving subscribers between sequences when they complete a purchase
    • Unsubscribing people from a broadcast tag when they click an opt-out link

    Rules execute faster because there’s no flowchart to traverse. They’re also harder to accidentally break—there’s no risk of pausing the wrong branch or deleting a connector by mistake.

    The biggest advantage: rules don’t require you to “start” subscribers. Visual automations only affect people who enter after you publish. Rules apply to everyone who meets the condition, past or future, unless you explicitly turn them off.

    The hybrid approach most operators miss

    You don’t have to choose. The most reliable setups use rules for foundational tagging and field assignment, then use visual automations for behavior-based sequences.

    Example: a rule tags every new subscriber with their lead magnet name. A visual automation checks that tag, then sends a welcome sequence tailored to what they downloaded. The rule ensures no one slips through; the automation handles nuance.

    This also future-proofs your setup. If you later want to add a branch for people who clicked a specific link, you’re editing an automation—not rewriting a dozen rules.

    One warning: don’t duplicate logic across both systems. If a rule and an automation both try to add the same tag based on the same trigger, you’ll get double-fires and confusing analytics. Pick one place for each action.

    Where most people get stuck

    The most common mistake is building a visual automation when a rule would’ve been cleaner—usually because the visual builder feels more “powerful.”

    If your automation is a straight line with no branches, no delays, and no conditions, it’s probably a rule. Save the canvas for when you actually need decision trees.

    The second mistake: not testing both. ConvertKit lets you preview automations, but it doesn’t simulate real subscriber movement. Before you publish, manually trigger the flow with a test subscriber and confirm every tag, email, and field change fires as expected.

    Want more breakdowns like this? One Two Three Send covers the tools and tactics solo operators actually use—no fluff, no affiliate spam. Subscribe for one article like this every week.

  • Reddit’s new search deal with OpenAI: what it means for your traffic

    Reddit’s new search deal with OpenAI: what it means for your traffic

    Reddit announced an expanded partnership with OpenAI in early May 2026, following its earlier Google search deal. The short version: OpenAI’s SearchGPT and ChatGPT will now surface Reddit content directly in conversational search results, with full access to Reddit’s Data API.

    For solo operators and small teams relying on organic traffic, this matters more than it looks.

    What actually changed

    Reddit already had a search licensing deal with Google, signed in February 2024 for a reported $60 million annually. That deal gave Google privileged access to Reddit’s real-time content and user discussions, which is why you’ve seen more Reddit threads dominating Google results over the past year.

    The OpenAI deal extends similar access to ChatGPT’s search features. When users ask questions in SearchGPT or use ChatGPT’s web browsing mode, Reddit threads can now appear as cited sources with direct attribution and links back to the original discussion.

    Reddit’s pitch: users get more authentic, community-vetted answers. OpenAI’s pitch: better, more human training data and real-time context. The reality for operators: another platform where Reddit owns the discovery layer for informational queries.

    Why this shifts your traffic strategy

    If you’ve been building SEO content around informational queries—how-tos, product comparisons, tool recommendations—you’re now competing with Reddit threads in two major search ecosystems: Google and OpenAI’s ChatGPT search.

    Reddit threads have structural advantages you can’t replicate on a blog:

    • Multiple perspectives in a single URL
    • Recency signals from ongoing discussion
    • Social proof baked into upvotes and comment depth
    • Domain authority that dwarfs most indie sites

    For queries like “best email platform for small newsletter” or “how to migrate WordPress hosts without downtime,” a well-populated Reddit thread will often outrank a solo-authored blog post—especially in AI-mediated search, where the model prioritizes diverse, conversational input.

    This doesn’t mean blog content is dead. It means the type of content that wins organic discovery is narrowing. Reddit owns broad informational queries. You need to own something else.

    Where to focus instead

    Depth over breadth. Write the piece Reddit can’t: the 2,500-word deep-dive with original data, screenshots from your own workflow, or a technical walkthrough that requires sustained focus. Reddit threads excel at breadth; they’re weak on single-author depth and narrative control.

    Named, specific problems. Target long-tail queries tied to specific tools, error messages, or edge cases. “ConvertKit automation not triggering after Zapier webhook” will get less Reddit competition than “best newsletter automation tools.”

    Proprietary insight. If you run a SaaS, publish product comparisons that include your own internal data. If you operate a newsletter, publish revenue breakdowns or sponsor outreach templates. Reddit can discuss these topics, but it can’t create the artifacts.

    Be on Reddit. If discovery is shifting to Reddit threads, show up there. Answer questions in relevant subreddits. Link to your deep content when it’s genuinely useful. Build your name as a credible voice in the thread, not just on your own domain. When ChatGPT or Google surfaces that thread, your username travels with it.

    What this means for content ROI

    Expect longer payback periods on traditional SEO content. A blog post that might have ranked on page one in six months could now take nine or twelve—or never rank at all if Reddit owns the SERP.

    That changes the math on content investment. If you’re a solo operator publishing twice a week to chase Google traffic, you might get better return from one deep piece per month plus active participation in two or three subreddits.

    It also changes attribution. Traffic that used to come from “Google / organic” might now come from “reddit.com / referral” because a user found your link in a thread cited by ChatGPT. Your analytics will show Reddit as the source, but the real discovery happened in an AI search interface. Track referral paths more carefully.

    One thing to watch: Reddit’s API pricing. Both Google and OpenAI are paying for access. If Reddit sees this as a major revenue stream, expect continued prioritization in both search ecosystems—and continued downranking of independent blogs that compete for the same queries.

    If you’re building a content-driven business in 2026, assume Reddit is now part of your search competition. Adjust your content strategy, your distribution mix, and your expectations accordingly.

    Want operator-focused breakdowns like this in your inbox? Subscribe to One Two Three Send—no fluff, just the tools and tactics that matter.

  • 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

    Springbokfans

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

    Subscribe

    Love Netherlands

    Canal towns, hidden villages, Dutch stories — a slow, loving look at the Netherlands, written by the people who love it most.

    Subscribe

    Local Edinburgh

    Local Edinburgh is a website that is dedicated to the promotion of Edinburgh as a travel destination. Edinburgh is Scotland’s capital city renowned for its heritage culture and festivals.

    Subscribe

    Love New York

    Love New York is a website and newsletter that is dedicated to the promotion of New York as a travel destination. Everything great about the big apple.

    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.