iOS · Android · iPhone app Public beta

Your apps, live.
Your users, anonymous.

Who's in your app right now, who installed today, who just bought, and a buzz on your phone when it happens. Two lines of Swift or Kotlin. No IDFA, no consent banner, and your App Store privacy answers written for you.

No credit card · 2-minute setup · ~300 KB SDK, no third-party dependencies

MyApp.swiftMyApp.kt
// The whole integration, both lines in your @main App:
AppGlance.configure(apiKey: "glance_live_…")     // in init()
WindowGroup { RootView().trackAppLifecycle() }   // in body

// Track anything. It shows up on the dashboard by itself:
AppGlance.track("paywall.viewed")

// Optional: put a name on the install once someone signs in
AppGlance.identify(email: user.email, name: user.name)
// The whole integration (in your Application.onCreate):
AppGlance.configure(this, "glance_live_…")

// Track anything. It shows up on the dashboard by itself:
AppGlance.track("paywall.viewed")

// Optional: put a name on the install once someone signs in
AppGlance.identify(email = user.email, name = user.name)
Free up to 100,000 events / month iOS & Android, one dashboard No IDFA, no ATT prompt, no cookie banner Push alerts on your phone Debug builds don't send by default Made by an indie, for indies

Live in minutes

Add the package, paste one line, and the dashboard fills in by itself. Same four steps on iOS and Android.

Add Package Dependencies
AppGlance
Live, privacy-first analytics
1.0.0 · Up to Next Major
iOS 16+ · watchOS · macOS · tvOS · visionOSAdd Package
app/build.gradle.kts
dependencies {
    implementation("app.appglance:appglance:1.2.4")
}
// Kotlin, minSdk 21, one dependency (lifecycle-process).
// Nothing to add to the manifest.

1Add the package

Xcode → File → Add Package Dependencies… → paste the URL. One Swift package, no dependencies, its own privacy manifest.One Gradle line. A Kotlin library with a single dependency; the INTERNET permission comes with it.

MyApp.swiftMyApp.kt
import AppGlance

@main struct MyApp: App {
    init() {
        AppGlance.configure(apiKey: "glance_live_…")
    }
    var body: some Scene {
        WindowGroup { RootView().trackAppLifecycle() }
    }
}
import app.appglance.AppGlance

class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        AppGlance.configure(this, "glance_live_…")
    }
}
// Sessions and "active right now" are automatic.

2Paste one line at launch

Your app's write key from the dashboard, and that is the whole setup. Sessions, installs and "active right now" come for free. Debug and Simulator builds never send unless you say so; TestFlight and Play beta stay separate from production.

3Get a buzz when it matters

Pick what deserves a push, a purchase, a new install, any signal you name, and send it to your phone through ntfy or Discord, or to your own server as a signed webhook. The AppGlance app for iPhone is on the App Store, and the screen beside this is it.

4Track anything, see it live

Name an event and it shows up in the feed, the Events tab and the charts on its own, with no schema and no setup. Chart it, use it as a funnel step, or wire it to a push. Never put personal data in a name; that's what identify is for.

Step-by-step quickstart →  ·  or paste one prompt into Claude Code, Cursor or Copilot and let it do the integration.

Everything you actually check, nothing you don't

Built by an indie shipping nine apps, for people who want answers in one glance, not a query language.

Active right now

A live count per app, plus today hour by hour in your own timezone. On the paid tiers the dashboard refreshes itself every few seconds; on Free you refresh it yourself.

Sessions as stories

The feed shows one row per visit (install → paywall.viewed → purchase) with how long it lasted and whether they're still there. Click a row for every event inside it.

World map

Where your users are, by country. From the device's region setting by default, never GPS. Switch it to the connecting address if you'd rather have accuracy, and the wizard adds it to your label.

Retention, funnels & sessions

Day 1 / 7 / 30 retention, any-events funnels, session lengths, version and OS breakdowns. The honest health metrics.

Alerts to your phone

A push the moment someone buys, installs, or triggers any signal you choose, via ntfy, Discord or a signed webhook to your own server. Or native push from the AppGlance app for iPhone, free on every plan.

Per-user stories

Pick any install and see when it arrived, its sessions, and every event it fired, without ever knowing who the person is.

New

iOS & Android, one dashboard

A Swift package for Apple platforms and a Kotlin SDK for Android, with the same two lines, the same events and the same dashboard. Anything else can post JSON to the HTTP API.

New

Know who, but only if you choose

Apps with accounts can put a name, email, or your own user id on an install with identify. Search by it, see it on the feed. Off by default; anonymous is the point.

New

Privacy labels, generated

The setup page previews your App Store privacy label, updates it as you pick what to collect, then lists exactly which boxes to tick, plus the Google Play Data safety equivalents.

Same job, a fraction of the weight

Measured, not marketed: what each SDK adds to your app, and what it asks of your users.

