A person sleeps with an ignored fishing pole at their feet and a hat over their face.
This would be a better attitude for Slack invites than what I did.

Do you sell an online product? Or do you want to?

Have you considered some sort of an online presence for the buyers, to let them talk to each other? It seems like a really good idea. If a lot of people are trying to learn the same thing, letting them talk to each other could be amazing. I know I get some wonderful buyers of Rebuilding Rails and Mastering Software Technique. And I’m an old-fashioned geek. I always want to throw a party to get all my friends into the same room so they can meet each other.

My idol on this one is Nate Berkopec. In addition to being a great conversationalist, he sells the definitive ebook on Rails performance and runs multi-day workshops about it too. But if you buy the ebook, you get an invitation to the Slack workspace. And the Slack alone is worth the price of the book, because anybody who is anybody in Ruby performance hangs out there. They’re not all talking, but they’re available for questions.

His book is good. But it still pales in comparison to having everybody who’s interested in the topic centered in one place. There’s simply no way Nate could give you as much value as everybody else put together… So he doesn’t. He invites you to a group of everybody else put together. It’s a really good idea.

So I’ve sold you on it, right? It’s simple. Make a Slack workspace, all the cool people will hang out there, everybody will buy your product to get access and you can retire to Bermuda.

Not quite that easy, no.

It turns out there are some difficulties.

The Wrong Simple Logistics

Inviting buyers of a product into your Slack workspace is harder to automate than you might think. Standard automation tools like Zapier can do things with Slack, but they won’t invite users for you. Slack’s current API doesn’t even have an operation for it.

I tried the worse way first.


The worse way is Slack’s old API. It can invite new users, but it’s a giant mass of deprecation warnings. Slack is going to stop giving out API keys for that API completely on 5th May, 2020. And they warn that at some point this will stop working completely.

So if you do this, keep in mind that in the near future you may be doing it by hand. At least until the outside world figures out a new semi-approved workaround.

Once you’ve gotten your token (before May 5th!), the actual code is pretty simple. Here’s a trivial example:

require 'rest-client'
require 'json'

TOKEN = 'xoxp-00000000000-0000000000-0000000-not-my-real-token-000000000'

def invite_slack_user(slack_prefix, user_email)
  response = RestClient.post "https://#{slack_prefix}.slack.com/api/users.admin.invite", { "token" => TOKEN, "email" => user_email, "set_active" => "true" }
  json_result = JSON.parse(response.body)
  return true if json_result["ok"]
  STDERR.puts "Unsuccessful JSON response to inviting #{user_email.inspect}: #{response.body.inspect}"
  raise "Fail on error for this example!"

# Software Technique is the name of my Slack. It's at software-technique.slack.com. Use your own Slack workspace name as the first parameter.
invite_slack_user("software-technique", "customer.email@gmail.com")

So that part isn’t hard. If the result field “ok” isn’t true then there will be a field called “error” with a human-readable error. It may say that the person is already invited, for instance. Or it may say that the invitation limit has been reached.

Slack and Invitation Limits

Did you know Slack had invitation limits? I didn’t. But now I do!

I can see how a spammer might want to make a Slack and invite a lot of people as a way of trying to advertise something (ugh.) And Slack would need some kind of countermeasures. And apparently the way I created my Slack convinced them that I might be a spammer. Argh!

Specifically, I invited a whole lot of people and it took awhile for any of them to accept my invitation. Which does sound kind of spammy. I can’t really fault them.

Of course, I also did something really stupid that made it much, much worse.

So: Slack doesn’t have limits (that I know of) on the total number of invitations. But if you send out too many that aren’t accepted, it assumes you’re a spammer. And it tells you that just withdrawing old invitations won’t help. You have to wait for folks to accept.

