Firebase Cloud Messaging (FCM) delivers push to Android, iOS and the web for free. SuprSend decides what is sent, on which channel and when, and sends the push through FCM. Most teams use both.
Trusted infrastructure layer behind hundreds of platforms
FCM is the delivery service behind most Android push, and SuprSend sends its Android push through it. Firebase gives developers a send API and gives marketers a console for push and in-app campaigns.
SuprSend is the notification infrastructure above it, where engineering, product and growth run transactional, product and engagement messages on nine channels.
Send the push through FCM and run everything around it
FCM delivers the push. The SuprSend workflow decides whether a message should go, on which channel, when, and to whom, then hands the push step to FCM and moves to the next channel if the push does not get through.
The right message reaches the right user at the right time on the right channel, with none of that logic in your application code.
One workflow reaches every channel
One send step covers push, email, SMS, WhatsApp, the in-app inbox, web push, Slack, Teams and webhooks. Adding a channel is a step in the workflow, on the same user record and log. Firebase covers push and in-app campaigns; email, SMS and chat need other vendors and your own code.
Every kind of message runs from one system
SuprSend unifies transactional, product and customer engagement messages in one system. A password reset, a comment notification and a win-back campaign share the same users, preferences and logs. FCM splits them in two: transactional push is code on your server, and campaigns are forms in the console composer.
Each customer account is a tenant with its own setup
Each tenant carries its own branding, template version, channel defaults and inbox feed, with sub-tenants nesting five levels deep, and can route through its own providers. FCM has no customer-account object: a Firebase project holds your apps, and anything that differs per customer is logic you write.
Users choose channels per category, admins set the defaults
Per category, a user picks channels and a digest schedule, a tenant admin sets the defaults above them, and every send checks those choices first. A hosted page and embeddable components ship with it. FCM has topic subscriptions and the operating system’s notification switch, with no categories.
Digests, timezone holds and channel routing in every workflow
Ten comments become one digest. A message waits for morning in the user’s timezone. Routing tries the in-app inbox, then push, then email, and stops once the user engages. FCM delivers each message the moment it is sent, so batching, waiting and routing are code on your server.
Logs that say why a message did not arrive
Each message keeps its workflow run, rendered content, the provider’s error and the reason a send was blocked, searchable by user for 30 to 90 days. FCM reports aggregate sends, receipts and opens with up to 24 hours of delay, and per-message records need a BigQuery export.
On its own, Firebase covers push to Android, iOS and the web at no cost, topics with server-side fanout, console campaigns with Google Analytics audiences and A/B tests, and in-app banners, modals and cards.
It does not record which user owns which device, send on any other channel, hold a preference, or wait, batch or branch.
Build notifications in the dashboard, in your own agent, or in your codebase
A product manager changes a workflow in the dashboard. A developer commits the same workflow as a file and ships it through a pull request.
A marketer asks Claude to build a list and send a campaign. All three are working on the same workflows, templates and logs, so nobody waits on a ticket.
The built-in agent builds, edits and debugs notifications from a description; product and growth ship without a ticket.
Connect the MCP to Claude, ChatGPT or any client and operate templates, workflows, tenants and preferences from there.
CLI and API keep workflows versioned, diffable and reviewed in pull requests; coding agents make bulk changes.
One SuprSend customer runs its marketing email end to end from Claude Code, with nobody in the dashboard.
FCM is built from two places. Developers send through the Admin SDK or the HTTP v1 API from their own server or Cloud Functions, and the Firebase MCP server lets Claude Code, Cursor, Windsurf or Gemini CLI send an FCM message.
Marketers compose push and in-app campaigns in the console, which adds AI insights on campaign results. FCM stores no templates or workflows, so there is nothing to version, review or stage.
Short answer
If this is you
Choose
Your product sends push only, from your own server, and your team is content storing device registrations and writing retries
FCM
You send occasional push campaigns to Google Analytics audiences from a console and want A/B tests at no cost
FCM
One trigger has to reach the user on push, email, SMS, WhatsApp or an in-app inbox — FCM delivering the push.
SuprSend
Messages need delays, digests, branches, or an email when the push goes unseen — FCM delivering the push.
SuprSend
Users should choose which notifications they get and on which channel — FCM delivering the push.
SuprSend
Each customer account needs its own branding, content and defaults — FCM delivering the push.
SuprSend
Product and growth should change notification content and logic without an app release or a ticket — FCM delivering the push.
SuprSend
A marketing team wants its campaigns and the transactional messages in the same dashboard — FCM delivering the push.
SuprSend
You want agents to build, send and manage your notifications from Claude, ChatGPT, Claude Code, Cursor or Slack
SuprSend
FCM is already wired in and you are now writing the device table, the retry queue and the opt-out check — SuprSend taking over that code.
Both
At a glance
SuprSend
FCM
Best when
SuprSendNotifications span channels and teams, with logic and preferences around each send
FCMPush is the only channel and your server owns the logic
Who uses it
SuprSendEngineers, product, growth, and agents over MCP
FCMEngineers through the API; marketers in the console composer
Messages covered
SuprSendTransactional, product and customer engagement, in one system
FCMPush from your code; push and in-app campaigns from the console
Layer
SuprSendDecides channel, timing, content and recipient; sends through providers
FCMDelivers push to Android, iOS and web
Built and changed from
SuprSendDashboard agent, your own agent over MCP, CLI and API
FCMServer code, console composer, Firebase MCP server
Channels
SuprSendEmail, SMS, WhatsApp, mobile push, web push, Slack, Teams, in-app inbox, webhook
FCMMobile push, web push, in-app overlays
User and device mapping
SuprSendDevices registered on the user profile by the SDK
SuprSendPer category and channel, digest schedule, tenant defaults
FCMTopic subscriptions; operating system switch
Multi-tenancy
SuprSendNested tenants with own branding, templates, defaults
FCMNone
In-app
SuprSendPersistent inbox with read state, plus toasts
FCMCampaign overlays: card, modal, image, banner
Templates
SuprSendEditors for nine channels, versions, translation files
FCMNone; strings in code or the campaign form
Delivery data
SuprSendPer-user message log with errors and block reasons
FCMAggregate reports; per-message data in BigQuery
Campaign testing
SuprSendNo A/B testing
FCMA/B testing with Google Analytics conversions
AI
SuprSendAgents build workflows, write copy, send, and read the log
FCMMCP server sends a message; AI insights on campaigns
Hosting
SuprSendSuprSend cloud on every plan; your VPC, on-prem or BYOC on Enterprise
FCMGoogle cloud only
Pricing model
SuprSendPer notification per channel; 10,000 free, Essentials $100 per month
FCMFree at any volume
Implementation
SuprSendDays: SDK, Firebase service account as vendor, workflows in the dashboard
FCMA day for a test push; weeks for the code around it
G2
SuprSend4.8, 129 reviews
FCM4.5, 307 reviews, all of FCM
What each actually is
FCM
Firebase is Google’s app development platform, and three of its products send messages. Cloud Messaging (FCM) is the delivery service: it accepts a message from your server and carries it to Android devices over Google Play services, to iOS through APNs and to browsers through web push.
The Notifications composer sends push campaigns from the console, and In-App Messaging shows banners, modals and cards inside an open app.
Almost every Android push travels through FCM, including the ones SuprSend sends, and FCM charges nothing for it.
What surrounds delivery is yours to build: the table that maps users to devices, the logic for whether and when to send, every other channel, and preferences.
SuprSend
SuprSend is notification infrastructure for products where more than one team works on notifications. An event or an API call starts a workflow, and the workflow decides the channel, the timing, the content and the recipients.
Engineers integrate once; product and growth build and change workflows, templates, lists and broadcasts from the dashboard or through an agent.
SuprSend delivers nothing to an Android device on its own. It stores each user’s device registrations, sends the push step through your Firebase project with your service account, and records what FCM returned.
Email, SMS, WhatsApp, an in-app inbox, Slack and Teams run through the same workflows, preferences and logs.
Where they overlap
Push to Android, iOS and the webBoth reach all three. On Android the delivery under SuprSend is FCM’s own.
Campaigns from a consoleFCM’s composer and SuprSend’s broadcasts both send now, later or on a recurring schedule, in the recipient’s timezone.
Audience targetingFCM targets Google Analytics audiences, app version, language and imported segments. SuprSend targets lists built from rules, warehouse SQL, CSV, the API or a CDP.
Messages inside the appFirebase shows campaign overlays. SuprSend keeps an inbox and shows toasts.
Agent access over MCPBoth publish an MCP server that works in Claude Code, Cursor and Windsurf.
Where FCM alone is enough
Free at any volumeCloud Messaging charges nothing per message, per device or per project, with a default quota of 600,000 messages a minute.
Direct control of the payloadPriority, a lifespan of up to four weeks, collapse keys, direct-boot delivery and iOS Live Activity updates are fields on the send request.
Topics with server-side fanoutThe app subscribes a device to a topic and one request reaches every subscriber, with conditions across topics.
A/B tests tied to Google AnalyticsComposer campaigns test variants and count a conversion event per campaign.
In-app campaign overlaysCards, modals, image messages and banners appear on any Google Analytics event, with no code per campaign.
Unity and C++ SDKsGames built on either engine receive push through FCM’s own client libraries.
A push-only productOne channel, logic your server already owns, and no preferences to honour: an orchestration layer adds a bill and little else yet.
When you need SuprSend on top
Devices stored against usersThe SuprSend SDK registers each device on the user after login, so one send reaches every device that user has. With FCM alone that table, its timestamps and its pruning job are yours.
One backend call in place of an endpoint, a table and trigger codeThe Firebase messaging library stays in the app in both setups; the SuprSend SDK sits beside it, and your server sends one event.
More ways to triggerA product event, an API call, a schedule, a broadcast to a list, or a Segment event can each start the same workflow.
Delivery answers per userSupport can look up one person and see what was sent, what FCM returned and whether it was seen, without a BigQuery query.
Retries and duplicate protectionSuprSend retries FCM server errors with exponential back-off and accepts an idempotency key, so a repeated request does not send twice.
Copy changes without an app releasePush text lives in a template with versions, rollback and translation files, edited by product or growth.
Environments and a test modeDevelopment, staging and production are on every plan, and test mode blocks real delivery while a workflow is being built.
A choice of where it runsSuprSend cloud on every plan; your VPC, on-prem or BYOC on Enterprise, with the full product and vendor support.
Who works in it
FCM
Engineers write the send logic against the Admin SDK or the HTTP v1 API, host it on their server or Cloud Functions, and keep the table of device registrations. Marketers and product managers compose push and in-app campaigns in the console, target Google Analytics audiences and run A/B tests. They cannot touch anything the API sends.
Agents connect to the Firebase MCP server from Claude Code, Cursor, Windsurf or Gemini CLI and can send an FCM message to a device or a topic.
SuprSend
Engineers integrate once through the API, a backend SDK in Python, Node, Java or Go, the CLI and MCP, and keep workflows and templates in the repo. Product and growth build workflows, lists, content and broadcasts in the dashboard, or have the built-in agent build them, with versions to roll back and a test mode.
Agents connect over MCP from Claude, ChatGPT, Claude Code or Cursor and create users, set preferences, write templates, trigger a notification, run a broadcast and read the delivery log.
Feature by feature
From both products, documentation sites and pricing pages, September 2026. Plan names mark the lowest SuprSend plan that includes a feature; everything in the FCM column is free.
How notifications are built and changed
In SuprSend a notification is a workflow and a set of templates, each with an API and a file form behind the dashboard, so it can be edited by a person, scripted, versioned and staged.
In FCM a transactional push is a request your server builds, and a campaign is a form in the console. There is no stored object to edit, version or promote.
FCM NOThe Firebase CLI deploys app resources; messaging has no assets to deploy
Version history and rollback
SuprSend YESEvery workflow and template
FCM NO
Promotion from staging to production
SuprSend YESBy CLI, from CI
FCM NONothing to promote; each Firebase project is configured by hand
MCP server for agents
SuprSend YESOperates users, tenants, preferences, workflows and templates
FCM YES, BUTFirebase MCP server sends an FCM message; messaging has nothing else to operate
Headless UI components
SuprSend YESInbox, preference centre, template editor
FCM NO
Teams and scope
SuprSend is worked in by engineers, product and growth, with separate environments and a test mode between them and real users.
FCM splits by role: engineers own everything sent through the API, and anyone with console access can send a campaign to production devices.
Capability
SuprSend
FCM
Who builds send logic
SuprSendEngineers, product and growth, in the dashboard, by CLI or through an agent
FCMEngineers, in server code or Cloud Functions
Who sends campaigns
SuprSendProduct, growth and marketing, from the dashboard, the API or an agent
FCMAnyone with console access, in the composer
Transactional notifications
SuprSend YESEvery channel
FCM YES, BUTPush only, from your own code
Customer engagement campaigns
SuprSend YESEvery plan, every channel
FCM YES, BUTPush and in-app overlays only
One system across both
SuprSend YESSame workflows, preferences and logs
FCM NOAPI sends and composer campaigns share no content, audience or opt-out
Environments
SuprSend YESDevelopment, staging and production on every plan
FCM PARTIALOne Firebase project per environment, created and wired by you
Test mode that blocks real delivery
SuprSend YESIn development and staging
FCM PARTIALvalidate_only checks a single request without sending it
Roles and permissions
SuprSend YES, BUTRBAC on Enterprise
FCM YESGoogle Cloud IAM roles on the project
Data model and tenancy
SuprSend starts from a user: one profile holds every channel address, every device and any properties, and tenants sit above users.
Firebase Cloud Messaging starts from an app installation. It does not know which person owns a device, so that mapping, and anything per customer, lives in your database.
Capability
SuprSend
FCM
User profile
SuprSend YESOne user, every channel address, any JSON properties
FCM NOFCM knows app installations; users live in your database
Devices stored against the user
SuprSend YESThe SDK registers each device after the user is identified
SuprSendFCM registration token, set by the SuprSend SDK
FCMFirebase Installation ID; registration tokens are deprecated and still supported
Stale registration clean-up
SuprSendFailed sends are logged per user with FCM's error
FCMYour job: remove on UNREGISTERED, prune after a month of inactivity; Android registrations expire after 270 days
Lists and audiences
SuprSendRules on properties and events, warehouse SQL, CSV, API, CDP sync
FCMTopics, Google Analytics audiences, imported segments
Non-user recipients
SuprSend YES, BUTObjects with their own channels and subscribers; Business
FCM NO
Tenants
SuprSend YES, BUTNested five levels; Business add-on, Enterprise
FCM NOA Firebase project holds apps; it has no customer-account object
Per-tenant branding, templates and defaults
SuprSend YES, BUTBusiness add-on, Enterprise
FCM NOPer-customer content is logic you write
Customer engagement and marketing
Both send campaigns from a console. Firebase’s composer targets Google Analytics audiences and sends push or an in-app overlay. SuprSend broadcasts to a list on any channel through the workflow engine.
A marketing team working in the SuprSend dashboard also runs the event-driven transactional messages, such as password resets, invoices and alerts, from the same workflows, lists and logs as its campaigns.
A workflow is the logic between a trigger and a send: wait, batch, branch, pick a channel, stop. SuprSend has it as a product.
FCM delivers each message the moment your server asks, so every row below is code you write and host.
Capability
SuprSend
FCM
Multi-step workflows
SuprSend YES
FCM NO
Delay and wait for an event
SuprSend YES
FCM NO
Batching and digest
SuprSend YES, BUTBusiness
FCM NO
Branches and conditions
SuprSend YESEvery plan
FCM NO
Send in the recipient's timezone
SuprSend YES, BUTEssentials
FCM YES, BUTComposer campaigns only
Throttle per user
SuprSend YES, BUTEssentials
FCM PARTIALPer-device frequency limit on in-app campaigns
Fetch from an API, call a webhook
SuprSend YES, BUTEssentials
FCM NOCloud Functions can do this in code
Cancel a run in flight
SuprSend YESBy run, recipient or workflow
FCM PARTIALA scheduled campaign can be cancelled before its fanout starts
Templates and content
SuprSend stores content as templates outside your code, with an editor per channel, variables, versions and translation files.
In FCM the title and body are strings in your request or in the campaign form, so a copy change to a transactional push is a code change.
Capability
SuprSend
FCM
Content stored outside code
SuprSend YES
FCM PARTIALCampaign text in the console; API sends carry their own strings
Editor per channel
SuprSend YESAll nine channels
FCM PARTIALOne form for push, one for in-app layouts
Variables and conditional content
SuprSend YESHandlebars
FCM NOYou build the strings in code
Translations
SuprSend YES, BUTIn the template on Essentials; translation files on Business
FCM PARTIALLocalisation keys resolved from strings bundled in the app
Version history and rollback
SuprSend YES
FCM NO
Variants by tenant
SuprSend YES, BUTMulti-tenant add-on, Enterprise
FCM NO
Test send from the editor
SuprSend YES
FCM YESTest message to a device from the composer
Preferences
A preference is a user’s standing choice about what they hear and where. SuprSend stores it per category and channel and checks it before every send.
FCM has two switches: the operating system’s notification permission, and topic subscriptions your app manages.
Capability
SuprSend
FCM
Preferences per category
SuprSend YES, BUTBusiness
FCM NO
Preferences per channel
SuprSend YES, BUTBusiness
FCM NOOne channel
Digest schedule chosen by the user
SuprSend YES, BUTBusiness
FCM NO
Tenant admin defaults above the user
SuprSend YES, BUTMulti-tenant add-on, Enterprise
FCM NO
Hosted page and embeddable components
SuprSend YES, BUTBusiness
FCM NO
Opt-out checked on every send
SuprSend YESBlocked sends are logged and not billed
FCM NOYour code checks before it calls the API
Topic subscribe and unsubscribe
SuprSend NOLists are managed by your team
FCM YESFrom the app or the Admin SDK
In-app messages
The two in-app products do different jobs. SuprSend’s inbox is a persistent feed the user opens, with read state, fed by the same workflow as the push.
Firebase In-App Messaging shows a campaign overlay while the app is open, fetches its campaigns from the server once a day, and keeps nothing afterwards.
Capability
SuprSend
FCM
Persistent feed with read state
SuprSend YESEvery plan; SuprSend branding on Free
FCM NO
Drop-in and headless components
SuprSend YESDrop-in on web; headless on React Native, Flutter and iOS; native Android SDK
SuprSendSuprSend cloud on every plan; your VPC, on-prem or BYOC on Enterprise, full product, supported
FCMGoogle cloud only
Support
SuprSendSlack community and chat on every plan; email on paid plans; phone and a named CSM on Enterprise
FCMCommunity and the Firebase support form; paid Google Cloud support plans
Uptime
SuprSend99.9%; SLA on Enterprise
FCMNot published for Cloud Messaging
Pricing and implementation
Firebase charges nothing for Cloud Messaging or In-App Messaging at any volume. SuprSend bills per notification per channel, counts a digest as one, and does not bill sends blocked by an opt-out.
With both, you pay SuprSend and FCM still delivers the push for free.
FCM bills nothing for messaging, so it is always the cheaper invoice.
SuprSend bills per notification per channel: 200,000 push notifications in a month cost $0 on FCM and $400 on SuprSend Essentials ($100 for the first 50,000, then 150 blocks of 1,000 at $2), with FCM still delivering them at no charge.
The cost on the FCM side is the engineering time for the device table, retries, preferences and every other channel. Compare on your own event-to-notification ratio; SuprSend’s pricing page and FCM’s have the detail.
Capability
SuprSend
FCM
Billing unit
SuprSendNotification per user per channel; digest counts as one
FCMNone; messaging is free
Free
SuprSend10,000 notifications a month; all channels; unlimited members
FCMUnlimited messages on the Spark plan
Entry paid
SuprSendEssentials $100 per month; 50,000; $2 per extra 1,000
FCMNo paid messaging tier
Next tier
SuprSendBusiness $250 per month; adds digest, preferences, objects
FCMGoogle Cloud contract for the rest of the project
Other costs
SuprSendYour email, SMS and WhatsApp providers
FCMBigQuery and Cloud Functions usage on the Blaze plan
Time to first notification
SuprSendSame day; Firebase service account added as the Android vendor
FCMSame day for a test push; the device table and send logic follow
Putting SuprSend on top of FCM
Nothing leaves FCM. Your project, your service account and the messaging library in the app stay where they are, and SuprSend becomes the caller.
FCM
SuprSend
Moves how
FCMFirebase project and service account
SuprSendAndroid push vendor
Moves howUpload the service account JSON; project stays
FCMAPNs key held in FCM
SuprSendiOS push vendor
Moves howAdd the same key; iOS sends go direct to APNs
FCMFirebase messaging library in the app
SuprSendStays, with the SuprSend SDK beside it
Moves howAdd the SDK; identify the user at login
FCMRegistration stored on your server
SuprSendPush token on the user profile
Moves howSDK registers new ones; backfill by API
FCMYour user-to-device table
SuprSendUser profile
Moves howUsers API or backend SDK
FCMTopic
SuprSendList
Moves howSubscribers become list members
FCMSend call in server code
SuprSendWorkflow trigger
Moves howOne event or API call per product action
FCMTitle and body strings in code
SuprSendTemplate with versions
Moves howRecreate in the push editor
FCMComposer campaign
SuprSendBroadcast to a list
Moves howRebuild; or keep the composer for A/B tests
FCMGoogle Analytics audience
SuprSendList
Moves howCSV, API or CDP sync
FCMIn-App Messaging campaign
SuprSendStays in Firebase; inbox and toasts are new
Moves howAdd the inbox component
FCMBigQuery delivery export
SuprSendStays; SuprSend logs sit beside it
Moves howNo change
The app keeps receiving push the same way throughout, so the move can go one notification at a time.
01
Inventory every place your code calls FCM to send, every composer campaign, and every topic.
02
Set up SuprSend development and staging, and add your Firebase service account as the Android push vendor and your APNs key for iOS.
03
Add the SuprSend SDK to the app and identify users at login so devices register; backfill existing registrations through the API.
04
Rebuild the critical notifications as workflows first: security alerts, order and payment updates, mentions. Run them in test mode.
05
Switch those triggers from the FCM send call to a SuprSend event, one at a time, and compare the logs for a week.
06
Move the rest, then add what FCM could not do: a second channel, a digest, preferences, the inbox.
Enterprise customers get migration support and a scoped plan; on other plans the Slack community and docs are the path.
FAQ
Is SuprSend an FCM competitor?
No. Firebase Cloud Messaging delivers push, and SuprSend sends Android push through it. The two overlap only where FCM’s console sends campaigns.
The real choice is between writing the code around FCM yourself (device table, retries, other channels, preferences, timing) and using SuprSend for it.
Can SuprSend use FCM?
Yes, and for Android push it has to. You add your Firebase service account as the Android push vendor in SuprSend, keep the Firebase messaging library in the app, and SuprSend calls FCM with your credentials. Your Firebase project, quota and delivery reports stay yours.
Should I use FCM directly or through SuprSend?
SuprSend
SuprSend, with FCM delivering, suits a product that also sends email, SMS or in-app messages, needs delays, digests or preferences, or wants product and growth to change notifications themselves.
FCM
FCM directly suits a product where push is the only channel, the send logic already lives on your server, and nobody outside engineering needs to change a notification.
Is SuprSend cheaper than FCM?
No. FCM messaging is free at any volume. SuprSend bills per notification per channel, with 10,000 a month free and Essentials at $100 a month for 50,000. Using both means one bill, SuprSend’s, and the saving is the engineering time you would spend building around FCM.
Does FCM do multi-tenancy?
SuprSend
SuprSend tenants carry their own branding, template versions, channel defaults and inbox feed, nest five levels deep and can route through their own providers, as a Business add-on or on Enterprise.
FCM
FCM has no tenant object. A project holds your apps, and per-customer branding, content or defaults are logic in your own code.
Does Firebase In-App Messaging replace an in-app inbox?
SuprSend
SuprSend’s in-app inbox is a feed the user opens, with read state, tabs and actions, on web and mobile, filled by the same workflow that sends the push and the email.
FCM
Firebase In-App Messaging shows a card, modal, image or banner over the app when a Google Analytics event fires. Once dismissed it is gone, and it runs on iOS, Android and Flutter.
Where does each run, and can I self-host SuprSend?
SuprSend
SuprSend runs as SuprSend cloud on every plan. On Enterprise it also runs in your VPC, on-prem or as bring-your-own-cloud, with the full product and vendor support; see the self-hosting page.
FCM
FCM runs on Google’s cloud only, and every Android push passes through it whichever tool sends it.
By clicking “Accept All Cookies”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. View our Privacy Policy for more information.