Skip to content

Events and statistics

The console’s Statistics screen covers every site that lists your game, filterable by site, host, version and locale, over a range of up to 400 days. Most of it comes from the SDK calls your game already makes. sdk.track() adds what only your game knows.

BlockWhat it countsWhere it comes from
Active playersPer day, rolling 7 days, rolling 30 days; new and returningA play session: gameplay.start()
SessionsCount, mean and median lengthgameplay.start() to the end of the page or the last stop()
RetentionD1, D7, D30 as cohorts by first-play week; blank under 10 playersSessions per player over time
FunnelFrame loaded, play started, save written, score sent, account linkedready(), gameplay.start(), save.set(), leaderboard.submit(), the hub’s sign-in
EventsBy name, with the number of playerssdk.track()
SplitsHost, version, locale, deviceWhat the SDK sends with each session and event
BoardsScores, best, median per boardleaderboard.submit()
SitesSessions and players per site that lists the gameThe site of each session

Every table exports as CSV from the console. Nothing here is about money: filudi.com shows usage only.

Track the decisions the funnel cannot see: a level cleared, a difficulty chosen, a tutorial skipped, a shop opened, a run abandoned. Name events in snake_case, keep the set small, and keep the names across versions; a renamed event starts a new line.

Events worth having

sdk.track('level_complete', { level, moves, perfect: moves === par });
sdk.track('level_fail', { level, reason: 'time' });
sdk.track('tutorial_skip');
sdk.track('difficulty_set', { difficulty: 'hard' });

Limits: a name of at most 40 characters, 20 properties, each value at most 200 characters. The SDK sends 50 events or 5 s of them at a time, and the last batch leaves with the page. frame_loaded is reserved for the hub.

Pass the release version to init({ version }). Every session and event carries it, and the version split is how you compare a release with the previous one. The device is read by the API from the user agent at session open, as phone, tablet or desktop; nothing else about the browser is kept.

Sessions and events on CrazyGames, Poki and Playgama do not reach Filudi by default: no player token exists there. init({ events: 'always', eventsUrl }) sends events to the API anonymously, counted for the game’s site under the portal’s host. Sessions, saves and scores on portals stay with the portal.

Today’s events are read live; past days come from a daily rollup. Statistics answers are cached for 60 s. A new version shows in the version filter after its first session.