A free OneSignal alternative for Capacitor apps
OneSignal vs OtaKit Push for Capacitor apps: pricing, setup, sending from your backend, and what each does better. Includes a migration checklist for moving off the OneSignal SDK.
OneSignal is the default answer when someone asks how to add push notifications to a Capacitor app, and for good reason: it is mature, it has a visual composer, and it does far more than push. But plenty of teams only need to send a notification to the right users and open the right screen, and for them the trade-offs look different: a monthly bill that grows with active users once you pass the free tier, and a native SDK with extra iOS setup.
This is an honest comparison of OneSignal and OtaKit Push for Capacitor apps, including when OneSignal is the better choice.
The short answer
- Choose OneSignal if marketing runs your notifications: journeys, automated sequences, in-app messages, email and SMS in one tool, detailed analytics.
- Choose OtaKit Push if developers send them: transactional and product notifications, targeted by your own user IDs or topics, sent from your backend, CI or the dashboard, free up to 100,000 notifications a month.
Pricing
| OneSignal | OtaKit Push | |
|---|---|---|
| Free | Unlimited mobile push for up to 1,000 monthly active users | 10,000 devices, 100,000 notifications a month |
| First paid step | Growth: from $19/month, plus $0.012 per monthly active user | Included in OtaKit Starter and Pro, with higher limits |
| What drives the bill | Monthly active users | Nothing extra: push is part of the OtaKit plan |
OneSignal prices from onesignal.com/pricing, checked September 2026. Check the page for current numbers.
Apple and Google charge nothing to deliver push. What you pay any push provider for is the software around it, so it is worth asking how much of that software you actually use.
Setup in a Capacitor app
| OneSignal | OtaKit Push | |
|---|---|---|
| Device plugin | @onesignal/capacitor-plugin (native SDK) | Official @capacitor/push-notifications + a small JS helper |
| iOS native work | Push and Background Modes capabilities, Notification Service Extension, App Groups | Push capability and two AppDelegate methods |
| Android | Firebase credentials | Firebase service account + google-services.json |
| Capacitor config | handleApplicationNotifications: false | No changes |
OneSignal's extra iOS pieces are there for features like rich media and confirmed delivery, which is a fair trade if you use them. If you don't, the official Capacitor plugin is simpler to keep up to date across Capacitor and iOS releases.
Sending
OneSignal is built around its dashboard and segments. OtaKit Push is built around the ways developers already work:
# CLI or CI
otakit push send --title "Build 2.4 is live" --body "See what's new" --url /changelog --topic news
# Your backend: target your own user IDs, safe to retry
curl -X POST https://console.otakit.app/api/v1/apps/$APP_ID/push/campaigns \
-H "Authorization: Bearer $OTAKIT_TOKEN" \
-H "Idempotency-Key: order-42-shipped" \
-H "Content-Type: application/json" \
-d '{"payload":{"title":"Your order shipped","body":"Track it in the app","url":"/orders/42"},
"audience":{"userIds":["user_42"]}}'There is also a dashboard composer with a live audience count, and AI agents can send through the OtaKit CLI after you confirm the message.
What OneSignal does that OtaKit Push does not
- Visual journeys and automated message sequences
- In-app messages, email, SMS and web push in the same product
- Scheduled and time-zone-aware sending, A/B tests of message copy
- Rich notifications with images through its iOS extension
- Deeper engagement analytics
If you need several of these, OneSignal is likely worth its price.
What OtaKit Push adds for Capacitor teams
- Your own keys. Delivery runs through your APNs key and your Firebase project. They stay yours and work with any other sender.
- OTA channel targeting. If you ship web updates with OtaKit live updates, devices report their channel, so you can message just the beta testers who received a new build.
- Developer safety. Audience preview before every send, idempotency keys, automatic removal of dead tokens, and an audit log of who sent what.
- One tool. Live updates, rollbacks and push in the same dashboard, CLI and API.
Switching from OneSignal
Device tokens belong to Apple and Google, not to the push provider, but OneSignal's SDK manages them for you, so the practical path is a new app release:
- Upload your APNs key and Firebase service account to OtaKit.
- Replace the OneSignal plugin with
@capacitor/push-notificationsand@otakit/push, and remove the Notification Service Extension if you added it only for OneSignal. - Call
OtaKitPush.setUser()where you used OneSignal's external user ID, andsubscribe()where you used tags for topics. - Ship the store build. Devices register with OtaKit as users update; keep OneSignal for the remaining users until most have moved.
Try it on one app first. Push is free on every OtaKit plan. Turn it on in Settings → Add-ons, follow the push docs, and send yourself a test notification before you decide.