How I Found My Market (and a 10% Monthly Growth Rate)

Hello! What's your background, and what are you working on?

Hi, I'm Zeke Gabrielse, and I'm a software engineer based in Dallas, TX. I've been bootstrapping Keygen, a suite of APIs for software licensing and distribution. I started my professional career as a graphic designer and then, a little over six years ago, I pivoted into software development. It kind of just happened. I've been a part of a few other business ventures in my time, some past and some present, but Keygen is my primary focus. During the day, I work remotely for a cryptocurrency exchange in California.

At its core, Keygen provides a JSON API that businesses can utilize to implement licensing into their software products. Instead of spending valuable development time building an in-house licensing system, they implement our API. Think Stripe, but for software licensing. By allowing companies to focus on their software product, as opposed to building their own licensing system (which, in my experience, grows in complexity rather quickly), they can significantly cut down on short-term development costs and long-term maintenance costs.

Today, Keygen makes around $3,000/mo in revenue, with an average 10% monthly growth rate over the last six months.


What motivated you to get started with Keygen?

You know that whole "building an in-house licensing system" thing I mentioned before? I think I did that one too many times. Over the course of my career, I've built desktop apps and on-premise software, and they always needed some sort of licensing system, be it online license key activation, cryptographic license keys, user accounts, etc. But I could never find a service for licensing that worked with the various technologies I was using at the time. Most services I found were either too "enterprisey" or built for a single language like Java or C++, or they provided a (rather sketchy) third-party installer that you had to package alongside your product.

I wasn't a fan of any of that. I was looking for something I could use for future projects, regardless of the technology I was using at the time. Something that wasn't a chore to integrate.

So what did I do? Well, I built my own licensing server, of course! And then I built another one in Rails, and one in Node, another one in PHP, and so on. Each of them with a different feature set, but just barely. Each time I built a new one, I thought to myself, "This might be a good business idea."

But I didn't act upon that thought until a little bit later on.

Not every idea works out, and that's okay.


For as long as I can remember, I had always wanted to start my own business. Some of those apps that I mentioned I had built were an attempt at doing so, but none of them really panned out the way I wanted them to. Some were great ideas but fell apart due to conflicts with co-founders or a lack of monetization, and others just plain sucked. Each of them eventually failed to generate a sustainable amount of revenue, and so I pulled the plug on them one at a time. It sucked at the time, but not every idea works out, and that's okay.

After those failures, I wanted to try something different. I kept coming back to that "licensing problem," so I figured I'd try to build my first SaaS and solve that problem. I started development in May 2016.

What went into building the initial product?

At the time, I was working a full-time job at a small startup, so I spent most of my free nights and weekends working on Keygen. The initial product wasn't fancy—it didn't even have an admin dashboard for my customers to manage their API resources. They had to do everything through the API. It was horrible, but I was just one person bootstrapping a new company, so I cut some things that I considered "non-essential" (newsflash: I was wrong on some of these!).

From start to finish, Keygen took about six months to launch the MVP. Like I mentioned at the start, I was a designer in another life before becoming a software engineer, so I handled everything myself: design, code, and copywriting. The final "MVP" had a lot of features that I wish I would have cut, and still have to support to this day, but that's okay.

