20
89 Comments

132 users, 3 current customers, and a renewal failure I should have prevented

On April 21, 2026, StatusPage.me got its first paying customer (since the "reboot" in September last year).

Today, 81 days later after the first paying customer, the product has:

  • 132 registered users
  • 29 active users in the last 30 days
  • 149 monitors created
  • more than 42 million uptime checks performed
  • 2 active annual subscriptions
  • 1 lifetime customer
  • 1 former monthly customer who did not renew
  • $24.65 in normalized monthly recurring revenue (ARR/12)

So far, four customers have paid us at least once. Three are still active customers, but only two contribute recurring subscription revenue.

2 active subscribers + 1 lifetime customer

All-time gross earnings

That distinction is less exciting than combining every payment into one large number, but it is considerably more useful.

The biggest lesson from the first 81 days is that usage, buying intent, and willingness to pay are three different things.

1. Product activity is not the same as buying intent

Some users do much more than casually create an account.

They create several status pages, configure monitors, connect custom domains, and invite teammates.

From the founder dashboard, that looks like a customer preparing to buy.

Sometimes it is.

Other times, they are evaluating alternatives, testing a specific workflow, or simply discovering how much they can achieve without paying.

I used to interpret deep setup activity as a strong conversion signal.

Now I treat it as a reason to investigate, not as a reliable prediction.

A user can clearly understand the product, invest time configuring it, and still not feel enough urgency to pay.

2. The work changed after the first payment

Before revenue, most of my attention went toward building features.

Once customers started paying, the priorities became much less glamorous:

  • fixing billing webhook edge cases
  • handling duplicate and delayed events
  • cleaning up broken custom-domain states
  • improving slow dashboard pages
  • preventing invalid monitor configurations
  • making downgrades and expired subscriptions behave predictably
  • reducing situations that required manual repair

None of these improvements makes for an impressive launch announcement.

But once people depend on the product, operational correctness becomes part of the product.

A feature that works only in its ideal state is not finished. It is a future support conversation waiting patiently for its turn.

3. Revenue quality matters more than the largest available number

We collected roughly $430 during the last 30 days.

That includes annual and lifetime payments.

It is real cash, and for a bootstrapped product that matters. But it is not the same as having $430 in MRR.

The current recurring monthly revenue is $24.65.

Annual subscriptions improve cash flow. Lifetime deals help fund development. Neither should be presented as predictable monthly revenue just because the resulting headline looks more impressive.

The less flattering number is usually the one that tells you what the business actually needs to improve.

4. One customer churned, and I do not know exactly why

Our first monthly subscriber did not renew.

Initially, I treated that as ordinary churn. Later, I discovered that a bug had prevented the renewal reminder email from being sent.

The subscription expired, but I kept their status page active while I contacted them and provided a direct checkout link.

They still have not renewed, so I cannot claim the email bug was the only reason.

Maybe they no longer need the product.

Maybe the value was not strong enough.

Maybe the missed reminder broke the momentum at exactly the wrong time.

The uncomfortable part is that I allowed an avoidable operational failure to become mixed with a customer retention question.

Now I cannot cleanly separate product churn from billing-flow failure.

That is a much worse position than simply hearing, “We no longer need this.”

The lesson is not only that churn feedback matters.

It is that renewal infrastructure must be reliable enough that, when a customer leaves, you can trust that they actually made that decision.

What I am focusing on next

The immediate goal is not to inflate the feature list.

It is to understand why active users do not become customers, and why some customers do not remain customers.

That means:

  • improving the trial-to-paid path
  • identifying which actions genuinely correlate with conversion
  • making plan limits and upgrade options easier to understand
  • contacting users who completed meaningful setup but did not buy
  • improving churn and failed-renewal feedback
  • continuing to remove operational friction

StatusPage.me is no longer just an idea.

It has users, customers, real infrastructure load, and real operational obligations.

But usage is not yet a repeatable business model.

That is the part I am working on now.

I publish the underlying numbers on our Open Startup dashboard:

https://statuspage.me/open

