What a push notification preview shows
A push notification preview shows how your title and message will look on a phone before you send, and where the phone will cut them off. Phones don't show everything. An iPhone lock screen shows a line of title and about four lines of message. A collapsed Android notification shows one line of each. The rest appears only when someone presses or expands the notification, and most people never do.
This tool draws all four views side by side and counts how many characters of your text each one actually shows. It measures your words at the width of each phone, so "Hi Priya" and "Hi Venkatanarasimha" get different answers. That matters more than any fixed character limit.
How to preview a push notification
- Type your app name, title and message. Add an image URL if it's a rich push.
- Read the checks. They tell you where each phone cuts the text, whether every token has a fallback, and if the payload is too big.
- Add a token from the chips under the message, such as
{{first_name|there}}. The part after the bar is the fallback for users with no value. - Open "Preview your own user list" and paste a CSV. Step through users one by one, or jump to the ones whose titles get cut.
- Open "Code for your CRM platform" to copy the title and message in your platform's syntax.
- Download a PNG of the preview to share with your team or client.
Push notification character limits
Neither Apple nor Google publishes a character limit for push titles or messages. Apple's design guidelines say the system truncates long text itself. Android's docs say collapsed text is cut to one line. The only hard limit is the payload: 4,096 bytes for everything in the notification, including deep links and data. Every character count you've seen online is a vendor's guidance, and they disagree:
| Source | iPhone | Android |
|---|---|---|
| Apple and Google | No character limit published. The system cuts long text (Apple HIG) | No character limit published. Collapsed text is cut to one line (Android developers) |
| Payload cap | 4,096 bytes for the whole payload (Apple) | 4,096 bytes (Firebase); 1,000 characters if sent from the Firebase console |
| Braze guidance | Lock screen about 160 characters, 130 with an image; banner 80, 65 with an image | Lock screen about 49; notification drawer about 597 (Braze) |
| CleverTap blog | Title 25 to 50, message about 150, about 178 in all | Title up to 65, message about 240 (CleverTap) |
| Airship blog | About 4 lines | About 50 characters collapsed, about 8 lines expanded (Airship) |
The numbers differ because the cut depends on the phone's width, the font, the user's text size, the length of the app name and whether there's an image. That's why this tool measures your actual words instead of counting to a fixed number. A few rules hold everywhere:
- The first line does the work. Android shows one line of message until it's expanded. Put the reason to tap there.
- Titles are short. On an iPhone the title shares its line with the time. Three to six words is safe.
- Images take room. A thumbnail shortens the lines next to it, so a rich push shows fewer characters, not more.
- Hindi and other Indian scripts use more bytes. Each character takes three bytes, so long Hindi messages reach the 4 KB payload sooner. Test on a real phone too, because fonts differ by phone maker.
Push notification image size
Rich push images follow the same pattern: platform caps on file size, and vendor guidance on shape.
| Rule | iPhone | Android | Source |
|---|---|---|---|
| File size | Images up to 10 MB (JPEG, PNG, GIF) | Up to 1 MB when sent through Firebase | Apple, Firebase |
| Shape | 1:1 or 2:1 | 2:1 | OneSignal |
| Pixel size | 1038 by 1038, or 1024 by 512 | 1024 by 512; Airship suggests 720 by 360, at least 300 by 300 | OneSignal, Airship |
| GIF | Animated GIFs work | Not supported by OneSignal or Braze on Android; send a still | OneSignal, Braze |
| Setup | Needs a Notification Service Extension in the app (mutable-content) | BigPictureStyle in the app, or the SDK does it | Apple, Android |
A 1024 by 512 image (2:1) is the safest single choice for both phones. Keep text out of the image's edges, because each phone crops it a little differently, and keep the file under 1 MB.
Personalised push notifications
A personalised push swaps tokens for each user's own values: their name, city, last product, streak or plan. Every token needs a fallback, the line a user sees when their value is missing. "Hi {{first_name|there}}" becomes "Hi Priya" for Priya and "Hi there" for a profile with no name. Without the fallback, that user gets "Hi ," and you look careless to the people you most want back.
Names need cleaning too. Lists are full of blanks, "test", email addresses typed into the name field, full names and ALL CAPS. With Clean names on, the tool keeps the first word, fixes the capitals and gives junk the fallback. Here is the same first-name token in each platform's syntax:
| Platform | First name with a fallback | Docs |
|---|---|---|
| CleverTap | {{ Profile.first_name | default:"there" }} | Push personalisation |
| MoEngage | {{UserAttribute['First Name']|default('there')}} | Jinja templating |
| Braze | {{${first_name} | default: 'there'}} | Default values |
| OneSignal | {{ first_name | default: "there" }} (from data tags) | Liquid syntax |
| WebEngage | Pick the attribute in the editor; no typed push syntax in the public docs | Personalisation |
For more on tags, defaults and when to stop a send instead of using a fallback, see my guide to Liquid personalisation in CRM tools.
Personalisation from a custom list
Tokens work for one value at a time. The bigger wins come from a whole line written for each user from what they've done. That is too much logic for a campaign editor, so do it in a sheet:
- Export the data. One row per user with their ID and the columns you need: days since last order, streak, last product, workouts this month.
- Write the line per user. In a sheet, use formulas to pick a line from each user's numbers, with a fallback line when the data is thin. In this tool, the Smart line rules do the same: "if streak_days is above 7, use this line; otherwise, that one".
- Upload it as a user property. Upload the file to your CRM platform as a user import. Each user now carries their own finished line, such as
push_body. - Call the property in the campaign. The message field holds one token, such as
{{ Profile.push_body | default:"..." }}in CleverTap, with a fallback for anyone outside the file. - Refresh it before each send. Behaviour changes. Re-upload the file so the lines match this week, not last month.
I ran CleverTap at Healthify, and we used this method across several journeys, including win-back for lapsed subscribers. Instead of one message with a dozen tags, we worked out each user's line in a sheet from what they had done (weight change, workout days, meals logged, app opens), with a fallback when the data was thin. We uploaded the lines as user properties and called them in push and WhatsApp. On the win-back journey, click-through went up 2.1x in India.
The tool does the middle steps for you. Load your list, set the Smart line rules, then Download CSV gives a file with the ID column your platform expects and the finished title and message for every user. Here's what each platform needs:
| Platform | User ID column | File limits | Docs |
|---|---|---|---|
| CleverTap | identity | Up to 1 GB. New columns can become profile properties | CSV upload |
| MoEngage | A column mapped to ID | Under 150 MB, up to 100 columns; names are case-sensitive | CSV import |
| WebEngage | user_id, first column | Up to 200 MB; 25 custom attributes per data type | Upload user data |
| Braze | external_id | Up to 500 MB; new headers become custom attributes | CSV import |
Mistakes that make push fail
| Mistake | What the user sees | Fix |
|---|---|---|
| A token with no fallback | "Hi , your order..." | Give every token a fallback that reads naturally |
| Full names in the title | The title cut before the point | First name only, and test the longest names in your list |
| The point at the end | Android shows one line; the offer never appears | Lead with the reason to tap |
| Body numbers on the lock screen | Weight, balance or health data visible to anyone near the phone | Keep sensitive numbers inside the app |
| An image with no service extension | A plain notification on iPhone | Ask the app team to add the extension, then test |
| One message to everyone | Copy that fits nobody in particular | Compute a line per user and upload it as a property |
One more for Android: on Android 13 and later, apps must ask for the notification permission, and on new installs notifications are off until the user says yes. Ask at a moment that makes sense, like after a first order, not on the first screen. See Android's notification permission guide.
Where push fits
Push is the cheapest channel an app has, and the easiest to wear out. Use it for timely, personal nudges, and move offers and long messages to WhatsApp or email. For ideas by trigger, see 40 push notification examples, each shown on both phones. For a countdown, carousel, rating or coloured push, build it in the push notification generator, which gives you the exact keys or fields for your platform. For the other channels, check WhatsApp messages in the WhatsApp template preview and SMS length in the SMS character counter, and compare the channels in WhatsApp, email and push statistics for India.
Want push, WhatsApp and email working together on repeat orders? Book a free call and I'll look at your journeys.
Sources: Apple, generating a remote notification, notifications HIG, notification attachments; Firebase, message types and images; Android, expandable notifications; guidance from Braze, CleverTap, Airship and OneSignal. Checked 16 October 2026.
Questions about push notifications
What is the character limit for a push notification?
Apple and Google publish no character limit for the title or message. The hard limit is the payload: 4,096 bytes for everything in the notification. What a user sees is set by the screen: about one line of title and four of message on an iPhone lock screen, and one line of each on a collapsed Android notification.
How many characters show on an iPhone lock screen?
It depends on the words, the font size and whether there is an image. Vendor guidance ranges from about 130 to 178 characters in all. Type your message in the preview to see the exact cut for your text.
How long can an Android push notification be?
A collapsed Android notification shows one line of title and one line of message, often 40 to 50 characters each. Expanded, it shows several more lines. Lead with the point, because most people never expand it.
What is the best image size for a push notification?
A 1024 by 512 pixel image (2:1) works on both iPhone and Android. Keep it under 1 MB, the limit for images sent through Firebase, and keep text away from the edges.
How do I preview a push notification before sending?
Type the title and message into this tool to see it on iPhone and Android, collapsed and expanded. Then send a test from your CRM platform to your own phone before the real send.
How do I personalise a push notification?
Add a token for the user value, such as first name or last product, with a fallback for users who do not have it. Each platform has its own syntax; this tool converts your tokens for CleverTap, MoEngage, Braze, OneSignal and Netcore.
What happens if a user has no first name?
Without a fallback they see a gap, like "Hi ,". Always set a fallback such as "there", and clean junk names like "test" so they get the fallback too.
Can I upload user properties from a CSV and use them in push?
Yes. CleverTap, MoEngage, WebEngage and Braze all import user data from a CSV with a user ID column, and imported values can be used in messages. This tool exports a ready file with each user's finished title and message.
Do emoji count toward the push notification limit?
Yes. They take space on the line and several bytes each in the payload. One or two can help; more looks like spam.
Can I send push notifications in Hindi?
Yes. Push supports Hindi and other Indian scripts. Each character uses three bytes, so very long messages reach the payload limit sooner, and fonts vary by phone maker, so test on a real device.
Why is my push notification image not showing on iPhone?
iPhone needs a Notification Service Extension in your app to download the image, and the payload must set mutable-content. Without it, iOS shows a plain notification.
Do Android users have to allow push notifications?
On Android 13 and later, yes. Apps must ask for the notification permission, and on new installs notifications stay off until the user agrees.
More free tools
Calculators, guides and tools for D2C brands, all free. See them all.