Constraint Builder


The Constraint Builder lets you define filters to limit a target audience, when defining a list segment or filtering an audience in a journey.

The following types of constraints can be set (detailed explanations can be found in each section below) :

  • Audience/Field — To set a filter on a field of the main list, or on a field of a 1:1 profile extension or 1:N / N:1 linked list.
  • Engagement — For filtering on profile metrics or journey interactions.
  • Interest — Option to filter on interest tag values.
    This is only available when the Interest tags feature is activated on your environment and configured for the list.
  • Segment — To include/exclude existing segments of the main list
  • Custom Event — Only applicable when defining an audience filter in Custom Journeys using the Custom Event entry component.
  • Send-time Optimization — Filter to check if an STO profile exists or not.
    This is only available when the Send-Time Optimization feature is activated on your environment and at least one interaction took place from a contact in this list during the last 6 months.


Audience/Field constraint

1. About audience/field constraints

Note: For textual and numeric fields, the user has the possibility to select an additional 'is one of' value from the list of operators.
For this operator, option list codes are also supported in case of an option list field.

An input field is shown, allowing the user to input a pipe separated list of values.
The expected format is shown in a tooltip when hovering over the info icon (validation is in place in case a user enters an incorrect value).

For date and date-time fields, different date selections are provided, where you can choose between a 'date/time' or a 'date part' (hour, day, month, month/day, year).

2. Date/time filters

The 'date time' picker allows you to select a fixed or relative date (for date fields) or date/time (for date/time fields).

2a. Fixed date/time

Example of a fixed date selection :
Target contacts with their date of birth on a specific day, month and year.
(e.g. October 16th 1981)

2b. Relative date/time

Example of a relative date selection :
Target contacts that opted out in the last week (Optout date is after 'today minus 1 week').

- If today is December 14th 2021, the constraint targets contacts who opted out after December 7th 2021.
- If today is January 20th 2023, the constraint targets contacts who opted out after January 13th 2023.

Note 1: A relative point in time can be relative to today or now.
- Today uses the current (*) day (which is the date without time).
- Now uses the current (*) date and time (and is therefore only available for datetime fields, not for date fields).

(*)current implies at the moment of journey execution.

Note 2: 'Audience/Field is day/month/year' can only be selected when the field is a date field.

For datetime fields, the 'date time' selector is disabled when the is operator is selected.
Instead you'll need to configure a 'date part' configuration.
The reason for this is that it's impossible to make an equation of a datetime field (e.g. 01/09/2021 2:25) with a date value (e.g. 01/09/2021)

It's of course possible to use another operator for datetime fields (e.g. 'is before').
In that case, the 'date time' selector is available, and values can be chosen for a specific date and time.

Note : Relative datetime constraints (e.g. now, today) are evaluated against the server datetime.
To make sure your constraints work as expected, one of the following is advised :
- Store datetimes in SQL server timezone.
- Account for the offset in the constraint you set up.
* For the EU servers the time used is Roman Central time -> UTC+1 or CET during daylight saving time in winter, and UTC+2 or CEST in summer. Meaning countries like, for example the UK, are down one hour from this at all times and will have to adjust for this.
* For the US servers, the server time is EST.
Example : If a UK user wants to use "Now minus 10 minutes", they will have to make sure that either the data they use is adjusted to the server time, or to use "Now minus 70 min" in the constraint.

3. Date part filters

