Groups (Enterprise Edition)

Last Updated: 2021-10-13

Once you have an App, Source, and Properties (start with an App if you don't have any), then you're ready to define your Groups.

Groups are where the magic happens in Grouparoo. (It's in the name, after all!) Groups are a segment or cohort of Records. They are useful in that you can use Groups to target a specific set of users to export to some Destination. You can have Calculated Groups and Manual Groups. See here to learn more about the core concepts in Grouparoo.

Adding Calculated Groups

Calculated Groups add and remove Records automatically based on Group Rules that you define. Each Rule has several options for logically determining if a Record belongs in the Group. Those options are listed below, followed by a few examples.

Rule Operation Options

Each Rule has an operator — a logical statement to filter records. A Record must match every Rule to be included in the Group.

Available operations depends on both the type of Property and the underlying Grouparoo database (SQLite vs. Postgres). See below for a list of rules. (If in doubt, choose Postgres.)

The following operators are available on boolean properties:

exists
exists with any value
{
"propertyId": "subscribed",
"op": "exists"
}
All records that have data about subscription status

notExists
does not exist
{
"propertyId": "subscribed",
"op": "notExists"
}
All records that do not have data about subscription status

eq
is equal to
{
"propertyId": "subscribed",
"op": "eq",
"match": "true"
}
All subscribers

ne
is not equal to
{
"propertyId": "subscribed",
"op": "ne",
"match": "true"
}
All non-subscribers

The following operators are available on date properties:

exists
exists with any value
{
"propertyId": "last_purchase_date",
"op": "exists"
}
All records who have made a purchase

notExists
does not exist
{
"propertyId": "last_purchase_date",
"op": "notExists"
}
All records who have not made a purchase

eq
is equal to
{
"propertyId": "last_purchase_date",
"op": "eq",
"match": "2021-05-25T04:45:00.000+00:00"
}
All records whose most recent purchase was on May 25, 2021 at exactly 4:45AM UTC.

ne
is not equal to
{
"propertyId": "last_purchase_date",
"op": "ne",
"match": "2021-05-25T04:45:00.000+00:00"
}
All records whose most recent purchase was anytime except May 25, 2021 at exactly 4:45AM UTC.

gt
is after
{
"propertyId": "last_purchase_date",
"op": "lt",
"match": "2020-12-25T04:45:00.00+00:00"
}
All records whose most recent purchase is after December 25, 2020 at 04:45:00 UTC.

lt
is before
{
"propertyId": "last_purchase_date",
"op": "lt",
"match": "2021-05-25T09:30:00.000+00:00"
}
All records whose most recent purchase is prior to May 25, 2021 9:30:00 AM UTC.

gte
is on or after
{
"propertyId": "last_purchase_date",
"op": "gte",
"match": "2019-06-14T18:16:00.000+00:00"
}
All records whose most recent purchase is exactly at or after June 14, 2019 at 6:16 PM UTC

lte
is on or before
{
"propertyId": "last_purchase_date",
"op": "lte",
"match": "2020-12-25T04:45:00.000+00:00"
}
All records whose most recent purchase is exactly at or before December 25, 2020 at 04:45:00 UTC.

relative_gt
is in the past
{
"propertyId": "last_purchase_date",
"op": "relative_gt",
"relativeMatchNumber": "60",
"relativeMatchUnit": "days"
}
All records whose most recent purchase is within the last 60 days

relative_lt
is in the future
{
"propertyId": "subscription_ends",
"op": "relative_lt",
"relativeMatchNumber": "30",
"relativeMatchUnit": "days"
}
All records whose subscription ends within the next 30 days

The following operators are available on email properties:

exists
exists with any value
{
"propertyId": "email",
"op": "exists"
}
All records with an email address listed.

notExists
does not exist
{
"propertyId": "email",
"op": "notExists"
}
All records without an email address listed.

eq
is equal to
{
"propertyId": "email",
"op": "eq",
"match": "hello@grouparoo.com"
}
All records with an email address exactly equal to hello@grouparoo.com.

ne
is not equal to
{
"propertyId": "email",
"op": "ne",
"match": "hello@grouparoo.com"
}
All records without an email address exactly equal to hello@grouparoo.com.

like
is like (case sensitive)
{
"propertyId": "email",
"op": "like",
"match": "%smith%"
}
All records with an email address containing smith (case sensitive).

notLike
is not like (case sensitive)
{
"propertyId": "email",
"op": "notLike",
"match": "%smith%"
}
All records without an email address containing smith (case sensitive).

startsWith
starts with
{
"propertyId": "email",
"op": "startsWith",
"match": "test"
}
All records with an email address starting with "test" (case sensitive).

endsWith
ends with
{
"propertyId": "email",
"op": "endsWith",
"match": "grouparoo.com"
}
All records with an email address ending with "@grouparoo.com" (case sensitive).

substring
includes the string
{
"propertyId": "email",
"op": "substring",
"match": "grouparoo"
}
All records with an email address containing "grouparoo".

iLike
is like (case insensitive)
{
"propertyId": "email",
"op": "like",
"match": "%smith%"
}
All records with an email address containing smith (case insensitive).

notILike
is not like (case insensitive)
{
"propertyId": "email",
"op": "notILike",
"match": "%smith%"
}
All records without an email address containing smith (case insensitive)).

The following operators are available on float properties:

exists
exists with any value
{
"propertyId": "ltv",
"op": "exists"
}
All records with an LTV value.

notExists
does not exist
{
"propertyId": "ltv",
"op": "notExists"
}
All records without an LTV value.

eq
is equal to
{
"propertyId": "ltv",
"op": "eq",
"match": "113932.97"
}
All records with an LTV of exactly $113,932.97.

ne
is not equal to
{
"propertyId": "ltv",
"op": "ne",
"match": "113932.97"
}
All records without an LTV of exactly $113,932.97.

gt
is greater than
{
"propertyId": "ltv",
"op": "gt",
"match": "113932.97"
}
All records with an LTV of greater than $113,932.97.

lt
is less than
{
"propertyId": "ltv",
"op": "lt",
"match": "113932.97"
}
All records with an LTV of less than $113,932.97.

gte
is greater than or equal to
{
"propertyId": "ltv",
"op": "gte",
"match": "113932.97"
}
All records with an LTV of exactly $113,932.97. or more

lte
is less than or equal to
{
"propertyId": "ltv",
"op": "lte",
"match": "113932.97"
}
All records with an LTV of exactly $113,932.97. or less

The following operators are available on integer properties:

exists
exists with any value
{
"propertyId": "visits",
"op": "notExists"
}
All records with any value in the "visits" field.

notExists
does not exist
{
"propertyId": "visits",
"op": "notExists"
}
All records with a null "visits" field.

eq
is equal to
{
"propertyId": "visits",
"op": "eq",
"match": "6"
}
All records with exactly six visits.

ne
is not equal to
{
"propertyId": "visits",
"op": "ne",
"match": "6"
}
All records without six visits.

gt
is greater than
{
"propertyId": "visits",
"op": "gt",
"match": "6"
}
All records with more than six visits.

lt
is less than
{
"propertyId": "visits",
"op": "ne",
"match": "6"
}
All records with less than six visits.

gte
is greater than or equal to
{
"propertyId": "visits",
"op": "gte",
"match": "6"
}
All records with six or more visits.

lte
is less than or equal to
{
"propertyId": "visits",
"op": "lte",
"match": "6"
}
All records with six or fewer visits.

The following operators are available on phoneNumber properties:

exists
exists with any value
{
"propertyId": "phone",
"op": "exists"
}
All records with a phone number listed.

notExists
does not exist
{
"propertyId": "phone",
"op": "notExists"
}
All records without a phone number listed.

eq
is equal to
{
"propertyId": "phone",
"op": "eq",
"match": "+1-555-555-5555"
}
All records with a phone number of +1-555-555-5555.

ne
is not equal to
{
"propertyId": "phone",
"op": "ne",
"match": "+1-555-555-5555"
}
All records without a phone number of +1-555-555-5555.

like
is like (case sensitive)
{
"propertyId": "phone",
"op": "like",
"match": "%780%"
}
All records with a phone number containing 780.

notLike
is not like (case sensitive)
{
"propertyId": "phone",
"op": "notLike",
"match": "%780%"
}
All records without a phone number containing 780.

startsWith
starts with
{
"propertyId": "phone",
"op": "startsWith",
"match": "+1"
}
All records with a phone number starting with +1.

endsWith
ends with
{
"propertyId": "phone",
"op": "startsWith",
"match": "80"
}
All records with a phone number ending with 80.

substring
includes the string
{
"propertyId": "phone",
"op": "startsWith",
"match": "80"
}
All records with a phone number containing the substring 80.

iLike
is like (case insensitive)
{
"propertyId": "phone",
"op": "notLike",
"match": "%780%"
}
All records without a phone number containing 780.

notILike
is not like (case insensitive)
{
"propertyId": "phone",
"op": "notLike",
"match": "%780%"
}
All records without a phone number containing 780.

The following operators are available on string properties:

exists
exists with any value
{
"propertyId": "lastName",
"op": "exists"
}
All records with a last name listed.

notExists
does not exist
{
"propertyId": "lastName",
"op": "notExists"
}
All records without a last name listed.

eq
is equal to
{
"propertyId": "lastName",
"op": "eq",
"match": "Ramirez"
}
All records with a last name of exactly Ramirez.

ne
is not equal to
{
"propertyId": "lastName",
"op": "ne",
"match": "Ramirez"
}
All records without a last name of exactly Ramirez.

like
is like (case sensitive)
{
"propertyId": "lastName",
"op": "like",
"match": "__m%"
}
All records with a last name that has a third letter of m.

notLike
is not like (case sensitive)
{
"propertyId": "lastName",
"op": "notLike",
"match": "__m%"
}
All records without a last name that has a third letter of m.

startsWith
starts with
{
"propertyId": "lastName",
"op": "startsWith",
"match": "Mc"
}
All records with a last name starting with Mc (case sensitive)

endsWith
ends with
{
"propertyId": "lastName",
"op": "endsWith",
"match": "son"
}
All records with a last name ending with son (case sensitive).

substring
includes the string
{
"propertyId": "lastName",
"op": "substring",
"match": "al"
}
All records with a last name containing al (case sensitive).

iLike
is like (case insensitive)
{
"propertyId": "lastName",
"op": "iLike",
"match": "%al%"
}
All records with a last name containing al (case insensitive).

notILike
is not like (case insensitive)
{
"propertyId": "lastName",
"op": "iLike",
"match": "%al%"
}
All records without a last name containing al (case insensitive).

The following operators are available on url properties:

exists
exists with any value
{
"propertyId": "company_url",
"op": "exists"
}
All records with a company URL listed.

notExists
does not exist
{
"propertyId": "company_url",
"op": "notExists"
}
All records without a company URL listed.

eq
is equal to
{
"propertyId": "company_url",
"op": "eq",
"match": "https://www.grouparoo.com"
}
All records with a company URL exactly equal to https://www.grouparoo.com.

ne
is not equal to
{
"propertyId": "company_url",
"op": "ne",
"match": "https://www.grouparoo.com"
}
All records without a company URL exactly equal to https://www.grouparoo.com.

like
is like (case sensitive)
{
"propertyId": "company_url",
"op": "like",
"match": "%grouparoo.com"
}
All records with a company URL containing anything and then grouparoo.com (case sensitive).

notLike
is not like (case sensitive)
{
"propertyId": "company_url",
"op": "like",
"match": "%grouparoo.com"
}
All records without a company URL containing anything and then grouparoo.com (case sensitive).

startsWith
starts with
{
"propertyId": "company_url",
"op": "startsWith",
"match": "https"
}
All records with a company URL starting with https (case sensitive).

endsWith
ends with
{
"propertyId": "company_url",
"op": "startsWith",
"match": ".com"
}
All records with a company URL ending with .com (case sensitive)

substring
includes the string
{
"propertyId": "company_url",
"op": "substring",
"match": "grouparoo"
}
All records with a company URL containing grouparoo (case sensitive)

iLike
is like (case insensitive)
{
"propertyId": "company_url",
"op": "substring",
"match": "%Grouparoo.com"
}
All records with a company URL containing anything followed by Grouparoo.com (case insensitive).

notILike
is not like (case insensitive)
{
"propertyId": "company_url",
"op": "substring",
"match": "%Grouparoo.com"
}
All records without a company URL containing anything followed by Grouparoo.com (case insensitive).

The following operators are available on boolean properties:

exists
exists with any value
{
"propertyId": "subscribed",
"op": "exists"
}
All records that do not have data about subscription status

notExists
does not exist
{
"propertyId": "subscribed",
"op": "notExists"
}
All records that have data about subscription status

eq
is equal to
{
"propertyId": "subscribed",
"op": "eq",
"match": "true"
}
All subscribers

ne
is not equal to
{
"propertyId": "subscribed",
"op": "ne",
"match": "true"
}
All non-subscribers

The following operators are available on date properties:

exists
exists with any value
{
"propertyId": "last_purchase_date",
"op": "exists"
}
All records who have made a purchase

notExists
does not exist
{
"propertyId": "last_purchase_date",
"op": "notExists"
}
All records who have not made a purchase

eq
is equal to
{
"propertyId": "last_purchase_date",
"op": "eq",
"match": "2021-05-25T04:45:00.000+00:00"
}
All records whose most recent purchase was on May 25, 2021 at exactly 4:45AM UTC.

ne
is not equal to
{
"propertyId": "last_purchase_date",
"op": "ne",
"match": "2021-05-25T04:45:00.000+00:00"
}
All records whose most recent purchase was anytime except May 25, 2021 at exactly 4:45AM UTC.

gt
is after
{
"propertyId": "last_purchase_date",
"op": "lt",
"match": "2020-12-25T04:45:00.00+00:00"
}
All records whose most recent purchase is after December 25, 2020 at 04:45:00 UTC.

lt
is before
{
"propertyId": "last_purchase_date",
"op": "lt",
"match": "2021-05-25T09:30:00.000+00:00"
}
All records whose most recent purchase is prior to May 25, 2021 9:30:00 AM UTC.

gte
is on or after
{
"propertyId": "last_purchase_date",
"op": "gte",
"match": "2019-06-14T18:16:00.000+00:00"
}
All records whose most recent purchase is exactly at or after June 14, 2019 at 6:16 PM UTC

lte
is on or before
{
"propertyId": "last_purchase_date",
"op": "lte",
"match": "2020-12-25T04:45:00.000+00:00"
}
All records whose most recent purchase is exactly at or before December 25, 2020 at 04:45:00 UTC.

relative_gt
is in the past
{
"propertyId": "last_purchase_date",
"op": "relative_gt",
"relativeMatchNumber": "60",
"relativeMatchUnit": "days"
}
All records whose most recent purchase is within the last 60 days

relative_lt
is in the future
{
"propertyId": "subscription_ends",
"op": "relative_lt",
"relativeMatchNumber": "30",
"relativeMatchUnit": "days"
}
All records whose subscription ends within the next 30 days

The following operators are available on email properties:

exists
exists with any value
{
"propertyId": "email",
"op": "exists"
}
All records with an email address listed.

notExists
does not exist
{
"propertyId": "email",
"op": "notExists"
}
All records without an email address listed.

eq
is equal to
{
"propertyId": "email",
"op": "eq",
"match": "hello@grouparoo.com"
}
All records with an email address exactly equal to hello@grouparoo.com.

ne
is not equal to
{
"propertyId": "email",
"op": "ne",
"match": "hello@grouparoo.com"
}
All records without an email address exactly equal to hello@grouparoo.com.

like
is like (case sensitive)
{
"propertyId": "email",
"op": "like",
"match": "%smith%"
}
All records with an email address containing smith (case sensitive).

notLike
is not like (case sensitive)
{
"propertyId": "email",
"op": "notLike",
"match": "%smith%"
}
All records without an email address containing smith (case sensitive).

startsWith
starts with
{
"propertyId": "email",
"op": "startsWith",
"match": "test"
}
All records with an email address starting with "test" (case sensitive).

endsWith
ends with
{
"propertyId": "email",
"op": "endsWith",
"match": "grouparoo.com"
}
All records with an email address ending with "@grouparoo.com" (case sensitive).

substring
includes the string
{
"propertyId": "email",
"op": "substring",
"match": "grouparoo"
}
All records with an email address containing "grouparoo".

The following operators are available on float properties:

exists
exists with any value
{
"propertyId": "ltv",
"op": "exists"
}
All records with an LTV value.

notExists
does not exist
{
"propertyId": "ltv",
"op": "notExists"
}
All records without an LTV value.

eq
is equal to
{
"propertyId": "ltv",
"op": "eq",
"match": "113932.97"
}
All records with an LTV of exactly $113,932.97.

ne
is not equal to
{
"propertyId": "ltv",
"op": "ne",
"match": "113932.97"
}
All records without an LTV of exactly $113,932.97.

gt
is greater than
{
"propertyId": "ltv",
"op": "gt",
"match": "113932.97"
}
All records without an LTV of greater than $113,932.97.

lt
is less than
{
"propertyId": "ltv",
"op": "lt",
"match": "113932.97"
}
All records without an LTV of less than $113,932.97.

gte
is greater than or equal to
{
"propertyId": "ltv",
"op": "gte",
"match": "113932.97"
}
All records without an LTV of exactly $113,932.97. or more

lte
is less than or equal to
{
"propertyId": "ltv",
"op": "lte",
"match": "113932.97"
}
All records without an LTV of exactly $113,932.97. or less

The following operators are available on integer properties:

exists
exists with any value
{
"propertyId": "visits",
"op": "notExists"
}
All records with any value in the "visits" field.

notExists
does not exist
{
"propertyId": "visits",
"op": "notExists"
}
All records with an empty "visits" field.

eq
is equal to
{
"propertyId": "visits",
"op": "eq",
"match": "6"
}
All records with exactly six visits.

ne
is not equal to
{
"propertyId": "visits",
"op": "ne",
"match": "6"
}
All records with any number of visits except six.

gt
is greater than
{
"propertyId": "visits",
"op": "gt",
"match": "6"
}
All records with more than six visits.

lt
is less than
{
"propertyId": "visits",
"op": "ne",
"match": "6"
}
All records with less than six visits.

gte
is greater than or equal to
{
"propertyId": "visits",
"op": "gte",
"match": "6"
}
All records with six or more visits.

lte
is less than or equal to
{
"propertyId": "visits",
"op": "lte",
"match": "6"
}
All records with 6 or fewer visits.

The following operators are available on phoneNumber properties:

exists
exists with any value
{
"propertyId": "phone",
"op": "exists"
}
All records with a phone number listed.

notExists
does not exist
{
"propertyId": "phone",
"op": "notExists"
}
All records without a phone number listed.

eq
is equal to
{
"propertyId": "phone",
"op": "eq",
"match": "+1-555-555-5555"
}
All records with a phone number of +1-555-555-5555.

ne
is not equal to
{
"propertyId": "phone",
"op": "ne",
"match": "+1-555-555-5555"
}
All records without a phone number of +1-555-555-5555.

like
is like (case sensitive)
{
"propertyId": "phone",
"op": "like",
"match": "%780%"
}
All records with a phone number containing 780.

notLike
is not like (case sensitive)
{
"propertyId": "phone",
"op": "notLike",
"match": "%780%"
}
All records without a phone number containing 780.

startsWith
starts with
{
"propertyId": "phone",
"op": "startsWith",
"match": "+1"
}
All records with a phone number starting with +1.

endsWith
ends with
{
"propertyId": "phone",
"op": "startsWith",
"match": "80"
}
All records with a phone number ending with 80.

substring
includes the string
{
"propertyId": "phone",
"op": "startsWith",
"match": "80"
}
All records with a phone number containing the substring 80.

The following operators are available on string properties:

exists
exists with any value
{
"propertyId": "lastName",
"op": "exists"
}
All records with a last name listed.

notExists
does not exist
{
"propertyId": "lastName",
"op": "notExists"
}
All records without a last name listed.

eq
is equal to
{
"propertyId": "lastName",
"op": "eq",
"match": "Ramirez"
}
All records with a last name of exactly Ramirez.

ne
is not equal to
{
"propertyId": "lastName",
"op": "ne",
"match": "Ramirez"
}
All records without a last name of exactly Ramirez.

like
is like (case sensitive)
{
"propertyId": "lastName",
"op": "like",
"match": "__m%"
}
All records with a last name that has a third letter of m.

notLike
is not like (case sensitive)
{
"propertyId": "lastName",
"op": "notLike",
"match": "__m%"
}
All records without a last name that has a third letter of m.

startsWith
starts with
{
"propertyId": "lastName",
"op": "startsWith",
"match": "Mc"
}
All records with a last name starting with Mc (case sensitive)

endsWith
ends with
{
"propertyId": "lastName",
"op": "endsWith",
"match": "son"
}
All records with a last name ending with son (case sensitive).

substring
includes the string
{
"propertyId": "lastName",
"op": "substring",
"match": "al"
}
All records with a last name containing al (case sensitive).

The following operators are available on url properties:

exists
exists with any value
{
"propertyId": "company_url",
"op": "exists"
}
All records with a company URL listed.

notExists
does not exist
{
"propertyId": "company_url",
"op": "notExists"
}
All records without a company URL listed.

eq
is equal to
{
"propertyId": "company_url",
"op": "eq",
"match": "https://www.grouparoo.com"
}
All records with a company URL exactly equal to https://www.grouparoo.com.

ne
is not equal to
{
"propertyId": "company_url",
"op": "ne",
"match": "https://www.grouparoo.com"
}
All records without a company URL exactly equal to https://www.grouparoo.com.

like
is like (case sensitive)
{
"propertyId": "company_url",
"op": "like",
"match": "%grouparoo.com"
}
All records with a company URL containing anything and then grouparoo.com (case sensitive).

notLike
is not like (case sensitive)
{
"propertyId": "company_url",
"op": "like",
"match": "%grouparoo.com"
}
All records without a company URL containing anything and then grouparoo.com (case sensitive).

startsWith
starts with
{
"propertyId": "company_url",
"op": "startsWith",
"match": "https"
}
All records with a company URL starting with https (case sensitive).

endsWith
ends with
{
"propertyId": "company_url",
"op": "startsWith",
"match": ".com"
}
All records with a company URL ending with .com (case sensitive)

substring
includes the string
{
"propertyId": "company_url",
"op": "substring",
"match": "grouparoo"
}
All records with a company URL containing grouparoo (case sensitive)

Examples

Here are a few different examples of Calculated Groups and their rules:

Example: Repeat Purchasers

Group Rules:

  • Records who have purchased more than once
  • Records with an email
Repeat Purchasers

Example: High-Value & Abandoned Cart Recently

Group Rules:

  • Records who have a Life-time Value (LTV) of over 30
  • Records who have recently added an item to their cart
  • Records with an email
High Value

Example: High-Value Xhosa Speakers

Group Rules:

  • Records with a language set to xhosa
  • Records who have a Life-time Value (LTV) of over 50
High Value

Adding Manual Groups

While a great deal of the value of Grouparoo comes from our Calculated Groups, Manual Groups are still valuable in certain circumstances. Manual Groups are Groups of records where you manually add or remove Records from the Group.

Next Steps

Once you've grouped your users, you're ready for the last step in the Grouparoo configuration journey, exporting Groups to Destinations.