When to use property personalization
Use property personalization to render content at send time using data that already exists in OneSignal—most commonly Tags, External ID, and subscription fields like email or phone number. This is the right approach when:- The data is already stored in OneSignal
- You want Liquid placeholders replaced automatically when the message sends
- You don’t need to fetch or compute fresh data at delivery time
custom_data.If the value comes from the event that caused a user to enter or progress through a Journey, use Custom Event personalization.Channel support
Each channel supports specific property types and fields.- Email
- Push
- SMS
- In-app messages
- Live Activities
- Subject, Reply-to, and Pre-header
- Message body
- HTML attributes (for example:
<img src="{{ image_url }}" />) - Button actions (URLs, mailto, etc.)
How property personalization works
OneSignal replaces Liquid placeholders with the corresponding property values for the user and subscription being messaged.first_name: Jon and level: 5, they see:
Property Liquid reference
Use this section to look up the exact object and field names available in Liquid.User & Subscription properties
Useuser for user-level data. Use subscription when you need channel-specific values like email address or phone number.
- Use the
keydirectly or place the key aftertags - Example tags set:
first_name: Jon, level: 5
- Iterate over tags with for-loop syntax. This example outputs key:value pairs separated by commas.
- Iterate over subscriptions with for-loop syntax.
- This example outputs each subscription’s token and ID separated by commas.
Journey properties
Thejourney object lets you reference the Journey name or access Custom Event Personalization for the Journey.
Message properties
Themessage object provides access to the message ID, name, and template ID that can be helpful for Event Streams along with access to custom_data for personalizing messages sent from your backend.
Template properties
Thetemplate object provides access to the template ID and name about the Template used to send the message. This can be helpful for Event Streams.
App and organization properties
Theapp and org objects provide details about the App and Organization that sent the message. This can be helpful for Event Streams.
Example: Abandoned cart templates using tags
This example shows how to personalize abandoned cart messages using Tags. It builds on the Abandoned Cart tutorial. Example tags set:Email template
Create a new email template
Add the layout structure
- Rows 1, 2, and 4: one column with a Paragraph block
- Row 3: four columns with HTML | Paragraph | Paragraph | Paragraph
- Row 5: one column with a Button block

Starter email template for abandoned cart
Add liquid to paragraph blocks
Display the most recent item
- Column 2:
{{product_name}} - Column 3:
{{product_quantity}} - Column 4:
{{product_price}}
Add the cart URL to the button

Finished base email template for abandoned cart without styling
Test & preview the template
- Make sure the tags are set on your email Subscription.

Preview email with tags
Style the template
Push template
Push notifications have limited space, so display one item and mention the total count. Message field: Display item and count with correct grammar using conditional statements.
Preview push template personalization with Test & preview
Example: Personalize an in-app message with tags
This example shows a reward in-app message personalized with Tags. The IAM substitutes Tag values into multiple block types. In the configured message:- Text block — displays the completed level and the reward for that level
- Image block — displays the image for that reward, with a default image as fallback
- Button 2 text — displays the reward value, with a default of
100 - Background image — set from a Tag value

In-app message editor with Tag substitution configured in text, image, and button blocks

In-app message displayed to the user with values substituted from Tags
- Tags must be set before the user starts a new app session. Tags updated mid-session don’t render in IAMs shown in that session.
- Tag substitution doesn’t render in “Send Test Message” test-sends. Trigger the message from a real session to verify substitution.
- Property substitution is not supported in in-app messages.
Related pages
Message personalization
Tags
Using Liquid syntax
Templates
Abandoned cart tutorial
support@onesignal.comPlease include:- Details of the issue you’re experiencing and steps to reproduce if available
- Your OneSignal App ID
- The External ID or Subscription ID if applicable
- The URL to the message you tested in the OneSignal Dashboard if applicable
- Any relevant logs or error messages