SDK weight, dependencies, setup and identifiers compared
AppGlanceTelemetryDeckFirebase Analytics
iOS SDK, compiled~300 KB~230 KB3~4.3 MB1
Android SDK114 KB AAR253 KB AAR~1.4 MB2
Third-party dependenciesNoneiOS: none. Android: Ktor, OkHttp, kotlinx-serialization, AppCompatPlay services, Guava and Firebase core
SetupTwo lines, no config fileOne call and an app idConfig file, console project, then configure at launch
IdentifiersA random install id. No IDFA, everA hashed anonymous idAn app-instance id, plus the ad identifier with ad features
Free tier100,000 events/mo, no credit card50,000 signals/mo for accounts since July 2026Free at any volume; BigQuery for raw data

Measured, not marketed: AppGlance re-measured 2026-08-19 at 1.2.2 on the current stable toolchain; the TelemetryDeck and Firebase figures are from 2026-08-16. Numbers age; tell us if they moved.

How these were measured, and the three footnotes

iOS: arm64 release build, code and data of the linked objects (Firebase's binary frameworks measured the same way). 1 The default FirebaseAnalytics product with on-device conversion; about 1.9 MB with FirebaseAnalyticsCore. 2 The Play services measurement libraries; the full runtime classpath resolves to 57 artifacts (10.8 MB) for Firebase, 72 (13.7 MB) for TelemetryDeck and 13 (1.9 MB, all AndroidX and kotlinx that an AndroidX app already ships) for AppGlance. 3 Still 2026-08-16's compiler. A compiler update alone moved our own number from ~200 KB to ~270 KB with zero code change, and 1.2.3 and 1.2.4 added ~30 KB of code on top of that, so TelemetryDeck built today would likely weigh more than shown here too; we publish ours current and theirs as last measured, which flatters them, not us. Versions: TelemetryDeck SwiftSDK main as of 2026-08-01 and kotlin-sdk 7.1.0; firebase-ios-sdk 12.17.0 and firebase-analytics 23.2.0.

Longer write-ups: vs Firebase Analytics, vs TelemetryDeck, vs Mixpanel, vs Amplitude, and all comparisons.

AppGlance for iPhone

The dashboard in your pocket.
And the push the web can't do.

Same account, same numbers: the overview, the live feed and your users, on your phone. Plus the one thing a browser tab cannot give you: a buzz the moment something happens in your app.

Push notifications, your rules

Every purchase, every install, or only the signals you pick, per app.

Active right now, everywhere

Glance at who's in your apps from the couch. Live tiles, today's chart, the feed.

Users and their stories

Search an install or a name, open the timeline, see every session and event.

Download on theApp Store Free, and on every plan. Native push the moment a signal fires, the live feed and your users in your pocket. The web dashboard works well on mobile too, and alerts still reach any phone through ntfy or Discord.

Privacy isn't a setting here.
It's the architecture.

Most analytics make you nervous about App Review. This one comes with the answers, and shows you what your App Store label will say before you ship.

✕

No IDFA, no fingerprinting

A random install id, generated on the device and stored there (in the Keychain on Apple platforms) so reinstalls count once. No ATT prompt, ever.

✕

No consent banner

Nothing personal is collected by default, so there's nothing to consent to.

✕

No location tracking

Country comes from the device's region setting: a locale, not a location. No GPS, ever; that would mean a consent prompt. You can opt into country-from-IP instead, and the wizard tells you exactly what it adds to your label.

✓

Privacy labels, answered

The setup wizard previews your label and generates the exact App Store Connect ticks, including what changes if you identify users. Google Play's Data safety answers are the same list.

✓

Delete means delete

Removing an app, or one single user, erases every event it ever recorded. Immediately. CSV export on every table before you go.

✓

Open where it matters

Both SDKs ship as readable source (Swift with its own privacy manifest, and Kotlin), so you can audit every line your app runs.

A
Your app
App Privacy · with the default setup

Data Used to Track You

Joined with other companies' data for ads, or sold to a broker.

✓None

Data Linked to You

Tied to a real identity: an account, an email, a name.

✓None. Installs are anonymous ids

Data Not Linked to You

Collected, but with no name attached to it.

IdentifiersUser ID (random install id)
Usage DataProduct Interaction
identify on

Your users are no longer anonymous, so everything above moves into "Data Linked to You", and their email and name get added. You see this happen before you ship it.

Preview of the label the setup page generates. Apple's definitions apply; guidance, not legal advice.

In public beta, on purpose

AppGlance is new and says so. The SDKs are versioned, tested and released, and our own apps run them in production today. What is still growing is everything around them: more apps, more device zoos, more of your feedback turning into the changelog. Beta accounts get the most attention we will ever be able to give.

You talk to the developer

Support goes to the person who wrote the SDK, not a queue. Usually answered the same day, often with a fix in the next release. support@appglance.app reaches a human.

The iPhone app is here

AppGlance for iPhone is on the App Store: the dashboard in your pocket, and a push the moment someone buys. Free, on every plan, the same account as the web.

Founder pricing, locked

Today's prices are launch prices. Subscribe any time during the beta and your price never goes up while you stay subscribed, whatever the public price does after 1.0.

What beta does not mean: fragile. Events are never double counted, every table exports to CSV, deleting an app erases everything immediately, and when we get something wrong the changelog says so in plain words.

Pricing that respects indie math

Simple event-based plans, cheaper than anyone comparable.

Public beta: these are launch prices. Subscribe during the beta and your price stays yours for as long as you stay subscribed.

♥ "Active right now" is free. Presence pings never count

Free

$0

forever

100,000 events / month
  • Up to 20 apps, iOS & Android
  • Every dashboard panel and export
  • Alerts & webhooks: iPhone push, ntfy, Discord, your own server
  • 90 days of event history
  • No credit card
Start free

Indie

$4.99/mo

billed monthly · or $49 a year

1,000,000 events / month
  • Everything in Free
  • 6 months of event history
  • Live mode (auto-refresh)
  • Email support
  • Upgrade any time from the dashboard
Get Indie

Studio

$14.99/mo

billed monthly · or $149 a year

2,500,000 events / month
  • Everything in Indie
  • 12 months of event history
  • Priority support
Get Studio

Prices are in USD and exclude VAT or sales tax, which is added at checkout where applicable.

Sending more than that?

Scale 7,000,000 events / month $39/mo Max 18,000,000 events / month $99/mo

Both include 12 months of event history and priority support. Bigger than Max? Email us.

See all five plans side by side →

An event is an install, a session, or a signal you track, and your charts never expire, on any plan.

Heartbeats, the over-quota grace, and event history, in plain words

While your app is open with nothing else to say, the SDK sends a quiet "still here" ping we call a heartbeat. It powers "active right now" and session lengths, its cadence follows your plan (every four minutes on Free through every minute on Studio and up), and it never counts toward your events. Over your plan, you keep recording for 7 days, or until 25% past the cap, whichever comes first, with a banner the whole time; past that, billable events stop being stored until the month resets, while presence and session lengths keep working.

Event history is how far back you can browse individual events, funnels and session stories. Charts are forever: daily numbers, totals, retention cohorts and per-user counts are kept for as long as the account exists, on every plan, including Free.

Questions you'd ask

Do I need a consent banner or the ATT prompt?

No. By default the SDK collects a random install id and usage events, and nothing linked to a person, no cross-app tracking, no ad identifiers. Under Apple's definitions that's "Data Not Linked to You" with no tracking, so there's no ATT prompt, and under GDPR there's no personal-data banner to show. The setup wizard hands you the exact App Privacy answers, plus the Google Play Data safety equivalents.

Does it work on Android?

Yes. The Kotlin SDK has the same two-line setup, AppGlance.configure(this, "glance_live_…") in your Application, the same events and the same dashboard: a Play build shows up as Live exactly like an App Store build. One app, one write key, both platforms if you ship both. Anything else (a server, a script, Flutter) can post JSON to the HTTP API.

Is there an app?

Yes. AppGlance for iPhone is on the App Store, free, and on every plan: native push the moment a signal fires, the live feed and your users in your pocket. The web dashboard also works well on a phone, and alerts still reach any phone through ntfy, Discord, or a signed webhook to your own server.

Can I attach a name or an email to a user?

Yes, if your app has accounts: AppGlance.identify(id:email:name:) puts labels on the install, setUserProperties adds anything else (plan, goal…), reset() forgets it on sign-out. The install id stays the analytics identity; labels are searchable and shown on the feed. Turn it on in the setup page and the privacy-label preview shows what changes: Contact Info appears, and your data moves to "Linked to You". Still no tracking, still no ATT prompt.

What counts as an event? What's a heartbeat?

Installs, sessions, and any signal you track count. While your app is open and has nothing else to say, the SDK also sends a quiet "still here" ping, called a heartbeat, which is how "active right now" and session lengths work. The cadence follows your plan: one ping every four minutes on Free, every two on Indie, every minute on Studio and up, and a busy app never pings at all. Heartbeats and user labels are plumbing: they never appear as events and never count toward your plan.

How is this different from Firebase?

Firebase is free and enormous. It is also Google, it's heavy, and its answers hide behind BigQuery the moment you ask anything specific. This is one package with no dependencies, a dashboard with the six numbers you actually check, and a privacy story that makes App Review boring.

Can I see it before signing up?

Yes. Open the live demo: the real dashboard on sample data from four apps, every tab clickable, no account needed. Create a free account and you'll see it with your own data minutes after adding the package.

What does "public beta" mean? Can I use it in production?

Beta is about breadth, not stability. The SDKs are versioned, tested and released, and our own apps run AppGlance in production today; what is still growing is everything around them: more apps, more device variety, more of the dashboard. Concretely: events are never double counted, your data is exportable as CSV at any time, deleting an app erases it immediately, and anything we get wrong is written up in the changelog. Accounts from the beta keep beta pricing: subscribe at today's price and it never goes up while you stay subscribed.

What happens to my data if I leave?

Delete an app and every event it ever recorded is erased immediately; the button is in plain sight in Setup. Export CSVs any time before you go.

Your apps are live right now.
You should be able to see it.