The Journey Bootstrapping a SaaS to $10k MRR

Sep 12, 2022Andy Cloke

Data Fetcher recently hit $10k MRR. It’s still 100% bootstrapped with one full-time team member (me!). 

Here’s the journey from launching two years ago up to today.

Background

I studied engineering at university but always wanted to have my own business. I figured it’s quite hard to build your own bridges or rocket ships, so after I graduated I moved home for a few months and learnt to code. 

After this, I worked for a few startups in London as a software developer whilst launching my own ideas on the side. One of these projects, a directory of TikTok influencers, started making some MRR. It was more of an opportunistic project than something I wanted to work on and I sold the tool after six months for $55k.

I’d bought myself a few months to try and come up with the next idea. Each week, I’d launch a landing page for the next idea, decide it was no good (using Tyler Tringas’ approach) and move on.

Here are some of the ideas:

  • Colorizing black and white movies in the public domain and hosting them on a tube site with ads.

  • A tool that scrolls a webpage and turns it into an MP4 video preview for social media.

  • A newsletter for upcoming IPO alerts.

The IPO one is important because I decided to try and manage all the newsletter content from Airtable. I’d heard Airtable was getting really popular and figured this was a good project to try it on. But I couldn’t find an easy way to first import financial data, like stock prices, into Airtable, to include them in the newsletter. I didn’t know it at the time but the seed had been sown for Data Fetcher.

namecheap renewals domains for ideas.jpg

The Idea

I was trawling Product Hunt looking for inspiration when I came across API Connector, a Google Sheets Addon that lets you connect to APIs and import data. It seemed quite successful, as it had 100,000+ installs at the time. Having run into the issue of importing stock prices into Airtable recently, I decided to try and build the same thing for Airtable.

I dug around in the Airtable forums and found a few posts from people trying to connect to third-party APIs, especially ones that weren’t on Zapier. This was enough validation for me to think there was something there!

At the time Airtable’s marketplace only listed extensions from big companies like Typeform and SendGrid, but they’d hinted they would open it up to independent developers soon. I gambled and started developing an extension similar to API Connector, but for Airtable.

Development

I kept the feature set as small as possible. The MVP basically let you sign up, enter API details and run the request manually or on a schedule if you upgraded. I had a huge backlog of things I wanted to add afterwards but I wanted to prove I could get one customer first.

data fetcher create request mvp.png

I used the tech stack I knew. For the front end that was React.js, TypeScript, GraphQL and Airtable’s extension SDK. For the back end, Node.js, TypeScript, PostgreSQL, GraphQL and Redis, all hosted on Heroku.

One tricky part of the development was that when a user runs a request in the extension, Airtable is updated via the extension SDK. When they schedule a run, it uses the Airtable REST API. There are significant differences between the two, so for lots of features, I had to write lots of similar but not identical code across two codebases.

Airtable’s extension marketplace does not have billing, so I handled upgrades myself by sending users to datafetcher.com and using Stripe. Overall I’m happier with this, as I’m not paying any marketplace commission!

Because there were no paid marketplace extensions, coming up with pricing tiers was even tricker than it normally is. I knew I had a good value-based metric, the number of API runs per month. I looked to the Shopify app store for inspiration, a tactic I still use today, and opted for a freemium model. The free plan gives users 100 runs per month. For more runs, or to schedule runs, the paid plans started at $12 / month. 

data fetcher pricing.png

A month or two into development, Airtable opened up the marketplace so anyone could submit an extension. Bingo! I submitted Data Fetcher, heard back after a few days and started addressing their feedback.

This process took several months. Airtable’s feedback always made sense but could be a bit slow. Their marketplace team was pretty new so understandably was still ramping up. They also needed to answer some security questions about what extensions should be allowed to do.

I was still living off the savings from selling my last tool, and it took a lot of patience watching my bank balance go down each month whilst I waited to launch.

Launch

In November 2020, Data Fetcher was approved by Airtable and launched on their marketplace. It was a big day, but I wasn’t going to celebrate anything until I got my first customer. 

There were a few free sign-ups coming in each day. Seeing people use the features I’d developed and the variety of use cases was awesome, but no one was upgrading... 

Then after a few days, boom, the first customer! The fact someone paid for the MVP, which was pretty terrible, was incredibly exciting.

first stripe customer.png

I started work on a more complete feature set. A big one was letting people customize the ‘field mapping’, i.e. how the fields in an API response map to the fields in their Airtable table. Data Fetcher makes suggestions, e.g. an attachment field in Airtable if all the API response values are .jpg URLs, but lets users override these. This is still one of the places where Data Fetcher adds value today.

Once I’d got a second version out, that I wasn’t totally embarrassed about, I did all the stuff that I used to think was a marketing strategy. I tweeted about it, shared it in a few Airtable communities and launched on Product Hunt.

When I launched on Product Hunt, I credited API Connector and its founder, Ana, with the initial inspiration. It felt like the right thing to do and I knew I hadn’t just copied it. Ana was super supportive and we now catch up every few months. She’s even added Data Fetcher features, like cURL imports, into API Connector.

