How I launched to $190 in Monthly Recurring Revenue

This is the tale of how I launched I wrote it both to get a few thoughts off my mind and to give a counterpoint to articles like this one from RivalFox. I don’t want to be negative about RivalFox’s achievement: Those guys rock and they deserve every last bit of it! – I just want to add another data point.

tl;dr: I did a few things right, I did quite a few more things wrong, but in the end I shipped and had moderate success so far.

Some Background on LinksSpy

LinksSpy allows you to spy on your competition and learn where they get their links from. This helps you to build more high-quality links to your website – thereby sending you more visitors and helps you get ahead of your competition on Google.
It is targeted mostly at SEO agencies, who use it to optimize their clients’ websites.

I came up with the idea while working with the beautiful people at Moz – who were kind enough to take me on as an intern despite serious legal obstacles (Short story: I could only work unpaid because I already get paid, they wanted to pay me for legal reasons).

So I felt that I had to give something back and I came up with an idea to lower their churn rate. That idea eventually evolved into LinksSpy.

How I built LinksSpy

I built LinksSpy on the side. My day job doesn’t leave me with a lot of room, but I usually manage to sneak in about 10 hours of work each week.

For the techies: LinksSpy is built with Rails and runs on Heroku.

The Build-Up Prior To The Launch

I started working on the LinksSpy-predecessor around this time last year. It was a clunky shell script written in node.js. It was designed as a one-off project – to be run only once as a test to see whether it would reduce churn or not.

After I was back to Germany from working in Seattle, I didn’t put much work into the script; mainly adapting it to work with the free tier of the Moz API.

However, I put up a basic landing page and started collecting email addresses. I also bought my way into, which got me 226 addresses for a modest $39 (at a 41.4% conversion rate). The addresses were of pretty good quality, too.Prelaunch Squeeze Page for


Up to the launch I mainly focused on building a web app to present the data and talking to potential customers from my growing mailing list. I scanned through my list using Rapportive – which allows you to find people in your target niche. At various stages I onboarded two or three users at a time to beta test LinksSpy – making very clear that while usage is free during beta, I would eventually charge them.

All the time I didn’t have an automated process for the competitive link analysis. Every time a user created a new campaign the process would look like this:

  • the web app would send me a file with the data (URL, competitor URLs, campaign ID, etc)
  • I would load that file into the modified shell script and let it run on my computer at home
  • The script would query the API and compute everything in a single run. Often it would crash two or three times before running successfully – I had to restart it every time and hope for the best.
  • After the script finished, I would take the results and copy&paste them into a special form in the web app at which point they became available to my users (they get an email)

I implemented a lot of feedback from my beta testers (Thanks again, guys!) over the following months – along with credit card processing (using Stripe & Koudoku) and a feature to do outreach.

After about eight months of development, I finally got fed up with postponing the launch again and again and again. I pulled the trigger and announced the upcoming launch to my mailing list of 268 subscribers on 24.04.2014.

The Launch

The Launch Email Sequence

I went with a launch email sequence of three emails:

  1. a launch announcement email(4 days prior to launch)
  2. the actual launch email – 20% off for 48 hours (at launch)
  3. a reminder email (8 hours before the discount runs out)


Here are the stats for those three emails:




That converted 10 out of 268 people to paying customers – a 3.7% conversion rate. This does not seem too bad, considering I had no free trial.

I think that went pretty well – I could have warmed up my email list a bit more, but overall I am pleased with this part.

The Product At Launch

Pricing & Trial

First lets talk about pricing. I launched with a 3-tier pricing of $10/20/40 – which includes the 20% discount mentioned in the emails.
Two days after the launch I increased prices to $10/25/50. Prices have remained at that level for the past two months.

When I launched LinksSpy there wasn’t a free trial – and there isn’t one up to this day. This was a bit of swimming against the stream and I got some negative feedback about this – despite a 60-day money back guarantee.

I was craving the ultimate validation for my product: People were actually willing to pay for LinksSpy.
To that end it worked beautifully and I got 10 paying customers for a total monthly recurring revenue (MRR) of $190.

In hindsight I believe that it would have been wise to offer a free trial. If nothing else, it would allow me to collect email addresses, improve onboarding and learn faster.
I also got the feedback from a few people that I am not charging enough. I’ve probably told a dozen people that they should charge more – and here I am charging too low for my own product. That is a special kind of stupid.

I am going to change both shortcomings in the upcoming weeks. Together with introducing a 7-day trial I will raise prices to $19/$49/$99.
Having the trial be that short is quite unusual, but users get value out of LinksSpy almost immediately after sign up. That’s why I’ll have a real short trial first and maybe test a longer (14 or 21 days) trial later.

