How I've Built a Profitable Slack Bot as a Side Project in Rails

I’ve built a Slack bot in Ruby on Rails and it is profitable. In this blog post I will describe what I did and tools I used to create, promote and monetize a simple SAAS product.

Working professionally as a web developer you usually deal with huge projects containing tons of business logic. It is virtually impossible to create something similarly complex in your free time without going full indie.

I wanted to build something simple but still capable of providing real value to the users.

Purpose and origin

Abot allows you to send anonymous messages to channels and other members of your Slack team. Whoever receives a message can reply to the author without knowing who he is. It basically enables you to talk with your teammates, without knowing who you are talking to.

I came up with an idea after having to participate in yet another endless company meeting. I had a feeling that everybody knew that it was a waste of our time but no one wanted to be the first to tell it.

Abot in action

Costs of running

Server infrastructure

So far over 400 Slack teams registered, totaling to over 50k users. Even the most active teams send at most dozens of messages daily so server load is minimal. I managed to squeeze both web server and background worker processes on a single $10/month Digital Ocean VPS.

Payment provider

I use Paddle as my payment provider. I started with Braintree Payments but had legal problems due to some polish tax laws.

Paddle takes a 5% + 0.50$ cut per sale, but handles taxing as well, so for me that’s more than worth it. With Braintree I had to take care of invoicing and taxes myself.

It also offers a flawless checkout process and is very simple to implement programmatically. Just a couple lines of JavaScript and one HTTP webhook handler.

Paddle checkout process

Domain

Abot is located on abot.apki.io . It shares one root domain with a bunch of my other apps:

Other paid services that Abot depends on

Abot logo is just an icon from Icons8. I have to pay $19.90/month for a license, but I use more icons for my other commercial apps as well.

Same with Grammarly. I use it to correct my blog posts and all my apps. Disclaimer: I am participating in Grammarly affiliate program, but I would recommend it anyway.

Devoting tens of hours of work to create a project and end up with a bunch of grammar errors and typos on a landing page is something to be avoided.

Marketing and promotion

For a long time, the only source of signups was an official Slack app directory.

Only recently I’ve started looking into establishing new sources of users. I have to admit I have not been properly tracking visitor and signups sources so I can only assume which of the techniques I mention have the best effect.

Google organic traffic

I’ve optimized the Abot landing page SEO for a couple of keywords, but currently, there are only a few daily visitors from organic search results.

Cross promotion

This blog generates decent traffic of a couple thousands daily visitors. I’ve decided to leverage it for Abot promotion. I write mostly technical posts so they are a good occasion to mention Abot:

Backlinks without a nofollow attribute are also a proven way to improve a target website SEO, but I am not sure if multiple links from the same domain have an increasing effect.

I had mixed feelings about putting too much advertisement on my blog but a little link won’t hurt anyone I suppose. I can promise there will never be a fullscreen subscription popup here.

“Spamming” discussions

It is also something I’ve started doing only recently. Whenever I encounter a discussion where it makes sense to submit a link to the Abot landing page then I do it. It could be a Reddit thread or an Indie Hackers discussion.

Obviously, I try not to be spammy, just let people know that the project exists when a discussion context is relevant.

An example Abot mention in an Indie Hackers discussion

Contrary to my own backlinks, links in comments always have a nofollow attribute so they do not improve SEO rating directly.

Motivation

I know that some startups have fancy screens in their offices displaying live stats about current product usage. I have my Slack notifications:

A daily dose of motivation

I started using them as a way to debug scheduled tasks and make sure that things work correctly. I usually disable most of them after some time.

It is always nice to know instantly whenever someone made a purchase or another ten new signups have been made. It has been a good way to keep me motivated to come back to developing the project after hours, even after a long day at work.

Purchase reminders

Purchase reminders from the above image is a feature which turned out to convert to sales reasonably well. Whenever someone tries to use Abot after the trial period, he and the user who did setup the integration receive a friendly Slack message asking them to make a purchase. After 2 days founder gets one more message reminding about Abot.

Teams can disable it at any time just by removing the integration.

Purchase reminder in action

Current income

I will not disclose an exact number. I will only say it has been a couple hundred $$ in the last month. Currently, the number of new signups and paying teams is steadily growing.

Together with minimal infrastructure costs, I mentioned it brings in a nice passive income every month with close to none maintenance needed.

To the contrary, my previous Slack bot Tracky (no longer maintained) grossed a whopping total of $324 throughout his entire ~3 years long lifespan. Its operating costs were over $20/month, so it was a net loss for me.

Tracky was not the most profitable app I've made.

Future plans

Privacy and terms

Since I started working on this project, users privacy and data have been a top priority for me. With new GDPR laws going live soon, I will have to work on adjusting the privacy terms and how I handle data to the new regulations.

New features

I know that for some teams a tool enabling everyone to send untrackable anonymous messages could be too much of a sharp knife. I am just finishing a new feature, a way for Slack team admins to optionally limit how Abot can be used.

It will be a settings panel where admins can whitelist channels for Abot usage, or optionally disable direct anonymous messages.

[Update]These settings have already been added to Abot.

This idea came from one of Abot clients:

We use Abot with a separate Slack channel for anonymously shaming employees into keeping their work area clean. Those shamed need to bring in donuts! Since donuts are on the line, it encourages people to participate. And it’s just fun to try and guess who shamed who.

A happy Abot user

Summary

I have to admit that I am a bit addicted to creating side projects. For the last couple of years, I was avoiding working full-time professionally to have more time for them without going full no-life.

Being able to monetize a side project and receiving a positive feedback from happy users is a great feeling. It took me over 3 years of regularly working on my own stuff after hours to reach a stage where there is some actual profit from it.

I hope to grow Abot user base in the following months. There might be more teams out there that could use some anonymous honesty.