Category: Monetisation

  • Course platforms charge per student—here’s the breakpoint math

    Course platforms charge per student—here’s the breakpoint math

    Course platforms charge per student—here's the breakpoint math
    Photo: No machine-readable author provided. Avatar assumed (based on copyright claims). via Wikimedia Commons (CC BY-SA 3.0)

    Most solo operators pick a course platform based on feature lists or interface design. Then they hit 200 students and realize they chose the wrong pricing model.

    Course platforms use three billing structures: flat monthly fees, per-transaction percentages, and hybrid models that switch thresholds mid-growth. Each works beautifully at one scale and becomes expensive at another. The trick is knowing which breakpoint you’re approaching—and when to migrate before it costs you.

    Flat fee vs. percentage: the crossover point

    Teachable’s free plan takes 10% + $1 per transaction. The $59/month Basic plan drops that to 5%. The $159/month Pro plan eliminates transaction fees entirely.

    If you sell a $99 course, Teachable’s free plan costs you $10.90 per sale. At 15 sales per month, that’s $163.50 in fees. The $159 Pro plan saves you $4.50—but only if you stay above that threshold every single month.

    Podia charges $39/month with zero transaction fees at any volume. For the same 15 sales, you pay $39 flat. Teachable’s free tier costs you $163.50. That’s a $124.50 difference.

    But scale to 100 sales per month. Podia still charges $39. Teachable Pro at $159 with no transaction fees costs $159. Now Podia wins by $120/month. The crossover happens around 18–20 sales per month for a $99 product on this comparison.

    The math shifts with price point. A $29 course on Teachable’s free plan costs $3.90 per transaction. At 50 sales per month, that’s $195 in fees. Teachable Pro at $159 breaks even at 41 sales. Below that, you’re paying for a plan you don’t need yet.

    Hybrid models hide the real cost

    Thinkific’s free plan allows unlimited students but takes 10% + $1 per sale if you use their payment processing. Switch to the $49 Basic plan and fees drop to zero—but only if you bring your own Stripe account and pay Stripe’s 2.9% + $0.30.

    That 2.9% never goes away. Thinkific’s $49 plan isn’t zero-fee; it’s shifted-fee. For a $99 course, Stripe takes $3.17. Add the $49 monthly platform cost, and your first 16 sales are just covering the subscription.

    Kajabi charges $149/month with no transaction fees and includes email marketing, landing pages, and automation. If you’re paying for ConvertKit ($25/month) and Podia ($39/month) separately, Kajabi’s $149 starts looking reasonable at $64/month baseline. But only if you actually use the email tools. Most operators don’t migrate their list and end up paying for redundant infrastructure.

    When to switch—and when to stay

    Migration costs time. Expect two weeks to move a course with video hosting, email sequences, and payment workflows. If you’re within $30/month of breaking even on a new platform, wait. The opportunity cost of rebuilding usually outweighs the savings until the gap hits $50–75/month sustained over a quarter.

    Transaction fees hurt most when your product price is low and volume is inconsistent. A $29 course selling 10 units one month and 60 the next makes flat-fee planning impossible. Percentage models smooth that volatility—you pay more in good months, less in slow ones.

    Flat fees reward consistency. If you can count on 40+ sales per month, locking in a $99–159 plan with zero transaction fees caps your platform cost as a fixed line item. Your margin improves with every sale beyond breakeven.

    The edge cases that break assumptions

    Payment plan students count differently depending on the platform. Teachable charges transaction fees on each installment. Podia treats a payment-plan student as one enrollment and doesn’t re-bill you when the second charge processes. For a $297 course split into three $99 payments, that difference compounds.

    Refund handling varies. Some platforms refund their transaction fee when a student requests a refund. Others don’t. If your refund rate sits above 8%, that leaked margin adds up.

    Annual billing discounts look appealing but lock you in. Teachable offers two months free on annual plans. That’s $318 saved on the Pro plan—but only if you’re certain you won’t outgrow or downshift within 12 months. Most solo operators overestimate growth in year one and get stuck paying for capacity they don’t use until month nine.

    Run your actual numbers. Take last quarter’s sales count, average product price, and refund rate. Model it against three platforms with different fee structures. The winner isn’t always the one with the best brand or the sleekest interface—it’s the one that costs least at your actual volume, today and six months from now.

    What’s your current course platform costing you per student? Reply with your numbers—I’ll run the comparison and tell you if you’re leaving money on the table.

  • Affiliate link disclosure placement: where regulators actually look

    Affiliate link disclosure placement: where regulators actually look

    Most solo operators know they need to disclose affiliate relationships. Fewer know that where you put the disclosure matters as much as whether you include one at all.

    The FTC’s Endorsement Guides don’t just require disclosure—they require it to be “clear and conspicuous.” That’s a legal standard with specific implications for placement, and getting it wrong doesn’t just risk a warning letter. It undermines reader trust and can trigger platform penalties from Google, Amazon Associates, or your payment processor.

    Here’s what actually counts as compliant placement, based on FTC enforcement actions and platform policy updates through mid-2024.

    Proximity beats boilerplate

    A disclosure at the bottom of your page, buried in a footer, or tucked into a dedicated “disclosures” page doesn’t meet the FTC standard. The agency’s position is consistent: readers must see the disclosure before they click the affiliate link or make a purchasing decision.

    That means:

    • In blog posts, the disclosure needs to appear above or directly adjacent to the first affiliate link—not at the end of the article.
    • In email newsletters, it should sit in the body copy near the link itself, not just in a footer template.
    • In social media posts, it must be in the caption or the first line—not hidden behind a “see more” fold or buried in a comment.

    The FTC has cited cases where disclosures appeared on a separate page linked via “Advertising Disclosure” in small footer text. Those don’t count. If a reader has to hunt for context, the disclosure fails.

    Language that works (and doesn’t)

    “This post contains affiliate links” is the baseline, but it’s often not enough. The FTC wants readers to understand the material connection—that you earn money if they buy.

    Effective language includes:

    • “I earn a commission if you buy through this link.”
    • “This is an affiliate link—I get paid if you purchase.”
    • “Paid partnership with [Brand]. I receive compensation for purchases.”

    What doesn’t work:

    • Ambiguous terms like “supported by” or “in partnership with” without explaining compensation.
    • Abbreviations like “aff link” or “#ad” in contexts where the audience may not know what they mean.
    • Disclosures that only appear on hover states, alt text, or link titles—those aren’t visible enough.

    The standard isn’t whether you think it’s obvious. It’s whether a reasonable reader scrolling quickly would understand the relationship before they click.

    Platform-specific requirements stack on top

    FTC compliance is the floor. Individual affiliate programs often add stricter rules.

    Amazon Associates requires you to include the phrase “As an Amazon Associate I earn from qualifying purchases” on any page with Amazon links. That’s in addition to general proximity rules—it can’t just live in your site footer.

    Google’s ad policies flag pages where affiliate disclosures aren’t “immediately visible.” If your disclosure requires scrolling past the fold, your organic rankings can take a hit or your AdSense account can get flagged for policy review.

    Payment processors like Stripe and PayPal can freeze accounts if they receive chargebacks or complaints tied to unclear affiliate relationships. It’s rare, but it happens—especially if you’re selling info products that include affiliate upsells without clear disclosure in the checkout flow.

    When disclosure must repeat

    One disclosure at the top of a 2,000-word post isn’t enough if you’re linking to five different affiliate products throughout. The FTC’s guidance is that disclosure should appear “in close proximity” to each claim or link that could mislead.

    Practical implementation:

    • If you’re reviewing multiple products and each has affiliate links, include a line like “affiliate link” or “I earn from this” next to each product mention.
    • In list-style posts (“Top 5 tools for X”), add disclosure language under each tool’s heading, not just once at the intro.
    • In email, if you mention an affiliate link in the body and again in a P.S., disclose in both places.

    It feels redundant. That’s the point. The goal is to prevent any moment where a reader clicks without understanding the relationship.

    What to do now

    Audit your three highest-traffic affiliate pages. Open each in an incognito window and scroll as a first-time reader would. Ask:

    • Can I see the disclosure before I reach the first affiliate link?
    • Is the language clear enough that I’d understand I’m clicking a paid recommendation?
    • Does the disclosure repeat near every distinct affiliate link or product claim?

    If any answer is no, revise before you publish your next affiliate post. Compliance isn’t about legal paranoia—it’s about making sure your readers know what they’re clicking, which is the foundation of long-term trust in a content business.

    One Two Three Send covers the operational details that matter when you’re running a content business solo. If this was useful, subscribe for the next one.

  • Gumroad’s rolling 30-day payout hold: what it means for cash flow

    Gumroad doesn’t pay you when a customer buys. It pays you 30 days after each individual sale—not 30 days after signup, not on a fixed monthly schedule. Every transaction starts its own countdown.

    If you’re used to Stripe’s two-day rolling payouts or payment processors that batch weekly, Gumroad’s model feels slower than it is. But the mechanics matter, especially when you’re scaling from a few sales a week to daily transactions. The delay doesn’t disappear once you pass some threshold. It rolls forward, sale by sale.

    How the 30-day hold actually works

    When someone buys your product on June 1, Gumroad releases that payment to your bank account on July 1. A sale on June 15 pays out July 15. There’s no aggregation, no calendar-month cutoff. Each sale has its own 30-day timer.

    For sellers with consistent daily volume, this creates a pseudo-steady state after the first month: you’re always receiving yesterday’s sales from 30 days ago. But in the early weeks, or during launch spikes, you feel the gap hard. A $5,000 launch day in week one becomes a $5,000 deposit in week five, long after you’ve paid for ads, freelancers, or software subscriptions that supported the launch.

    Gumroad’s stated reason is chargeback and fraud protection. Digital products see higher dispute rates than physical goods, and holding funds lets the platform cover refunds and contested transactions without chasing sellers for clawbacks. Fair enough—but it shifts working-capital planning onto you.

    When the delay compounds

    The 30-day hold isn’t static. If you issue a refund, Gumroad pulls from your pending balance first, then from your available balance if pending isn’t enough. That can push future payouts back further or create negative balances that offset incoming releases.

    Seasonal or campaign-driven businesses feel this more acutely. If you run a product launch in May and coast in June, your June cash flow is strong (May’s sales finally pay out) while July dries up. The mismatch between revenue-recognition timing and cash-in-hand makes monthly budgeting harder than it should be.

    There’s also a subtle tax-reporting wrinkle: Gumroad reports sale dates to the IRS, not payout dates. Your 1099 reflects when customers paid, but your bank account reflects 30 days later. For accrual accounting that’s fine; for cash-basis sole props, it’s a reconciliation headache every January.

    What you can do about it

    You can’t negotiate the hold away. Gumroad applies it universally, regardless of transaction history or volume. But you can plan around it.

    First, model your cash flow with the delay baked in. If you’re bootstrapping and every dollar counts, assume any revenue you generate today won’t hit your account for five weeks (30 days plus a few business days for bank transfer). Budget expenses accordingly. Don’t spend launch-week revenue on launch-week costs unless you have a separate cushion.

    Second, consider running a hybrid monetization stack. Use Gumroad for products where its simplicity and audience-discovery features matter—especially if you’re selling to creators who already browse the platform. But for high-ticket items, memberships, or anything with predicable monthly revenue, route payments through Stripe-connected tools like Memberful or Lemon Squeezy. Stripe’s default is a two-day rolling payout, and Lemon Squeezy batches twice a month. Both give you cash faster.

    Third, if you’re doing $10,000+ monthly on Gumroad and cash flow is genuinely constraining growth, talk to your bank about a line of credit or invoice factoring. It’s not free, but the cost of capital might be lower than the opportunity cost of delaying a hire or ad spend because you’re waiting on payouts.

    How it stacks up against alternatives

    Gumroad’s 30-day hold is longer than most competitor platforms. Lemon Squeezy pays out twice a month (on the 1st and 16th) after a short initial hold. Payhip has a 7-day hold for new accounts, then pays weekly. Stripe’s standard is two business days. PayPal is instant to your PayPal balance, though moving it to a bank account adds another day.

    The tradeoff is simplicity. Gumroad requires no developer integration, no SSL cert management, no checkout UI design. You get a link, you share it, you’re selling. For solo operators who want to ship fast and don’t want to wrestle with Stripe’s documentation, that’s worth something—especially early on.

    But once you’re past proof-of-concept and cash flow starts dictating what you can build next, the 30-day wait stops feeling like a reasonable trade. You’re not a high-risk merchant. You’re not drop-shipping gadgets from Alibaba. You’re selling ebooks, courses, templates—things with near-zero chargeback rates after the first week. The hold feels like a blunt instrument.

    If you’re already on Gumroad and the delay is biting, run the numbers on migration cost versus cash-flow gain. Moving your catalog to Lemon Squeezy or a Stripe-based tool takes a weekend, maybe two if you have complex product tiers. The faster payout cadence might free up enough working capital to pay for itself in a single quarter.

    One thing to try this week: Export your Gumroad sales CSV and map each transaction to its actual payout date (sale date plus 30 days). Compare that to your expense calendar. If you see a mismatch—launch costs in June, payouts in July—you’ve found your cash-flow pinch point. Fix it with a buffer fund, a different platform, or a line of credit. Don’t just hope it smooths out.

    Questions about payment processors, payout timing, or monetization mechanics? Reply to this email—I read every response, and reader questions drive half the articles here.

  • Course completion rates hover around 15%—here’s what moves the needle

    Course completion rates hover around 15%—here’s what moves the needle

    The average online course completion rate sits between 10% and 20%. If you’re running a paid course as part of your content business, that number probably feels familiar—and frustrating.

    The usual advice—gamification, drip schedules, community access—sounds good in theory. But the data from operators actually running courses tells a different story about what moves completion rates and what’s mostly noise.

    What the numbers look like in practice

    Three operators shared their course metrics over the past 18 months. All three run evergreen courses priced between $149 and $497, sold primarily to their email lists.

    Operator A: A WordPress productivity course with 847 enrollments. Completion rate: 18%. Average time to finish: 6.3 weeks. Refund rate: 4.2%.

    Operator B: An SEO fundamentals course with 1,203 enrollments. Completion rate: 23%. Average time to finish: 9.1 weeks. Refund rate: 6.8%.

    Operator C: A newsletter monetization course with 614 enrollments. Completion rate: 14%. Average time to finish: 11.4 weeks. Refund rate: 3.1%.

    The spread is narrow. All three courses include video lessons, worksheets, and some form of community or Q&A access. Pricing and production quality didn’t predict completion—the $497 course had the lowest rate.

    Three changes that actually moved the needle

    Operator B added a single check-in email at the 72-hour mark. It’s not a drip sequence. It’s one manual email sent three days after purchase asking what section the student is working on and if anything’s blocking them. Response rate: 31%. Completion rate climbed from 19% to 23% over six months. The email takes four minutes to send per cohort of 20–30 buyers.

    Operator A cut the course from 22 lessons to 14. The original version tried to be comprehensive. The shorter version focused on three workflows and cut everything else. Completion rate went from 14% to 18%. Refund rate stayed flat. Students finished faster—5.1 weeks instead of 7.8—and left better reviews.

    Operator C introduced a 48-hour «finish line» challenge. Once a month, students who’ve completed 80% or more get an email with a 48-hour window to finish the last module and submit their final project. It’s not a hard deadline—the course stays open—but the nudge works. Completion among students who receive the email: 67%. Overall course completion rose from 11% to 14%.

    What didn’t work

    All three operators tried Facebook groups or Slack communities. Operator A’s group had 18% of enrollees join; 4% posted more than once. Operator B shut down their Slack after three months—too much moderation overhead for minimal engagement. Operator C kept a Circle community but stopped treating it as a completion lever.

    Gamification—badges, progress bars, leaderboards—showed no measurable impact on completion for any of the three. Operator B’s course platform (Teachable) includes progress tracking by default. Students who completed the course had the same interaction rate with progress indicators as students who dropped off after module two.

    Drip schedules were neutral to slightly negative. Operator A tested releasing one lesson per week versus full access on day one. Completion rates were statistically identical (17.8% vs. 18.1%), but students on the drip schedule were more likely to request refunds in week two, before the course was fully unlocked.

    The completion-rate mistake most operators make

    Chasing higher completion rates assumes completion is always the right goal. It’s not.

    Operator C’s course teaches newsletter monetization. Some students buy it, watch the sponsorship module, land their first sponsor, and never finish the rest. They got what they paid for. Refund rate is low. Testimonials are strong. Completion rate is 14%.

    The better metric: outcome rate. What percentage of students achieved the result the course promised? For Operator C, 41% of students reported landing a sponsor, affiliate deal, or paid subscription tier within 90 days. That’s nearly three times the completion rate—and the number that matters for retention and referrals.

    If you’re optimizing for completion, track it. But if you’re optimizing for business results, measure the outcome your course promises and work backward from there.

    Want more operator data like this? Reply and tell us what metrics you’re trying to move—we’ll find operators who’ve solved it and share what worked.

  • Stripe payment links expire silently—here’s when and why

    Stripe payment links expire silently—here’s when and why

    Stripe payment links look permanent. You create one, share it in a few places, and assume it’ll keep working. Most of the time it does—until it doesn’t.

    The issue isn’t uptime or platform reliability. It’s that payment links behave differently depending on how you configure them, and the default settings create expiry conditions most solo operators don’t expect. A link that worked yesterday can stop accepting payments today, with no notification and no error page that explains what happened.

    Here’s what actually controls payment link lifespan, and how to avoid losing sales to silent timeouts.

    How Stripe payment links time out

    Stripe offers two link types: reusable and single-use. Reusable links accept unlimited payments and don’t expire unless you manually deactivate them. Single-use links expire after the first successful payment.

    The problem is that single-use is often the default in workflow automations, Zapier templates, and even some no-code checkout builders. If you’re generating links programmatically—say, via the Stripe API in response to a form submission—you need to explicitly set payment_link_data.type to reusable. Miss that parameter, and your link dies after one transaction.

    Even reusable links can expire under specific conditions. If you’ve set an expires_at timestamp (measured in Unix epoch seconds), the link stops working at that exact moment. If you’ve attached inventory limits via the quantity parameter and stock runs out, the link goes dead. If you archive the underlying product in your Stripe dashboard, every payment link pointing to it becomes inactive.

    None of these events trigger a customer-facing error message that says “this link has expired.” Instead, Stripe shows a generic “this payment link is no longer available” page, which reads like a broken URL rather than a sold-out product or time-limited offer.

    Where expiry breaks your workflow

    The most common failure point is evergreen content. You publish a blog post with an embedded payment link for a digital product. The link works for months. Then you update your Stripe catalog, archive an old product SKU to clean up your dashboard, and forget that three articles still reference it. Traffic keeps arriving, but conversions stop. You don’t notice until someone emails to ask why checkout isn’t working.

    Automated email sequences are the second risk zone. If you’re using Zapier or Make to generate one-time payment links and send them via email—common in coaching offers or custom quotes—a single-use link that doesn’t convert within 24 hours often gets forgotten. The recipient clicks it a week later and sees a dead page. You lose the sale and the trust.

    Affiliate campaigns and podcast sponsorships are the third. You create a payment link with a UTM-tagged URL for attribution, share it on a podcast episode, and set a 30-day expiry to match the sponsorship term. The episode stays live for months. New listeners find it, click the link, and hit a wall. You’re paying for exposure that can’t convert.

    How to build links that don’t time out

    Start by auditing your existing links. Log into your Stripe dashboard, navigate to Payment links, and filter by status. Any link marked “archived” is dead. Any link with an expiry date shows a countdown. If you’re using the Stripe API, query the /v1/payment_links endpoint and check the active and expires_at fields.

    For new links, default to reusable unless you have a specific reason not to. Single-use links make sense for unique invoices, limited-quantity launches, or one-off custom pricing. For products you sell repeatedly—courses, templates, memberships, consulting packages—reusable links eliminate the expiry risk entirely.

    If you need time-based urgency, use expires_at but pair it with a redirect. Set up a fallback URL that explains the offer has closed and points to your current catalog or waitlist. Stripe doesn’t let you configure this natively, but you can build it with a URL shortener (Rebrandly, Short.io) or a lightweight redirect script on your own domain. When the payment link dies, the short link still resolves to something useful.

    For inventory-limited products, monitor stock levels outside Stripe. Use a spreadsheet, a Notion database, or a simple automation that pings you when quantity drops below a threshold. Stripe’s inventory counter works, but it doesn’t warn you before a link goes inactive. By the time you notice, you’ve already lost traffic.

    What to do when a link expires

    If a payment link dies mid-campaign, you can’t revive it. Stripe doesn’t offer a “reactivate” button. Your only option is to create a new link, which means updating every place the old URL appears: email sequences, landing pages, social bios, podcast show notes, affiliate dashboards.

    This is why versioning matters. If you’re running a launch or a limited-time offer, append a date or version number to your payment link slug from the start. Instead of /buy-course, use /buy-course-june-2026. When the link expires, you’re not trying to remember where you embedded a generic URL. You can search your site and email platform for the specific string and replace it in one pass.

    For high-value products, consider skipping payment links entirely and using Stripe Checkout Sessions instead. Sessions give you more control over expiry (default is 24 hours, configurable up to 30 days), let you pass custom metadata for attribution, and generate a unique URL per transaction. The trade-off is added complexity—you need a server endpoint or a serverless function to create the session—but for offers above $500, the reliability gain is worth it.

    If you’re running a content business on Stripe, audit your payment links this week. Dead links cost you more than a single lost sale—they erode trust every time a reader hits a broken checkout. And if you’re building workflows that generate links automatically, default to reusable, set expiry only when necessary, and version your URLs so you can find them later.

    What payment-link failure have you run into? Reply and let us know—we’ll cover it in a future piece.

  • Lemon Squeezy’s fraud detection blocks real customers—here’s the fix

    Lemon Squeezy’s fraud detection blocks real customers—here’s the fix

    Lemon Squeezy’s fraud detection system killed three sales for me in April before I knew what was happening. The customers reached out directly—confused emails asking why their cards kept declining. All three had legitimate payment methods. All three were buying a $29 digital product. None triggered a chargeback or refund request afterward, because I manually invoiced them through PayPal.

    The problem wasn’t their cards. It was Lemon Squeezy’s fraud filters doing exactly what they’re designed to do: err on the side of caution. For platforms processing payments on your behalf, that caution protects their merchant account more than your conversion rate.

    What triggers Lemon Squeezy’s fraud blocks

    Lemon Squeezy uses a combination of IP geolocation, payment method origin, purchase velocity, and device fingerprinting to assess fraud risk. The system runs automatically—no manual review, no appeals process during checkout.

    The most common false positives come from:

    • VPN usage. Customers routing through privacy tools often show mismatched IP and billing addresses. Lemon Squeezy’s system flags this as high-risk, especially if the VPN exit node is in a country with elevated fraud rates.
    • Prepaid and virtual cards. Privacy.com cards, Revolut disposable numbers, and similar services trigger blocks more often than traditional bank-issued credit cards. The BIN (bank identification number) lookup tags them as higher risk.
    • Cross-border purchases. A customer in the Philippines buying from a U.S.-based seller with a card issued in Singapore will hit multiple friction points. The system doesn’t distinguish between legitimate digital nomads and card testers.
    • High cart values from new accounts. First-time buyers attempting purchases above $100 face stricter scrutiny. If you sell courses, bundles, or annual subscriptions, expect more declines than someone selling $9 templates.

    You won’t see most of these blocks in your dashboard. Lemon Squeezy logs them as “payment failed” without distinguishing fraud declines from insufficient-funds errors. The customer sees a generic “transaction could not be completed” message and often assumes their card is the problem.

    How this compares to Gumroad and Stripe

    Gumroad uses a similar merchant-of-record model and faces the same false-positive tradeoff. Operators report roughly 2–4% of legitimate transactions blocked, with higher rates for international sales. Gumroad’s support will manually review and whitelist customers, but only after the sale fails and you open a ticket.

    Stripe, when you’re using it as a direct integration (not through a platform), gives you more control. You can adjust Radar’s fraud threshold, whitelist specific countries or card types, and review flagged transactions before they’re declined. The tradeoff: you’re responsible for chargebacks. Platforms like Lemon Squeezy absorb that risk, which is why their filters are tighter.

    For solo operators selling digital products under $50, Lemon Squeezy’s fraud protection saves more money than it costs—until your audience skews international or privacy-conscious. Then the math flips.

    What you can do when a real customer gets blocked

    Lemon Squeezy doesn’t offer a way to pre-approve customers or adjust fraud thresholds. Your options are reactive:

    Manual invoicing. If a customer emails you after a decline, send a PayPal invoice or Stripe payment link directly. You’ll eat the higher transaction fee (PayPal charges 3.49% + $0.49 for invoices vs. Lemon Squeezy’s flat 5% + $0.50), but you’ll close the sale. I’ve done this eleven times in the past six months.

    Alternative checkout links. Some operators set up a secondary Gumroad or Stripe Checkout flow for customers who can’t complete payment on Lemon Squeezy. You’ll maintain two product listings and reconcile sales across platforms, but it catches 60–70% of declined buyers who bother to ask for an alternative.

    Support ticket on their behalf. Email Lemon Squeezy support with the customer’s email, approximate purchase time, and product. They’ll review the transaction log and can manually process the payment. Turnaround averages 12–24 hours, which means you’ve likely lost the impulse buyer.

    None of these solutions scale if you’re processing hundreds of transactions per week. At that volume, 2% false positives means multiple support emails daily and manual invoicing overhead that cancels out the convenience of using a merchant-of-record platform.

    When to switch platforms

    If more than 5% of your inbound support is payment-decline related, and you’ve confirmed the customers have valid payment methods, Lemon Squeezy’s fraud filters are costing you more than they’re saving. Track this for 30 days—log every “my card was declined” email and compare it to total transactions.

    For audiences in North America and Western Europe paying with standard credit cards, Lemon Squeezy works cleanly. For SaaS products, courses, or communities with global reach—especially if you’re attracting privacy-focused buyers or digital nomads—you’ll spend too much time recovering legitimate sales that should have converted automatically.

    The alternative is taking on fraud risk yourself with a direct Stripe integration, which means dealing with chargebacks, sales tax collection, and VAT compliance. That’s not a trivial tradeoff for a solo operator, but it’s the only way to control your own fraud thresholds.

    Hit reply if you’ve lost sales to fraud filters on any platform—I’m tracking patterns across Lemon Squeezy, Gumroad, and Paddle for a deeper comparison next month.

  • Sponsorship rate cards overpromise reach—here’s what to show instead

    Sponsorship rate cards overpromise reach—here’s what to show instead

    Sponsorship rate cards for newsletters typically lead with total subscriber count. It’s the biggest number you have, and brands shopping for placement want to see scale. The problem: that number is almost always misleading, and experienced media buyers know it.

    If you’re pitching sponsors with a PDF that says “12,000 subscribers — $400 per placement,” you’re either underpricing engaged readers or overcharging for a list padded with inactive emails. Either way, you’re losing deals or leaving money on the table.

    Here’s what works better, and what sponsors actually care about when they’re deciding whether to wire you money.

    Lead with opens, not list size

    A 10,000-subscriber list with a 45% open rate delivers more eyeballs than a 25,000-subscriber list with an 18% open rate. The math is simple: 4,500 opens versus 4,500 opens. But the first operator charges less because they think list size is the metric that matters.

    Sponsors don’t pay for email addresses. They pay for attention. If your last six issues averaged 3,200 opens, say that upfront. Break it down by 30-day cohorts if your list has grown recently—showing that your May signups open at 52% while your January signups open at 38% proves you’re adding quality subscribers, not buying lists or running giveaway spam.

    Include unique open rates, not total opens. If someone opens your email three times, that’s still one person. Most ESPs report both; sponsors want the unique number.

    Show click-through on past sponsorships

    If you’ve run sponsorships before, share anonymized click data. Not click-through rate as a percentage—absolute clicks. “Last sponsor placement generated 210 clicks to their landing page” tells a buyer exactly what they’re getting. Add context: was it a text link, a dedicated section, or a full takeover? Did you write the copy or did they?

    If the sponsor converted 8% of those clicks into trial signups, and you know that because they told you, put it in the deck. Third-party validation is worth more than your own claims about engagement.

    Don’t have sponsorship data yet? Show clicks on your own content. Pick your three most recent issues, pull the top-clicked link from each, and report the numbers. If your audience clicks through to your blog, affiliate links, or product pages at a 6–9% rate, they’ll click sponsor links too.

    Segment pricing by placement type

    A single rate card with one price assumes all placements are equal. They’re not. A dedicated email where you write a 400-word case study about the sponsor’s product is worth more than a three-line text link in your footer. A mid-email callout box with a headline, 100 words, and a button is somewhere in between.

    Offer at least two tiers. Name them clearly: “Featured partner” and “Classified mention,” or “Primary sponsor” and “Supporting link.” Price them 3x to 5x apart. If your supporting link is $200, your featured placement should be $600–$1,000, depending on your open rate and niche.

    Sponsors with bigger budgets will pick the expensive option because it’s clear what they’re getting. Sponsors testing your list for the first time will pick the cheap option, then upgrade after they see results.

    Drop the subscriber count—or bury it

    If your open rate is strong, lead with opens and clicks. Put total subscriber count in the third or fourth line, or leave it out entirely. It’s not a secret—sponsors can ask—but it’s not your strongest signal.

    If your list is below 2,000 subscribers, don’t apologize for it. Instead, frame your pricing around cost per click or cost per open. “$300 gets you 180 clicks” is a clear value proposition. A brand spending $1.67 per click on Google Ads will happily pay you $300 for the same result with a warmer audience.

    One operator I know runs a 1,400-subscriber list in the podcast production niche. She charges $250 per sponsor mention and delivers 80–100 clicks per placement. Her cost per click is under $3, and her sponsors re-book every quarter because her audience converts. She doesn’t mention list size in her pitch deck at all.

    Update your rate card every quarter

    Your open rate drifts. Your list grows. Sponsors who booked you six months ago paid a price based on old data. If your opens are up 15% since January, your rate card should reflect that.

    Don’t freeze pricing just because a sponsor might complain. Grandfather existing sponsors at their original rate for one renewal, then move them to current pricing. New sponsors pay the current rate immediately.

    If your engagement is falling, don’t raise rates. Fix your content first, then revisit sponsorship pricing once your numbers recover. Charging more for worse performance is how you lose sponsors permanently.

    Want to compare how other operators price sponsorships? Reply with your open rate and niche—we’ll feature anonymized benchmarks in a future issue.

  • Memberful vs. Patreon vs. Ghost: which membership platform to pick

    If you’re building a paid membership or subscription offering, you’ve probably narrowed your shortlist to Memberful, Patreon, or Ghost. All three can collect recurring payments and gate content. All three integrate with Stripe. But the differences in control, pricing structure, and long-term flexibility matter more than the feature checklists suggest.

    Here’s what each platform does well, where it falls short, and who should pick which.

    Memberful: WordPress integration and full subscriber ownership

    Memberful positions itself as the membership layer for WordPress sites. You install a plugin, connect your Stripe account, and sell access to posts, pages, or downloadable resources. Subscribers log in via your domain. You own the customer relationship and the email list outright.

    Pricing: Memberful takes 4.9% of gross revenue after Stripe’s cut, with no flat monthly fee until you cross $10,000/month in revenue—then it’s a negotiated enterprise plan. If you’re earning $500/month, you’re paying roughly $25 to Memberful plus Stripe’s 2.9% + $0.30 per transaction.

    Pros: Full design control if you’re comfortable with WordPress themes. No platform lock-in—your subscriber data lives in your own database. You can export and migrate without losing payment history. Memberful also integrates with ConvertKit, Mailchimp, and other ESPs, so your membership list can feed your newsletter automation.

    Cons: You’re responsible for hosting, SSL certificates, plugin conflicts, and WordPress updates. If your site goes down, signups stop. There’s no built-in community forum or mobile app. Memberful is a checkout system, not a content platform.

    Best for: Operators who already run a WordPress site, want to retain full subscriber ownership, and don’t mind managing infrastructure. If you’re selling premium articles, courses, or downloadable resources alongside free content, Memberful fits cleanly.

    Patreon: built-in audience and discovery, but steep fees

    Patreon offers a hosted membership page, payment processing, and access to its internal discovery feed. Creators publish posts in tiers, offer perks like early access or behind-the-scenes content, and optionally run Discord communities or live streams.

    Pricing: Patreon’s Lite plan takes 5% of monthly income. The Pro plan (8%) adds analytics, custom member tiers, and promotional tools. The Premium plan (12%) includes priority support and team accounts. Stripe fees stack on top, so you’re paying 7.9% to 14.9% total on every transaction.

    Pros: Zero setup friction. You don’t host anything. Patreon’s algorithm surfaces your page to potential members browsing categories, which can drive cold discovery if you’re in a popular niche like podcasting, gaming, or comics. The mobile app keeps members engaged. Patreon also handles VAT/sales tax compliance automatically.

    Cons: Patreon owns the subscriber relationship. You can’t export payment history or migrate members to another platform without asking them to re-subscribe. The 12% fee on the Premium tier becomes expensive fast—if you’re earning $5,000/month, you’re handing Patreon $600 plus Stripe’s cut. The platform also tilts heavily toward creative communities; if you’re running a business newsletter or SaaS content site, the branding feels off.

    Best for: Creators who prioritize ease of launch over ownership, operate in visual or entertainment niches, and want access to Patreon’s built-in audience. If you’re starting from zero followers and need discovery, the trade-off makes sense early on.

    Ghost: publishing platform with membership baked in

    Ghost is an open-source CMS designed for publishers. It includes newsletter delivery, membership tiers, and native Stripe integration. You can self-host or pay for Ghost’s managed hosting, which starts at $9/month for up to 500 members.

    Pricing: Ghost’s managed hosting scales with member count. The Starter plan ($9/month) covers 500 members and 1,000 emails. The Creator plan ($31/month) handles 1,000 members and 10,000 emails. The Team plan ($63/month) supports 2,500 members and 25,000 emails. Beyond that, you’re on custom enterprise pricing. Ghost takes no percentage of your revenue—you pay only Stripe’s standard fees.

    Pros: Flat monthly pricing with no revenue cut. You own your member data and can self-host if you want full control. Ghost’s editor is fast, its newsletter delivery is solid, and you can run free and paid tiers from a single install. The platform ships with built-in SEO tools, analytics, and member segmentation.

    Cons: Ghost is a full CMS, not a plugin. If you’re already running WordPress, switching to Ghost means migrating your entire site or running two separate properties. The theming system is less flexible than WordPress—customization requires Handlebars templates and some JavaScript. Ghost also lacks community features like forums or comments without third-party integrations.

    Best for: Publishers and newsletter operators who want a clean, opinionated platform and don’t need WordPress’s plugin ecosystem. If you’re launching a new paid publication from scratch or consolidating a blog and newsletter into one system, Ghost makes sense. If you already have 10,000 WordPress posts, migration pain outweighs the benefits.

    Which one to pick

    If you already run WordPress and want to add membership without changing infrastructure, use Memberful. If you’re a creator in a visual niche and need discovery more than ownership, start with Patreon and plan to migrate later. If you’re building a subscription publication from the ground up and want predictable costs, Ghost wins.

    None of these platforms locks you in forever, but switching costs time and risks churn. Pick based on where you are now and where you’ll be in twelve months, not just the feature grid.

    Running a membership or paid newsletter? Reply and tell us which platform you picked—and what you wish you’d known before launching.

  • Monetisation attribution dies in multi-touch funnels

    Monetisation attribution dies in multi-touch funnels

    You run a sponsored issue, push an affiliate link on social, mention a product in your archive, and three weeks later someone buys. Your analytics platform credits the sale to “direct traffic” or the last click before checkout. You have no idea which channel actually worked.

    This isn’t a tracking-pixel problem. It’s a structural flaw in how most solo operators measure revenue when the buyer journey spans email, social, organic search, and word-of-mouth over days or weeks.

    Single-touch attribution—first click or last click—works when the path is short. It collapses when your funnel has five steps, three platforms, and a fourteen-day consideration window. And if you’re running a content business, that’s the norm, not the exception.

    Why last-click attribution lies

    Most analytics tools default to last-click: the final referrer before conversion gets full credit. If someone clicks your affiliate link in a newsletter, browses for ten minutes, leaves, then Googles the product name two days later and buys via organic search, Google gets the sale. Your newsletter sees nothing.

    Stripe’s payment links don’t carry session history. Gumroad’s dashboard shows referrer data, but only for the session that completed checkout. ConvertKit and Beehiiv track link clicks, but those events live in separate databases from your revenue analytics. Unless you stitch them manually, the attribution breaks at the platform boundary.

    First-click attribution has the opposite problem: it over-credits discovery and ignores the nurture work. If someone found you via a Reddit comment six months ago, subscribed, read forty emails, then bought after a single product mention, Reddit gets full credit. The forty emails that built trust? Invisible.

    Multi-touch models operators actually use

    Enterprise marketing teams run algorithmic attribution—machine learning models that weight every touchpoint. Solo operators don’t have the data volume or engineering budget for that. But three simpler models work without custom code:

    Linear attribution: Split credit equally across all known touchpoints. If someone clicked three emails, visited your site twice via organic search, and converted via a social link, each touchpoint gets 20%. This assumes every step mattered equally, which is wrong, but it’s better than crediting one channel with 100%.

    Time-decay attribution: Give more weight to recent interactions. Touchpoints closer to conversion get higher percentages. A click seven days before purchase counts less than a click seven hours before. This mirrors how buying intent escalates, but it still undervalues early discovery.

    Position-based (U-shaped) attribution: Credit 40% to first touch, 40% to last touch, and split the remaining 20% across middle interactions. This rewards both discovery and conversion while acknowledging the nurture steps. It’s the model I see most operators settle on after trying the others.

    How to track multi-touch revenue without enterprise tools

    You don’t need Segment or a six-figure contract with HubSpot. You need three things: consistent UTM tagging, a spreadsheet or lightweight database, and a workflow that logs touchpoints before checkout.

    Tag every outbound link with UTM parameters that include source, medium, and campaign. Your newsletter links get ?utm_source=newsletter&utm_medium=email&utm_campaign=2026-06-06. Social posts get ?utm_source=twitter&utm_medium=social. Affiliate mentions get a unique campaign slug. Apply this everywhere, every time.

    Use a tool that logs those UTM parameters at the session level. Google Analytics 4 can do this if you set up custom dimensions for first and last UTM source. Plausible Analytics stores referrer data in its event stream. Fathom Analytics offers custom event properties. All three let you export CSVs with timestamp, session ID, and UTM values.

    At checkout, append a hidden field or order note that captures the customer’s email or a hashed session ID. In Stripe, use metadata fields. In Gumroad, add a custom field to the checkout form. In WooCommerce, log UTM data to the order meta table with a lightweight plugin or custom function.

    Once a week, export your revenue data and your session logs. Match customer email or session ID across both. Map out the sequence of touchpoints that led to each purchase. Assign attribution percentages using whichever model you chose. Update a running tally of channel performance.

    This workflow takes about ninety minutes a week for a business doing twenty to fifty transactions a month. It’s manual, but it’s accurate enough to shift budget and effort toward the channels that actually drive revenue.

    What breaks and when to simplify

    Multi-device journeys wreck this system. If someone reads your newsletter on mobile, researches on desktop, and buys on tablet, session IDs won’t match unless they log in. Email hashing helps, but only if you collect it at multiple touchpoints.

    Word-of-mouth and dark social—shares via Slack, WhatsApp, direct messages—show up as direct traffic. You can’t track them without unique links for every share, which isn’t realistic. Accept that 20–30% of your revenue will stay unattributed.

    If your average sale is under $30 and you’re doing fewer than ten transactions a week, the juice isn’t worth the squeeze. Stick with last-click and focus on growing volume instead of optimising attribution. Multi-touch matters when you’re allocating real money across channels or deciding which content to double down on.

    Want more breakdowns of what works and what breaks in online-business operations? Subscribe to One Two Three Send and get one focused article like this in your inbox every week.

    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.

  • Stripe checkout sessions expire after 24 hours—here’s why

    Stripe checkout sessions expire after 24 hours—here’s why

    If you’ve ever sent someone a Stripe checkout link and had them come back a day later saying it doesn’t work, you’ve run into session expiration. Stripe Checkout sessions expire exactly 24 hours after creation, and there’s no setting to extend that window.

    This isn’t a bug. It’s a deliberate design choice that affects how you structure payment flows, follow-up sequences, and cart abandonment recovery. Here’s what the 24-hour limit actually does, when it becomes a problem, and how to work around it.

    What happens when a checkout session expires

    When you create a Stripe Checkout session via API or no-code tool, Stripe generates a unique URL. That URL is valid for 24 hours from the moment of creation—not from the moment someone opens it.

    After 24 hours, the link returns a “This Checkout Session has expired” error. The customer can’t complete payment. You don’t get notified. The session just stops working.

    This matters most when you’re pre-generating checkout links in automated emails, Slack messages, or scheduled posts. If someone receives your email at 9 a.m. Monday and clicks at 10 a.m. Tuesday, the link is dead.

    Stripe’s expiration clock starts when the session is created, not when the email is opened or the link is clicked. That’s the key mistake: assuming the 24-hour window begins when the customer engages.

    Why Stripe enforces the 24-hour limit

    Stripe’s documentation doesn’t spell out the reasoning, but the expiration window serves two purposes: fraud mitigation and inventory accuracy.

    Payment sessions that stay open indefinitely create opportunities for replay attacks and price manipulation. If a checkout session for a $49 product remains valid for weeks, someone could exploit outdated pricing or coupon codes long after you’ve changed them.

    The 24-hour window also keeps your checkout flow aligned with real-time inventory, seat availability, or limited-time offers. If you’re selling a cohort-based course with 50 spots, a session created when 10 spots remain shouldn’t stay valid when the cohort fills two days later.

    For subscription products and digital goods with no inventory constraints, the expiration feels arbitrary. But Stripe’s Checkout API handles everything from physical products to event tickets, so the 24-hour rule applies universally.

    When expiration breaks your workflow

    The 24-hour limit causes problems in three common scenarios.

    Pre-scheduled email sequences. If you’re running a five-day email course that ends with a checkout link, and you generate all five sessions at once, the link in email five is already expired by the time it sends. You need to generate each session just before its corresponding email goes out.

    Abandoned cart recovery. Standard cart abandonment flows wait 24–72 hours before sending a reminder. If you generate the checkout session when someone first adds a product to their cart, the recovery email will contain a dead link. You’ll need to regenerate the session when the reminder triggers.

    Public checkout links in evergreen content. Embedding a Stripe Checkout URL in a blog post, help doc, or pinned social media post doesn’t work. The link dies within a day. You’ll need to use Stripe Payment Links (which don’t expire) or dynamically generate sessions when someone clicks.

    How to work around session expiration

    The cleanest solution is to generate checkout sessions on-demand, right when the customer needs them.

    If you’re using Zapier, delay the “Create Checkout Session” action until immediately before the email sends. Don’t create all sessions upfront. In a drip sequence, each email should trigger its own session creation step.

    For abandoned cart emails, store the product details (price ID, quantity, customer email) instead of the checkout URL. When the reminder triggers 48 hours later, generate a fresh session using those stored details.

    If you need a persistent checkout link—something you can post publicly or reuse across emails—use Stripe Payment Links instead of Checkout sessions. Payment Links don’t expire and support the same features (custom fields, tax calculation, subscription billing). The trade-off: you lose some advanced customisation options available in the Checkout API, like dynamic pricing or complex line-item logic.

    For high-touch sales where you’re sending invoices manually, Stripe Invoices are a better fit than Checkout. Invoices stay open until you close them or they’re 90 days past due, and customers can pay directly from the invoice page without a session.

    One non-obvious detail: Stripe’s expires_at parameter lets you set a shorter expiration window (as brief as 30 minutes), but you can’t extend it past 24 hours. If you’re running flash sales or time-sensitive offers, setting expires_at to match your sale deadline keeps pricing consistent and adds urgency. Just make sure your customers know the link has a ticking clock.

    If you’re building payment flows for courses, memberships, or digital products and need help choosing between Checkout sessions, Payment Links, and invoice-based billing, subscribe to One Two Three Send—we break down one tool decision like this every week.