Yes, Firebase push notifications are free. Firebase lists Cloud Messaging (FCM) as "no-cost" on both its free Spark plan and its paid Blaze plan. Google charges nothing per message, and there is no monthly limit on how many you send. Apple's push service (APNs) is free to send through too. So why do OneSignal, Pusher and others charge? Because sending is free, and everything around sending is not.
What is free
| Cost | |
|---|---|
| FCM messages to Android, iOS and web | Free, unlimited |
| APNs messages to iPhones | Free (needs the Apple Developer Program, which any iOS app has) |
| Web push through browsers' push services | Free |
| Topics and topic subscriptions on FCM | Free |
FCM quotas and rate limits (HTTP v1)
Sending is free, but not unlimited in speed. These are Firebase's documented limits:
| Limit | Value |
|---|---|
| Messages per project | 600,000 a minute, counted per message, not per request |
| Over a quota |
429 with error code QUOTA_EXCEEDED, for the project, one device or a topic |
| Messages to one Android device | 240 a minute and 5,000 an hour |
| Collapsible messages to one device | A burst of 20, then 1 every 3 minutes; extras are delayed, not dropped |
| Payload | 4 KB per message |
Client errors (400 to 499, except 429) count against the quota, so a list full of dead tokens uses it up faster. The minute is not aligned to the clock, so a retry at :00 can still fail. Firebase asks for exponential backoff starting at no less than 1 minute for messages rejected with 429.
Raising it: in Google Cloud Console, open Quotas and system limits for the Firebase Cloud Messaging API and edit Send requests per minute. Google considers up to 25% more once usage sits at 80% of the quota for at least 5 minutes a day with client errors under 5%. For a launch or a sale, ask Firebase Support for a temporary increase at least 15 days ahead (30 days above 18 million a minute), at most twice a year.
Other limits worth knowing:
- Topics: fan-out to large topics is not instant; plan for minutes, not seconds, on very large sends.
- No delivery guarantee: FCM accepting a message does not mean the phone showed it. See why FCM notifications are not received.
What is not free: the server around it
FCM delivers to a token. Everything else is yours to build and run:
- A database of tokens per user, updated when a token changes, a user reinstalls or signs in on another phone.
- Sending logic: one user to many devices, lists of users, topics, everyone.
- Scheduling and time zones.
-
Cleanup: deleting tokens FCM reports as
UNREGISTERED, or every send gets slower and every count wrong. - A screen for non-developers who write offers and reminders.
- Delivery logs to answer "did my user get it".
- Credentials: HTTP v1 needs a service account and short-lived tokens. See the FCM HTTP v1 migration.
That work is what paid push services sell.
What that costs to buy
| Service | Free | Paid |
|---|---|---|
| FCM directly | Unlimited, you build the server | Your own servers and time |
| Expo push | Unlimited, Expo apps only | Free |
| OneSignal | Mobile push up to 1,000 users | $19 a month plus $0.012 a user |
| Pusher Beams | 1,000 devices | $29 a month for 10,000 |
| SignOps | 1,000 devices | Rs 499 a month for 5,000, then Rs 0.20 a device |
The short answer
If you have a backend and one app, FCM directly is free and fine. When you need users across devices, topics, scheduling, a composer for your team or delivery logs, you either build that server or pay for one. SignOps Push is that server, with your own Firebase and Apple keys, free for 1,000 devices.
FAQ
Is Firebase Cloud Messaging free?
Yes. Firebase lists Cloud Messaging as no-cost on both the free Spark plan and the pay-as-you-go Blaze plan. There is no charge per message and no monthly cap.
What is the FCM free limit?
There is no message limit. There is a rate quota of 600,000 messages a minute per Firebase project by default, which Google can raise for projects that need more.
What is the FCM HTTP v1 quota?
600,000 messages a minute per project, counted in messages, not requests. Past it the API answers 429 QUOTA_EXCEEDED; retry with backoff starting at 1 minute. One Android device takes up to 240 messages a minute and 5,000 an hour.
How do I raise the FCM quota?
In Google Cloud Console, under Quotas and system limits for the Firebase Cloud Messaging API, edit Send requests per minute. Google considers up to 25% more once you sit at 80% of the quota for 5 minutes a day with under 5% client errors. For a launch, ask Firebase Support at least 15 days ahead.
Do I pay for iOS pushes?
Apple charges nothing to send through APNs. You need the Apple Developer Program membership that every iOS app needs anyway.
Then why do push services charge?
For the server around FCM. Storing tokens per user, targeting topics, scheduling, retrying, removing dead tokens, a dashboard for non-developers and delivery logs are all work that FCM leaves to you.
First published on signops.dev.
Sources: Firebase pricing, Firebase: FCM throttling and quotas, FCM error codes.
Top comments (0)