The launch went pretty well. I added a few new customers on the day and had about 10 in total after one month of being live. The total MRR was tiny (<$200), but there were some really positive signs. 

People were actually replying to my welcome email, with feature ideas and positive feedback. Someone bought an annual plan, which had never happened with my previous SaaS tool.

Now I just need to get from $200 to $10k MRR without burning through all my savings.

The Grind

At $12/ month, it was going to take 833 customers to reach $10k MRR. I was adding a couple of customers per week, so this felt like it’d take a lifetime.

Apart from improving distribution, the conventional SaaS wisdom would be to raise prices. But Data Fetcher sells to price-sensitive prosumers and I didn’t feel I could justify increasing the prices whilst the functionality was so limited.

I steadily added features, like OAuth, and fixed a lot of the bugs. When you build a tool that lets people connect to any API, the number of edge cases is wild. Early on, it was things like people trying to import 100MB of JSON and crashing my backend. Now, they’re subtler, like someone trying to import a CSV that has an empty row before the title row and messes up the field name. 

I now think of these fixes as a (small) technical moat. Someone could copy Data Fetcher’s surface-level functionality, but it’d be much harder to replicate the hundreds of edge cases that are now handled. 

I gradually increased the price successfully, first to $15/ month, then $18. Even with the price changes, the slow rate of adding customers and high churn meant MRR was hovering at around $600. 

first few months mrr.png

This meant two things: I needed to get a job and do some marketing. My two least favourite things.

I found some full-time freelance work and devoted evenings and weekends to Data Fetcher. It was lockdown in London, which gave me a bit more time to work a full-time job and a side project. But trying to balance both of these was still an absolute slog.

Marketing

I wanted to find a scalable marketing channel. People seem to overcomplicate this. I think it comes down to looking at what channels similar companies use, trying those and doubling down on any that work. This is probably too simplistic if you’re competing against multiple VC-funded competitors, but it works for a niche tool like Data Fetcher.

This channel turned out to be SEO and YouTube videos. I looked at the most common customer use cases, wrote a tutorial for the Data Fetcher blog and recorded a tutorial for our no-code YouTube channel.

It started to work! The number of views on the content was tiny, but the intent behind those views was incredibly high. For example, I had a Google Maps video with 8 views and one of those became a customer. At one point, my most popular video had 1000 views but had led to 30+ customers.

data fetcher youtube channel early videos.png

I figured out a hacky way to do this attribution. In the tutorial, I would tell people to save the request with a particular name, e.g. ‘Fetch CoinGecko Prices’ and in the video, it’d be ‘Import CoinGecko Prices’. When users become customers, I can see if they came from the blog, YouTube or neither.

Despite the success with content marketing, Data Fetcher still gets the majority (70-80%) of its customers via the Airtable marketplace. Being so early in the marketplace has clearly been a huge part of its growth. 

This was partly luck, but I was also intentionally looking for a new, low-competition platform. I did the same with my SaaS business, building something that exists for Instagram but for TikTok. I think this is a great framework for low-competition business ideas

Given most customers find it through the marketplace, I did some work to improve this funnel. I added testimonials to the marketplace listing, G2 reviews (since Airtable does not currently have marketplace reviews/ ratings) and Google Sign-in.

With some marketing and the improving product, MRR started growing! In June 2021, with MRR at about $2500, I switched from full-time freelancing to setting my own schedule and working on fixed-price projects. I now had way more time to devote to Data Fetcher and my weekends back!

mrr until july 2021.png

The other big change around this time was increasing the cheapest plan’s price from $18 to $24/ month. The big effect was that the number of support emails reduced massively. I had heard this happened with price increases but didn’t expect it to be so dramatic.

Full Time!

At the end of 2021, I wound down all remaining freelance work and went full-time! With the current growth rate and some savings in the bank I thought I could get to $5k MRR (London-ramen profitable!).

The first thing I focused on was the high churn rate (10% gross monthly and 5% net). I discovered that a lot of people cancel shortly after their scheduled runs start failing, so I addressed some of the common error messages with small new features or bug fixes.

I also learnt that a lot of my churn is unavoidable. People would churn because they had a one-time use case or moved off Airtable. This made me stop worrying about these people, and prioritise improving scheduling, which is a much stickier feature.

Data Fetcher was incredibly flexible. People were using it to connect to over 2000 different APIs. But at this point users still needed to have at least a basic understanding of APIs to use it. I wanted to make it useful for less technical people too. It was time for v2!

I added a totally new UX and pre-built integrations with popular APIs like Google Analytics, Facebook Ads etc. This allowed non-technical users to import their data into Airtable. The existing functionality became ‘Custom requests’ so was still there for all the existing users.

no-code applications list.png

It was such a radical change to the product that I needed to user test it thoroughly. I offered customers free credits and roped in friends to help test the new functionality. The surprising thing here was that it revealed some massive issues with the existing UX. I realised I should have done this months ago! 

Prioritising user testing is one of my biggest learnings of the last two years. As my designer friend bluntly put it, ‘It’s better than guessing, yes’.

I launched the new version in December 2021 and people liked it a lot. I updated all the existing YouTube videos and blog posts to reflect the new extension. The next few months were the best ever and I hit $5k MRR!

