Skip to content

Onboarding & Retention Funnel

First impressions dictate your game’s retention. If 60% of new players leave before finishing the dialogue, fixing that step can double your daily active users.

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Analytics = require(ReplicatedStorage.AnalyticsModule)
-- Helper to track sequential onboarding steps
local function trackTutorialStep(player: Player, stepNumber: number, stepName: string)
Analytics:TrackEvent(player, "TutorialStep", {
step = stepNumber,
name = stepName,
})
end
Players.PlayerAdded:Connect(function(player)
task.wait(1.5) -- Allow DataStore to fetch record
if Analytics:IsNewPlayer(player) then
print(string.format("Initiating FTUE for new player %s", player.Name))
trackTutorialStep(player, 1, "SpawnedInLobby")
-- Example: Award Starter Welcome Coins
Analytics:RecordEconomySource(player, "Coins", 100, "StarterPack", "NewPlayerGift")
else
local visits = Analytics:GetTotalVisits(player)
print(string.format("Welcome back %s! Visit count: %d", player.Name, visits))
end
end)

With enableRetentionTracking = true, the module automatically fires PlayerRetentionMilestone when players come back on Day 1, Day 3, Day 7, Day 14, and Day 30.

You can inspect the ratio of: $$\text{D1 Retention Rate} = \frac{\text{D1 Milestone Events}}{\text{PlayerFirstJoin Events}} \times 100%$$