How to manage audiences

This page covers the data model behind audiences, how to create an audience on Satori console, and how to use Includes and Excludes to override filter rules.

Quick look at Satori audiences #

CapabilityDescription
Unlimited audiencesNo cap on audience definitions. Create as many segments as your operation requires.
Default and computed propertiesSegment players using device, demographic, and behavioral data collected automatically from day one.
Custom propertiesExtend segmentation with game-specific attributes you define: player level, character class, guild membership, and more.
Managed audiencesBring in segments from external analytics tools as read-only audiences, without migrating data or rebuilding logic.
Near real-time updatesAudiences recompute on a schedule and update immediately when a player sends a key game event. See Recompute audiences.

Three ways to manage audiences #

Satori gives you three ways to build and manage audiences.

Three ways to manage audiences: Default audiences (auth properties), Custom events (client events), External import (external source)

Default audiences require nothing from your team. Satori automatically creates default audiences using the properties carried during player authentication. For example, audiences such as New Players, Tier-1 Countries, and All Spenders are available from day one, with no additional instrumentation.

Custom events unlock as your integration deepens. Sending additional events and properties from the client, such as player level, session frequency, spend behavior, and custom milestones, lets Satori compute more precise segments. This opens the full capability of audience targeting across live events, experiments, and messages.

External import connects your existing data. If you already manage segments in an external analytics tool, you can import those audiences directly into Satori as read-only segments, without migrating data or rebuilding logic you already have.

Player properties: the data you filter on #

Audiences are defined by filter expressions evaluated against each player’s properties. Every player identity in Satori carries three types of properties. Your filter expressions can reference any of them.

The depth of your segmentation grows with the data you send. Default properties are available from the first authentication. Computed and custom properties become available as your game sends events and sets values.

For a full reference on property types, computed property naming patterns, and how to set custom properties from the client, see Understand player properties.

Create an audience #

Audience creation is handled entirely in the Satori Console. No game client changes are required. As long as your game is already sending events, you can define and save audiences using only the console UI.

To create a new audience:

  1. Go to Audiences in the left menu.
  2. Click Create New Audience in the top right. A side panel opens.
  3. Enter an audience name and description.
Create Audience panel showing Name, Description, Audience Filters with form view toggle, Includes and Excludes fields
  1. Add filters using the form view. For each condition, select a property, choose an operator, and set a value. Add multiple conditions to narrow the audience. All conditions must match for a player to qualify.
Audience filter form view
Audience filter form view
Audience filter query view
Audience filter query view
  1. Optionally, add identity IDs to the Includes or Excludes lists.
Audience creation Includes and Excludes fields
  1. Click Create.

The form view covers most segmentation use cases without requiring any expression syntax: filtering by country, device type, session count, spend behavior, time since last active, and player level.

Key Points
  • Use filters to group your players into audiences.
  • Switch between query and form view to match your needs better while filtering your audiences.
  • Use Includes and Excludes to manually add and remove identities to your audiences.

Includes and excludes #

Includes and Excludes let you add or remove specific players by identity ID, regardless of what the filter expression evaluates to.

  • Includes: players added here are in the audience even if they don’t match the filter.
  • Excludes: players added here are never in the audience even if they do match the filter.

When an identity ID appears in both lists, Excludes takes priority and the player is excluded.

A common use for Includes is adding QA or developer accounts to an audience so you can test the experience in-game without those accounts naturally qualifying for the segment. For tightly controlled audiences such as a VIP list or a suppression group, you can set the filter expression to false and rely entirely on Includes. This prevents any player from being added automatically and keeps membership fully manual.

Managed audience: bring your own segment #

If your team already manages segments in an external analytics platform, you can import them directly into Satori. Imported audiences are read-only. They’re maintained in your existing tools and reflected in Satori automatically.

Create a managed audience using the toggle in the Create Audience panel. There’s a console endpoint to update managed audience overrides and excludes for identity IDs.

The Create Audience panel showing the managed audience toggle

You can still manually add or remove specific player IDs using the Includes and Exclude lists in the following steps of the creation wizard.

This is ideal for toolchains where some audience logic originates outside Satori but requires integration and operator control inside Satori.

Copy audiences #

For faster creation, copy an existing audience using the three-dot menu in the top right corner of the audience detail view.

Copying an audience duplicates all properties, including the Includes and Excludes lists. The console opens the new audience creation screen with all settings pre-filled. Review all settings before saving, and make any changes needed.

Rename the copied audience before saving — the default name uses a -copy suffix.

Audience details #

When you create an audience, it appears in the list under the Audiences page. Click any audience to open the Audience Details page.

Audience details page

Usage and references #

Audience details include a usage indicator (In Use or Unused) so you can quickly identify whether an audience is active in LiveOps configurations.

The Usage & References tab lists where an audience is used, including:

  • Live events
  • Experiments
  • Feature flags and variants
  • Message schedules

