Ask your app analytics anything.
Add one line to your Swift or Expo app. Blip records every screen and every tap on its own, with no tracking code per button. Then ask “how many people dropped off during onboarding?” and get the number, the table and the query behind it.
Free while in beta. No card needed.
How many people dropped off during onboarding?
Of 1,240 people who saw the first onboarding screen this week, 812 reached Home. 428 dropped off, a 34.5% drop-off, and most of them left on the notifications screen.
| step | users | drop_off_pct |
|---|---|---|
| Welcome | 1,240 | — |
| Notifications | 903 | 27.2 |
| Home | 812 | 10.1 |
From install to answers in five minutes
Add one line
Blip.start(key:) in Swift, or wrap your Expo root in <blip.Provider>. Sessions, screens and every button, card and switch tap are tracked from that moment.
Name what matters
Give a button a tracking id (accessibilityIdentifier or testID) and its taps carry that name. Untagged ones are named by their text. track() covers anything that isn’t a tap.
Ask
Type a question. Blip writes the query against your app’s own data, runs it, and answers in a sentence with the numbers.
Swift and Expo, one line each
Batched uploads, offline queue, automatic sessions. No dependencies.
import Blip
// Once, at launch. From here every screen, button, switch, cell and tappable card is tracked.
Blip.start(key: "app_your_key_here")
// Optional: a tracking id names a control. Without one it's named by its title or text.
startButton.accessibilityIdentifier = "start_chat"
// SwiftUI: screens and buttons take one modifier each.
HomeView().trackScreen("Home")
Button("Start chat") { ... }.blipID("start_chat")
// Anything that isn't a tap:
Blip.track("purchase", ["plan": "pro"])
Blip.identify("user_123", ["plan": "pro"])
Ask it the way you'd ask a teammate
If it happened in your app, you can ask about it.
Analytics without the analytics project
No tracking code per button
Buttons, switches, list rows and tappable cards are captured automatically, each with the screen it was on. You add a tracking id only where you want a specific name.
Answers you can check
Every answer shows the table it came from and the SQL that ran. Edit the SQL and run it yourself if you want to dig further.
Your own database per app
Each app gets a separate SQLite database on Cloudflare, so one app’s data never sits in a table with another’s.
Read-only by design
Queries run inside a wrapper that only accepts a single SELECT. The model can read your events. It cannot change them.
Free while in beta
Up to 20 apps per account and unlimited questions during the beta. Paid plans come later, and we’ll tell you well before anything changes.
Questions
Which platforms are supported?
Swift (iOS 15+, macOS, tvOS, visionOS) and Expo or plain React Native. Anything else can send events over one HTTP endpoint.
Is the SDK key a secret?
No. It can only add events to its own app, the way a Mixpanel or Amplitude token works, so it is fine to ship inside the app. Reading data needs your login.
What does it track on its own?
App opens, sessions, backgrounding, screens, and taps. In UIKit every UIButton, UISwitch, segmented control, bar button, table and collection cell, and any view with a tap gesture is captured. In Expo every Button, Pressable and Touchable, including your own cards built from them. SwiftUI buttons need one .blipID("name") modifier each, because SwiftUI draws them without a UIKit view to hook.
Do you track personal data?
Each install gets a random id. Taps record the component’s tracking id and its visible label, never what anyone types into a text field. If you call identify() with your own user id and traits, those are stored too.
What happens offline?
Events queue in memory and go out with the next successful upload, up to 1,000 at a time.
How accurate are the answers?
Each answer is a real SQL query over your events, so the numbers are exact for what the query asks. If the model reads a question differently than you meant, the SQL under the answer shows it.
Know what your users do this week
Create an app, paste one line, and ask your first question today.