What I learned building a $1K MRR SaaS in 6 weeks
Table of Contents
During the last 6 weeks, I’ve been building my side project during the evenings and on the weekends and I finally reached $1K MRR a week ago. My first goal was 100$ MRR, but I reached that quite quickly so I had to expand a bit. It’s a fun ride. I can’t stress enough how much fun I’m having building this and watching it grow. No idea if it’s going to be successful or not, but it’s already an exciting journey that I’m glad to be part of.
While scaling, I’ve been writing things down, as I usually do, to reflect on some decisions that I’ve made and look back to see if some of those assumptions were correct or not. This article is just a summary of my observations that might be useful to you if you’re also planning on building something as an indie developer and doing everything — from coding to marketing — yourself. I hope to do these kinds of summaries on all the big round numbers 10’000$ MRR, and 100’000$ MRR, we’ll see how this goes. Don’t have much expectations, just enjoying the journey.
I’ve broken down the article into several parts:
- The first few days — I dive into the decisions that I’ve made during the initial build phase. Most of those decisions turned out to be wrong, but it didn’t matter.
- The first few weeks — I dive into the things that surprised me after the launch. A lot of things went not the way I was expecting them. That’s why it’s so fun.
- The first few months — Where I am now, where I plan on taking the tool, I will also share some numbers with you to keep this fun.
- My building philosophy — I’d like to emphasize things that I’ve said NO to, to make sure I build it the way I want it and run it the way I want it.
Before we continue, I’d like to mention that 1K per month is not profit, just the money in, but if I do stop investing in different experiments, it can be, as the cost of running the service is about 20-30% of the MRR.
The first few days
The idea for SEOJuice came to me from a simple need: I struggled with cross-linking my articles. It’s tedious and time-consuming, and I forgot it quite a lot. There’s so much wasted potential not just in terms of SEO but in UX for the users, I want my visitors to go read relevant articles without me having to remember what articles I have written before and how should I cross-link them all. I thought, “Hey, why not automate this?” That was the spark that got me started.
The first attempt failed as I tried to implement this in the WordPress ecosystem as a plugin, my experience with writing plugins is limited, and managing a handful of different tables has proven to be more annoying than worthwhile. I forgot the idea for a few weeks until again I had to add links to my new article, I decided I was going to build this because a) I can b) it sounds fun and c) it can be my new side project for 2024.
Now that I was determined, I decided to go with a pure HTML and Django setup for the initial version. At the time, it seemed like a good idea. I was proud of the simplicity. I just needed it to work for myself, so why build something complex if I’m the only user? This turned out to be a huge pile of technical debt, that I will start unraveling by the end of summer. It did allow me to start quite fast, so I think it was more good than bad.
HTML was great for the static parts. People refresh the page and new information gets shown, seems straightforward until you want to make things dynamic without the user having to refresh the page. This is still a big issue and I’m planning on rewriting the frontend part with either React or NextJS depending on whose marketing is more compelling, I might just flip a coin in the end.
Early on, I realized there were tasks I didn't want to handle myself, like scraping Single Page Applications (SPA) websites e.g NextJS / React / Angular apps — it would require me to set up playwright and I quickly figured out that running docker with playwright was a pain in the ass. I fiddled for a few hours, but couldn’t get it working. Instead of spending days trying to figure it out, I opted for an API that could render JavaScript for me — it cost like 50$ per month and did exactly what I needed. Worth it? Definitely! Will I continue paying 50$ for it? Nope, I’m already halfway done with the playwright setup so I will be doing this locally by the end of the month. This move saved me a lot of time and headaches, but moving away from it is a natural progression of the product.
I think one of the best decisions that I’ve made during that time is to start tracking everything about user journeys and interactions from day one. I could already see where users were dropping off and could act immediately on the data. I think I’ve redone the Trial page a few times during this time, as well as the “Website Creation” page. I was really obsessing with my “Trial-to-Paid” conversion rate, it’s still quite low (for my standards) and I think there’s huge potential here.
I also got lucky to get a few great customers from the get-go, some people decided to give me a chance when the product was super raw. Bless those early supporters, they’ve given me so much feedback (also bug reports) that I was overwhelmed for a time to make everything work properly. I still chat with them weekly, keep them updated on things that I implemented and they give me some feedback.
The biggest surprise at this point was the amount of support I needed to do. My Live Chat was pinging daily with people asking for 1:1s to consult them on SEO, explain what the tool does, and explain why they need it. So I think at this point, the main support activity was focused on educating users which resulted in me creating a Help Center with F.A.Q which I linked to several times during the onboarding. This has reduced the support requests by half.
The first few weeks
After polishing the product to be “good enough” based on the feedback I decided to share it more broadly. It was time to spend money on marketing and I spent a loooot on it.
I started with Google Ads, then paid some AI Newsletters to feature the tool, then paid some AI Directories to promote the tool, and basically did everything that I knew could bring me customers on short notice. And it worked.
✅ If we calculate the amount I spent on marketing, the net loss of the project would be around 1’000 USD. But these costs should be amortized during the next months as the LTV of the customers is quite high.
After getting enough traction I submitted the app to ProductHunt, and quite surprisingly ended up being the #3 Product of the Day and #3 Product of the week in Marketing. Kind of cool right? It didn’t bring me a lot of customers, but the users were amazing, they gave a lot of actionable feedback that I implemented right away. I added multilanguage support, multi-website setups, and team memberships with invitation flows. This made the software more complex, but it also made it more valuable.
While building some things that the users suggested, I found it super satisfying to keep a changelog of releases. Looking back at what I’d accomplished was motivating and gave me a sense of progress. It was awesome to see how far the tool had come in such a short time.
The new users also made me realize how crucial trial periods are. Customers made a bet to try out your service. It’s your responsibility to make sure they convert and you match their expectations. I track this number in customer.io and chartMogul via trial conversions. At this point most of my conversions were coming from my onboarding drip campaign that I’ve setup. It was actually a game-changer. Sending user tips about SEO, showing them the progress and reminding them to upgrade is still my highest highest converted email chain, imagine if I didn’t remind them? Lost of revenue basically. I wouldn’t have made it to 1K that fast.
The support requests changed from being basic “what does the tool do” to “I’m a SEO Agency, I paid upfront for a year, let’s talk how we can make the most out of it”. And yes, there were a lot of people that prepaid for the whole year! Thousands of dollars were spent on yearly plans, it’s still unbelievable to me that people were ready to make a bet long-term.
Where we are now
When it comes to building products, my mantra is simple: make it dumb, but make it work. Gather feedback and make sure it’s the right thing you’re building. Then, make it better based on the feedback, and finally, refactor it. This approach worked wonders in this case. It kept things moving and allowed for quick improvements.
There were hiccups here and there but clients were really understanding and even cheered me on to fix stuff. That’s where I am right now, I’m refactoring a lot of things that I build fast over the last month, slowing down development to see which parts are not used as intended or not working.
After a crazy fast-paced start, It’s time to simplify things. I scaled fast with DigitalOcean, now I’m moving to Hetzner. Sure it’s not a managed cloud, but I can manage it myself. I also building the SPA parsing and optimizing the SEO PDF report generation. All of these things worked when I launched them. Now they need to work better as I’m focusing on retaining the customers, rather than finding new ones.
I started paying attention to my churn rate and abandoned checkouts. It hurts a lot when people cancel their subscription. Thank god it happened only 3 times until now, but there will be more. I set up email campaigns to win back customers, give them discounts to stay or engage users who left mid-signup.
At this moment I’m focused on maximizing the value my current users are getting from SEOJuice. This means improving design and overall user experience, making it faster, make it more reliable. I want everything to feel smoother and more intuitive. I’m also investing a lot more effort into the educational part of the tool, helping users understand how to get the most out of it.
My building philosophy
I’ve said NO to a lot of people during the last few months. Some asked for discounts, some asked to have 1:1 coaching to explain why SEO is good, and some asked to transform the tool into a completely different one, just because they need it.
I think running a bootstrapped business makes it easy for me to say NO to the clients that I don’t want. I’m not hard-pressed to grow as a hockey stick. I'm financially comfortable to run this for fun and profit. I’m not looking for investments, I’m good with the pace this is going and I don’t want to compromise my life for the sake of this business.
The three big principles that I'm following are:
- Sustainable development — Coding should be fun and interesting. No hustle. Focusing on long release cycles, rather then short sprints. Slow and steady.
- Sustainable growth — no overpromising or mismanaged expectations, no hockey-sticks, no annoying outreach, focusing only on the customers that have the need.
- Sustainable profits — paying myself first. No overinvesting or spreading myself thin.
I’m quite honest in the support chat, where I tell people I'm tired and am going to sleep and will look at it tomorrow, or I tell them I won’t be doing that because I don’t think it brings value to the tool, or I just tell them the tool might not be the right fit. I wan't this to be a win-win for us both, and if a customer requires too much support, it's not a win for me. I’ve refunded multiple people who had some expectations about the tool that couldn’t be met.
And it's fine.
It feels like I’m in the driving seat. The clients that actually have the need and can benefit from the tool, they just subscribe. They integrate the tool properly, buy a yearly subscription, and send zero messages in support.
I know those are rare, but I’m also not in a hurry. I will be continuing to follow those three principles, and let's see where I end up.
Enjoying the journey, rather than the destination.
Click here if you want to find out more about the tool.