The 'date part' filters (year, month/day, month, day, hour) only take that specific part of the date (or date/time) into account (whether it's a relative or fixed filter).

3a. Fixed date part

Example of a fixedmonth/day selection :
Target contacts that have their birthday on a specific day of the month (eg. July 22nd), regardless the year they were born.

Example of a fixedyear selection :
Target contacts that were born in a specific year.

3b. Relative date part

Example of a relativemonth/day selection :
Target contacts that have their birthday on the current month and day.

- If today is January 19th, the constraint only targets contacts with their birthday on January 19th (regardless of the year).
- If today is March 1st, the constraint only targets contacts with their birthday on March 1st (regardless of the year).

Note: The 'current' date part is always the date part at the moment of execution of the journey.

4. Lookup constraints

For the Lookup Component in Custom Journeys, it's not only possible to create a constraint filter based on a string value ('Value'),but also on a posted value, coming from a form field ('Requestvalue'), a field value in the Lookup List or Linked List ( 'Listvalue') or a field value in the Audience List or 1:1 Linked List ('ProfileValue').

Example of a 'Value' condition :
The MAIL field in the Audience List contains the value ''

Example of a 'RequestValue' condition :
The MAIL field in the Audience List contains the value entered in the MAIL field of the form.

Example of a 'ListValue' condition :
The FAV_PRODUCTS field value in the Lookup List '[Parana] Users' is the same as the value stored in the TOP_CAT1 field of the 1:1 linked list with scope TOPCATEGORY.

Example of a 'ProfileValue' condition :
The VOUCHERCODE field value in the '[Parana] Vouchers' Lookup List is the same as the value stored in the STORECODE_PREF field of the scope LOYALTYCARD which is a 1:1 linked list to the Audience List.


Combined expressions of 1:N related lists into single constraints


Nested relations

Note: Keep in mind that the scope names of relations are used in the Constraint Builder.

For example, when an Audience List has a 1:1 profile extension with a Device List called 'devices mobile', and the relation has been setup with scope name 'MOBILE', it's 'MOBILE' that is shown in the Constraint Builder.

You can also create groups on each level to support all (AND) / any (OR) combinations. See this section about grouping.

The following icons are visible for each constraint :


Engagement constraint

Engagement constraints are for filtering on profile metrics or journey interactions.

Profile metrics

Profile metrics are based on engagement information such as email sent, clicked, viewed, last view date etc. This data is collected when the Engagement Metrics feature is active for the environment.
To use the profile metrics, select profile from the drop-down list.

This gives access to all the engagement metrics collected for the profile.

Note: A tooltip indicates that data is being used from the last 90 days (default time window setting).


Journey interactions

For journey interactions, this can be set for Marigold Engage journeys and Campaign journeys (if applicable).
If both are applicable for you, you need to select the correct source :

If not applicable, this will be applied to Marigold Engage journeys automatically (no source drop-down is shown in that case).

Marigold Engage journey interactions

Note: Additionally to what is shown in the video above, next to Engage journey interactions on emails and pages, control groups can also be selected, which further drill down into an "is part of / is not part of" selection, "priority / remaining" group selection, and a time frame.

Campaign journey interactions

Note: When you've selected a Campaign journey before, and open the journey selector again for that constraint, the folders and sub-folders are expanded in which the journey is located and the journey is selected.

When you've selected a Campaign journey before, and open the journey selector for a new constraint (in the same Constraint Builder window), all folders and sub-folders that were expanded in the previous Campaign selection are now also shown as such, together with the scroll position of the last selection. No journey is selected in this case.


Interest Tags constraint

When the Interest Tags feature is activated and a Tag list has been configured and used in content, interest metrics are gathered providing insight in a contact's preferences. This information is stored in a profile extension of the Audience List and can be used for filtering.

To do so, select 'Interest' to access the interest data and then the type of data you want to use in the filter, followed by the constraint.

A filter based on the top email tag equal to ELECTRO.


Segment constraint

Custom Event constraint

Custom Events are used for event-driven journeys, triggered by Custom Event data defined in Audience Lists and react upon them.

When a Custom Journey starts with a Custom Event Component, it's possible to use the Custom Event data in the Constraint Builder.

An extra 'Custom event' option is available in the first drop-down for the use in an :

Example :
Custom Event Component -> Audience Filter -> Email message

A constraint has been set on the Audience Filter, which looks like this :

In the above example, when contacts have run a distance over 5 kilometers (= Custom Event data coming from the Audience List), they receive a run activity email.


Send-time Optimization constraint

When the Send-time Optimization feature is activated on your environment and on individual journey level, messages are sent at the best send-time for the contact.
This best send-time is stored in an STO profile. Contacts with no interaction don't have an STO profile. The existence of an STO profile can be used in the Constraint Builder to filter the audience.



Convert to group


Remove expression / remove group

For single constraints, when you click on the icon, the constraint is removed.

Note: The initial single constraint (on launch) cannot be removed. The rubbish bin icon is grayed out in this case.

For group constraints, when you click on the icon, the group, along with all of its inner constraints (group & single constraints), is removed.

Note: The group at the highest level cannot be removed; only inner groups can be removed.


Duplicate expression / duplicate group

For single constraints, when you click on the icon, the constraint is duplicated (within the current group).

Note: The initial single constraint (on launch) cannot be duplicated.
Similarly, incomplete constraints (red border on the left) cannot be duplicated.
The duplicate icon is grayed out in both cases.

For group constraints, when you click on the icon, the group constraint is duplicated (within the parent group).

The group on the highest level cannot be duplicated, only inner groups can be duplicated.

Example :


Waterfall count

Note: The counts give an indication on the target audience based on your constraints defined.
This will result in the audience filter (that can be used in list segments and journeys) to contain a limited audience target.

Keep in mind that this target count does not reflect contacts who've already received messages through journeys, nor takes other components in a Custom Journey into account. ( Custom Journeys contain target counts themselves related to journey executions. Those counts are not related to the counts inside the Constraint Builder.)


Manual expression editor

It's possible that you've used 'older' expressions, that have been changed during implementation of the latest version of the Constraint Builder. Because their implementation has changed, they are no longer supported through the new filter designer.
For those cases, when accessing the Constraint Builder, a manual expression editor is shown.
Those expressions can be viewed, edited and saved.

As long as the expression is not valid, the 'OK' button is grayed out and a warning icon is shown at the top-right. When hovering over the icon with the mouse cursor, a message is shown to explain that the expression cannot be parsed correctly, and it needs to be corrected.

When the expression is valid, the warning icon is no longer shown and the 'OK' button becomes available to save the constraint.

After saving, the expression editor is closed.
When accessing it again, the new Constraint Builder is shown as the constraint is now valid.

Note: Expressions that can be used can be found here.

Note: The 'between' operator is non-inclusive, meaning the lower and upper limits will not be included in the selection.

Note: Besides the general Marigold Engage expressions, some specific expressions exist that can only be used within the manual expression editor of the Constraint Builder. Those expressions are listed here.

On both tabs, the following items are available :

  • Name field — Enter the constraint name here. This is a required field.
  • OK button — Click on this button to save your audience filter setup. The button is only enabled when all constraints are completed correctly (i.e. no red borders visible) and a constraint name is entered in the Name field.
  • Cancel button — Click this button to discard your audience filter setup changes and close the Constraint Builder.

Example : Creating Recurring Batch Journeys with Complex Constraints

Example : Create a constraint with nested 1-to-N data

Test your knowledge about the target count in the Constraint Builder

Consider the following case : A journey exists with an audience filter set that limits the target to 1005 contacts. The journey is launched and actually sends out messages to 987 of those contacts (18 others are bounced). When consulting the Constraint Builder afterward, and requesting a count refresh, what will the count value be?