posted to Icon for group Building in Public
Building in Public
on July 11, 2026
  1. 1

    The gap between "active usage" and "buying intent" is brutal, and you nailed the diagnosis. At Pick an Agency, we see this constantly: people kicking the tires hard but never crossing into paid. One thing that shifted for us was treating signup flow as a learning moment, not a funnel stage. When someone completes advanced setup without converting, that's signal, they're either evaluating competitors, validating a workflow, or testing something specific. Ask them directly in an onboarding email what they're deciding between. That one question turned our "active but broke" cohort into legible feedback about what's actually missing.

  2. 1

    "A renewal failure I should have prevented" — that line is basically the whole reason I'm heads-down on retention right now. Your point that deep setup activity isn't buying intent matches what I keep seeing too: intent shows up at the billing moment, not in the usage graph. Genuinely curious about that non-renewal — was it a payment/card failure you could've caught and retried, or a real "don't want it anymore" churn? I'm trying to work out how much early churn is actually recoverable vs. not, and founders who've lived it are the only real source.

  3. 2

    The renewal bug lesson generalizes: after 20 years running an MSP I came to treat billing as retention infrastructure, not back office, because every failed charge or missed reminder is a churn event you caused. The tactical fix is a dunning sequence plus an alert on any failed renewal event, built before you have enough customers to notice the pattern. Separating cash collected from normalized MRR this early also puts you ahead of most founders who pitch me.

  4. 2

    The churn story is the hard-won wisdom here. A lot of makers celebrate the first sale but miss that retention is the real metric.

    A question: what's the ratio you're aiming for? (Like, do you know what % of users need to convert for the math to work?) And have you mapped when users typically decide to churn? (Day 5? Week 2? Month 1?)

    For paid one-time purchases especially, understanding why someone says "no" on day 1 vs. day 7 changes everything about how you position the product.

    1. 1

      That's the hard part: I do not have enough real purchases yet to claim a reliable conversion target.

      Current reality:

      • 147 registered users
      • 3 real cash-paying customers
      • 2 active annual subscribers
      • 1 lifetime customer

      So the all-time signup-to-purchase rate is roughly 2%, but the sample is far too small to treat that as a stable benchmark.

      At the current annual-plan value, I need roughly 9 similar active subscribers to cover the basic operating costs. That would be around 6% of the current user base, but I do not think "convert 6% of everyone" is the right operating target.

      The more useful question is which cohort should convert:

      • casual free users
      • users who publish a page
      • users who connect a custom domain
      • users who invite teammates
      • users who intentionally start a paid-plan trial

      Those groups have completely different intent. One might need a simple status page (with no monitors; free plan covers it); one might need a monitor or three (free plan covers it). Custom domain, on-call & schedules, automated incidents, downtime prediction, etc.? Paid plan or paid add-on. IDK.

      I am also starting to map when users disappear, but there is not enough churn volume yet for a meaningful Day 1 / Week 2 / Month 1 curve. Right now I am still working at the individual-account level, because pretending four outcomes form a statistically useful retention model would be rather ambitious.

      The issue with disappearing users is that... Status pages might be boring until you really need them 🤣 So I am "confident" to say that it's okay for status page users not to log in for a while and do anything.

      1. 1

        This breakdown of intent-based cohorts is really useful, thanks for spelling it out. I've been wrestling with the same question for Tansei — picking one conversion number this early feels almost arbitrary. Curious whether you're using any in-app signal to tag someone as 'ready to convert' before they hit a paywall, or is it still manual?

  5. 2

    Thanks for sharing such an honest and transparent update. The lessons you highlighted here are absolute gold.

    I’m currently facing a very similar "free utility trap" with my SaaS, qrbrand (a custom branded QR code generator). Since we allow users to generate QR codes as guests without forcing them to register, we see active traffic but zero conversion.

    Looking at our Google Analytics funnel for the last 30 days, we had 60 active users and hundreds of events, but a brutal 100% abandonment rate when it comes to the signup/purchase step. People just want a quick free utility, download their code, and bounce. It’s a constant battle trying to bridge the gap between "free active usage" and "willingness to pay."

    As for the renewal bug: that is incredibly frustrating because it leaves you in that uncomfortable zone of not knowing. If you haven't yet, try sending them a personal email. A simple, "Hey, we noticed our renewal notification failed, just wanted to check if you wanted to keep using the tool or if it wasn't providing enough value" can be a great way to either win them back or get the definitive feedback you need.

    Keep pushing. 42 million uptime checks is a massive operational milestone!

    1. 1

      Thanks, Leo. Your free utility trap description is painfully accurate.

      The hard part is that active usage can be completely rational without creating any buying intent. If someone can generate the QR code they need as a guest, download it, and leave, the product has delivered value, but the business has not created a reason for them to stay.

      That probably means the key question for qrbrand is not just how to improve the signup step, but what ongoing value begins after the first QR code is created:

      • editing the destination later
      • analytics
      • branded designs
      • managing multiple codes
      • team access
      • reliability for codes already in circulation

      Without that second layer, registration may simply feel like friction added after the user has already finished the job.

      Ah yes, I did reach out personally about the failed renewal and provided a direct checkout path. They still haven't renewed (nor replied lol), which is a signal of its own, even though the original billing failure made the initial reason much harder to interpret.

      Also, thank you for noticing the 42 million checks. We were at only 7 million on February 11, so the platform processed roughly 35 million more checks in about five months.

      That is one of those quiet operational milestones that feels more real than the revenue graph right now.

      Good luck with qrbrand! Your funnel is brutal, but at least the problem is unusually clear, which is a much better starting point than having lots of activity and no idea where people disappear.

      1. 1

        One more strong paid feature: API access and integrations (Zapier?)

        That opens up much better use cases than manually generating one code at a time:

        • generating QR codes from another product
        • bulk creation from a CRM or spreadsheet
        • creating codes during checkout, onboarding, or fulfillment
        • attaching QR codes to invoices, tickets, packaging, or event badges
        • retrieving scan statistics programmatically
        • updating dynamic destinations automatically
        • exporting codes in the required format without using the dashboard

        At that point, the free generator becomes acquisition, while the API, analytics, batch workflows, and management layer become the actual SaaS. 😎

  6. 2

    The renewal email bug is the expensive kind of failure: you lost the data, not just the customer. I ran an MSP for 20 years and we learned to treat billing and renewal flows like production infrastructure, because a silent failure there corrupts your churn signal forever. Your instinct to separate MRR from cash collected is right, most founders at this stage do the opposite.

    1. 1

      That’s exactly the lesson I’m taking from it.

      The lost renewal hurt, but the corrupted churn signal is the more expensive part because it affects every decision that comes after it.

      I’m now treating billing, renewal, and lifecycle communication as production infrastructure rather than back-office plumbing. Your point about separating MRR from cash collected is also important, especially this early when annual and lifetime payments can make the headline number look much healthier than the recurring business actually is.

  7. 2

    Really appreciate the honest update, Nikola. This is the kind of transparent building in public that helps the rest of us the most.
    The distinction between heavy usage and actual buying intent is such a painful but important lesson. And that renewal email bug hitting your very first monthly customer… oof. The fact that it contaminated your churn signal is such a sharp observation — "noisy churn" is a perfect way to put it.
    Congrats on getting to real revenue and real operational responsibilities so quickly. StatusPage.me is clearly past the idea stage now.
    Are you planning to reach out personally to the most active free users who haven’t converted yet? Curious to hear how that goes.
    Keep going — rooting for you!

    1. 1

      Hvala, imenjače! :D baš mi znači ovakav komentar. :)

      Yes, I'm already reaching out to some of the most active free (and trialing) users. I also built an internal intent-scoring system that looks at product activity and triggers lightweight nudges or short advice emails.

      The tricky part is exactly what you mentioned: separating active usage from real buying intent. Someone can configure several monitors, return often, and clearly understand the product without actually being ready to pay.

      So I'm now focusing less on "more outreach" and more on reaching out at the right moment, with the right signal behind it.

      Hvala još jednom na podršci!

  8. 2

    i like how you stayed consistent even though it took you months to get your first paying customer. and you are right, understanding your customer needs is a great way to understand what might be causing friction , why some customers stay and why some leave.

    1. 1

      Thanks! The first paying customer took much longer than I expected, so consistency was mostly stubbornness at that point :)

      You’re right though: the harder part now is understanding why some users clearly get value from the product but still don’t convert, while others leave without much explanation.

  9. 1

    The fact that you're tracking this at all puts you ahead of most people at your stage. Most founders don't even notice a churned customer until months later. The renewal failure is useful data though, not just a loss. Did the customer ever respond to any outreach after the failed payment? The gap between "forgot to update card" and "decided to cancel" is everything for figuring out what to build next. At your stage with 132 users and 3 paying, your real question isn't retention yet. It's activation. You've got 128 people who signed up and didn't pay. That's where the leverage is. What's the gap between what free users see and what would make them reach for their wallet?

  10. 1

    Hey Nikola — small update: CancelKit (the thing I mentioned above) is finishing up billing setup this week, and I'm opening a few early access spots to indie SaaS founders before public launch — free during beta, plus a lifetime discount for the first 10. Given the renewal story above, thought you might want first pick. Happy to send more details if you're interested.

  11. 1

    This is a really honest breakdown, especially the churn/billing-bug tangle. "I cannot cleanly separate product churn from billing-flow failure" is the part that actually costs founders, not the churn itself. I built FounderFlow (AI chief of staff for founders running more than one business) partly because of this exact failure mode, a renewal reminder silently failing sits in a dashboard nobody's watching that day. Have you added a daily check specifically for billing/webhook failures since, or still manual?

  12. 1

    Nikola, this resonated.

    I'm building a vertical SaaS too, and I've learned that activation matters more than signups. I've had people discover us organically, create an account, and then... do nothing. No data, no setup, no "aha" moment.

    What changed my thinking was realizing people don't buy software—they buy relief from a specific problem. In my case, compliance tools generate far more engagement than "property management software" ever did because they solve an immediate need.

    At this stage, every customer is valuable enough to onboard personally.

    Did the customer come back after you reached out, or was the renewal failure just the final step in an already-fading relationship?

  13. 1

    The renewal email bug is one failure, but there's a second layer under it worth checking too. Stripe's own subscription status already distinguishes past_due from canceled from unpaid, a card that's mid-retry looks completely different from a customer who actually walked away, and that distinction exists in the webhook data whether or not your reminder email ever sends.

    If the app only tracks "did they renew by date X," all three of those get flattened into one bucket, and you end up rebuilding by hand a signal Stripe already handed you. Worth checking whether the churn number is reading subscription.updated status transitions directly, or just inferring from an email that may or may not have gone out.

  14. 1

    One thing I would add is a renewal evidence trail before trying to interpret churn. For each paid account, I would want to see: reminder sent, webhook received, payment attempt result, customer-facing email delivered/opened if available, and whether the product stayed in a grace state. If any of those are missing, the churn reason is contaminated.

    At your current size, I would not over-automate the analysis yet. For the 20-30 users who did meaningful setup, manually tag the first moment they trusted the product (custom domain, public status page, teammate invite) and the first moment they hit uncertainty (pricing, limits, reliability, setup friction). That will probably teach more than aggregate conversion math right now.

    The strongest line in the post is that operational correctness becomes part of the product. For monitoring/status-page tools, that is especially true: users are buying confidence that the boring failure cases will behave predictably.

  15. 1

    Treating the renewal flow as production-critical instead of back-office plumbing is the right lesson to pull from that, a silent reminder-email bug is brutal because it looks exactly like churn. The part I'd sit with: at 3 paying customers, even once the billing is airtight, can you actually read any signal yet on what makes someone convert, or is it still too few to separate a real pattern from noise?

    1. 1

      honestly still in the "too early to tell" bucket myself, one real reply after a couple posts, not enough yet to separate a real pattern from noise either. I have seen this from the other direction too, a client assuming nothing's happening because it's gone quiet, when actually everything was fine the whole time. Everyone's fixes here are internal, slack alerts, dashboard flags, stuff only you ever see. Curious for you, do you ever actually tell the customer when something like this gets caught and fixed, or does it just stay behind the scenes as long as it's handled??

  16. 1

    Nikola, this resonated.

    I'm building vertical SaaS as well, and one thing I've learned is that activation matters more than signups. I've had users find us organically, create an account, and then never add any data.

    The product wasn't the problem—they never reached the "aha" moment.

    At this stage I'm treating every new user like an enterprise customer. Manual onboarding is cheaper than losing someone before they've experienced value.

    Did your customer return after you reached out, or was the failed renewal just the final step in an already-fading relationship?

  17. 1

    "作为一个刚开始做 side project 的设计师,读你这个 renewal failure 的教训帮我看到一个自己完全没想过的问题 —— 我甚至还没到收 customer 那一步。我想问的是:你在 renewal 之前有没有做任何 usage-based touchpoint(比如用户接近额度时的邮件)?还是完全依赖 auto-charge?"

  18. 1

    The point about renewal infrastructure needing to be reliable enough that a churn signal can actually be trusted is one of the most underrated lessons in early SaaS. A lot of founders conflate "no one clicked renew" with "the product wasn't valuable enough," when the truth is sometimes buried in a broken webhook or a silently-failing email, exactly like what happened to you. One thing that's helped us separate the two is adding a human-triggered failsafe (a Slack alert or dashboard flag) whenever a renewal reminder job fails to send, so you catch it within hours instead of discovering it after the subscription has lapsed and the customer has gone quiet. Your point on activity vs. buying intent also rings true from our experience: setup depth correlated much better with retention after purchase than with likelihood to purchase, so we stopped using it as a lead score entirely. Have you tried reaching out directly to the users who did deep setup (multiple status pages, custom domains, invited teammates) but never converted, and if so, was there a common theme in why they stalled, or is it scattered across price, timing, and trust?

  19. 1

    The renewal reminder bug mixing in with your churn signal is exactly the kind of thing I built FounderFlow around (I'm the founder, mentioning since it's directly relevant here). The failure that actually gets you usually isn't a customer saying no, it's a follow-up that quietly never went out, and you don't find out until it's too late to tell "they left" apart from "we dropped the ball." I've started treating anything time sensitive, renewal reminders, follow-ups after a big setup session, as needing a second independent check that it actually happened, not just that the job ran. Cheap insurance against exactly the spot you're in now.

  20. 1

    Point 4 is the one most founders learn too late: every avoidable operational failure contaminates your data about why customers leave. At SocialPost.ai we treat billing and renewal flows as part of the product for exactly this reason. Separating "they chose to leave" from "we fumbled the handoff" is worth more than any new feature this quarter.

  21. 1

    the renewal-reminder bug is the sharpest thing in here, and i'd frame it harder than 'ordinary churn.' a reminder that silently doesn't fire is the same failure class as a payment webhook that half-processes: the system reports a normal-looking outcome (subscription expired, user churned) while the real event, giving them the choice to renew, never happened. you didn't lose a customer, you lost the event that would have kept them, and the dashboard filed it under churn. those are the ones that hide for months because nothing errors.

    the habit that's saved me is treating anything meant to fire on a schedule as guilty until proven sent: log the intent, then reconcile a day later against what actually left the outbox, and alert on the gap. the reminder not firing should have paged you, not shown up as a stat.

    and strong agree on separating cash from MRR. annual and lifetime flatter the headline and bury the one number that tells you what to fix. the less flattering number is almost always the honest one.

  22. 1

    This hit close to home. We're even earlier — 10 downloads, 0 paying customers — so I'm reading every line of this carefully.
    The part about "usage, buying intent, and willingness to pay are three different things" is something I'm only starting to understand. We've had people download TankSync (an aquarium parameter tracking app my family built), but no way to tell yet whether they tried it and bounced, or just never opened it.
    Your point about the renewal bug contaminating the churn signal is the kind of thing I wouldn't have thought to worry about at this stage — but now I will. Thanks for publishing the real numbers instead of the flattering ones.

  23. 1

    With a sample this small, I'd stop looking for one conversion rate and trace five individual accounts instead: one that published a page, one that connected a domain, one that invited a teammate, one that hit a paid feature, and the customer who did not renew. Rebuild each path from first value to last action, then interview only where the trail goes quiet. You'll probably find five different jobs instead of one "2% conversion" problem.

  24. 1

    What part of your approval process takes the most time? Trying to understand if this is a universal pain.

  25. 1

    mind blowing, scaling is often the main challenge over here, effective delivery is yet another. All the best!

  26. 1

    The cleanest test here might be to tag each active user by the moment they first create external dependency, not just setup depth. For a status page that could be custom domain live, public page shared, teammate invited, or monitor connected to something they would be embarrassed to have fail. Those are different from “configured a lot,” because they create social or operational consequence. I’d compare conversion and churn around that line before adding more features.

    1. 1

      What part of your approval process takes the most time? Trying to understand if this is a universal pain.

  27. 1

    The part that would keep me up isn't the lost renewal, it's you saying "now I cannot cleanly separate product churn from billing-flow failure." That one missed reminder didn't just cost you a subscriber, it put a weird asterisk on every retention read from this whole cohort.

    I've been buried in exactly this on the failed-payments side, and what surprised me most is how invisible it is by default. A renewal reminder that silently doesn't send, and a card that expires at renewal and quietly hard-declines, look identical from the dashboard, the number just doesn't show up. You only caught yours because you went digging, which most founders never do.

    The cheap fix that separates the two buckets going forward is to log every step of the renewal path as its own event: reminder queued, reminder sent, charge attempted, decline code returned. Next time a renewal doesn't happen, the timeline tells you whether it was a billing-flow bug or a real goodbye before you have to guess.

    Did the customer ever reply after you sent the direct checkout link, or just go quiet? That answer alone usually tells you which bucket it really was.

    1. 2

      They went quiet. 😬

      So while the original renewal failure corrupted the signal, the lack of response after a direct checkout link is still a signal of its own.

      And yes, logging each renewal step separately is the fix I'm implementing.

      1. 1

        Fair, though I'd be careful treating the silence as clean signal either, because it's the same measurement problem one layer down.

        "Sent a checkout link, heard nothing" can be at least three different events that look identical from your side. The email landed in promotions or spam and they never saw it. They saw it, clicked days later, and the session had already expired. Or they did try, the card declined again at checkout, and they were too embarrassed or too busy to tell you. Only one of those is someone actually deciding not to renew.

        Since you're already logging each renewal step, I'd give the recovery attempt the same treatment: delivered, opened, checkout session started, payment attempted, decline code if there was one. Then silence stops being one bucket and splits into never reached them, reached them, and they passed, or tried and failed again. With 3 customers, each of those distinctions is worth far more than it would be at 300.

        The decline code is the one I'd capture first, because the right next move is completely different per code and a fair number of them aren't worth retrying at all. I went deep on that mapping a while back and wrote up what each code means and which ones are genuinely recoverable. Happy to link it if that's useful.

        Do you have delivery and open state on that checkout email today, or is it send-and-then-nothing?

  28. 1

    Point 1 is the one that stings. I read deep setup activity as buying intent too — until a customer who used everything churned because the product didn't map to a pain they felt daily. Usage told me they understood it, not that they needed it. And point 4 is somehow worse than churn: "we don't need this" is at least clean signal. A billing bug that muddies the reason robs you of the one useful thing a lost customer gives you — a straight answer. Fixing renewal infra first is the right call.

    1. 1

      That's exactly the distinction I was trying to describe: usage proves understanding, not necessity.

      A user can configure everything correctly, use the product heavily, and still not have a painful enough problem to justify paying. That is much harder to accept than a broken onboarding flow, because the product may be working exactly as designed.

      Your point about daily pain is useful too. I have been looking at setup depth and operational dependency, but I should also ask whether the product maps to a problem they feel frequently enough to budget for.

      And yes, the billing failure is worse than clean churn. "We don't need this" gives you something actionable. A silent renewal failure leaves you debugging both the infrastructure and the customer's intent at the same time.

      Fixing the renewal path was the immediate priority. The harder work now is understanding which users merely understand the product and which ones genuinely depend on it.

      1. 1

        "Which users merely understand it vs genuinely depend on it" is the exact line I'd want on a dashboard. The tell I've started watching for: when it breaks, do they build a workaround — or just shrug? Dependence shows up as annoyance when it's gone, not as usage while it's there. Sounds like you're already instrumenting the right layer. Following the journey — good luck with the renewal-path fixes.

  29. 1

    This point about product activity vs. buying intent really resonates. I just shipped a consumer iOS app and I'm seeing a version of the same thing on the free-to-paid side: people who swipe through hundreds of photos in one session look like power users, but plenty of them are just testing the free tier's daily limit rather than genuinely converting later. Deep usage and willingness to pay turned out to be two different signals for me too, even in a pretty different product category than yours. Appreciate you sharing the raw numbers — not many people are this transparent about the behavior shift after the first payment.

    1. 1

      That's a really good parallel. A heavy session can look like strong intent, but sometimes it only means the user is stress-testing the free boundary. In your case, swiping through hundreds of photos may signal curiosity, urgency, or just "how much can I get before the limit resets?" Those are very different from willingness to pay.

      I'm seeing the same thing: activity volume is easy to measure, but commercial intent often shows up in a smaller set of actions. For me, those seem to be things like publishing something publicly, connecting a custom domain, inviting teammates, opening pricing or plan dialogs, starting a trial intentionally, etc.

      The raw usage still matters, but it needs context.

      Good luck with SlideRoll. Consumer apps make this even harder because people can generate huge amounts of activity without ever mentally crossing into "this is something I should pay for." 😬

  30. 1

    The part that will bite you again is the "cannot cleanly separate product churn from billing-flow failure" problem, not just this one customer's renewal. I'd treat "renewal reminder failed to send silently" as a P0 regardless of whether this specific customer comes back, because if it happened once without you noticing, it's almost certainly happening to a slice of users you haven't caught yet, and you won't find out until they've also gone quiet on you. On the conversion side, the fact that your two paying customers are mid-pack on setup depth rather than your heaviest users is a useful signal too - it suggests deep-setup users are comfortably self-serving on the free tier rather than hitting a real wall, which is worth instrumenting separately from the churn issue. Do you have any alerting on transactional email delivery itself (bounce/failure webhooks from your ESP), or is catching this kind of silent failure still something you find manually after the fact?

    1. 1

      That's a very fair concern, and I agree that a renewal reminder failing silently should be treated as a P0 whether this customer comes back or not.

      I already log billing webhooks and subscription events, but the weak point was that the reminder job could fail without creating a loud enough operational alert.

      So the fix is not just "make the email send next time." The system needs to verify the whole expected sequence: the renewal is approaching, the reminder is scheduled, the email provider accepts it, and the renewal either succeeds or fails. If one of those expected events never appears inside its window, that should alert me immediately instead of quietly turning into a support mystery later.

      Your point about setup depth is also important. The two recurring customers are not the heaviest users, while some very active free users seem perfectly comfortable self-serving on the free tier.

      That tells me I need to separate usage intensity, operational dependency, and commercial intent instead of collapsing them into one score. A lot of activity can look like demand when it may simply mean the free plan is doing its job a little too well.

  31. 1

    The distinction between usage and buying intent is one of the hardest lessons for early-stage founders.

    It’s easy to look at active users, setups completed, and product usage as signs that revenue is coming soon. But sometimes the real challenge is not getting people to understand the product — it’s creating enough urgency for them to pay.

    I also liked the point about operational reliability after the first customers arrive. Before revenue, founders often optimize for building. After revenue, the product becomes the entire experience: billing, renewals, edge cases, support, and trust.

    The renewal failure is actually a valuable lesson because it shows how small operational details can directly impact retention.

    Early customers teach you not only what features to build, but what kind of company you need to become.

    1. 1

      Exactly. Before revenue, it is easy to think the product is mostly features.

      After the first customers arrive, billing, renewals, support, and reliability become part of the product too.

      And yes, understanding the value is not enough. The problem has to feel urgent enough to pay for. Maybe I'm being too generous with the free plan haha

  32. 1

    The broken feedback loop point really hit home — not knowing if a user left because of your product or a bug is one of the most frustrating positions to be in as a founder. Your point about doubling down on fixing useful features rather than adding new ones is exactly right too. Understanding what users actually interact with most is what separates teams that build the right things from teams that build the most things. I'm actually building a tool called Featly around this exact problem — helping PMs and founders see which features their users use vs ignore, in plain English, without the complexity of PostHog. Would love your thoughts on it when it's ready.

    1. 1

      That sounds useful, especially if Featly can surface which features correlate with retention or conversion, not just raw usage.

      The plain-English angle is smart too. PostHog is powerful, but it can be far more machinery than a small team needs.

      Happy to take a look when it's ready.

      1. 1

        That retention and conversion correlation angle is exactly where we're headed — knowing a feature is used is one thing, knowing it's the reason users stay is what actually changes roadmap decisions. Really appreciate the feedback. I'll send it over when it's ready — would be great to have your take as someone who's lived the problem firsthand.

        1. 1

          Of course :) Looking forward to checking it out!

  33. 1

    This is a really honest breakdown of the gap between usage and willingness to pay. I especially resonated with point #4 — the renewal email bug masking real churn signals is a nightmare scenario. When infrastructure failures contaminate your retention data, you lose the ability to learn from churn at all, which is arguably worse than the churn itself. We had a similar issue on our API platform where a billing webhook silently failed for 3 days. By the time we noticed, we had lost two customers and had no idea if they left because of the bug or because they genuinely did not need the product anymore. After that, we implemented a dead-letter queue with Slack alerts for any billing event that fails to process within 5 minutes. It is not glamorous work, but as you said — once people pay you, operational correctness becomes part of the product. Out of curiosity, what are you using for your uptime monitoring stack? We are running something similar with our own status page and always looking to compare notes with other indie founders in the monitoring space.

  34. 1

    damn, renewal failures are the worst what caused it, failed payment or just churn?

    1. 1

      It was a messy combination rather than one clean failure.

      The subscription was supposed to auto-renew, but it lapsed. At the same time, a bug prevented the renewal reminder email from being sent, so the customer got neither a successful renewal nor the expected warning.

      I later reached out personally, added a dashboard notice, and provided a direct checkout link (with preserved discount applied). They still did not renew.

      So the original failure was operational, but the lack of action afterward is also a churn signal. The frustrating part is that I can no longer cleanly separate the two. 😬

  35. 1

    The distinction between product churn and renewal-flow failure is an important one. I’d consider logging a simple “renewal decision trail”: reminder attempted, delivered, opened, checkout visited, payment failed, or explicitly cancelled. Without that trail, churn becomes an ambiguous metric rather than useful feedback.

    I’d also interview the active users who connected custom domains or invited teammates. Those actions may indicate operational dependence more reliably than general activity. Thanks for sharing the less flattering numbers — they’re much more useful than a polished MRR headline.

    1. 1

      I already track many of those signals individually in an internal intent-scoring system:

      • custom domains
      • team invites
      • published status pages
      • integrations
      • pricing activity
      • trial starts
      • customization events

      Here's an example of this:

      Intent score breakdown

      The missing layer is not event collection. It is grouping those events into stronger commercial concepts like public commitment, operational dependency, and renewal intent.

  36. 1

    The distinction between usage, buying intent, and willingness to pay is something I wish more early-stage founders talked about openly.

    I'm two days into early access on Ridgewell, an options coaching tool, so I don't have paying customers yet — but your point about deep setup activity not being a reliable conversion signal is already something I'm watching carefully. Had a user make it all the way through onboarding and into the scanner and still not come back. No idea if that's a product problem, a timing problem, or just someone who was curious.

    Your point about operational correctness becoming part of the product after people depend on it also hit hard. Right now everything feels manageable because the user count is small. I'm trying to build the boring infrastructure now before it becomes a crisis later.

    The churn situation where you can't separate product failure from billing failure is genuinely uncomfortable to read — not because it's bad, but because it's the kind of thing that looks obvious in hindsight and invisible in the moment.

    Appreciate the transparency on the real MRR number vs the all-time gross. That's the kind of honesty that's actually useful.

    1. 1

      Thanks for sharing that, and congrats on getting Ridgewell into early access!

      Two days in, you're already asking the right question: did the user simply complete the flow, or did they experience enough value to return?

      I actually built a small lifecycle view for exactly this reason. It tracks independent signals rather than pretending every user follows one clean funnel:

      • verified
      • onboarded
      • ever trialed
      • paid-plan access
      • status page adoption

      One important caveat: the dashboard currently shows 10 accounts under Paid, but that includes accounts upgraded with 100% discount coupons.

      The actual cash-paying customer count is:

      • 2 active annual subscribers
      • 1 lifetime customer

      So there have been 3 real purchases so far.

      That distinction matters because product access, trial activity, buying intent, and actual revenue are all different signals.

      User lifecycle funnel

      Your scanner example is exactly the kind of case this view is meant to expose. The user completed the expected path, but that still leaves the harder question unanswered: was the value weak, was the timing wrong, or was it simply evaluation without urgency?

      Good luck with Ridgewell. Early access is messy, but this is the useful kind of mess. Reach out to your users via email a few days into their use :)

  37. 1

    The corrupted signal point is the right lesson, but I would push it one step further. A customer who said they intended to renew, then got a direct checkout link and a dashboard notice and still did not complete it, is telling you something even through the noise. When the value is strong, people push through far more friction than a broken auto renew. The billing failure muddied the reason, but the non completion after you fixed the path is its own quiet data point.

    The practical fix that saved me elsewhere was an alert on the absence of an event, not just on failures. Fire a warning when an expected renewal does not arrive inside its window. Silent failures never page you, but a missing success will.

    1. 1

      That's a very fair pushback.

      Once the direct checkout link and dashboard notice were in place, the lack of renewal became a signal of its own.

      The original failure made the reason ambiguous, but it doesn't erase the fact that the customer still chose not to complete the path afterward.

      I also really like the missing success alert pattern. Monitoring failures is not enough when the dangerous case is silence.

      An expected renewal that never arrives should create an operational event of its own, before the account quietly lapses.

      I'm going to separate these outcomes in the billing workflow:

      • payment failed
      • renewal missing
      • customer cancelled
      • checkout abandoned

      They should not all end up looking like the same kind of churn. Thanks!

  38. 1

    132 signups to 3 paying customers is brutal, and that renewal failure on top of it must sting. What happened with the renewal - was it a payment issue or did they just ghost you?

    1. 1

      It was a mix of both.

      The subscription was supposed to renew automatically, but the renewal flow failed and the reminder email did not go out either. I later sent a direct checkout link and also showed a targeted in-dashboard renewal notice.

      They had previously responded warmly, confirmed that they intended to renew, and clearly said the product was valuable for their business. They also saw the in-dashboard notice, but did not click or renew.

      So the original failure was operational, but after that there was also silence. That is why I still cannot cleanly say whether they changed their mind, lost momentum after the interruption, or simply never came back to complete the renewal.

      That ambiguity is exactly what made the incident more expensive than the lost payment itself.

  39. 1

    The "completed meaningful setup but did not buy" segment is probably the highest leverage list here. I'd split it into two groups before interviewing: people who created something public-facing, like a status page/custom domain, and people who only tested privately. Same activity count, very different urgency. Public exposure usually means "I need this to keep working," private testing often just means evaluation.

    1. 1

      That's a strong distinction.

      I track 19+ intent events already, including status page creation and publishing, customization, custom domains, team invites, multiple monitors, incidents, integrations, pricing activity, etc.

      But I currently score most of those as individual product signals. I don't yet treat "public commitment" as its own segment.

      Someone who has published a page, connected a custom domain, uploaded branding, or embedded it publicly is in a very different state from someone who created the same number of objects while privately evaluating the product.

      I'm going to add that distinction to the scoring and outreach logic. Same apparent setup depth, but a much stronger dependency on keeping the product running.

  40. 1

    the honest part, that you can't cleanly separate the bug from real churn now, is the sharpest bit here. one push though: your fix (verify the customer actually got the reminder) still leaves a reminder in the critical path, and anything in the critical path eventually fails quietly. the stronger version is to not need the reminder at all. a subscription should auto-charge the card on file, so the renewal happens whether or not any email lands. then email is only for the exception: dunning. card declined or expiring, retry on a schedule, and you only ping the customer when a retry actually fails. dodopayments handles this, you just lean on it instead of your own reminder flow.

    and to get the clean churn signal you're after, log the reason at the moment it happens (declined / canceled / lapsed) instead of reconstructing it later. that way an involuntary billing failure never gets filed as "they didn't want it" in the first place.

    1. 1

      That’s a good distinction, and I agree that the reminder should never be the thing keeping renewal alive.

      In this case, the subscription was supposed to auto-renew through the payment provider. The reminder email was only a communication layer and fallback, not the billing mechanism itself.

      What made the situation messy is that the subscription lapsed and the reminder (handled internally) also failed, so I lost both the automatic renewal and the chance to clarify the customer’s intent at the right moment.

      I also like your point about logging the reason at the moment it happens. “Card declined,” “subscription canceled,” “renewal failed,” and “customer chose not to continue” should never collapse into the same churn bucket. Otherwise the metric looks clean while telling you almost nothing.

  41. 1

    Really honest breakdown — respect that.
    How do you currently handle billing
    verification with your customers?

    1. 1

      Thanks! Right now it’s mostly handled through DodoPayments, with the usual email reminders and account status checks on my side.

      The weak spot was that I trusted the renewal flow too much instead of verifying that the customer had actually received the reminder and understood what was happening. That’s the part I’m tightening up now.

  42. 1

    Brilliant breakdown, Nikola. The realization that deep setup activity doesn't automatically mean high buying intent is a tough pill to swallow for technical founders. It’s easy to focus on feature-building when the real battle is understanding the friction in the trial-to-paid path. Hope you get clear answers from that churned user soon!

    1. 1

      This really resonates. It's easy to mistake product engagement for buying intent, especially when users are actively exploring features. But the biggest insights usually come from understanding why someone doesn't convert. Those conversations often reveal friction you'd never spot by looking at analytics alone.

    2. 1

      That’s exactly it.

      As a technical founder, shipping another feature feels productive because the output is visible. Understanding why someone configured half the product and still didn’t pay is much less comfortable, but probably far more valuable.

      I’m working on that gap now, and hopefully I’ll have a better story about the churned customer soon.

  43. 1

    This distinction between billing-flow failure and product churn is such an underrated problem. I'm building CancelKit specifically because of this — without an intent signal captured at the moment someone cancels, you're left reconstructing motive from indirect clues, which is exactly the trap you describe with the missed renewal email. Even a simple "why are you leaving" at cancel time would have told you decisively whether it was the bug or genuine disinterest. Really appreciate you publishing the raw numbers too — $24.65 real MRR vs. the flattering headline number is a distinction more founders should sit with.

    1. 1

      Exactly. The frustrating part is that the renewal failure destroyed the intent signal before I had a chance to capture it.

      A cancellation form would help when the customer actively cancels, but in this case the subscription simply expired after the renewal flow failed. That makes passive churn much harder to interpret.

      It’s made me think more seriously about capturing intent earlier: during failed renewal, downgrade attempts, inactivity after high engagement, and other moments before the account quietly disappears.

  44. 1

    Great transparency. It's interesting to see the difference between product usage, buying intent, and actual revenue. Wishing you continued growth—every lesson here is building a stronger product. 🚀

    1. 1

      Appreciate it! ☺️

  45. 1

    The renewal example is a good reminder that small operational gaps can quietly affect business decisions in ways that aren't obvious at first.

    1. 1

      Exactly. The dangerous part is that the gap can look operationally small while changing how you interpret customer behavior.

      The missed renewal was one bug, but it made the resulting churn data unreliable. That is why I now treat billing and renewal infrastructure as part of the product, not just back-office plumbing.

  46. 1

    This is exactly the failure mode I've been building CancelKit around - the "I can't tell if this was a decision or a bug" problem. Once you can't cleanly separate churn signal from billing-flow failure, you lose the ability to trust your own retention data going forward, not just for that one customer.

    One thing that's helped me think about it: keep the renewal reminder on its own monitored path (log every attempt fired, not just "sent" from Stripe/webhook events) so it's not entangled with your marketing email pipeline. If a renewal reminder can be blocked by the same infra as your newsletter, it'll eventually go down silently exactly like this did.

    Congrats on the first paying customers, by the way - $24.65 MRR looks tiny written down, but it means real people decided your product was worth paying for. That's the hard part.

  47. 1

    This distinction between operational failure and signal loss is gold. Most products view billing bugs as technical debt. But when your renewal email doesn't send, you've poisoned the entire feedback loop - you'll never know if they actually churned or if your infrastructure did.

    That missed reminder cost more than revenue; it cost certainty. You're now running a product where churn data is noisy, which means you can't confidently iterate on retention.

    The fact that you immediately prioritized fixing the renewal infrastructure over adding features shows you understand that in SaaS, operational reliability IS the feature at this stage. Most founders don't realize that until much later.

    1. 1

      Exactly. “Noisy churn” is the phrase I was missing.

      The billing bug was technical debt, but the bigger damage was analytical: I could no longer trust the event enough to learn from it.

      That changed the priority immediately. Fixing the renewal path had to come before adding another feature, because otherwise every future retention decision would be built on contaminated data. 😬

  48. 1

    The free vs paid conversion gap is brutal at this scale. One thing that helped me: identifying the 5-10 most engaged free users and personally reaching out before renewal. Most churn at this stage is silent — they just don't come back. A direct conversation recovers more than any email sequence.

    1. 1

      I love this take! A direct conversation really humanizes it as well

    2. 1

      That’s useful, and it’s close to what I’ve been building.

      I already score users by product activity and send lightweight nudges or short advice emails to high-intent accounts. The harder part is distinguishing genuine buying intent from enthusiastic product usage.

      Someone can create multiple monitors, return often, and engage deeply without being commercially ready. So the next step for me is not simply more outreach, but improving which signals trigger it and measuring the full path from signal to billing visit, trial, and payment.

  49. 1

    The distinction that stood out to me is between operational failure and product failure.

    If a customer leaves because they chose to, that's valuable feedback. If they leave because your renewal process broke, you've lost the ability to interpret the signal. Protecting the quality of your feedback loops is just as important as protecting revenue.

    1. 1

      That is exactly what bothered me most.

      Losing the renewal is one problem. Losing the ability to understand why it happened is worse.

      It made me realize that retention data is only meaningful when the billing, notification, and renewal flow is reliable enough not to contaminate the signal.

      1. 1

        I think there's an interesting strategic discussion here that probably goes beyond what fits in a thread.

        If you're open to it, what's the best email to reach you?

        1. 1

          Happy to hear the strategic angle here first. What specifically did you notice about the product or positioning?

          1. 1

            The thing I noticed isn't a positioning tweak.

            It's a business decision that naturally follows from the way you're thinking about retention data, and I'd rather explain it against the specifics of your product than reduce it to a few lines here.

            If you're interested, what's the best email to reach you on?

  50. 0

    Free users are not converting

  51. 1

    This comment was deleted 22 days ago.

Trending on Indie Hackers
How to rank #1 on ChatGPT? User Avatar 111 comments I built a startup-idea scanner. It just told me none of my 3,400 ideas are easy wins. User Avatar 64 comments I Tested Agenmatic for Finding Customers in Communities — Here’s What I Learned User Avatar 63 comments Building a Shopify bundles app for stores with real fulfillment: here's the wedge User Avatar 42 comments “I’ll just post on Upwork” is not a client strategy. Here’s what I built instead. User Avatar 38 comments I recorded myself using 200+ indie SaaS products cold. Here are the 7 conversion killers that keep showing up. User Avatar 30 comments