Understand players with analytics events
Events are the behavioral signal Satori uses to build player profiles, compute properties, and populate every metric, report, and audience in your project.
How events flow through Satori #
When your game fires an event, Satori records it against the player’s identity and immediately runs it through the event pipeline. This triggers two things:
- Computed properties: Satori generates or updates a set of properties on the identity based on the event (count, timestamps, values). These properties feed your audience filter expressions and segmentation.
- Metrics and reports: Events feed directly into the performance monitoring surfaces: the dashboard, retention reports, RoAS calculations, and any custom metrics you define.
If an event isn’t fired, it doesn’t exist in Satori, and any downstream feature that depends on it will be incomplete or empty.
View event history per player #
Every event your game fires is recorded against the player’s identity and visible in the Events tab on the identity detail view. Use this to confirm that a specific player’s event history is in the expected state, or to debug missing computed properties and empty audiences.

Open any event to see full event details, value, and metadata.

Event types #
Satori recognizes three types of events.
Core events #
Core events are predefined by Satori and can’t be modified or deleted. They represent standard player behaviors that Satori’s built-in audiences, computed properties, and monitoring features depend on.
Core events are not auto‑captured by the SDK. Your game client (or server, where noted) must fire them to enable downstream features.
Some default audiences depend on computed properties generated from these default events. If you don’t fire the events, those audiences will be incomplete or empty.
The following core events are commonly used across monitoring, segmentation, and experiments. A series of computed properties are automatically generated and tracked per identity for each of these default events, as long as the event is fired.
| Event | Type | Description |
|---|---|---|
achievementClaimed | any | Indicates an achievement with the given identifier was claimed. |
achievementUpdated | numeric | Indicates an achievement with the given identifier was updated. |
adImpression | any | The amount in US cents of ad revenue. |
adPlacementFailed | any | Indicates an ad placement with the given identifier has failed. |
adPlacementStarted | any | Indicates an ad placement with the given identifier was started. |
adPlacementSucceeded | any | Indicates an ad placement with the given identifier has succeeded. |
adStarted | string | Indicates an ad with the given identifier was started. |
appLaunched | string | Indicates the application with the given identifier was started. |
auctionBid | any | Indicates an auction with the given identifier was bid. |
auctionCancelled | any | Indicates an auction with the given identifier was cancelled. |
auctionClaimBid | any | Indicates an auction claim with the given identifier was bid. |
auctionClaimCreated | any | Indicates an auction claim with the given identifier was created. |
auctionCreated | any | Indicates an auction with the given identifier was created. |
challengeClaimed | any | Indicates the challenge with the given identifier has been claimed. |
challengeCreated | any | Indicates the challenge with the given identifier has been created. |
challengeInvitationAccepted | any | Indicates the invitation for the challenge with the given identifier has been accepted. |
challengeInvitationSent | any | Indicates an invitation for the challenge with the given identifier has been sent. |
challengeJoined | any | Indicates a player joined the challenge with the given identifier. |
challengeLeft | any | Indicates a player has left the challenge with the given identifier. |
challengeUpdated | numeric | Indicates the challenge with the given identifier has been updated. |
currencyGranted | numeric | Indicates a currency with the given identifier was granted. |
currencySpent | numeric | Indicates a currency with the given identifier was spent. |
donationClaimed | any | Indicates a donation with the given identifier was claimed. |
donationGiven | any | Indicates a donation with the given identifier was given. |
donationRequested | any | Indicates a donation with the given identifier was requested. |
energyGranted | numeric | Indicates an energy with the given identifier was granted. |
energyModifierGranted | numeric | Indicates an energy with the given identifier was modified. |
energySpent | numeric | Indicates an energy with the given identifier was spent. |
eventLeaderboardClaimed | any | Indicates an event leaderboard with the given identifier has been claimed. |
eventLeaderboardRolled | any | Indicates an event leaderboard with the given identifier has been rolled. |
eventLeaderboardUpdated | numeric | Indicates an event leaderboard with the given identifier has been updated. |
gameFinished | string | Indicates a game with the given identifier was finished. A game marks the outer gameplay envelope for a player’s session, including menus, loading screens, and other activities. It’s distinct from the concept of a match or round. |
gameStarted | string | Indicates a game with the given identifier was started. |
incentiveCreated | any | Indicates an incentive with the given identifier was created. |
incentiveDeleted | any | Indicates an incentive with the given identifier was deleted. |
incentiveRecipientClaimed | any | Indicates an incentive with the given identifier has been claimed by the recipient. |
incentiveSenderClaimed | any | Indicates an incentive with the given identifier has been claimed by the sender. |
itemSpent | numeric | Indicates an item with the given identifier was spent. |
itemUpdated | any | Indicates an item with the given identifier was updated. |
itemsConsumed | numeric | Indicates an item with the given identifier was consumed. |
itemsGranted | numeric | Indicates an item with the given identifier was granted. |
progressionPurchased | any | Indicates a progression with the given identifier was purchased. |
progressionReset | any | Indicates a progression with the given identifier was reset. |
progressionUpdated | numeric | Indicates a progression with the given identifier was updated. |
purchaseCompleted | numeric | The amount in US cents of the purchase. |
purchaseIntent | any | Indicates that there has been an intent for a purchase with the given identifier. |
rewardModifierGranted | numeric | Indicates a reward with the given identifier was modified. |
screenViewed | string | Indicates a game screen with the given identifier was viewed. |
statUpdated | numeric | Indicates a stat with the given identifier was updated. |
teamCreated | numeric | Indicates a team with the given identifier was created. |
tutorialAbandoned | numeric | Indicates a tutorial with the given identifier was abandoned. |
tutorialAccepted | any | Indicates a tutorial with the given identifier was accepted. |
tutorialCompleted | numeric | Indicates a tutorial with the given identifier was completed. |
tutorialDeclined | any | Indicates a tutorial with the given identifier was declined. |
tutorialReset | any | Indicates a tutorial with the given identifier was reset. |
tutorialStarted | numeric | Indicates a tutorial with the given identifier was started. |
tutorialStepCompleted | numeric | The step number of a multipart tutorial that was completed. |
unlockableClaimed | any | Indicates an unlockable with the given identifier has been claimed. |
unlockableCreated | any | Indicates an unlockable with the given identifier has been created. |
unlockableSlotPurchased | numeric | Indicates an unlockable slot has been created. |
unlockableUnlockPurchased | any | Indicates an unlockable with the given identifier has been purchased. |
unlockableUnlockStarted | numeric | Indicates an unlockable with the given identifier has been unlocked. |
Synthetic events #
Synthetic events, also known as server-side events, are automatically generated and tracked by Satori in response to certain actions. For example, Satori fires _propertiesUpdate whenever a player’s properties change, whether from a client SDK call or during authentication. You don’t need to instrument these.
| Event | Description |
|---|---|
_identityCreate | The Satori identity was created. |
_sessionStart | A new play session has started. |
_identify | An anonymous user has been identified. The previous anonymous identity has been merged into the new identity, along with all of its events. |
_propertiesUpdate | The Satori identity had its properties updated. |
_experimentJoin | The Satori identity joined a phase, including experiment, phase, and variant info. |
_liveEventJoin | The Satori identity joined a live event. |
User-defined events #
User-defined events are events you create for game-specific behaviors that core events don’t cover, such as questCompleted, achievementUnlocked, or offerViewed. Like core events, user-defined events must be fired explicitly by your game client. Create and manage them in Taxonomy > Events tab in the console.
Define a custom event in the Satori console before your client sends it. The event name you register here is what your metrics will reference and what your client code must send exactly.
Define valid events #
In the Taxonomy page of the console, the Events tab displays the complete list of events that must be accepted by Satori from clients. It describes the list of valid event schemas.
From here you can delete existing events, or create new ones. Note that Satori comes with a set of core events that can’t be modified or deleted.