Some of the things that didn't make the cut were:

  • An admin dashboard for my customers to manage their account and API resources (much to their dismay). Even changing account information and managing your subscription had to be done via the API using curl. *face palm*
  • An admin dashboard for myself. To this day, I still manage everything from Stripe and the Rails console.
  • API documentation in popular languages. Every API code example I had at the time was in curl.
  • A sandbox environment for customers to test their API integration in, e.g., live vs. test API keys.
  • Official client libraries for interacting with my API (and I still don't have this).

Technology-wise, Keygen is built with Ruby on Rails, backed by Postgres and Redis. It's proudly hosted on Heroku, with some smaller services hosted directly on AWS. I like to keep things simple so I opted for using technology that I know well, and I also chose to offload most of my devops to the great folks over at Heroku. It's well worth the additional cost at the moment.

A few things that have helped me along the way:

  • Brandur's blog, for helping me understand Postgres and how to make sure things are efficient.
  • PgBouncer, for keeping my database connections under control and healthy.
  • Sidekiq, for allowing me to offload work into background jobs.

My current cost breakdown generally looks like this:

  • Heroku: roughly $800/mo for auto-scaling servers, databases (Postgres, Redis), and a few monitoring/logging add-ons.
  • Stripe: $125/mo for payment processing, of course.
  • Cloudflare: $50/mo for service protection (DDoS, etc.), Argo, minor caching, and a few other services.
  • Intercom: $50/mo for onboarding messaging, support chat, and inbound sales.
  • AWS: $25/mo for S3 storage and a few servers here and there.

There are of course some other costs, such as Baremetrics, Apex Ping, some Google services like Gmail and Google Ads (which I would like to replace someday), etc. Overall I enjoy experimenting, so the majority of the revenue I bring in with Keygen will flow back into the company via ads and other marketing experiments, as well improving infrastructure.

How have you attracted users and grown Keygen?

After a few months of developing my MVP, I slapped together a landing page and posted it on Hacker News, Indie Hackers and Reddit to start gathering mailing list subscribers for my "launch" announcement. Over the course of the next couple of months, I worked on finishing up the MVP; this included a marketing site, extensive documentation, and of course, the licensing API. I did an invite-only beta at first, but quickly killed that idea, as no businesses wanted to use "beta" software.

I officially launched Keygen in November 2016—and I went nearly a year without a paying customer.

Even though I had a mailing list of over 300 people, had hundreds of trial sign-ups, even though I got on the front page of HN twice, and was #3 product of the day on Product Hunt, still, nobody stuck around, much less offered me feedback. Lots of radio silence. It was tough, and I considered giving up many times.

If I had listened to the popular startup advice, I should have given up. But I didn't.


But the main problem was that the people I was painstakingly going after weren't my target market—they were users from Product Hunt, Hacker News, and Reddit—tire-kickers, as a lot of us like to call them. They want to try out the hot new thing, maybe poke around a bit, then rinse (i.e., churn) and repeat with the new hotness.

Those users usually aren't prepared to open their wallet, and you shouldn't give up because of that. If I had listened to the popular startup advice, I should have given up. But I didn't. I struggled through a year of no conversions and little feedback. I struggled until I found something that had a glimmer of working.

What started working for me:

  1. Shifting my focus away from those "social" marketing channels to focusing on marketing directly to people in my target audience (i.e. businesses and developers of said businesses). In my case, this was by utilizing Google Ads, and some cold emails, to bring in people who I knew would actually pay me. Then, my next step was to, ideally, get them to talk to me through Intercom so that I could listen to their problem and sell my product.
  2. Being active and helpful in communities like Quora, Stack Overflow, and forums for popular desktop app frameworks like Electron. I've answered a lot of questions about software licensing, some which mentioned Keygen as a solution, some which didn't mention it at all.
  3. Working on my marketing site's SEO, i.e. creating pages and updating content to match specific keywords I needed to target.

What didn't work for me:

  1. Launching on popular tech hubs like PH, HN and Reddit. I'm not sure I'll categorize these as total time wasters, as it did help get the word out, but these avenues rarely resulted in sales. Rather, they resulted in a lot of wasted time spent supporting people who weren't going to convert in the first place.
  2. Buying ads on Reddit. Seriously, nearly $250 in experiments later and no conversions. These users don't like to convert, which is probably why their CPC is so low compared to other ad platforms.
  3. Buying ads on Twitter. I experimented with around the same as my Reddit experiments, over the course of around six months. I think I got maybe four to five conversions. Wasn't worth the effort for my B2B market.
  4. Sponsoring tech newsletters and podcasts. These tend to be very expensive and I didn't see a single conversion from them. Maybe I did it wrong, but at face value, it wasn't worth the investment. But now I know.
  5. Most cold emails. Since Keygen is a service which businesses look for before they start selling their product, it's tough to find these companies that don't actually exist yet. And it's even tougher to try and email existing businesses in hopes of convincing them to switch from their in-house licensing system to Keygen. Maybe I haven't found the secret sauce, but cold emails have only brought in a small number of conversions (but I still think they were valuable, as it helped me talk to people and pitch my product).

What still works:

  1. Google Ads. Over the course of my time working on Keygen, I've been experimenting with Google Ads. I have a monthly budget of around $100–500, depending on how things are going, and it nearly always results in a nice multiple on my investment. Not sure how long this will continue, but it's working right now.
  2. Providing great support and soliciting reviews on popular sites like Capterra and Siftery. I was also able to put these reviews on my homepage, which increased brand trust and has increased total conversions.
  3. Answering questions on Stack Overflow, Quora, and other communities. These still bring in a nice chunk of residual traffic each month.

What's your business model, and how have you grown your revenue?

Keygen uses the classic SaaS business model of charging monthly for service. I have a few customers on yearly plans (set up manually, upon request), but I haven't put in the effort to fully implement self-serve yearly subscriptions yet. I might do that at a later date, once I have more customers request a yearly billing option.

I spent a lot of time tweaking my pricing models in hopes of finding that "sweet spot." I couldn't ever find something that I felt comfortable with. In the beginning, I had the typical four plans, ranging from $9/mo to $99/mo, segmented on pretty much everything I could think of. But I saw that a lot of my largest customers fell into the $9/mo plan, which I really didn't like. So I raised my prices a bit, but I still wasn't happy with the spread of customers across plans.

I've continued to tweak how I segment the plans, on user count, admin count (to try and segment on company size), and also on product count (again, the more products under one account generally signals a larger company). I even experimented with segmenting based on company revenue, but that ended up being super confusing and hard to enforce.

Nowadays, my tiers are generally segmented on a few key things, which helps nudge larger customers upwards:

  1. Daily API request volume
  2. Number of licensed users
  3. Number of admin users
  4. Number of products

The tiers are priced based upon the value I provide, starting at $39/mo and up, which I haven't had many complaints about from the customers I'm trying to attract. My current pricing tiers are quite a bit higher than when I started, which has helped decrease time spent supporting needy customers and has also helped increase the quality of my customers (i.e. they don't churn as easily). It might seem weird at first, but really, listen to @patio11 and raise your prices.


In addition to raising prices and improving customer segmentation, I've also introduced some key features into Keygen which has helped grow revenue and increase my customer lifetime value:

  • Adding an admin dashboard — Really, this was so important and one of my biggest oversights at the start. I was so caught up in making this awesome little tool for developers that I didn't realize that this was single-handedly my biggest stumbling block for new customers. Requiring your customers to manage their account solely through an API is a no-go (customers also like searching their data, and it took me until late last year to finally implement search).
  • Expanding upon and improving API documentation — I've spent a considerable amount of time writing documentation, making sure each and every code example works, and that I offer code examples in as many popular languages as I can. With each new support request, I try to improve my documentation so that the next person can find the answer to that same question without having to ask.
  • Improving the onboarding experience — I mentioned it earlier, by utilizing Intercom's automated messaging, I fire off helpful tips and the like to ease new customers into the API.
  • Adding better reporting on API usage — Recently, I added charting for daily API usage to help encourage customers to upgrade to a larger tier when they see overages happen often, all self-serve. Before this, customers were kind of blind to their overall API usage, and upgrade prompts were a manual process (and rather awkward, since they were unaware of their usage and unable to see a chart for themselves).
  • Providing example applications on GitHub — These have been invaluable in helping people integrate Keygen into their products. Over the years, I've slowly stocked the company GitHub with over 20 example applications, all ranging in complexity and in various programming languages.

To fuel future growth, I'll continue to pour a good amount of money into Google Ads, which usually gives me a nice return on my investment. When it doesn't do well (some months are slower than others, it seems), I usually pause it for a bit and try to focus on other marketing channels. I'd also like to experiment with better outbound sales, and I'm not sure I'm the guy for that job (introvert, checking in), so I'll likely look for a consultant when that time comes.

What are your goals for the future?

My main goal, like many other indie hackers, is to eventually go full-time on Keygen. To do that, I'll need to continue to grow the company until it can financially provide for my wife and me, and our new daughter. Whether I'll want to continue to grow Keygen into a bigger company is still up in the air; right now, I'm quite married to the idea of staying a solo founder and molding Keygen into a nice lifestyle business. But, we'll see where the future takes things.

For 2019, I have a few notable things that I'd like to introduce in the interest of driving growth, such as:

  • Better tooling for offline licensing (this is really a must-have for larger customers)
  • Official client libraries in popular languages
  • Ready-to-go integrations with Stripe for a server-free product checkout and licensing system
  • Out-of-the-box support for a few complex, yet highly requested, licensing models
  • On-premise offerings for Keygen's APIs for larger customers

I'd also really like to increase organic traffic by improving my SEO so that I can decrease my monthly ad budget. But I haven't decided on how to tackle that one yet.

What are the biggest challenges you've faced and obstacles you've overcome? If you had to start over, what would you do differently?

Building a business is not easy. I've almost given up on my bootstrapping adventures many times. I mean, going eight months with zero paying customers was incredibly hard, but I learned so much about what not to do, and so much about what I needed to do. I was oblivious to some really major roadblocks and it took some time for me to see that.

The people who say that this stuff is easy are lying to you.


Just because you don't see explosive growth/traction at first doesn't always mean the market isn't there. Rather, it might just be signaling that you need to try something different. The people who say that this stuff is easy are lying to you; a lot of popular founder stories are highly romanticized—they want to come off like they made all of the right choices, skipping over all of the hardship and mistakes that come with building a business—but the truth is it's hard. Yes, sometimes founders seem to get "lucky." But I think they are the exception, even though they seem like the norm.

Personally, I'm a firm believer that there is no secret sauce to growing a business. It's all trial and error.

And like many other founders, I also struggled with high churn in the beginning. I've been able to improve churn by focusing on providing great support and by improving the onboarding experience using Intercom (which I've mentioned above). Some other things that have worked well:

  • Providing (and advertising!) extended trial options — I will usually require the customer to input a payment method, and then I'll extend their trial while they're in the development phase. The extension is usually anywhere from 30 days to 3 months, depending on the customer, their product, and their perceived roadmap. I advertise this on my pricing page, and also during the initial onboarding flow. Customers who obtain an extended trial are >50% more likely to convert to paying customers than those who don't.
  • Going the extra mile and providing customers with integration help, even if that means writing some code on — This has really helped improve customer retention. Thanks to the nature of how software licensing works, the risk of churn reduces after a product has integrated Keygen and launched, so I try to make the integration process as quick as possible. I don't do this for everyone, but if they're a high-value customer, I'm always there to help.

If I were given the chance to start over, I would do a few things differently:

  • Cut down on my feature-set and only release the absolute bare minimum — A lot of my feature bloat still haunts me to this day, being underused and adding additional complexity to the product. But, being an API service, I can't remove those features without breaking existing integrations, so I have to wait until a future v2 release. And even then, I'll likely still have to support the legacy v1 feature-set.
  • Skip the "beta" tag when first launching — Businesses want to feel confident knowing your product works, not that they're a playtester for vaporware.
  • Launch with an admin dashboard that customers can use to manage their account. *2x face palm*
  • Not waste money on Reddit and Twitter ads, nor on sponsoring newsletters and podcasts.

But then again, I learned a lot from my mistakes, so I do think there's some value there.

Have you found anything particularly helpful or advantageous?

One of the biggest advantages I think I had early on was that I was building Keygen for myself, and dog-fooding it in a few products I was working on at the time. I knew what I needed, and so I figured others would need the same.

There is no secret sauce to growing a business. It's all trial and error.


I also paid close attention to making sure my API was a delight to work with. All of my competitors at the time had largely inconsistent XML/JSON responses, or they used legacy technology such as SOAP, which is very challenging to integrate into the more popular programming languages of today. I tried my best to make things as intuitive as possible, and I think I've succeeded there, according to my customers.

Some other things which I think were advantageous:

  • Practicing good testing habits — I have 100% integration test coverage for Keygen (unit tests, not so much), which lets me move fast and release quickly without losing any sleep along the way.
  • Having a design background, giving me the freedom to brand myself and move quickly without breaking the bank.
  • Spending time writing good, clear, developer documentation (so. much. time.).
  • Being a part of a community of other founders.

Let me stress that last point a bit: it's incredibly valuable to have other founders to talk to about problems you're seeing, and just to be a fly on the wall during other conversations that are had with people that are further along than you.

Around the time I launched Keygen, I was able to befriend Clifford Oravec, who introduced me to a small Slack community of other founders that he had started. They helped me, many times, get out of ruts and hardships over the course of running my business. If you haven't already, I highly recommend that you check out Clifford's series, The Epic Guide to Bootstrapping a SaaS Startup from Scratch—By Yourself.


What's your advice for indie hackers who are just starting out?

Don't give up too early, and focus on the right marketing channels. I see this a lot, and it makes me sad. Yes, sometimes the idea sucks (and you know it), but that's not always the case. Sometimes it's you. I also wouldn't put so much focus on the "perfect launch" on PH and HN. It's highly unlikely that they are your target audience, and it's even more unlikely that they will open up their wallets to you.

If you can afford it, be okay with a little bit of experimentation, even if it costs a bit to do so. Try to talk to your customers as much as possible and learn what they're looking for, what their roadblocks are. If you're anything like me (i.e. you have your founder-blinders on), what they say might surprise you.

Some helpful business-related books that I've enjoyed recently:

And if you're a science-fiction buff like me, here's a bonus list for those nights where you just need to unwind:

Where can we go to learn more?

You can learn more about Keygen at You can also follow me and Keygen on Twitter: @ezekgabrielse and @keygen_sh. If you have any questions, please don't hesitate to ask in the comments!

Zeke Gabrielse , Founder of Keygen

Want to build your own business like Keygen?

You should join the Indie Hackers community! 🤗

We're a few thousand founders helping each other build profitable businesses and side projects. Come share what you're working on and get feedback from your peers.

Not ready to get started on your product yet? No problem. The community is a great place to meet people, learn, and get your feet wet. Feel free to just browse!

Courtland Allen , Indie Hackers founder

  1. 2

    Great interview! It's helpful to see a startup story that is not romanticized. You're right about that. Wondering how you feel about Facebook groups (and ads) if that's where your target market hangs out.

    1. 1

      Thanks for the kind words! I don't have too much experience with FB ads or groups, but if that's how you get to your target market, by all means pursue those routes! Always go where your market is.

      1. 1

        Thanks for your reply!

  2. 2

    If you are spending $800 dollars a month for your servers and you have $3000 in revenue , you are doing something wrong. You can't possible have that much data needs, with the volume of your sales.

    1. 4

      That's not entirely true. You're coming at this as if your time is worth $0. I spend $320/mo on 100% managed data stores ($200 Postgres, $120 Redis), around $200–400 on managed, auto-scaling standard-tier dynos depending on monthly volume, $300 on logging and monitoring. My infrastructure needs to be able to support large bursts of traffic while maintaining uptime and performance. I have some customers that send tens of thousands of API requests per day to license their software.

      With all of that, I spend maybe 3 hours a month on ops work and maintenance. Deployments take seconds. Tuning servers and things can be done from my phone when needed. My business quite literally runs itself.

      Sure, I could cut costs and not use Heroku and move to AWS, but then I'd need to spend my time on ops — server maintenance, database maintenance, etc. I'd rather focus my efforts on growing the company through good support and sales every morning instead of ops. I also have a full-time gig, thus limited time to worry about infrastructure problems and those types of things.

      I can optimize this later. Right now, it works.

  3. 2

    Great post! Love to hear the non-overnight-success perspective :). Product and site design look great as well. Would have loved this back when I was building desktop apps.

    1. 1

      Thanks for the kind words!

  4. 2

    I've been following Zeke for a while on Twitter. Glad to read his interview! Probably one of the most interesting I've read (partly because I'm also into B2B). Thanks for sharing!

    1. 1

      Thanks! I'm stoked you thought it was interesting. I was sitting here hoping it wasn't too long.

  5. 2

    Congrats on your story Zeke! I have a question for you. I've read a lot "talk to your customers" and "hear your customers" but I haven't found the easy way. How do you actually communicated with your first paying customers? Did you just put a contact form? Or did you chase them through any other platform to get their feedback? Thanks!

    1. 1

      Thanks! I think there are a few things here.

      1. You need to find out who your customers are. I target B2B software companies who need to license their software to other businesses, likely in the development stages of their product.
      2. You should use that knowledge to bring in relevant traffic to your marketing site. E.g. I use targeted ads to bring in those software businesses who are in-development.
      3. Have a way of communicating with potential customers and current customers that isn't just email. I use Intercom for this. For leads: on key marketing pages, I have a chat request to start the conversation about buying. For current customers: I have Intercom messages pop up to onboard them, and small messages here and there reaching out to see how integration is going and if they are stuck on anything. They know they can talk to me if they need help, because I try to keep that communication line open.

      And lastly, there is no "easy way." You'll need to put in the work to see a pay off.

      Hope that helps!

  6. 2

    So how do we get an invite to that slack community? :)

  7. 2

    Been following @ezekg for a while, great idea and well implemented!

    1. 1

      Thanks a lot! I've also been following you and ReadonlyREST for awhile. 🙌

  8. 2

    Zeke - great post and very helpful. Just one thing that I'd comment on - consistency in marketing. You mention that you do turn off SEM for some time to focus on other marketing channels. I'd strongly recommend, consistent presence in each channel. As a marketing professional, I can tell you that consistency in maintaining awareness is key to success - whether it be a new player or an existing brand. You may be less/ more aggressive in spend at certain times of the year but it is important to maintain year round presence.

    1. 1

      Great tip, thanks! I'll definitely try to maintain some sort of spend throughout the year regardless of performance.

  9. 1

    This question is just to wrap my head around your product. Would an example use case be like when Alfred (the productivity app) prompts you for a license in order to unlock the full features? Alfred the company would be your customer correct?

    1. 2

      Yep, that is correct! Alfred would utilize our licensing API to handle license validation and things like that.

      1. 1

        nice, ok, thank you!

  10. 1

    Love the idea, love the design, love your progress! way to go, @ezekg!

    Btw, any chance to see your dashboard from the inside? any demo? video?

    1. 1

      Appreciate it! No demo yet, but feel free to sign up for a free trial if you want to explore.

  11. 1

    Which Ruby on rails courses you took and recommend us to begin with? So that we too start building

    1. 1

      I've been using Ruby my entire career, so I didn't learn via a course. But is a great resource if you want to learn Rails.

  12. 1

    This comment was deleted a year ago.

  13. 2

    This comment was deleted 10 months ago.