For iOS, watchOS, macOS & visionOS apps

Your apps, live.
Your users, anonymous.

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

No credit card · 2-minute setup · Debug builds never send

MyApp.swift
// The whole integration:
Analytics.configure(apiKey: "lud_live_…")

// Track anything — it appears on the dashboard by itself:
Analytics.track("paywall.viewed")

// Optional: put a name on the install once someone signs in
Analytics.identify(email: user.email, name: user.name)
Free up to 100,000 events / month Unlimited apps No IDFA, no ATT prompt, no cookie banner Alerts to your phone Made by an indie, for indies

Live in three steps

The easiest analytics setup you'll ever do. That's the whole point.

1

Create your app

Sign up, add your app's name and bundle id, and copy its write key. Unlimited apps, free.

2

Paste two lines of Swift

Add the package, Analytics.configure(apiKey:) at launch, .trackAppLifecycle() on your root view. Debug and Simulator builds never send; TestFlight stays separate from production.

3

Watch it live

The dashboard fills in by itself, and the setup page flips green the moment your first event arrives — with your App Store privacy answers already written.

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, refreshed every few seconds, plus today hour by hour in your own timezone.

⚡️

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. It comes from the device's region setting: never GPS, never IP.

📈

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 signed webhooks to your own server.

🧭

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
🪪

Know who — when you choose to

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

New
🏷️

Privacy labels, generated

The setup page shows a preview of your App Store privacy label and updates it as you pick what to collect — then lists exactly which boxes to tick in App Store Connect.

📤

Yours to take

CSV export on every table, an app-level delete that erases everything instantly, and a per-user delete for "please forget me" requests.

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 device, kept in the Keychain 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.

Privacy labels, answered

The setup wizard previews your label and generates the exact App Store Connect ticks — including what changes if you identify users.

Delete means delete

Removing an app — or one user — erases every event it ever recorded. Immediately.

Open where it matters

The SDK ships as readable Swift source with its own privacy manifest — audit every line your app runs.

A
Your app
App Privacy · with the default setup
Data Used to Track You

Data linked with other companies' data for ads or brokers.

None
Data Linked to You

Data tied to your identity — an account, an email, a name.

None — installs are anonymous ids
Data Not Linked to You

Collected, but not tied to who you are.

🔑IdentifiersUser ID (random install id)
📈Usage DataProduct Interaction
identify on → Contact Info + everything moves to "Linked to You". The setup page shows it live.

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

Pricing that respects indie math

Simple event-based plans, cheaper than anyone comparable.

♥ "Active right now" is free — presence pings never count

Free

$0

forever

100,000 events / month
  • Unlimited apps
  • Every dashboard feature
  • Alerts & webhooks
  • No credit card
Start free

Indie

$4.99/mo

billed monthly · or $39 a year

1,000,000 events / month
  • Everything in Free
  • Live mode (auto-refresh)
  • Email support
  • Upgrade any time from the dashboard
Get started

Studio

$14.99/mo

billed monthly · or $119 a year

10,000,000 events / month
  • Everything in Indie
  • Priority support
  • Team seats (soon)
Get started

An event is an install, a session, or a signal you track. The once-a-minute "still here" ping the SDK sends while your app is open (we call it a heartbeat) powers "active right now" and session lengths — it's most of the raw traffic and it never counts. Over your plan? Never a hole in your charts: a 7-day grace period and a banner.

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 — 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.

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

Yes, if your app has accounts: Analytics.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 the SDK also sends a quiet once-a-minute "still here" ping — a heartbeat — which is how "active right now" and session lengths work. 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 Swift 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 three 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 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.