In the last few weeks we worked hard to grow our 48h challenge into a real product. It’s still a Slack paywall, and now it has a name, a website and… a first CLIENT!
Once we decided on a name (InviteRobot — because we like robots, and this one invites you. I know, riiight?!), our first focus was to validate if the idea was worth spending more time on it.
Here’s how we signed our first client.
Building a landing page
You need some place to redirect people to, that’s how Internet works. So we built a minimal landing page on inviterobot.com, explaining the paywall concept.
We don’t have any feature list nor fancy design. We just tried to describe the pain a Slack community admin would face, and how we propose to solve it.
As we were planning to explain our concept over Skype to our prospects, we added a demo page1 on which one can try the live widget. It’s plugged to a demo Slack community, and in about 10 seconds anyone understands what this is all about.
Sniping our prospects
Instead of trying to reach out to all Slack communities (there are a lot out there!), we focused on the ones who could become a customer.
For that, we needed to define what our ideal early customer is. He/she is:
- already running a public Slack community,
- already charging a fee to access the Slack team. Better if he does so using Stripe, as there’s less friction to change.
There are lots of directories of public Slack teams, so we sifted through them, listed the ones charging a fee, and checked how they are charging money.
Turns out, one of the most famous solution to automatically invite people to Slack after charging them is Typeform. It’s based on a clever hack popularized by #nomads founder, Pieter Levels.
Fortunately for us, this is also one of the worst way to charge money:
Stripe’s UI wins any day.
Our first targets were 7 communities using Typeform as their invite tool.
We contacted them by email if we could, or else Twitter. Twitter is probably not the best channel for that. Old school emails worked better for us. Not everyone replied, but that’s ok, we were said you shouldn’t take that personally.
The 2 most important feedbacks we had were:
one community admin asked for PayPal, as he’s not living in a country currently supported by Stripe. Good point, and this is already part of our backlog, but not now.
at least 2 communities wanted to charge recurring membership fees. Remotive.io in particular was precisely researching this topic. They were charging $29 for a lifetime access to their Slack community, and were looking to switch to a recurring $29 / year by September.
Bingo, that’s also part of our backlog, and we believe there’s lots of value in that. We told them we would do it, and will contact them by end of August.
Following Remotive’s enthusiast feedback, we doubled down on the product.
Objective: onboard Remotive as our first customer.
Adding recurring fees
First things first: Stripe requires SSL to process live payments. So if we ever wanted to get a first customer, we had to find how to get and install an SSL cert. Turns out Let’s Encrypt now exists, as well as awesome projects like Sabayon which automates the install and renewal of the cert on Heroku. 💪
Adding an option to automatically renew payments every month / year was pretty straightforward2. That might seem complex if you’re new to it, but Stripe really did a great job with their APIs and docs.
Here’s how you set up a recurring fee for your Slack community in InviteRobot. You can choose to automatically bill every year or month — or only charge a single payment and give a lifetime access!
Also, don’t forget to add metadata to all your Stripe objects. You’ll thank yourself when debugging transactions.
Slack edge cases
Slack provides an undocumented
users.admin.invite API. It’s not secret, as it’s a well-known API. It’s just undocumented, which means they don’t officially support it3, and its interface might change.
This made it a bit more difficult than expected to debug some edge cases, like:
- a member try to pay while being already part of the team,
- a member has already been invited to the team, but did not accept the invitation,
- a member has been kicked out from the team
Closing the first deal 🤑
No, it’s not really about the money at that point. It’s about proving we’re delivering some value, enough that someone is willing to pay for it.
And Remotive wanted to pay us.
At that point, we’re supposed to take all the money potential customers are willing to give us. One part of the money comes from a cut we take on each transaction. This is handled automatically by Stripe Connect, which we use to securely transfer money to our customers’ accounts.
The rest of the money usually comes from a monthly fee we would charge to provide the service. But as we were racing to build what was required to close a first client, we did not spend any time building a monthly payment system. I know there are apps dedicated to do just that, but we didn’t spend any time researching them neither. The result is, our first client got a pretty nice deal 😅.
As I said, it’s not about the money (yet). We need to move fast, close a first customer, and give them our absolute best support.
48h and 2 months later
Also: we’re on the path to be profitable on the first month. We keep our own costs to a minimum:
- app hosting: $7 / m (Heroku)
- web hosting: free (GitHub Pages)
- SSL certificate: free (Let’s Encrypt)
- .com: $30 / year (Namecheap)
Now we need to spend time on getting more clients onboard, which probably means Marketing 👻.
Btw, you should contact us if you need help making money with your Slack community.
- Because of some live/test keys issue, the demo is hosted on a free heroku, which takes up to 15s to wake up from sleep. Apologies if you try it out.
- Once you understand that a
Subscriptionis automatically created when you assign a
Customer, and that each
Subscription’s creation or renewal creates an new
Charge— which itself creates a new
Invoice— then you’re good to go.
- A not-so-fun fact is, as we’re using an undocumented and unsupported method, Slack support told us that “it will prevent you from listing your app in the directory”.