17
35 Comments

$48 MRR and I can't prove where any of it came from

Two weeks ago Clustea was at $12 MRR. It's at $48 now. Four paying customers.

Small numbers. But it's the first time it has moved more than once.

Here's the part I keep thinking about: I can't prove where any of them came from.

I had a Google Ads campaign running that I didn't know was live. €165 spent over the summer. Two US customers signed up during that exact window. Maybe the ads brought them. Maybe not. I have no idea, because my tracking was firing a purchase event on a dashboard page and storing attribution nowhere.

So before doing anything else, I spent four days rebuilding it.

Consent before anything fires. Attribution tied to the Stripe invoice, server-side. Conversions that refuse to send when the data isn't there.

That last one is the part I'm proud of. I ran a real payment on Friday to test it. It got rejected as non-exportable, because I paid without coming from an ad. The system refused to invent an attribution it didn't have.

Which is the whole product philosophy, honestly. Clustea writes SEO articles where every figure links back to a real source. If it can't verify a number, it doesn't print it.

Turns out I had to apply that to my own analytics before I could apply it to anyone's content.

Four customers is still four customers. Not traction.

But when the fifth one shows up, I'll know why.

Question I'm stuck on: raise ad spend now, or wait until I've watched one conversion travel the full chain end to end?

on September 6, 2026
  1. 1

    One thing the thread hasn't touched: with four customers the attribution table can't settle much either way, but the step before payment can, and it's readable today. During the €165 window you almost certainly got visits and signups that never paid. If the spend brought a few hundred sessions and three signups, the channel is the problem. If it brought a few hundred sessions and forty signups who then stalled, the ads worked and whatever comes after them didn't.

    I ran a campaign that delivered installs steadily, around a euro each, and produced zero created accounts. I treated that as a measurement question for longer than I should have. The signup screen was simply missing the option most people expected, and no amount of clean attribution would have told me that.

    So before deciding on spend: during that €165 window, how many people arrived and signed up without paying? That ratio doesn't depend on the rebuild being perfect, and it separates a channel problem from a product one faster than the fifth customer will.

  2. 1

    Answering your actual question: raise spend, but only by an amount you're willing to write off entirely, because at four customers the attribution table will never reach significance no matter how clean the plumbing is. The higher-yield move is to email all four and ask what they searched or who told them, which gets you better signal in an afternoon than the pipeline will in six months at this volume. Save the end-to-end verification for the point where you can't phone every buyer.

  3. 5

    Wait. And write down what would make you raise spend before you look at the next number.

    Different channel, same trap. I am 14 days into a 29-day run where I only reply in other people's threads and post nothing. Best day so far was 6,818 impressions.

    84% of that came from one single reply. 0 paying customers.

    The 6,818 was not a result. It was one lucky reply, and I would have scaled on it if I had not fixed the rule first.

    Your €165 has the same shape. One conversion travelling the full chain proves the pipe is not broken. It does not prove the channel pays.

    So I would split the two decisions. Pay for one click yourself to prove the pipe, then write the spend rule down before the fifth customer arrives, not after.

    1. 1

      The two decisions being separate is the part I was collapsing. Pipe works and channel pays are different questions, and one click proves only the first.

      Writing the rule down before the number arrives is the harder half. Mine, drafted now rather than after the fact:

      Raise spend when three separate customers arrive through a tracked ad click, and the blended cost per acquisition sits under one month of revenue. Below three, it's a coincidence I'll be tempted to read as a trend.

      Your 84% from one reply is the cleanest version of that trap I've seen. Same shape as my two US signups landing during a spending window: suggestive, unrepeatable, and exactly the kind of thing I'd have scaled on.

  4. 1

    Wait, and watch what attributes itself before you buy more clicks.

    I shipped the same rebuild yesterday: first-touch source stored on the user at signup, 30-day cookie, no backfill. This morning the table says 32 signups, 30 of them "unknown" because they predate the cutoff, and 2 attributed. Both came from Google organic, landing on the homepage. I spent €0 there.

    Two rows is not a channel. It is the first honest row I have had in two months, and it already points somewhere I was not looking.

    One thing to decide before the fifth customer: first-touch or last-touch. A customer who found you on a free channel three weeks ago and clicks an ad today lands in a different column depending on that choice, and the ad will claim him under last-touch.

    Which one are you storing against the invoice?

  5. 2

    Making money is a problem, explaining how much money you've earned is also a problem. Money = problem ^^

  6. 2

    The detail I'd single out here isn't the $48, it's that you built the conversion to refuse to send when the data isn't there, and were then pleased when your own test payment got rejected.

    That's backwards from what nearly everyone ships. Most tracking is built to fire optimistically and be reconciled later, which is exactly how you arrive at four customers and no idea. Choosing to be told "no" rather than told something comfortable is a good instinct to have this early, and it's the part of this post I'd point other people at.

    The ad campaign story landed uncomfortably close to home. I was checking something on Google this week and found a Search campaign of my own sitting there paused, having quietly spent its budget on a ten-day test I'd half stopped thinking about. Same as you: the clicks exist somewhere, what happened afterwards doesn't.

    So I'm currently choosing between spending on distribution again or fixing measurement first, and reading this I think you've got the order right. Spending more to generate data you still can't read is just a costlier version of the same week.

    $12 to $48 with a mechanism that can now tell you the truth is worth considerably more than $48 that arrived by luck. Hope the next reading says something clear — and that I'm back here before long posting about my own first four rather than my own dead ad campaign.

  7. 1

    consent before anything fires means whoever declines stays invisible tho. so the clean chain only covers ppl who said yes, and in the eu that slice can be small.

  8. 1

    Four customers is enough to start a lightweight attribution habit without pretending the data is perfect. I'd log first-touch and last-touch separately, then ask each new customer the same open-ended question at signup and again after activation. Pair that with UTMs and a simple weekly table; even a few weeks of consistent notes should tell you which channels deserve more budget.

  9. 1

    Strong move refusing to assign an unknown source. I’d make “unknown” an explicit cohort and pair server-side attribution with a lightweight qualitative check: one required checkout/onboarding field (“what made you try this now?”) plus a follow-up after first value (“what would you have used otherwise?”).

    Keep the raw answer and timestamp alongside UTMs/referrer. After 10–20 payments, compare self-report with instrumented source and report ranges rather than false precision. Also keep campaign spend separate from organic/direct so ads can’t borrow credit from branded search.

    The goal isn’t perfect attribution; it’s a defensible decision rule for where to spend the next euro.

  10. 1

    Nice work on the rebuild. The one gap I'd watch is the zero click case. You can have perfect server side attribution and still under count the channel that actually works, because plenty of people hear about a tool once, do nothing, then type the name into Google a week later. That conversion shows up as direct or branded search, never as the reddit thread or the ad that actually planted it. So the failure mode flips: not inventing attribution you don't have, but trusting the attribution you do have a bit too much and starving the top of funnel that never gets credit. With four customers the cheap fix is just asking each new one how they first heard of you, in their own words. Messy and unscalable, but it catches exactly the dark funnel signal your pipeline structurally can't. Your rebuild handles the clicks you can see, that one question covers the ones you can't.

  11. 1

    For the inbound pieces, we kept rebuilding a small webhook → light score → Sheets → Day 0/2/5 flow. Biggest footgun was Wait nodes on a sleeping host.

    Tiny intake check that helped: awake n8n → webhook path → require email → 400/200 → normalize name/company/message/source → then score/sheet/follow-up. Having source normalized early made attribution less hand-wavy.

    Happy to compare notes on structure.

    1. 1

      The normalize-source-early point maps onto what I ended up doing, though on a different stack. The source gets resolved and stored server-side at the attribution step, before anything downstream can touch it, precisely so nothing later has to guess.

      Different failure mode than sleeping hosts, but same lesson: anything you resolve late, you end up inventing.

  12. 1

    Before spending more, I’d ask the four customers directly how they first found you and what made them pay. At this sample size, those answers are more useful than a dashboard and may recover the attribution you lost. Then prove one paid conversion end to end with the new tracking. If the customer conversations and the tracked path point in the same direction, you have a much stronger reason to raise spend than either signal alone.

    1. 1

      The convergence point is the strongest argument anyone has made here. A tracked path tells me the pipe works. A customer telling me they found me through an ad tells me the pipe is measuring the right thing. Those two agreeing is worth more than either alone, and I hadn't framed it that way.

      And you're right that the interviews can recover some of what I lost. Three of my four predate the tracking rebuild entirely, so asking them is the only way I'll ever know.

      Doing that this week. Four emails is not a hard afternoon.

  13. 1

    Wait until one conversion travels the full chain. EUR 165 is cheap tuition; EUR 1,650 for the same blind spot is not. The 'refuse to invent attribution' rule is the keeper: numbers that only appear when real are the only ones you can scale on. I'd rerun the same budget with invoice-side tracking first, then raise it.

    1. 1

      Rerunning the same budget with invoice-side tracking is the cleanest version of this, and it's roughly what's happening: same campaign shape, same order of magnitude, but attribution now stored against the Stripe invoice instead of a browser event.

      The €165 comparison is the one that keeps me honest. Same blind spot at ten times the spend isn't tuition anymore, it's just a habit.

      One correction to my own post, from another comment here: I've only tested the branch that refuses to export. The branch that actually sends has never run. So even the invoice-side tracking isn't proven yet, only the guard around it.

  14. 1

    Generating early revenue without clear attribution data creates a dangerous blind spot where founders cannot reliably scale what is actually driving conversions. While achieving initial MRR proves baseline product interest, failing to track acquisition channels risks burning resources on ineffective marketing efforts while leaving the true growth engine unoptimized and unprotected.

    1. 1

      That's the situation, yes. The part I'd add is that the blind spot isn't just about scaling what works, it's about not knowing which of your channels is quietly doing nothing.

      Two of my four came in while an ad campaign was spending. Could be the ads. Could be organic. With no attribution stored I can't retire either channel or double down on one.

  15. 1

    The tracking rebuild before scaling spend is the right call. €165 spent and you can't attribute it is a much harder problem at €1,650. The cost of wrong attribution grows with the spend.

    Wait until one full conversion chain fires cleanly. Once that happens you'll also know whether your targeting is actually reaching the right people, not just whether ads can generate signups at all. Right now you'd be scaling into a guess, and even if it works you won't know why.

    1. 1

      Agreed, and the targeting point is the one I hadn't separated out. Ads generating signups and ads reaching the right people are two different questions, and only the second tells me whether to keep the keyword.

      Small update since posting: someone here pointed out I've only tested the branch that refuses to export, never the one that actually sends. So the plan is now to click my own ad and buy through it. One click, full chain, this week.

  16. 1

    €165 on an unnoticed Google Ads campaign while you could not name where the four customers came from is a control problem, not a growth one.

    Write one sentence for the measurement job: every new customer must point to a source I can name. Put that on a slim daily. No new channel until that line is true for a week.

    Free Pyramid Reality Check: https://durablefoundations.gumroad.com/l/pyramid-reality-check

    Which of the four can you already source?

    Kael Voss / DurableFoundations

    1. 1

      Honest answer: one of four.

      The fourth signed up after I fixed the tracking, so there's an attribution row tied to the invoice. Not from an ad, but at least the source is stored.

      The first three predate it entirely. Two US signups landed inside the window the unnoticed campaign was spending, which is suggestive and nothing more. No attribution was stored at the time, so it stays a coincidence.

      Agree on the control framing. The rule I'm holding is narrower than yours though: no increase in spend until one conversion travels the full chain, not no new channel until the line holds for a week. At four customers a week could pass with zero new signups and I'd have learned nothing.

  17. 1

    The refusal to invent attribution is doing more than tracking work — it's building confidence in your own signal.

    Most founders stop at "I can't track where this came from" and move on. You built the opposite: a system that actively rejects guesses. That's the part that compounds.

    When the 5th customer arrives and you can trace their path end-to-end, you'll trust that single data point more than most people trust their first 20 conversions. And when you can't trace a conversion, you'll know that too — not as a gap to rationalize around, but as real information about where your tracking is leaking.

    The philosophy you built into Clustea (refuse to print numbers you can't verify) just became the decision-making engine for your own business. That's the measurement integrity piece that actually drives which choices you can make with confidence.

    1. 1

      The honest version is that it wasn't a philosophy, it was a bug I had to stop repeating.

      The product was telling customers an article was ready when its own integrity checks had failed. Fixing that meant every state had to be derived from something provable, and once that rule existed for articles it was hard to argue my analytics deserved looser standards.

      Where I'd push back on my own system: someone pointed out I've only tested the branch that refuses. The branch that accepts and actually exports has never run. So the confidence you're describing isn't earned yet. It will be once one conversion travels the whole thing.

  18. 1

    The bit I would push on: you tested the branch that refuses, not the branch that accepts. A real payment with no ad origin got rejected as non exportable, which proves the guard works. The path you will actually depend on, ad click through to exported conversion, has never run once. Those are different code paths and only one of them matters for the decision you are about to make.

    So neither of your two options. Spend the price of a single click: click your own ad, buy your own product through it, and watch one conversion travel the whole chain. That is a few euros and an afternoon, rather than waiting for a fifth customer who may arrive from somewhere else entirely.

    From the other direction, we had a Google Ads campaign reading Eligible for six months that had served zero impressions, because there was no billing setup. The platform does not tell you plainly in either direction.

    1. 1

      You're right and I'd missed the distinction. The rejection path and the emission path are different code, and only one of them decides anything.

      I'd talked myself out of clicking my own ad on invalid-traffic grounds, but at one click that's a rounding error next to spending blind for a week.

      The Eligible-with-zero-impressions story lands too. Mine read Eligible for 24 hours with no impressions and I assumed it was broken. It was just my max CPC sitting under the auction floor. Raised it, ads started serving. Nothing in the interface said so.

      Doing the self-purchase this week. Will report what the chain actually does.

  19. 1

    With only four customers, I’d be careful treating attribution as the missing piece. What would you need to see from the next few conversions before you’d consider the signal strong enough to increase ad spend?

    1. 1

      Fair challenge. Attribution isn't the missing piece for growth, it's the missing piece for deciding.

      Concretely, what I need to see before raising spend: one conversion travelling the whole chain end to end. Click ID captured on landing, stored server-side, surviving through signup and payment, and arriving at Google with a request ID I can look up.

      Not a volume threshold. Just proof the pipe isn't broken.

      After that it becomes a volume question, and yes, four is nowhere near enough to compare channels.

      1. 1

        Once you’ve proven the pipe with one conversion, what would make you comfortable actually increasing spend — a certain number of attributed conversions, or evidence that the economics hold across a few more?

        1. 1

          The economics, and I wrote the rule down earlier in this thread precisely so I couldn't move it later:

          Three separate customers arriving through a tracked ad click, with blended cost per acquisition under one month of revenue. Below three it's a coincidence I'd be tempted to read as a trend.

          At $12/month that's a demanding bar, and I know it. If cost per acquisition sits at €40 with a tracked click, the pipe works and the channel still doesn't. Those would be two different conclusions and I'd rather find that out at €16/day than at €160.

          The number that would actually change my mind is retention. Four customers, zero churn so far, but nobody has hit a renewal yet. If they stay six months the acquisition math looks completely different.

          1. 1

            That’s a much clearer decision rule, especially separating a working attribution pipe from a viable acquisition channel. I’d be interested in digging into how retention changes that threshold once those renewals start coming through. If you’re open to it, what’s the best email to reach you on?

  20. 1

    At this size, I’d make attribution the next product feature: tag every signup with source, campaign, landing-page variant, and first-touch date, then review a simple weekly cohort table. With only four customers, a manual 15-minute customer interview per signup may teach more than optimizing the ad account. Once you have 10–20 conversions, you’ll have enough signal to compare channels without overfitting to a single sale.

    1. 1

      The 15 minute interview point is the one I'm least likely to do and probably should. Four customers is small enough that asking each one how they found me beats any dashboard I could build.

      On the tagging: source, campaign and first-touch date are stored now, tied to the Stripe invoice server-side. Landing-page variant isn't, and you're right that it should be.

      The cohort table is the obvious next step once there's enough rows to make one worth reading.

      1. 1

        Your front end looks great and 4 paying customers not churning means value-creation works. Use the book Demand Side Sales 101 to figure out what made them pay - channels are much less important than learning fast and in a systematic way so you position right and speak to their exact motivators for paying - whatever channels you are testing or scaling.

        If that’s sounds intimidating happy to jump on a call and explain how I’d go about it 👍