Omnisend lets you personalize messages sent to your contacts by including data like first and last names, location, order details, or custom information. Personalization helps create relevant, engaging experiences across Email messages, SMS, and Push Notifications.
In this article, you will learn how to add personalization to your messages, understand the difference between contact properties and event fields, and use fallback values to handle missing data.
Before You Start
All channels in Omnisend (Email, SMS, and Push Notification) support personalization.
Contact data must exist – Personalization pulls data from contact profiles. If a contact's first name is blank, the tag will show nothing (or fallback text if you set one).
Custom properties vs. Custom fields – Custom properties are stored permanently on contact profiles and work in all campaigns and automations. Event fields are passed with specific events and only work in automations triggered by that event. Learn more about the difference between custom properties and custom fields.
Test emails won't show personalization – Test emails display raw tags, like
[[contact.first_name]]because they don't use real contact data. To preview personalization before sending:Use Test & Preview in the editor and select a contact from your list.
Or send the campaign/automation live to your own email (ensure your contact profile has data populated).
Automations support event-based personalization – Automations triggered by events (like Abandoned Cart or Custom Events) can include event-specific data. Campaigns cannot access event variables.
Always add fallback values – Use fallback text to avoid blank spaces or errors when data is missing:
[[contact.first_name | default: "there"]].
⚠️ Personalization syntax must use double square brackets: [[contact.first_name]] – Other formats will display as raw text.
How Personalization Works
Personalized variables can be added as regular text or as personalized links in the following places:
Email message subject line and content;
Email content blocks (Title, Text, Links, Buttons);
SMS message text;
Push Notification title and text.
You can insert personalization by clicking the Personalization tag icon.
Personalization Syntax
Once you select the personalization category and the value, Omnisend will automatically place that information in your message:
Hello, [[contact.first_name]]! Love is in full bloom, and we're here to help you celebrate in style! Explore our curated Valentine's Day collection featuring unique gifts and heartfelt surprises.
Note: Omnisend uses Liquid syntax with double square brackets like [[contact.first_name]]
Fallback Values
You can define fallback text that appears if a contact's data is missing:
Hello, [[contact.first_name|default: "there"]]! Love is in full bloom, and we're here to help you celebrate in style! Explore our curated Valentine's Day collection featuring unique gifts and heartfelt surprises.
If the contact's first name is missing, the email will say "Hello, there!" instead of "Hello, !"
The Omnisend email builder lets you quickly set and save default fallback values for future use.
You can use default fallback personalization for:
Email Settings: Subject line (Campaigns)
Email A/B Settings: Subject line (Campaigns)
SMS Content: Message text (Campaigns)
Push Notifications: Title & Text (Campaigns)
SMS blocks (Automations)
Important: Personalization tags won't populate in test emails. To see them in action, send the email to a real contact.
Personalization Variables
When you click the Personalization tag icon, you'll see different categories of variables:
Contact – Information from contact profiles (names, location, custom properties).
Account – Information about your store.
Date – Current date and time.
Custom properties – Data collected for each contact as a custom property.
Event – Event-specific data (available in Automations only).
Contact Variables
Contact variables include default properties from contact profiles. These include:
[[contact.email]]
[[contact.first_name]]
[[contact.last_name]]
[[contact.city]]
[[contact.country]]
[[contact.state]]
[[contact.phone_number]]
[[contact.postal_code]]
[[unsubscribe_link]]
[[preference_link]]
Account Variables
Account variables contain information about your store, including:
[[account.name]]
[[account.address]]
[[account.city]]
[[account.state]]
[[account.zip_code]]
[[account.country]]
[[account.timezone]]
[[account.currency]]
[[account.website]]
Date Variables
Date variables let you display the current date and time in automation messages:
Current day [[current_date|date:'%d']]
Current day name [[current_date|date:'%A']]
Current month [[current_date|date:'%m']]
Current month name [[current_date|date:'%B']]
Current year [[current_date|date:'%Y']]
💡 If you pass date values using Custom Events and the event includes both date and time, but you only want to display the date, format it as follows:
[[ event.fieldSystemName | date: "%Y-%m-%d" ]]
Custom Properties
If you collect custom contact information (like clothing size, birthday, or loyalty points), you can add it by clicking Personalization tag → Custom properties.
Custom property syntax:
[[contact.custom_properties.name_of_custom_property]]
Example:
[[contact.custom_properties.clothing_size]] [[contact.custom_properties.loyalty_points]]
💬 Learn how to create and manage custom properties. Custom properties can be collected with Signup Forms, assigned manually, or synced from integrated apps.
Event Variables
Event variables are available only in Automation Workflows and depend on the trigger event used in the automation.
Event variable categories:
Omnisend Default Event Variables - These are built-in variables automatically included when using Omnisend’s pre-built automation triggers (e.g., Abandoned Cart, Order Confirmation, Browse Abandonment, etc.).
Example: In an Abandoned Checkout automation, you can use the checkout link with this variable:
[[event.raw.abandoned_checkout_url]].
Custom Event Variables - If you're using Custom Events triggered via API or integrations, you can define your own custom fields and use them as personalization variables within the automation.
Conditional Personalization
You can display different text based on personalization variable values using Liquid conditional statements.
Example: You can show different greetings based on the contact country:
[% if contact.country == "France" %] Bonjour! [% else %] Hello! [% endif %]
Output:
If the subscriber's country in our database is France, the output will be: Bonjour!
If the subscriber's country is different, the output will be: Hello!
Note: Conditional personalization works in Automation only.
Personalization in Content Blocks
You can add personalization to different parts of a content block, including:
💡 Some event-based content blocks include pre-filled personalization. For example, the Checkout button in the Abandoned Cart automation has an abandoned cart link preset.
Use Cases
Greetings with First Name
Including a contact’s first name in your greeting helps make your messaging feel more personal and conversational. You can also combine filters to format the name properly.
Adding a comma after the first name:
Hi [[contact.first_name | append: ","]] we have some exciting news for you!
Output: Hi James, we have some exciting news for you!
Capitalizing the first name:
Hi [[contact.first_name | capitalize | append: ","]] welcome back!
Output: Hi James, welcome back!
How it works:
[[ contact.first_name ]]– Pulls the contact's first name from your database.| capitalize– Ensures the first letter is capitalized.| append: ","– Adds a comma directly after the first name.
Birthday Celebration Messages
You can send personalized birthday wishes using a contact's birthdate.
Displaying the birthday date:
Hope your day on [[contact.birthday|date:"%B %d"]] is amazing!
Output: Hope your day on May 07 is amazing!
💡 Collect birthdates using Signup Forms or custom properties. Pair this with a birthday automation triggered by a specific date.
VIP Tier Recognition
Acknowledge VIP customers and offer exclusive benefits.
Example:
Welcome back, [[contact.first_name]]! As a [[contact.custom_properties.viptier]] member, you get early access to our sale.
Output: Welcome back, Sarah! As a Gold member, you get early access to our sale.
With fallback for non-VIP contacts:
[% if contact.custom_properties.viptier == "Gold" %] As a [[ contact.custom_properties.vip_tier ]] member, enjoy free shipping on this order! [% else %] Spend $50 more to unlock free shipping. [% endif %]
⚠️ This conditional example works in Automation only.
Troubleshooting
Personalization shows raw code in emails
You may be viewing a test email instead of a real email sent. To test the personalization correctly:
Preview in the editor and select a contact from your list to see personalization populate
Or send the campaign/automation live to your own email (ensure your contact profile has data).
Test emails sent from the editor will always show raw personalization tags, like [[contact.first_name]] because they don't use real contact data.
Personalization doesn't transform in sent emails
The personalization tag may have lost integrity if edited partially. To resolve this, delete the entire personalization tag and reinsert it using the Personalization tag menu. This ensures proper formatting.
FAQ
What's the difference between custom properties and custom fields?
Custom properties are stored permanently on contact profiles and can be used in campaigns or automation (e.g.,
[[contact.custom_properties.property_name]].Custom fields are event-specific data passed with custom events, available only in automations triggered by that event.
Should I use quotes or double quotes in fallback values?
Both single and double quotes work:
[[contact.first_name | default: 'there']][[contact.first_name | default: "there"]]
Use whichever is consistent with your style. The important part is including the fallback to avoid blank spaces when data is missing.
What if I want to leave personalization blank (no fallback)?
Use [[contact.first_name | default: ""]] to explicitly set an empty fallback. If you don't include a default at all ([[contact.first_name]]), Omnisend will also leave it blank when data is missing. Both result in a blank space.
Can I use personalized text directly on the hero image of my email?
It is not possible to add personalized text directly into an image. However, there is a workaround.
Convert your hero image into a background image, then place a text block on top of it and apply personalization to the text block. This allows you to display personalized content over the image.
Have more questions? Feel free to contact us at [email protected] or via in-app chat.















