Push notification console your growth team runs without engineers
Build the audience, preview the copy on a phone mockup, test it on your own device, then send to your app users and see exactly what landed.
Build me a push notification console that my growth and product team opens whenever they want to message our app users, so nobody has to ask an engineer to run a script. Our app users live in a Firestore collection where each user document carries fields like plan, country, last opened date, app version, notification preferences, a quiet-hours flag, and the FCM device tokens registered for that person. The console has three screens: Audience, Compose, and History. Nothing here runs on a schedule or on an event. A person defines the audience, approves the copy, presses send, and reviews the results afterwards.
The Audience screen is a plain segment builder over the users collection. The user stacks simple filter rows such as plan equals free, last opened before a date, country in a list, or app version at or above a value. Every time they add or tweak a row, refresh a live recipient count using the Firebase Run Firestore Aggregation Query operation, so they can size the segment without pulling documents. Under the count, show a sample of twenty matching profiles using Run Firestore Query, with the fields that were filtered on shown as columns, so they can sanity check that the rows actually select the people they meant. Segments can be named and saved as documents in a push_segments collection with Create Firestore Document, and the saved segment picker loads them with List Firestore Documents, so the team reuses last month's definition instead of rebuilding it from memory.
The Compose screen has a title field, a body field, and a phone-style preview that renders the notification the way it will look on a handset as they type, including a truncation warning when the text runs long. There is a deep link field for the in-app destination, and a choice of delivery target: send to an FCM topic, or send to the device tokens stored on each matched user document. Before the real send unlocks, the sender must run a mandatory dry run to their own test device token using Send Push Notification (FCM) and confirm they received it. Until that dry run succeeds, the Send button stays disabled and says why.
Sending writes a campaign document into a push_campaigns collection capturing the segment definition used, the title and body, the deep link, the delivery target, the audience size, and the delivered and failed counts. Send through Send Push Notification (FCM), then stamp the failed tokens back onto the relevant user documents so dead devices get cleaned up over time: use Batch Write Firestore Documents so one call marks many user records at once, and Update Firestore Document to close out the campaign record with the final numbers. Show live progress while the send is running, and never leave a campaign record half written if part of a batch fails.
The History screen lists past campaigns with the worst failure rate first, since that is the list worth acting on. Each row shows the date, who sent it, the segment name, audience size, delivered, failed, and failure rate, and expands to show the copy that went out. Each campaign has a Slack summary button that posts the result to a team channel using the Slack Bot Send a Message operation: campaign name, segment, audience size, delivered and failed counts, failure rate, and the title and body that shipped.
Add a Draft this campaign button that kicks off a background agent. The agent reads the saved segment definition and pulls a sample of matching user documents with Run Firestore Query, works out what that cohort has in common, and writes three title and body variants taking different angles, for example one value-led, one urgency-led, one curiosity-led, back into the draft campaign document with Update Firestore Document. The marketer opens the draft, picks a variant, edits it in the Compose fields, and sends. Show the agent's status in the app so they know when the variants have landed, and never let the agent send anything itself.
Bake in the guardrails. Users with notifications disabled or a quiet-hours flag set are excluded from both the recipient count and the actual send, so the number on screen is the number of people who will really be reached. Sends go out in throttled batches with a short pause between them rather than one giant blast, with the batch size and pause configurable. And the console refuses to send the same campaign twice: if a campaign with the same segment and the same copy has already gone out, block the send behind an explicit duplicate confirmation.
One more thing to keep clear in how this is built: this is an operated console, not an automation. It is deliberately different from a scheduled win-back workflow that picks its own dormant cohort and fires unattended. Here a human defines and previews the audience, approves the copy, tests on their own device, presses send, and reviews history. Do not add schedules, triggers, or anything that sends without a person clicking.
What does this prompt do?
- Build an audience from your app's user records with plain filter rows like plan, country, and when someone last opened the app, and watch the recipient count update live as you tweak it.
- Write the notification with a phone-style preview and a deep link, then prove it works with a required test send to your own device before the real send unlocks.
- Send to a topic or to the devices on each matched user, in throttled batches, with a block on sending the same campaign twice by accident.
- Every send is recorded with audience size, delivered and failed counts, and dead device tokens get stamped back onto user records so your list cleans itself over time.
- Review past campaigns worst failure rate first and post the result to a team channel in one click.
What do I need to use this?
- A Firebase project where your app users are stored, with fields you want to filter on such as plan, country, last opened date, and notification preferences
- Device tokens saved on your user records, or an existing topic your app already subscribes people to
- A test device of your own registered in the app, so the required test send has somewhere to go
- A Slack workspace, if you want campaign results posted to a team channel
How can I customize it?
- Change the filter fields to match how your own user records are shaped, and save the segments your team reuses every month
- Set the batch size and the pause between batches to control how fast a send goes out
- Choose which channel gets the campaign summary, and which fields count as notifications off or quiet hours
FAQs
How is this different from the automatic win-back push notification workflow?
Can I test the notification on myself before it goes to everyone?
Will people who turned notifications off still get messaged?
What happens to devices that no longer exist?
Can someone send the same campaign twice by mistake?
Do I need a developer to run this?
Related templates
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.
Open one board each morning, see which voice calls went badly, replay the exact moment the caller got frustrated, and file the fix.
A personal queue of every overdue Guru card, sorted by how late it is, with one-click verify, reassign, comment, and an agent that drafts the refresh for you.
Stop asking an engineer to send your push notifications.
Give your growth and product team one screen to build the audience, test the message on a real device, and send it themselves.