Push that people open, and that pays for itself
Send rich push to iOS, Android and the web from one place. Each user gets it at their own best hour, never at 3am, and every campaign is scored on the sales it brings in.
Tuesday 18 November
7:04
Your size is back
nowThe Ridge 2 trail shoe is back in 42. Two pairs left.
Shop your sizeNot nowStill thinking it over?
2h agoYour cart is saved. Free delivery ends tonight.
Weekend trails near you
SatThree routes under 10 km, picked for this weekend.
Trailhead is a sample app.
Send-time optimisation
Each user gets the message at the hour they usually open your app.
Quiet hours and caps
Per-timezone quiet hours and a cap on how often anyone hears from you.
Tested on sales
A/B tests with a control group, scored on purchases, not taps.
Clean token lists
Dead device tokens are switched off the moment FCM or APNs reports them.
Images and buttons that open the right screen
- Images, carousels and countdowns
- Silent push
- Action buttons with their own deep link
- Copy in each user's own language
- Personalised with each user's traits
- Templates you reuse across campaigns
New push campaign
DraftTitle
Your size is back
Message
The Ridge 2 is back in {{size}}. Two pairs left.
Buttons
Shop your size → /product/ridge-2, Not now
Send
At each user's best hour, quiet hours 22:00–08:00
Sample campaign.
Know which message made money
Ridge boots restock
Purchases within 72 hours of the send
- Variant A48 hours only: 20% off trail gear36purchases
- Variant BYour size is back: Ridge Mid boots68purchases
- Control groupNo push sent24purchases
Variant B wins: 68 purchases and $4,182.00, against a control group that got no push.
Keep your FCM and APNs setup
- iOS, Android, Flutter and web SDKs
- Delivered, impression, click and dismiss events
- Recurring and per-timezone scheduled sends
main.dart, push
await ChumbaqPush.instance.init();
FirebaseMessaging.onMessage.listen(
(message) => ChumbaqPush.instance.reportNotificationReceived(message.data),
);
FirebaseMessaging.onMessageOpenedApp.listen((message) async {
final url = await ChumbaqPush.instance.reportNotificationClicked(message.data);
if (url != null) router.go(url);
});Push notifications, answered
Do I need to replace Firebase Cloud Messaging?
Does it support web push?
How is a campaign scored?
Keep exploring
Bring your users back
Free up to 2,500 monthly active users. No card, no sales call.