Unfortunately, the answer isn't immediately obvious because they all use different pricing metric.
Some limit your daily active users, others limit your maximum simultanious connections, still others limit data usage! Still others don't release their pricing... looking at you Layer and SendBird!
To break down this problem first we need to study and understand the various metrics that are in play.
Daily Active Users (DAU)
When a user logs in to your app, they are counted as 1 daily active user. Imagine a user logs in to your app at 00:01 they will count as an active user for that day even if they logout before sending any messages. Then at 00:00 the next day, the count is reset again.
Monthly Active User (MAU)
A monthly active user is similar to a daily active user however, the count is reset once per month rather than every day.
The number of messages that can be sent in one month
This is the data usage from the messages you're sending. Messsages are small so per-message this will be tiny but with a large volume of messages it can add up. Usually data transfer is measured in Gigabytes (GB) per month
A connection limit specifies how many devices can connect to the server simultaniously. Usually, the connection starts when the user logs in and ends when they minimise the app.
Now that we know the main parameters we need to find a way to compare the services. To do this we need a way to convert between parameters.
For this analysis I decided to choose data transfer as the benchmark. So to compare the services, we need a way to convert every parameter into a monthly data usage figure.
Messages -> Data Usage
This conversion is easy, each character in the message is represented by one byte so we can estimate the average data needed for a message to be around 100 bytes i.e. about 100 characters.
Obviously some messages will be longer, but there will also be a lot of very short messages like "yes".
1 Message = 100bytes = 0.0000001 GB
MAU -> Data Usage
For this calculation we need to estimate how many messages a user will send per month. There will be a small percentage of very heavy users and a lot of users who download the app and only ever log in once.
- 20% of users will send over 1000 messages
- 80% of users will send fewer than 100 messages
A reasonble estimate would be 250 messages per user per month.
1 MAU = 250 Messages = 0.000025 GB
DAU -> Data Usage
As mentioned previously, there will be a small number of users who log in every day and most users will only log in a couple of times per month.
On average the number of monthly active users is about 5 - 10 times larger than the number of daily active users.
1 DAU = 7.5 MAU = 0.0001875 GB
Usually a user will only use the app for a short amount of time per session. They open the app, type a message and close it again. If the average user uses the app for about 15 minute per day, 1 connection can support around 100 users.
1 Connection = 100 DAU = 0.01875 GB
Obviously these are just assumptions and will vary between apps. Some apps may have a higher level of user engagement. You should try to tailor these figures for your own app if possible.
Now that we have a way of converting between parameters, we can start to compare the services.
To help I made a spreadsheet which includes these parameters and a comparison of all the major services. You can get a copy of the document here:
If you want to modify the parameter values, you can export the spreadsheet from Google Docs by clicking File -> Download As
Free tier winner
- Firebase: 10k DAU
- Pusher: 3.2k DAU
- QuickBlox: 2.6k DAU
- Applozic: 133 DAU
- PubNub: 100 DAU
Price per GB
- Firebase: $1.25 / GB
- Pusher: $8.32 / GB
- QuickBlox: $56.00 / GB
- Applozic: $158.40 / GB
- PubNub: $213.07 / GB
Interestingly, the order is exactly the same for both categories. It's also doesn't change significantly if we change the assumptions.
If we reduce the DAU / Connection by half, Firebase still comes out on top for the free plan.
If we dial the message size up to 500 bytes and the messages per MAU to 1000 Firebase still wins!
I don't know why there's such a huge disparity between the pricing but I assume that Firebase is cheaper because they can take advantage of Google's scale.
Just because one service is cheaper, it doesn't necessarily mean that it's better!
Different services may have different levels of performance and some may be easier to develop for than others.
It's worth looking at the documention and review for each service carefully before deciding.
Assumptions part II
If you notice a flaw in any of these calculations please write a comment and I'll update the spreadsheet!
Companies that don't release their pricing
I think that for the sake of transparency, companies should release their pricing.
You have to ask, why would a company not release their pricing? The obvious answer is that they feel that they can sell more effectively on a case-by-case basis. They want to convince you with their sales talk and features.
But it also means that they feel that they can't compete directly on price.
Here's a comment from a Reddit user:
I was using Layer (www.layer.com), but their monthly plans just went up drastically, and it would break the bank for me to stay with them. Can anyone recommend any other Chat SDKs? It doesn't have to be free, just not $600/month.
Now imagine how much they spent on integrating Layer with their service!
I think you should think very carefully before going with a company who don't release their pricing.