Bugs At Launch

About two (2!!!) hours before launch I decided that it would be a really wise idea to make this little (8 characters!) change to the source. What could possibly go wrong?

Well…. a whole lot of things could go wrong. You could corrupt your data model and show your newly-found customers a (not so nice, default Rails) error page. Things like that.

It took me about 2 hours to put that wrong to right – and about a dozen emails to apologize to everyone affected by it. Lesson learned: Don’t be an idiot, keep your hands away from the code and where I can see them 48 hours before the launch.

Missing Features At Launch

The quote that helped me launch LinksSpy was this:

“If you are not embarrassed by the first version of your product, you’ve launched too late.” – Reid Hoffman, Founder LinkedIn

And indeed, I felt that LinksSpy was months away from being “launch-ready”. Among the missing things were:

  • no automated processing of created campaigns – I still had to run the script manually and it would fail at least every second run. It took 24-48 hours before data was
    available for a newly created campaign
  • While I wanted customers to input their CC data right after sign up, you could bypass that and just create a new campaign. This allowed you to use LinksSpy without being charged a dime. One guy used this and got his report for free (because I didn’t manually check)
  • no custom error pages, just the default ones created by Ruby on Rails (still rocking those)
  • there were quite a few UI bugs in the app (and some still are)
  • No drip email campaign to collect email addresses
  • No lifecycle emails for new users, only minimal onboarding help
  • Even users that had cancelled / were not paying could still log in and use LinksSpy
  • NO consistent design for the marketing website & application. The marketing website / blog is based on WordPress and the Genesis theme – the application and the main landing page are designed using Bootstrap.

I could find more things to go on the list, but what’s important is that LinksSpy was far from perfect when I launched it. Still, I got happy paying customers.

Marketing at Launch

None except announcing it to the mailing list. Despite me knowing that this is the worst possible move, I didn’t put any marketing effort into LinksSpy. I wanted to keep quiet about it, get some paying customers and see how well it would work out.

Luckily, it worked out quite well. Some people got the first quality links to their website within hours of signing up for LinksSpy. LinksSpy got some great endorsement on Twitter:

I could have done a lot more than tweeting about it and announcing to my mailing list. I haven’t done much for the last two months either, instead focusing on improving the product. I will focus way more on marketing in the weeks & months to come (hopefully I won’t go back to just coding. If you want to help me, remind me of my pledge on Twitter πŸ™‚ )

LinksSpy Today

LinksSpy had $255 MRR – coming from 15 customers – on 01.07.2014 (about two months after launch).
I have seen three people cancel their accounts, which means about 15% churn rate – which is to be expected for a newly launched product.
All those numbers should be taken with a grain of salt, because my numbers are still so low.
As my goal is to be able to live off LinksSpy’s revenue in 2022 (no kidding there; that really is my goal) at the current growth rate I will be at about $3500 by then :-D. Not quite enough yet, but not too far off either.

Customer Segmentation

LinksSpy is aimed at SEO agencies, but so far I didn’t convince many agencies to sign up. Most of the customers so far are SMBs and quite a few people who I know personally.

I need to focus more on marketing to SEO professionals.
I will do so by being more active (and buying ads) on /r/seo, /r/linkbuilding and other watering holes for SEOs.

Improvements To The Product

I’d like to think that I have made considerable improvements to LinksSpy, but I still feel like I need to do much more. That’s probably normal, though.

Here are a few things I accomplished in the past two months:

  • completely re-wrote the backend; replaced the node.js script with Ruby and fully automated it. This decreased the turn-around time from 24-48 hours to < 2-4 hours. This is a great win for my customers as they get their data faster.
  • LinksSpy now automatically runs reports for the campaigns every month (whenever Moz provides new data), so that customers can keep a close watch on their competitors
  • The campaigns show a lot more data than at launch (e.g. which websites already have a link back to you)
  • a bunch of minor features like filters for suggestions, better export functionality etc.
  • I added a mandatory “why are you canceling” text box to learn why people are canceling and how to improve my product


I have slowly started to ramp up my marketing. I check reddit for topics where I can contribute to the discussion and mention LinksSpy when appropriate.