Validate data with schema validators #
Every event’s value is checked against a schema to ensure your data remains reliable and consistent. Schema validators define the expected shape of an event’s value or metadata field, and Satori rejects any event that doesn’t match.
The Validators tab in the Taxonomy page displays the complete list of schema validators that Satori uses to validate data from Events, Feature Flags, Experiments, and Live Events.
Satori provides the following built‑in validators:
- ANY - Accepts any value; no validation.
- Number - Expects a numeric value.
- String - Expects a string.
- Object - Expects a JSON object (arbitrary keys/values allowed).
- Event‑Revenue‑Metadata - Specialized object for revenue events; include at least amount and currency (and optional test) to enable correct conversion and revenue calculations.
You can define your own validator. If an analytic event requires a specific payload shape, define the validator here first, then reference it when you create the event in the Events tab.

Debugger for invalid events #
If Satori receives events that aren’t declared in your taxonomy (i.e., an invalid event), it captures them in a temporary buffer. Open the Debugger tab to inspect what your game client is actually sending and use that to correct or extend your event schema.
Events may be rejected for any of the following reasons:
INVALID_VALUEINVALID_METADATAVALUE_LENGTH_EXCEEDEDMETADATA_SIZE_EXCEEDEDINVALID_NAMEINVALID_IDINVALID_SCHEMA

Using metadata or value for custom data
#
Satori events include two fields for custom data:
| Event | Description |
|---|---|
metadata | Key–value context that describes the event. Use this to enrich analysis and data lake exports (for example, tutorial type, isSkipped). |
value | A measure used for computed properties and metrics. Use this to power automatic computed properties (for example, send the tutorial ID in value for tutorialCompleted to update tutorialCompletedSeenLast) and to feed Metrics in the dashboard. |
Example (tutorialCompleted):
| |
Send the event from the client #
Once the event is created, instrument your game client to send it when the relevant action occurs. The event name in your code must exactly match the name you registered in the console.
| |
Satori begins computing metrics and updating audiences as events arrive. The event doesn’t need to reach a minimum threshold before you can create a metric against it.
For a step-by-step guide on how to use custom events to drive audience and experiments, see Experimenting with audiences.
Tracking players before sign-in #
When a player starts your game without signing in, Satori can still track their activity under a temporary identity (typically device-based). If that player later authenticates, Satori merges their guest history into their permanent identity.
Here’s what happens:
- Player starts as guest: Your client calls
Authenticatewith a temporary ID. Satori fires_identityCreateand_sessionStartfor this identity. - Player generates activity: All events, properties, and experiment assignments are tracked under the temporary identity.
- Player signs in: Your client calls
Identifywith the player’s permanent ID. Satori fires_identify, migrates all data from the temporary identity to the permanent one, and deletes the temporary identity.
See Identifying a session with a new ID for more details.
Commonly confused terms #
Some Satori terms sound similar but have distinct meanings. The following clarifies what each one means.
itemSpent vs itemConsumed
#
Use the item events to distinguish cost from use:
| Event | Typical Metadata | Description |
|---|---|---|
itemSpent | {itemId, itemType, amount, sink} | An inventory item is spent as a cost (e.g., 100 gold to craft, 1 key to open a chest). |
itemConsumed | {itemId, itemType, amount, context} | An inventory item is used/consumed (e.g., XP boost token activated, health potion drunk). |
itemSpent and itemConsumed are triggered automatically and forwarded to Satori. See Publishers and Unity analytics.