mrr up to $5k.png

Trying to build all the new integrations as well as create content around them became unmanageable. I hired two freelancer marketers to help write blog posts and record YouTube videos. I found them both by posting a job ad on Indeed, paying several applicants to do a sample piece of content and hiring the best two. The new no-code UX also meant the marketers did not need to understand APIs to do this!

Each week, I’d build a new integration and write a content brief for a tutorial about it. The freelancers then turned this brief into blog posts and YouTube videos. This worked really well. Not only was the content better than what I could produce, I only spent half a day each week reviewing the content, not 2/3 days creating it. 

Growing Pains

What did I do with all this time back? Wasted it trying to develop a monday.com app of course! 

monday.com reached out and asked me to build Data Fetcher for their app platform. I had already wanted to make Data Fetcher multi-platform and this felt like a pefect opportunity to do so. I did some research and spoke to other monday.com app developers, who said very positive things, so I went for it. 

monday.com app.png

I spent the next six weeks trying and failing to create a usable version of Data Fetcher for monday.com’s app marketplace. The critical technical issue was that it was impossible to create an equivalent app with good UX with their low API rate limits. Running a request would take 5-10 minutes to update the board.

There were lots of other issues, both technical and with their review process, throughout and I’ll write a full post-mortem here soon.

Despite this distraction, MRR kept growing over the first half of 2022. But as the number of subscribers and requests being run grew, the infrastructure slowly but surely started to run into issues. 

I outgrew my Heroku database tier twice in quick succession and spent a horrendous day migrating to another Postgres provider then back again when that Provider was even slower (shout out to Michael from pgMustard for getting me through this). A couple of weeks later, I had to fix critical issues with Redis all night until 4.30 AM. 

Code which had worked at 100 customers no longer worked at 250. I realised where I’d cut corners in the backend code and spent a few weeks just working on stability, which improved it dramatically.

Alongside these technical issues, the number of support requests started increasing. Every day, I’d deal with a handful of new support emails. Some would take a minute, some several hours.

My first instinct was to try and hire someone part-time to do support. But at least half the issues were bugs or limitations of the extension I hadn’t even considered (so couldn’t document). I was still learning so much about how I needed to improve the product. Delegating support would mean distancing myself from my best source of product ideas. Plus I could barely afford it!

To help with the low-hanging support issues, I built an admin dashboard where I can look up users by their email, reset someone their workspace’s usage, add myself to their Data Fetcher workspace etc. This has really helped and if I do eventually hire a support rep they will be able to use it too.

I also added a Calendly link where any user, free or paid, can book me for a support call. This never takes more than a couple of hours per week and people seem to love that they can speak directly to the founder. I also see bugs that people wouldn’t email about, since it basically forces me to do user testing each week.

The calls have become a valuable source of more general feedback and advice. One customer told me I tried every other tool before mine because my landing page was so bad. I redid my landing page shortly after this!

data fetcher landing page redesign.png

I launched a huge new feature, webhooks, and rewrote the entire help centre, adding more detail and examples to every page. All of a sudden, things stopped falling over and Data Fetcher started to feel much more complete. The compound effect of improving things a little each day is pretty amazing.

$10k MRR

An interview I did went to the top of Hacker News, which led to a big spike in new sign-ups and customers. I also signed my biggest ‘Enterprise’ customer to date. MRR shot up to $10k! This was the target for the end of 2022. To hit it a few months ahead of schedule was even more exciting.

It feels like a really significant milestone. After costs and taxes, my take-home pay is similar to what I’d make as a (non-FAANG) developer in London. There’s no longer an opportunity cost to running my own thing, plus massive benefits in terms of lifestyle freedom and financially if it keeps growing.

10k mrr.png

What’s next?

I want to keep things super lean and grow Data Fetcher into an ambitious lifestyle business. I look at entrepreneurship as trying to create my perfect job: make a lot of money, work on interesting things how and when I want to, and work with talented people. Oh, and no meetings!

The plan is to keep growing through more of the same: more integrations, more content and more amazing support. The new goal for this year is $150k ARR and for next year is $250k ARR. 

Longer term, I think $500k ARR is doable. It might even be the ceiling to how big this can get. If churn stays at 5% and I add 50 customers each month, things would plateau around 1000 customers or $500k ARR.

There’s obviously a massive platform risk to the business. I used to think the solution was making Data Fetcher multi-platform. Now I think being coupled to one platform could actually be an advantage. 

The reason I’ve got no big VC-backend competition in the marketplace is that the opportunity is way too small for venture capital. At the same time, I'm far enough along that no get-rich-quick indie hacker could copy Data Fetcher overnight and compete. 

I want to exploit this low-competition sweet spot for everything it’s worth and diversify the profits into index funds or even rental property. That’s my solution to the platform risk. Diversify the profits, not the product.

I also have a couple of other SaaS ideas I’d like to launch in the next few years…

You can follow my journey on Twitter.

Related Posts

How to Import Data into Airtable Without Duplicates

How to Import Data into Airtable Without Duplicates

Oct 7, 2024

Zayyad Muhammad Sani

Custom RequestsData Fetcher