Most importantly, I started with building content on the LinksSpy blog. I hired a guy through oDesk who writes rather long (1,000 words) articles for the blog (examples here and here. He’s got a bit of an audience, which is a great benefit on top of his well written articles.

Additionally, I started tagging people for remarketing with PerfectAudience and AdRoll about a month ago. My plan is to use remarketing to get people to sign up for a drip email campaign.
I have written 3 out of 5 planned emails so far. I’ve got the banners for it and I’m tagging the people. All that is missing are the last two emails before I can start with remarketing.

Once I have the drip email campaign and remarketing in place, I want to focus more on getting visitors to the page. Before having that it would be like carrying water in a sieve.

Lessons I learned

I have learned quite a bit: Some things went well, others not so well.

  1. First of all: Launch it, ship it, then improve it (based on what you learn)
  2. Have an email list and keep it warm. I partially failed at keeping it warm. I only sent 4 emails over the course of 5 months prior to launch.
  3. works really well for getting a few hundred subscribers to your mailing list
  4. Don’t change code shortly before launch
  5. Do more marketing – something I constantly struggle with doing
  6. All of this is really hard. It’s easy to understand the concepts & broad strokes, but you need to nail the details to succeed. Doing >> Reading


That’s the hardest part here: Do I have enough numbers to come to any meaningful conclusions? Maybe, maybe not.
What I can say so far is this: It is NOT easy. I haven’t even reached product-market fit and the way there is blurry and uncertain to me. There is so much more to learn about my customers and how I can provide value to them.
I am looking forward to that challenge and think that I know enough to succeed. Let’s see if I can execute well enough πŸ™‚

Was it wrong that I launched so early? I don’t think so. 10 minutes after the launch, when I learned of the severe bug, I felt like it was the worst decision ever. With two months distance from that evening, it doesn’t look that bad anymore. I got some amazing feedback, happy customers and the advice (from said customers!) to charge more. That isn’t too bad – eh?

Share Button
About Christoph

Christoph lives in Munich, Germany and is bootstrapping his own SaaS application as a part-time entrepreneur.

He likes to write on this blog about anything of relevance to single-founder bootstrapped software startups.


  1. Hello Christoph.

    Congratulations. Really good value in your post. Thanks for that. Especially the quote from Reid Hoffman resonated with me.

    Best wishes

  2. Christoph,

    You have learned a lot *and* you have got paying customers. Definately sounds like a success to me!

    >About two (2!!!) hours before launch I decided that it would be a really wise idea to make this little (8 characters!) change to the source. What could possibly go wrong?

    Ha! We all have to learn that one the hard way. By the same token, never change anything just before you go on holiday.

    >It’s easy to understand the concepts & broad strokes, but you need to nail the details to succeed. Doing >> Reading

    So true…

    • Christoph says

      Hi Andy,

      thanks for your kind words and your awesome MicroConf talk last year. πŸ™‚
      I learned a lot from it.

      >Ha! We all have to learn that one the hard way. By the same token, never change anything just before you go on holiday.

      I’m currently on holiday for a few days, had to restrain myself the last two days and not commit anything πŸ™‚


  3. Great write-up, Christoph! I think I’ll have to re-read it to see what bullet points I can extract from it.

    I’m wondering about the implementation of the free trial you mentioned. Specifically, if the product is in fact delivering much of its value within hours of creating the first campaign and if many users are SMBs (who let’s assume only need to use the product for a single site), aren’t you running the risk that many will sign up for the trial, do their single campaign, and then fail to convert to paid without ever paying you a dime?

    • Christoph says

      Hi Chris,

      thanks for stopping by and reading my write-up.
      What you are saying is indeed my biggest fear, but I think that I can learn quite a bit from people who sign up for the trial.
      Either way, I can remove the free trial at any time in case my experiment fails.


  4. Hey Christoph.

    It’s so nice to read about a “normal” launch. Encouraging even. Keep it up, and here’s to 2022!

    • Hi Nathan,

      thanks a lot for your comment and I’m glad you liked the post.
      I was on the fence whether or not to publish it. In the end I decided on “yes”, because so few people talk about it when things just go “OK” instead of “fricking awesome”.

  5. Hi Christoph,
    Thanks for posting, it is great to read about the humble beginnings of your project. You’re onto an interesting problem and I’m sure it will grow once you hone in on what sets you apart!

    Have you tried running ads on Reddit? Anything you can share in that regard?

    • Christoph says

      Hi Dennis,

      Thanks for the encouragement.

      I recently bought some reddit ads and they will go live in mid-November. I’ll probably blog about it once I have some results.



  1. […] "How I launched to $190 in MRR" – Christophs Lektionen aus dem LinksSpy-Launch  […]

  2. […] will only cover what I make from LinksSpy; if you want to know what LinksSpy is, then here’s an article on how I started. This means, that I do not include money earned from consulting/freelancing nor what I make in my […]

Speak Your Mind


This site uses Akismet to reduce spam. Learn how your comment data is processed.