Page Summary
-
expression_rule_user_listdefaults to "disjunctive normal form" (OR_OF_ANDS), where every rule item in at least one group must match. -
"conjunctive normal form" (
AND_OF_ORS) is available forexpression_rule_user_listusing therule_typefield, requiring at least one rule item in each group to match. -
Attempting to use
AND_OF_ORSwithdate_specific_rule_user_listwill cause an error. -
Past users can be included in a rule-based user list by setting
prepopulation_statustoREQUESTED, which includes users from the last 30 days depending on list settings and tag date. -
The prepopulation status can be monitored and will change to
FINISHEDorFAILED.
You can use user lists in your remarketing campaigns to re-engage with users who have performed specific actions on your website or app. The Google Ads API supports several types of user lists. This guide focuses on creating rule-based user lists using the rule item groups defined in Create rule item groups.
Rule-based user lists
Rule-based user lists built with
flexible_rule_user_list can contain multiple rules
(inclusive_rule and exclusive_rule, joined by
inclusive_rule_operator). Each rule is represented
by a UserListRuleInfo message, which has a
rule_type field that dictates how rule items within rule item
groups are combined.
Although UserListRuleTypeEnum defines both
OR_OF_ANDS (disjunctive normal form) and
AND_OF_ORS (conjunctive normal form), OR_OF_ANDS is the only
supported rule_type for FlexibleRuleUserListInfo
(setting AND_OF_ORS returns
UserListError.RULE_TYPE_IS_NOT_SUPPORTED). With
OR_OF_ANDS, Google Ads ANDs together all rule items in a rule item group, which
means that for a given rule, every rule item in at least one rule item
group must match for the rule to be satisfied.
After defining the two UserListRuleItemGroupInfo objects in
Create rule item groups, combine them into a new user list.
The following code example leaves the default OR_OF_ANDS rule type in place,
adds both rule item groups to a FlexibleRuleOperandInfo on
FlexibleRuleUserListInfo, and mutates the user list:
Java
FlexibleRuleUserListInfo flexibleRuleUserListInfo = FlexibleRuleUserListInfo.newBuilder() .setInclusiveRuleOperator(UserListFlexibleRuleOperator.AND) .addInclusiveOperands( FlexibleRuleOperandInfo.newBuilder() .setRule( // The default rule_type for a UserListRuleInfo object is OR of ANDs // (disjunctive normal form). That is, rule items will be ANDed together // within rule item groups and the groups themselves will be ORed together. UserListRuleInfo.newBuilder() .addRuleItemGroups(checkoutDateRuleGroup) .addRuleItemGroups(checkoutAndCartSizeRuleGroup)) // Optional: includes a lookback window for this rule, in days. .setLookbackWindowDays(7L)) .build();
C#
FlexibleRuleUserListInfo flexibleRuleUserListInfo = new FlexibleRuleUserListInfo(); FlexibleRuleOperandInfo flexibleRuleOperandInfo = new FlexibleRuleOperandInfo() { Rule = new UserListRuleInfo() }; flexibleRuleOperandInfo.Rule.RuleItemGroups.Add(checkoutAndCartSizeRuleGroup); flexibleRuleOperandInfo.Rule.RuleItemGroups.Add(checkoutDateRuleGroup); flexibleRuleUserListInfo.InclusiveOperands.Add(flexibleRuleOperandInfo);
PHP
$flexibleRuleUserListInfo = new FlexibleRuleUserListInfo( [ 'inclusive_rule_operator' => UserListFlexibleRuleOperator::PBAND, 'inclusive_operands' => [ new FlexibleRuleOperandInfo( [ 'rule' => new UserListRuleInfo( [ // The default rule_type for a UserListRuleInfo object is OR of ANDs // (disjunctive normal form). That is, rule items will be ANDed together // within rule item groups and the groups themselves will be ORed together. 'rule_item_groups' => [ $checkoutAndCartSizeRuleGroup, $checkoutDateRuleGroup ] ] ), // Optionally add a lookback window for this rule, in days. 'lookback_window_days' => 7 ] ) ], 'exclusive_operands' => [] ] );
Python
# Create a FlexibleRuleUserListInfo object, or a flexible rule # representation of visitors with one or multiple actions. # FlexibleRuleUserListInfo wraps UserListRuleInfo in a # FlexibleRuleOperandInfo object that represents which user lists to # include or exclude. flexible_rule_user_list_info: FlexibleRuleUserListInfo = ( rule_based_user_list_info.flexible_rule_user_list ) flexible_rule_user_list_info.inclusive_rule_operator = ( client.enums.UserListFlexibleRuleOperatorEnum.AND ) # The default rule_type for a UserListRuleInfo object is OR of # ANDs (disjunctive normal form). That is, rule items will be # ANDed together within rule item groups and the groups # themselves will be ORed together. rule_operand: FlexibleRuleOperandInfo = client.get_type( "FlexibleRuleOperandInfo" ) rule_operand.rule.rule_item_groups.extend( [ checkout_and_cart_size_rule_group, checkout_date_rule_group, ] ) rule_operand.lookback_window_days = 7 flexible_rule_user_list_info.inclusive_operands.append(rule_operand)
Ruby
r.flexible_rule_user_list = client.resource.flexible_rule_user_list_info do |frul| frul.inclusive_rule_operator = :AND frul.inclusive_operands << client.resource.flexible_rule_operand_info do |froi| froi.rule = client.resource.user_list_rule_info do |info| info.rule_item_groups += [checkout_date_rule_group, checkout_and_cart_size_rule_group] end # Optionally include a lookback window for this rule, in days. froi.lookback_window_days = 7 end end
Perl
my $flexible_rule_user_list_info = Google::Ads::GoogleAds::V25::Common::FlexibleRuleUserListInfo->new({ inclusiveRuleOperator => AND, inclusiveOperands => [ Google::Ads::GoogleAds::V25::Common::FlexibleRuleOperandInfo->new({ rule => Google::Ads::GoogleAds::V25::Common::UserListRuleInfo->new({ # The default rule_type for a UserListRuleInfo object is OR of # ANDs (disjunctive normal form). That is, rule items will be # ANDed together within rule item groups and the groups # themselves will be ORed together. ruleItemGroups => [ $checkout_date_rule_group, $checkout_and_cart_size_rule_group ]} ), # Optionally include a lookback window for this rule, in days. lookback_window_days => 7 }) ], exclusiveOperands => []});
curl
Include past users in a rule-based list
You can also include past website visitors or app users in a rule-based user
list (supported on the Display Network only) by setting the
prepopulation_status of the user list to
REQUESTED, and monitor the progress of the asynchronous
prepopulation process by periodically checking the status of this field.
Prepopulation only adds past users from within the last 30 days, depending on
the list's membership_life_span (from 1 to 540 days)
and the date when the remarketing tag was added. The status updates to
FINISHED once the request is processed, or
FAILED if the request fails.
Target the user list and adjust bids
Once you have created your UserList, attach its resource name to an
AdGroupCriterion or
CampaignCriterion and set bid_modifier (for example,
1.25 for a 25% bid increase). For code examples demonstrating how to target a
user list and modify bids, see
Target the list.