malahov.io

A Hundred and Seventy Euros, Zero Payments

Found out that the extension's identifier is the same across all installs, not a new one each time — I went looking for workarounds for nothing. Rebuilt attribution and went to my first tracking session.

Call Copilot series · part 6 of 20Try the product →

By Georg Malahov

Today I was surprised to learn something I should have figured out at the very start. All this time I thought the extension got a new identifier with every install — and on that assumption I managed to build a pile of unnecessary stuff: burned money on LLMs and built custom proxies just to get a person into the extension after installing. Turns out the identifier is the same for all installs — you just set a field in the manifest and the key is stable. A shame I didn't look into it right away: wasted time, money, and energy.

But oddly enough, the discovery turned out to be a pleasant one. Once I understood how it actually works, it became clear how much I can now simplify — make things more stable, faster, more reliable. I moved the stats tracking through the backend and built end-to-end attribution: now I can see an install from start to finish, not in fragments. Along the way I also discovered that after a few successful releases, extension updates start getting approved by Google in fifteen minutes, not the two or three days I'd assumed — that changes the pace entirely, I can ship fixes almost immediately. It's one of those rare situations where fixing the system makes it both simpler and more reliable at once, and that feels good.

With that, I went to the one-on-one tracking session — a personal review of the project with the course mentor: they check the homework, look at the launch and the funnel, go through the numbers and answer questions about your own project. And here it's time to tally up the first results. I've spent a hundred and seventy euros on ads. Got around a hundred and fifty installs, some forty registrations, a couple dozen paywall views — and zero payments. Exactly zero. There it is, the headline line of the month: a hundred and seventy euros spent on traffic, and not a single euro back.

Tellingly, at the session itself this didn't feel like a catastrophe. It felt like a normal result of a first iteration — one that now makes clear what to fix. I hit the basic goal I'd been working toward since September: finished the course, did all the homework, launched, and made it to the individual review. All of that worked out. The launch happened. And zero payments is just data, not a verdict.

The takeaways from the review came out concrete. Add the word "extension" to the keywords — it brings in more targeted people. Simplify onboarding: drop the auto-tour, drop the lead form, add a short demo video in their place. Switch to a credit system instead of the current scheme. Hook up cloud models through OpenRouter for people whose computers don't have the power to run a local model: transcription moves to the cloud, so the extension works on any laptop. And reduce the number of free calls so the paywall shows up earlier, not after someone has already used up everything free.

The next tracking session comes with a condition: I come back when I have at least fifty active users a week. Not installs — active users, people who actually use it. That's my next bar: get the product to fifty live weekly users. If I get to fifty active, it means I've found who needs this, and I can move on. If I don't, the problem isn't the ads but the product itself — and then that's what needs fixing, not the funnel.

Goals set. Off to fix the onboarding.