Let’s say that you decide to run a script to invite a large group, perhaps many years of previous buyers. DO NOT DO IT IN CHRONOLOGICAL ORDER. The opposite would be far more sensible. Then your most recent and engaged buyers would get the first invitations. And they’re far more likely to accept. If you invite a huge batch of people from many years ago, they are quite likely to not recognise you and not accept your invitations. This will make you look like a spammer to Slack, which isn’t what anybody wants. And you can’t easily fix the problem because withdrawing invitations won’t work.

You may wind up with a far more exclusive little club than you meant to.

If you use an API invitation instead of a link, it’s a very good idea to make people opt into their Slack invitation somehow. Chris Ferdinandi, for instance, uses a URL they have to go to, enter their email address, and then they get a Slack invitation. That means they’ll usually accept it, which means you won’t trigger the spam protection. He also verifies that the email address comes from an actual customer, which keeps other folks from using his form for spamming.

What’s the actual limit? Good question. I had invited around a hundred people with under a quarter of that accepting and I hit the limit. I had a few of them accept later… and it didn’t seem to give more invitations. It’s possible that once you hit the limit you’re pretty much doomed and that I’ll need to create a new Slack workspace after this. I’m mostly using the other, better way of adding users now… But if I wanted to use this API, it’s likely I’d need to delete the whole workspace at this point and recreate it. (Slack support also says they can’t lift that limit.)

In any case, you don’t want to do bulk imports. And you don’t want to invite a lot of people who are unlikely to say yes. Learn from my mistake 😞 For those cases you’re better off sending an invitation link instead.

I’d recommend trying hard to not hit the limit. But there is another method.

A Better Method - Invitation Links

If you have a big block of people to invite, you should generate a Slack invitation link. You can do this from the “invite people” link, from your workspace in the desktop client. You may have to scroll down in a window that (to me) doesn’t look like it scrolls. They’ll have to click it within 30 days, but that’s likely fine.

It has the enormous advantage that it’s opt-in since they have to click on the link. That means no invitation limits!

It has the disadvantage that you can only have one link at once and it has an expiration date. So if you wanted to, say, invite all your buyers into a Slack you’d have to cancel the link, generate a new link and update whatever auto-send feature you were using. Also, any time you do this, recent buyers will no longer have a valid link. Oops?


If the Slack is so valuable, can you charge for it?

I wouldn’t ever charge a recurring fee for a Slack-type community if I were you.

More specifically, it’s hard to convince people to join and keep paying if it “feels” social. Even variations on this like Ramit’s Brain Trust (now shut down), which added interviews around the basic “community” idea, have a really hard time charging for access to a community. It’s not impossible, but it’s a very hard gig. And it means you can’t easily use highly-engaged-but-poor folks to keep your community humming along.

You’d like something to always feel like it’s going on. Questions should be asked, or live events should happen, or there should be a discussion. One reason Nate’s Slack is so amazing is that people are constantly asking and answering Ruby performance questions. You’ll need some equivalent of that.

Charging month-to-month means that you’ll have a much harder slog. You’ll need enough paying customers to help you carry that load, which makes them harder to find and keep. There are folks who make it work, usually by selling it as part of a different subscription service. But it doesn’t seem to be easy.

Also, folks often notice if they’re carrying all the weight of what you are selling. So your most valuable people will be constantly thinking, “but wouldn’t it be better if I turned this into a blog or something for myself instead?”

What To Do

There are two different cases, to be handled in two different ways.

If you have people who will “drip” in as they buy, you may want to use the API invitation method. That will avoid having to rotate invitation links. You’d be even better served by using Chris Ferdinandi’s method (mentioned above) for opt-in. Or you could generate a new invitation link periodically and make sure you’re sending out a recent one.

If you already have a product, with existing customers, you should send out an invitation link to them.

Oh No, I Hit the Limit!

I haven’t found that waiting does me much good, even with some number of folks accepting and engaging with my Slack community. However, a Quora question mentions that you can email feedback@slack.com. I did. They couldn’t lift the limit, but they can recommend the same methods I mention here.