Mobile analytics for apps and games
Retention charts live in a product analytics tool, validated purchases in the backend, and level events on the game server, so one question about paying players touches three systems. A modified build can report a purchase that never happened, and lobby heartbeats fill every tool they reach.
Jitsu is an open-source event pipeline under the MIT license. It takes events from the app on the device, the game server and the backend that validates App Store and Google Play purchases, runs JavaScript functions you write on each one, and sends them to your warehouse and to the product tools your team already uses, from Mixpanel and Amplitude to Braze.
TL;DR
- Purchase revenue in the warehouse is store-confirmed only, sent by your backend with the store's transaction ID.
- Retention by install day, sessions and first-week revenue are SQL queries against the ClickHouse warehouse included with Jitsu Cloud.
- Free covers 200,000 active events a month. Business is $99 a month for 2M, then $40 per extra 1M.
What app and game teams run through Jitsu
Purchases from the backend, and a tracking plan checked in the warehouse
The backend sends Order Completed after store validation, with the store's transaction ID as order_id. A purchase reported by a modified build never reaches Mixpanel or the warehouse. Another function, on the warehouse connection, routes events outside the 33-event plan to an events_unplanned table, so a renamed event shows up there rather than splitting the warehouse funnel. The event and game tracking plan.
Heartbeats and frame telemetry dropped before they are billed
Lobby heartbeats and signed-in test accounts' traffic stop showing up in funnels and tables, and frame-rate data arrives as a sample. A new noisy event is handled without shipping a build. Filtering noisy events.
Retention and first-week revenue in SQL you own
A data team gets D1, D7 and D30 retention by install day, sessions, and first-week purchase revenue per cohort from SQL in the included ClickHouse, with backend purchases joined to installs through the app's identify calls. The queries are plain ClickHouse SQL, so the definition of an active player is a line the data team can edit and review like any other code. Retention and revenue in ClickHouse.
How game studios at scale handle it
- Roblox used to land analytics events in one table,
events_hourly, against a three-hour delivery target it regularly missed. It now routes events to dedicated tables, checks every event schema with a linter in a central repository, and averages 15 minutes (Roblox, 2025). In Jitsu, a function can route an event family to its own table, andplan-guardfrom the tracking plan page checks events against the plan as they arrive. - MY.GAMES wrote that over poor mobile connections its clients make several attempts to send the same batch, and that an attribute such as a user ID can arrive as a number and then as a string (MY.GAMES on dev.to). A resent copy collapses into one warehouse row on
message_id, and a function can pin a column's type, as the retention page does forrevenue.
Where each event goes
| Event | Goes to | Used for |
|---|---|---|
Application Installed, Application Opened | warehouse, product analytics | D1, D7 and D30 retention |
identify | every destination | Linking an install to an account |
onboarding_step_completed | warehouse, product analytics | The step where new users stop |
paywall_viewed | warehouse, product analytics, Braze | Paywall conversion |
Order Completed | warehouse, product analytics, Braze | Revenue the store has confirmed |
subscription_renewed | warehouse, product analytics | Renewals the app never sees |
level_start, level_end | warehouse, product analytics | Where players fail and quit |
earn_virtual_currency, spend_virtual_currency | warehouse, product analytics | Sources and sinks of the economy |
performance_sample | warehouse, product analytics, 1 in N installs | Frame rate by device model |
heartbeat | filtered out | Presence logic inside the app |
Product analytics here means Mixpanel, Amplitude or PostHog, which get events with the email trait removed. Braze's allowlist is on the tracking plan page. All 33 events, with properties, types and PII handling, are in the tracking plan CSV.
How the pipeline is laid out
Functions run in Jitsu, not in the app, so the same JavaScript applies to iOS, Android, React Native and engine events alike. A destination added later is one more connection on the same stream, so the app and its release schedule do not change. If the warehouse is down, events wait in Jitsu's queue and load when it comes back (event streaming). Destinations: ClickHouse, BigQuery, Snowflake, Redshift, Postgres, MySQL, Mixpanel, Amplitude, PostHog, Braze, Statsig, Amazon S3, Google Cloud Storage and Webhook.
What it costs
Jitsu bills on active events: an event successfully sent to at least one destination, counted once however many it reaches. Captured events are unlimited, and Enterprise pricing is custom (pricing).
Monthly volume is monthly active users × sessions per user × events per session. Three sets of example inputs:
| Example inputs | Events a month | Active events | Business plan |
|---|---|---|---|
| 20,000 users × 10 sessions × 10 events | 2M | 2M | $99 |
| 50,000 users × 20 sessions × 15 events | 15M | 15M | $99 + 13 × $40 = $619 |
| 200,000 users × 10 sessions × 10 events, 8M of them heartbeats a function removes on every connection | 20M captured | 12M | $99 + 10 × $40 = $499 |
Jitsu vs Segment works volumes like these against Segment's published prices.
Questions people ask
Which SDK do iOS and Android apps use with Jitsu? Segment's open-source Analytics-Swift and Analytics-Kotlin libraries, with the host set to your Jitsu domain. React Native apps use @segment/analytics-react-native the same way.
Can a studio self-host Jitsu? Yes. Jitsu is open source, and the self-hosted version runs on Kubernetes with the Jitsu operator, with no usage limits. A studio that wants a dedicated deployment managed by Jitsu uses Private Cloud, on the Enterprise plan.
How do Unity or Unreal games send events to Jitsu? Over Jitsu's HTTP API, in the same JSON format Segment's mobile libraries use, so game events and app events land in the same table. The tracking plan page has a batch call to copy.
Can Jitsu run alongside Segment during a migration? Yes. Point a Segment Webhooks destination at Jitsu and both receive the same events while you compare them, with no change to the app until you switch.
Get started with Jitsu
Get started on Jitsu Cloud and send your first app events from a test build to the included ClickHouse. The tracking plan CSV has the event names to start from. Enterprise pricing, Private Cloud and self-hosting are covered on a demo call.