Learn how to structure filters when using the Lists API
SNAPSHOT
or DYNAMIC
list processing type when creating a list, use filters to determine which records are members of the list.
AND
or OR
operation types. This is defined by the filterBranchType
parameter.filterType
parameter.pruningRefineBy
parameter to refine the data to a specific time range (see Refine By Operation section).coalescingRefineBy
parameter to further refine the data to a specific number of occurrences. For example, the filter “contact has filled out a form at least 2 times”.
coalescingRefineBy
parameter is present, then PASS records that meet the number of occurrences selected.coalescingRefineBy
parameter is present, then records PASS or FAIL based on the criteria set in step 3.OR
or AND
dictate how the filter branch will be evaluated relative to the rest of the branches. The list of filters and sub-filter branches determine which records will be members of a list.
AND
operator, then the record is accepted by the branch if it passes all the branch’s filters and is accepted by all the sub-filter branches.OR
operator, then the record is accepted by the branch if it passes any of the branch’s filters or is accepted by any of the branch’s sub-filter branches.OR
filterBranchType
(see filter branch types for more details). This root level OR
filter branch must then have one or more AND
sub-filter branches.
The root-level OR
filter branch can be thought of as the parent filter branch while the AND
sub-filter branches can be thought of as child filter groups. Together, these branches make up the base filter branch structure.
POST
body would be:
OR
filterBranchType
parameter with two nested AND
filterBranchType
parameters. The nested filter branches each have one filterType
that sets the criteria for the list.
filterType
parameters are nested within AND
filter branches, rather than directly within an OR
filter branch. This structure is enforced by HubSpot’s API so that the list’s filters can be properly rendered in the HubSpot user interface.OR
filterBranchType
with one nested AND
filterBranchType
. The AND
filterBranchType
has two filterType
parameters, one for each criteria.
In the HubSpot user interface, the above code would look like the image below. Any contacts that meet the criteria will be a member of the list.
AND
filterBranchType
parameters:
UNIFIED_EVENTS
: used to filter on events.ASSOCIATION
: used to filter on records that are associated with the primary record being evaluated.AND
filter branch. For example:
filterBranchType
parameters that can be used to construct your list’s filter definition structure.
OR
filterBranchType
. It is used to apply OR conditional logic against records that are accepted by the nested AND
filter branches.
OR
filter branches:
AND
type sub-filter branches.OR
filter branch will accept the record as well.
AND
filterBranchType
is used as a nested filter branch within the parent OR
filter branch. All filter definitions must have at least one AND
filter branch for it to be valid. It is used to apply AND conditional logic against the records that pass evaluation as defined by its filters and have also been accepted by nested filter branches.
AND filter branches:
UNIFIED_EVENTS
and/or ASSOCIATION
filterBranchType
parameters.AND
filter branch accepts a record if the record is accepted by all of its nested filter branches and the record passes all filters in the filter branch.
UNIFIED_EVENTS
filterBranchType
can only be used as a nested filter branch within an AND
filterBranchType
. It is used to determine which records have or have not completed a given unified event.
UNIFIED_EVENTS
type filter branches:
PROPERTY
type filters.UNIFIED_EVENTS
filter branch accepts a record if the record passes all filters on the filter branch and the criteria defined by the UNIFIED_EVENTS
filter branch.
Parameter | Accepted Values |
---|---|
operator | HAS_COMPLETED , HAS_NOT_COMPLETED |
ASSOCIATION
filterBranchType
can only be used as a nested filter branch within an AND
filterBranchType
. It is used to filter on records which are associated with the primary record being evaluated.
ASSOCIATION
filter branches:
ASSOCIATION
filter branch accepts a record if it is accepted by all of its nested filter branches and if the record PASSES all filters of the filter branch.
You can only have additional filterBranches
in the case of a CONTACT
to LINE_ITEM
association.
Parameter | Accepted Values |
---|---|
operator | IN_LIST |
associationCategory | HUBSPOT_DEFINED , USER_DEFINED , INTEGRATOR_DEFINED |
filterType
parameter is used to define the filter within the filterBranch
.
Parameter | Description |
---|---|
ADS_TIME | Evaluates whether a contact has seen any ads in the timeframe defined by the pruningRefineBy parameter. |
ADS_SEARCH | Evaluates whether a contact has performed the ad interactions as defined by the filter. |
CTA | Evaluates whether a contact has or has not interacted with a specific call-to-action as defined by the filter. |
EMAIL_EVENT | Evaluate the opt-in status of a contact for specific email subscriptions as defined by the filter. |
EVENT | Evaluates whether a contact has or does not have a specific event as defined by the filter. |
FORM_SUBMISSION | Evaluates whether a contact has or has not filled out a specific form or any form as defined by the filter. |
FORM_SUBMISSION_ON_PAGE | Evaluates whether a contact has or has not filled out a specific or any form on a specific page as defined by the filter. |
IN_LIST | Evaluates whether a record is or is not a member of a specific list, import, or workflow as defined by the filter. |
PAGE_VIEW | Evaluates whether a contact has or has not viewed a specific page as defined by the filter. |
PRIVACY | Evaluates whether a contact does or does not have privacy consent for a specific privacy type as defined by the filter. |
PROPERTY | Evaluates whether a record’s property value satisfies the property filter operation as defined by the filter. See the property filter operations section for more details. |
SURVEY_MONKEY | Evaluates whether a contact has or has not responded to a specific Survey Monkey survey as defined by the filter. |
SURVEY_MONKEY_VALUE | Evaluates whether a contact has or has not responded to a specific Survey Monkey survey’s question with a specified value as defined by the filter. |
WEBINAR | Evaluates whether a contact has or has not registered or attended any webinars or a specific webinar as defined by the filter. |
INTEGRATION_EVENT | Integration event filters can be used to filter specific contacts based on whether or not they have interacted with integration events that have properties as specified by the filter lines. |
PROPERTY
, INTEGRATION_EVENT
, or SURVEY_MONKEY_VALUE
filter type, you’ll include an operation
object to define the parameters of the filter. This object can contain the following fields:
operationType
: the type of operator that you’re filtering by (e.g., NUMBER
). Each type of property supports a set of operation types, and each operation type supports a set of operators, which you’ll define with the operator
field. (e.g., IS
and IS_NOT
).operator
: the operator that will be applied to operationType
(e.g., IS
and IS_NOT
). Each property type supports a set of operators. Learn more about property types and their supporter operators in the table below.value
/ values
: the value or values to filter by. Some operators can accept one value, while others can accept multiple values in an array.includeObjectsWithNoValueSet
: defines how the operation should treat records that do not have a value set for the defined property.
true
, a record without a value for the evaluated property will be accepted.false
(default), a record without a value for the evaluated property will be rejected.firstname
property value of John
.
OperationType | Supported operators | Description |
---|---|---|
ALL_PROPERTY | String | Used to determine whether a property value is known or is unknown as defined by the property operation. |
BOOL | String | Used to determine whether a current (or historical) boolean property value is or is not (or has or has not) equaled a specific value. |
ENUMERATION | String | Used to determine whether an enumeration/multi-select property value is any of, is none of, is exactly, is not exactly, contains all of, does not contain all of, has ever been any of, has never been any of, has ever been exactly, has never been exactly, has ever contained all, or has never contained all of a given set of values as defined by the property operation. |
MULTISTRING | String | Used to determine whether a string property value is equal to, is not equal to, contains, does not contain, starts with, or ends with any of a given set of values as defined by the property operation. |
NUMBER | String | Used to determine whether a current (or historical) number property value is or is not (or has or has not) equaled a specific value as defined by the property operation. |
STRING | String | Used to determine whether a current (or historical) string property value is or is not (or has or has not) equaled a specific value as defined by the property operation. |
TIME_POINT | String | Used to determine if a property has been updated before or after a specific time. That time can be specified as a specific date or relative to the current day. This operation also allows the comparison of two properties or their last updated time. |
TIME_RANGED | String | Used to determine if a property has been updated between or outside of two specific times. These times can be specified as a specific date or relative to the current day. |
TIME_POINT
and TIME_RANGED
parameter. These parameters can be used in both time-referenced and property-referenced requests. For more information, see the
operator
parameter to IS_NOT_BETWEEN
.
offset
parameter to <=0
.
operator
value to IS_AFTER
.
To filter for when the Latest Open Lead Date was updated: set the referenceType
value to UPDATED_AT
.
pruningRefineBy
: refine the data set to a particular timeframe.coalescingRefineBy
: determines whether the record PASSES the filter the number of times defined.Parameter | Description |
---|---|
comparison | Whether the data’s timestamp is before or after the defined timestamp . Values include:BEFORE , AFTER |
Parameter | Description |
---|---|
rangeType | Whether the data’s timestamp is between or not between the defined lowerTimestamp and upperTimestamp . Values include:BETWEEN , NOT_BETWEEN |
Parameter | Description |
---|---|
comparison | Whether the data’s timestamp is before or after the defined timeOffset values. Values include: BEFORE , AFTER |
offsetDirection | Values include:PAST , FUTURE |
timeUnit | Values include:DAYS , WEEKS |
amount | A number value. |
Parameter | Description |
---|---|
rangeType | Whether the data’s timestamp is between or not between the defined timeOffset values. Values include: BETWEEN , NOT_BETWEEN |
offsetDirection | Values include:PAST , FUTURE |
timeUnit | Values include:DAYS , WEEKS |
amount | A number value. |
Parameter | Description |
---|---|
NUM_OCCURRENCES | Used to determine whether an object in the relevant dataset PASSED the filter evaluation at least a minimum number of times (or zero times if a minimum is not provided) and at most a maximum number of times (or any number of times if a maximum is not provided) as defined by the refine by operation. |
filterType
for v1 lists is PROPERTY
. Below,
IS_KNOWN
and IS_NOT_KNOWN
.
IS_EQUAL_TO
, IS_NOT_EQUAL_TO
, CONTAINS
, DOES_NOT_CONTAIN
, STARTS_WITH
, ENDS_WITH
, HAS_EVER_BEEN_EQUAL_TO
, HAS_NEVER_BEEN_EQUAL_TO
, HAS_EVER_CONTAINED
, HAS_NEVER_CONTAINED
.
IS_EQUAL_TO
, IS_NOT_EQUAL_TO
, CONTAINS
, DOES_NOT_CONTAIN
, STARTS_WITH
, ENDS_WITH
.
IS_EQUAL_TO
, IS_NOT_EQUAL_TO
, CONTAINS
, DOES_NOT_CONTAIN
, STARTS_WITH
, ENDS_WITH
, HAS_EVER_BEEN_EQUAL_TO
, HAS_NEVER_BEEN_EQUAL_TO
, IS_BETWEEN
, IS_NOT_BETWEEN
.
lowerBound
and upperBound
.
value
of true
or false
.
Available operators are: IS_EQUAL_TO
, IS_NOT_EQUAL_TO
, HAS_EVER_BEEN_EQUAL_TO, HAS_NEVER_BEEN_EQUAL_TO
.
IS_EQUAL_TO
, IS_NOT_EQUAL_TO
, HAS_EVER_BEEN_ANY_OF, HAS_NEVER_BEEN_ANY_OF
.
propertyType
field:
datetime
: compares the property value to a specific datetime stamp. Available operators are: IS_EQUAL_TO
, IS_BEFORE_DATE
(millisecond of day’s start), IS_AFTER_DATE
(last millisecond of day’s end).datetime-comparative
: compares the property value to another other datetime property on the contact record. Available operators are: IS_BEFORE
, IS_AFTER
.datetime-ranged
: compares the property value to a specific timestamp range. Available operators are: IS_BETWEEN
, IS_NOT_BETWEEN
.datetime-rolling
: compares the property value to a rolling number of days. Available operators are: IS_LESS_THAN_X_DAYS_AGO
, IS_MORE_THAN_X_DAYS_AGO, IS_LESS_THAN_X_DAYS_FROM_NOW
, IS_MORE_THAN_X_DAYS_FROM_NOW
.rolling-property-updated
: compares the last time the property was updated to a rolling number of days. Available operators are: UPDATED_IN_LAST_X_DAYS
, NOT_UPDATED_IN_LAST_X_DAYS
.