Check this view before editing or deleting an audience to avoid disrupting active content.

Usage and References tab showing where an audience is used

Editing an audience #

To edit an audience, click the three-dot menu in the top right and select Edit. You can change any setting, including filters. Changes take effect after the next recomputation cycle.

Players in this audience #

The Players in this Audience tab lists all identities currently in the audience and the date they joined. You can permanently or temporarily exclude identities using the three-dot menu on an identity in the list, and click any identity to view their profile.

  • Permanent exclusion adds the identity ID to the Excludes list.
  • Temporary exclusion removes the player from the audience until they meet the criteria again.
List of players inside the audience

Delete all identities #

To delete all identities in an audience, go to the Players in this Audience tab and click Delete All Identities. This permanently deletes all identities within that audience from the system.

This button is disabled by default. It can be enabled using the console.audience.is_delete_all_identities_enabled configuration for development environments only. Contact the Heroic Cloud team to enable it for your environment.

Delete All Identities button in the Players in this Audience tab

Advanced filter expressions #

For advanced cases such as regular expression matching, arithmetic across computed properties, or version range targeting, toggle to the query view in the Create Audience dialogue. Here you can write raw filter expressions to define an audience.

A filter expression is a logical statement evaluated against a player’s properties. Players who satisfy the expression are included in the audience; those who don’t are excluded. Expressions are written in the Satori console using either a form view or a query view.

The functions below are the building blocks of any filter expression:

FunctionDescription
Properties(string, default)Returns a default property value, or the fallback if not found.
PropertiesComputed(string, default)Returns a computed property value, or the fallback if not found.
PropertiesCustom(string, default)Returns a custom property value, or the fallback if not found.
Now()Returns the current time in seconds since epoch.
Duration(string)Converts a duration string to seconds, for example Duration("7d"), Duration("30d").
SemverMatch(range, version)Returns true if the version matches the provided range, for example SemverMatch(">1.0.0 <2.0.0", PropertiesCustom("clientVersion", "1.0.0")).

Common audience filters #

The following filters cover the segments most commonly used in LiveOps operations. Use them as-is or adapt them to your game’s event taxonomy.

AudienceFilter expression
Recently activeNow() - updateTime < Duration("30d")
New playersNow() - createTime <= Duration("2d")
Existing playersNow() - updateTime < Duration("2d")
Dormant playersNow() - updateTime > Duration("7d") and Now() - updateTime < Duration("14d")
Churned playersNow() - updateTime >= Duration("14d")
Veteran playersPropertiesComputed("sessionStartCount", 0) >= 100
All spendersPropertiesComputed("purchaseCompletedCount", 0) > 0
Non-spendersPropertiesComputed("purchaseCompletedCount", 0) < 1
Recent spendersNow() - PropertiesComputed("purchaseCompletedSeenLast", 0) < Duration("7d") and PropertiesComputed("purchaseCompletedCount", 0) > 0
Level 10+PropertiesComputed("levelCompletedValueHigh", 0) >= 10
Client version rangeSemverMatch(">1.0.0 <2.0.0", PropertiesCustom("clientVersion", "1.0.0"))

Filter validation #

Satori validates the syntax of your filter expression and surfaces errors inline in the query view. A filter with an invalid operator or missing argument will be flagged before you save.

However, Satori doesn’t detect logical contradictions. A filter that can never match any player will pass validation without warning. The most common example is combining two mutually exclusive country conditions:

1
2
3
4
// This audience will always have zero players:
Properties("countryCode", "") == "US"
and
Properties("countryCode", "") == "GB"

If an audience shows a count of zero after its first computation cycle and you expect it to have members, check your filter logic for contradictions before assuming a data or configuration issue.

Filter expression reference #

Comparison operators #

OperatorDescription
==Equal to
!=Not equal to
<Less than
<=Less than or equal to
>Greater than
>=Greater than or equal to

Logical operators #

OperatorDescription
&& or andAND
|| or orOR
! or notNOT

String operators #

OperatorDescriptionExample
+ConcatenationPropertiesCustom("firstName", "") + " " + PropertiesCustom("lastName", "")
matchesRegular expression matchProperties("countryCode", "") matches "^(US|CA|GB)$"
containsString contains substringProperties("email", "") contains "@heroiclabs.com"
startsWithString starts with substringPropertiesCustom("installVersion", "") startsWith "2.0"
endsWithString ends with substringProperties("email", "") endsWith "@heroiclabs.com"

Arithmetic operators #

OperatorDescription
+Addition
-Subtraction
*Multiplication
/Division
%Modulus
**Exponentiation

SemverMatch operators #

OperatorDescription
==Equal to
!=Not equal to
<Less than
<=Less than or equal to
>Greater than
>=Greater than or equal to
(space)AND: links multiple ranges in one expression
||OR: links multiple ranges in one expression