Data Types
On the MoEngage dashboard, there are seven primary data types:- String: A string is a sequence of characters. Strings are typically used to represent words and text. Character in a string can be a letter of some alphabet, a digit, a punctuation mark, a blank space, etc.
- Boolean: The Boolean data type can have values as true and false.
- Numeric : A number is a sequence of digits . Numeric data types are typically used to represent amount, quantity , and price.
- Geo Location: Geo-location represents the location on the map using latitude and longitude.
- Date Time: Date time data types represent the date and time for an event or action.
- Array: A collection of data elements. MoEngage supports two types: String Arrays and Numeric Arrays, with a maximum limit of 254 elements per array as selectable values while filtering.
- Object: The Object data type provides a structured way to identify and query multiple related attributes contained within a single object. These attributes can be of any primitive data type, such as string, numeric, or date, and can be nested up to two levels. For more information, refer to Object Data Type in Segmentation.
Terms to know
String Filters
Boolean Filters
Numeric Filters
For the table below - N, N1, and N2 are numeric, and N2 > N1.Event Occurrence Filters
Consider the following assumptions:- Number of times user executes or does not execute the event: n
- Event in consideration: Viewed Product
- Today’s Date - Dec 14th 2023.
- Event Retention Period for Segmentation - 30 days ( Nov 14th 2023)
Location-Triggered Filters
Date Time Filters
To understand filter operators in date-time data types, we need to first understand a few functions -- now = current timestamp up to milliseconds
- start_of_day(timestamp) = 00:00:00 of the selected day/date
- end_of_day(timestamp) = 23:59:59 of the selected day/date
- n days = n * 24 hours
- For the table below - n, n1, and n2 are numeric and n2 > n1.
For example
- Let’s assume now is 7:30:05 PM, 5 Jan 2001 then
- now - 3 days = now - (3* 24) hours = 7:30:05 PM, 2 Jan 2001
- now + 3 days = now + (3* 24) hours = 7:30:05 PM, 8 Jan 2001
- start of the day (now) = 12:00:00 AM, 5 Jan 2001
- end of the day (now) = 11:59:59 PM, 5 Jan 2001
- Let’s assume the date is 1 Jan 2001
- start of day (date) = 12:00:00 AM, 1 Jan 2001
- start of day (date + 1 day) = 12:00:00 AM, 2 Jan 2001
- start of day (date - 1 day) = 12:00:00 AM, 31 Dec 2000
- end of day (date) = 11:59:59 PM, 1 Jan 2001
- end of day (date + 1 day) = 11:59:59 PM, 2 Jan 2001
- end of day (date - 1 day) = 11:59:59 PM, 31 Dec 2000
All date-time filters work in the App time Zone, specified in Settings.
(Settings -> App -> General -> General Settings -> Account Settings -> TimeZone )
(Settings -> App -> General -> General Settings -> Account Settings -> TimeZone )
Special Date Filters
Special date filter filters for a specific hour, weekday, month, date of the month, and date of the year. This is useful for filtering out birthdays across years, and bill dates across months. Special date filters are available in the drop-down next to the date attributes in the User property and the User behavior section.

Special date filters are available only for user and event attributes where the data type is ‘date’. Special date filters are not available in the Affinity Segmentation and Analytics filter.
Hour of the day - Daily where the hours
For hours of the day, let’s understand these filters’ definitions better with examples.Day of the week - Weekly where the day
For the day of the week, let’s understand these filter definitions better with examples.Day of the month - Monthly where the day
For the day of the week, let’s understand these filter definitions better with examples.Here Date(DD) numerical date value e.g. 11, 23, 05.
Month of the year - Yearly where the month
Let’s understand these filters’ definitions better with examples for the month of the year.Date-Month of the year - Yearly where the date
Let’s understand these filters’ definitions better with examples for the date month of the year.Array Filters
Two types of array filters are available. Array filters are not supported for:- Entire Analytics Suite
- Preference management, Conversion goals, and Personalization attributes
Array of Strings
Description for array filters for string -Array of Numbers
Description for array filters for numeric values -Attribute Comparison
You can now compare a user attribute to another user attribute or a constant value.The following table lists the filters and data types supporting attribute comparison:
Attribute to Attribute Comparison
You can now compare a user attribute of a specific data type with another user attribute of the same data type. Example 1: Consider a marketer looking to identify users who haven’t used their app since installing it. Comparing the First Seen and Last Seen user attributes of users can help the marketer identify the users who haven’t been active on the app since installation.

Attribute to Constant Value Comparison
You can now compare a user attribute to a predefined constant value. Example 1: Consider an E-commerce business looking to identify users who have spent more than $1000 on their platform while upgrading the app. The user attribute total_amount_for_upgrade represents the total amount each user has spent to upgrade the platform to date. To segment users into ‘high spenders’, the E-commerce business can compare this user attribute with a constant value of 1000 as shown below:
Limitations
The following features currently do not support the new segmentation filters (first/last seen, contains spaces, is empty/not empty, and user attribute comparison):- Conversion Goal
- Business Event
- Smart Trigger & Dynamic Condition
- Flows
Frequently Asked Questions (FAQs)
What is the difference between "Is Empty" and "Does Not Exist"?
What is the difference between "Is Empty" and "Does Not Exist"?
The difference is between a missing field and a blank value.
- Does Not Exist: The attribute key was never created or tracked for the user (for example, a “Loyalty_ID” field is completely missing from User A’s profile).
- Is Empty: The attribute key exists on the profile, but the value stored is an empty string (for example, User B has a “Loyalty_ID” field, but it contains no text: "").
What's the best way to find accurate users who have a specific attribute with an actual, non-empty value?
What's the best way to find accurate users who have a specific attribute with an actual, non-empty value?
To ensure you target users with genuine data, you should always combine the Exists and Is Not Empty operators using AND logic. This prevents the system from accidentally including users who simply don’t have the attribute at all.
- Example: To find users with a valid phone number, use: (Phone Number EXISTS) AND (Phone Number IS NOT EMPTY)
- Why this works: Exists confirms the field is on the profile, and Is Not Empty ensures that the field isn’t just a blank string.