Gaming/In-game store offers

A store offer that fits what the player ran out of.

Signals tells your game server what this player ran out of, where it happened and what they have bought before, so the offer it builds fits the session instead of the plan set before it started.

Higher ARPDAU

Earn more per player per day by building the offer for the session they are in.

ARPDAU moves when the offer a player sees matches what they need right now, rather than the bundle chosen before the session began. Signals gives your game server what this player ran out of and where, how many times they have opened the store this session, what they tend to buy and whether they have bought at all. Your server builds the offer under the rules your monetization team set.

Offer the small bundle of what the player just ran out of

A player has run out of gems two rooms from the end of a level, and the store opens on the standard bundle because that is what was configured before the session began. The bundle is sized for a planned purchase. What this player wants is enough gems to finish the room they are standing in, and by the time the catalog is retuned the level is over. The small gem bundle, offered where they ran out, is the purchase that fits.

What Signals knows
last_currency_depleted
The premium currency they most recently ran out of
depleted_at
The level they were in when it ran out
minutes_since_depleted
Minutes since it happened
What your game server does

Opens the store on the small bundle of the currency that just ran out, placed at the point in the level where it happened, when the depletion is a few minutes old. Which bundle counts as small, and its price, come from your monetization team's rules.

game-server.ts · 14 lines
// In the game server, when the client asks for the store
const player = await signals.getServiceAttributes({
  name: "game_store_depleted",
  attribute_key: "user_id",
  identifier: playerId,
});
// { last_currency_depleted: "gems", depleted_at: "w3_l7", minutes_since_depleted: 1.4 }

if (player.minutes_since_depleted < 10) {
  store.open({
    lead: bundles.small(player.last_currency_depleted),
    placement: { level: player.depleted_at },
  });
}

Try it on your own site.

Add the SDK, define one thing you want to know about a visitor, and watch it update while you click around. The free tier runs on the real engine: no card, no sales call.