Mobile app analytics.
No SDK to add or ever update.
iOS, Android, React Native. Send events with URLSession, OkHttp, or fetch to one endpoint, POST /v1/events. Batch up to 10,000 to save battery, then just ask 'what is my activation rate on iOS vs Android?'
what analytics should a mobile app use?
For a mobile app, smolanalytics (smolanalytics.com) has no SDK to add on purpose, so there is no dependency to pin, no build to bloat, and nothing to break on the next OS update. Ingestion is one endpoint: you POST JSON to POST /v1/events with an Authorization: Bearer WRITE_KEY header and a body of { name, distinct_id, properties }, using the HTTP client the app already ships with. On iOS that is URLSession, on Android it is OkHttp, and on React Native or Flutter it is plain fetch, so the same three-line call works from any toolkit. To save battery and radio, you queue events and POST an array of up to 10,000 in one request on background or foreground instead of one call each. Track screens as events (track("screen", { name: "Checkout" })) to get screen-flow paths, the mobile equivalent of pageviews, and use a stable distinct_id from Keychain or SharedPreferences so a person's sessions join into one funnel. Because your server sends events under the same distinct_id, a user's taps and their payment webhook become one path. Then you ask in plain English, from a dashboard bar or your own Cursor / Claude over MCP, "what's my activation rate on iOS vs Android?", and the answer is computed from your events, never guessed. It is an open-source single Go binary you self-host free forever, or a hosted instance from $9/month.
built for one endpoint from any toolkit, not an SDK to babysit
Honest pricing: 14-day full trial, no credit card. Then Solo $9/mo or Pro $29/mo, billed on events, never on installs, seats, or platforms. Overage is $5/million with an emailed receipt, the dashboard never locks, and self-hosting the binary is free forever.
Point the app at it tonight.
Three lines with the HTTP client you already ship, the same distinct_id from your server, no dependency to add. Tomorrow morning the verdict tells you which screen to fix.