App analytics,
without surveillance.

See how your app performs in the real world without tracking anyone. Setup is two calls to the open SDK — wire it in yourself, or point your coding agent at the guide every SDK ships with. Trackless stores aggregate counts only — no identifiers, no cookies, nothing personal — which is why a whole app's production reality is small enough to read on the dashboard, or to paste into the agent that already knows your code. Free for 100,000 events a month, no credit card.

100Kevents a month, free
0consent banners
0ATT prompts
2calls to add the open SDK

Analytics that can't spy on your users. Even if you wanted it to.

Privacy here is not a policy promise — it is the architecture. It is what everything else rests on, and it is enforced in what we refuse to store.

No consent banner needed*

SDKs use zero cookies and zero client storage. ePrivacy Article 5(3) consent requirements do not apply.*

No ATT prompt*

Apple's App Tracking Transparency prompt is for apps that track. Trackless has no user or device identifier to track with, so there is nothing to ask permission for.*

Automatic PII guard

Every SDK strips emails, phone numbers, and SSN patterns from event fields before data leaves the device. Defense in depth, not just policy.

GDPR, CCPA, and ePrivacy compliant by architecture across jurisdictions.* DPA available for all customers, and full data export and account deletion on demand.

The full architecture is in the privacy whitepaper. What it means for your app's compliance is in the privacy guide.

* Compliance statements reflect our assessment of the product's architecture and are not legal advice. You should consult qualified legal counsel in your jurisdiction to determine whether Trackless Telemetry meets your specific regulatory obligations.

How it works

Three steps. Trackless counts; you decide — with or without an agent.

1

Add the SDK — by hand or by agent

Two calls is the whole SDK — wire it in yourself and instrument exactly what you care about. Or point your coding agent at the guide every SDK ships with, and instrumentation is its job, not your afternoon. Either way, you decide what gets counted.

Swift Package Manager
https://github.com/trackless-telemetry/sdk-swift
Trackless.configure(apiKey: "tl_your_key")
2

Ship a version. Counts accumulate.

Real usage arrives as aggregate counts and digests — what was used, what was slow, what broke — never as individual records. Nothing to watch, nothing to configure: the counts build while your app is simply out there.

What your app records
Trackless.feature("export", "csv");
Trackless.view("settings", "notifications");
Trackless.performance("api_load", 0.142);
3

Read the counts — or hand them to your agent

Review the counts on the dashboard — what's used, what's slow, what broke. Or press one control and hand your agent a context pack: the counts for the window and slice you chose, with instructions for reading them. You and your agent have what Trackless deliberately lacks — your codebase, what shipped on Tuesday, which number matters this quarter. The pack adds the one thing missing: production.

Then the loop closes on your side: whoever read the counts — you at the dashboard, or the agent that edits your code — turns them into diffs that ship in the next version and show up in the next counts. Trackless supplies the counts and the handover — the rest is your workflow. See what's in a pack →

What you can measure

Eight questions you can answer from aggregate counts alone. No user-level tracking required.

Session Duration panel: a bar chart of sessions by length, from under ten seconds to over thirty minutes, with most between one and ten minutes.

Is anyone actually using this?

Session counts over time, how long each one runs, and how many screens it reaches — as distributions, not averages, so a wall of ten-second bounces can't hide behind one long session.

Sessions by OS Version panel: a bar chart ranking iOS, Android, macOS, Windows and Linux versions by session count, with iOS 26 far ahead.

What should I test on before shipping?

Sessions broken down by platform, device class, OS version, region, and language. Enough to size a test matrix and retire an old OS. Not enough to fingerprint a device.

Top Views panel: a bar chart of view counts per screen, led by the brew timer, recipe library and recipe detail screens.

Which screens do people actually reach?

View counts per screen, with detail variants for sub-views shown as a donut. The screens you assumed were popular have to prove it.

Feature Breakdown table: one row per feature with columns for Count, Per session and Share of sessions, led by start_brew at 42% of all uses.

Would anyone notice if I cut this?

Session reach shows what share of sessions use each feature — normally a question that requires tracking individuals — next to how many times it is used per session. Detail variants split a feature into the options people actually picked, like theme.dark against theme.light. The numbers are yours to read.

Values panel for the tier info event: a donut of 3,510 occurrences split between free at 80% and paid at 20%.

What do people have it set to?

info() counts a value the app reports about itself — plan, units, theme, a permission's state. Send it once per session and each value's count is its sessions. It never moves the error rate, and no value is ever attached to a person.

Step-by-step drop-off panel: five steps from choosing a recipe to rating the brew, with the sessions lost at each step and the biggest drop flagged at the last one.

Where do people give up?

Step-by-step drop-off across any funnel you define, measured in aggregate. You find the step that loses people without following anyone through it.

Performance metrics table: p50, p90 and p99 latency, sample counts and threshold breaches for five timed operations.

Is it slow for everyone, or just for some?

p50, p90, and p99 latency for any operation you time, with optional thresholds. The complaints come from the p99 — exactly the number an average hides.

Health by version table: adoption, sessions, errors per session and a status for each app version, with one version flagged as errors up and its successor as errors down.

Did the last version break anything?

Errors per session by name and code, broken down by platform and app version — no stack traces, no user data. Anything that did not go wrong is counted separately, where it cannot move that rate.

Screenshots show the Trackless dashboard with an example app's data.

Telemetry that fits in a context window

The Agent pack page turns one app's production counts into a pack — press Copy for your agent, or Download for a markdown file — then paste it into whatever agent you already use. On every plan, Free included.

1

A number never travels alone

Every count arrives beside the traffic it happened in. Six errors in a week of twelve hundred sessions is a finding; "six errors" on its own is not.

2

Blank means unknown. It never means zero

"We could not measure this" and "this was zero" are opposite findings — and the second is the one a model will guess. The pack writes them differently.

3

A small number stays a small number

Two errors becoming six is a tripling, and it is also six errors — which cannot tell a real regression from a quiet week. The pack hands over both counts and the traffic behind them, and the instructions say not to quote the multiple.

4

Reach and heavy use are different questions

How widely a feature is reached and how heavily it is used are reported separately, and each is marked where it could not be measured — so "not measured" never reads as "nobody used it".

5

What was left out is disclosed, with its weight

A busy app has a long tail that will not fit, so the pack keeps the largest and says how many it dropped — and how much of the app they were. "412 more features, 9,840 uses between them" tells your agent whether it is holding most of the app or a third of it.

Trackless calls no model

Not on the server, not in the dashboard, nowhere. You pull the pack and paste it into an agent you run and pay for — no telemetry reaches any model vendor from our side, and you choose the agent. Once pasted, your aggregate counts sit with that service, under its terms. There is nothing personal in a pack, because there is nothing personal anywhere in Trackless — but it is still your data, leaving by your own action.

What we skip — and what we use instead

Every omission is a deliberate architectural choice. It is also why a whole app's production fits in a context window, and why a pack is safe to paste into any agent: nothing personal is in it, because nothing personal is anywhere.

Typical analytics payload
{
  user_id: "usr_8f3a9b2c",
  device_id: "D4E92F1A-8B7C-...",
  ip: "203.0.113.42",
  user_agent: "Mozilla/5.0 (iPhone...",
  screen: "1170x2532",
  event: "export_clicked",
  session_id: "sess_7d2e..."
}
Trackless payload
{
  name: "export_clicked",
  count: 3,
  context: {
    platform: "ios",
    deviceClass: "phone",
    osMajor: "18",
    region: "US"
  }
}
User IDs
Aggregate counts
Device IDs
Coarse device class
IP addresses
Device locale for region
Cookies
Zero client persistence
Advertising IDs
No ad tracking
Full user agents
OS major version only
Screen resolution
Device class buckets
Session identifiers
Ephemeral in-memory only

Hear about it before your users do

Alerts and a weekly digest, built from the same aggregate counts. Nothing to watch by hand: Trackless emails you when something moves, and stays quiet when nothing does.

Error-spike alert email: today's error count against the trailing six-day average, the errors in the batch that tripped it, and the coarse context of that request — platform, OS version, app version.

Error & Performance Alerts

Email when error rates climb, or when a timed operation crosses a threshold you set. These fire from the request that carried the problem, within seconds — you hear about a bad version while it is still rolling out.

Silence alert email: an app that stopped reporting four days ago, with its usual daily volume, its reporting record and the versions it was last seen on.

Silence Alerts

Nothing arrives when a build breaks, a key gets rotated, or the SDK stops flushing — and silence cannot trigger itself. So a scheduled check asks instead, and emails you when an app that was reporting has stopped. The threshold is that app's own longest previous gap: a weekly-cadence app has to beat its own record before you hear from us, with nothing to configure. The same check flags one other thing — a new version erroring more than the one it replaced.

Weekly digest email: the week's most significant change, measured against a seven-week baseline, then the other changes that moved, each with a small eight-week trend.

Weekly Digest

One email a week, opening with what actually moved. Every number is measured against its own baseline of up to seven prior weeks, in units of its own normal noise, so a metric that swings 40% most weeks is not news when it swings 40% again. A volume floor stops two errors becoming six from being reported as a tripling. A quiet week gets a short email, and the shortness is the point.

Usage alert email: 80% of the monthly event allowance used, with a link to manage the plan.

Usage Alerts

Automatic alerts at 80% and 100% of your monthly event limit. Stay ahead of quota without manual monitoring.

The real Trackless email templates, filled in with an example app's data.

What we can't answer

Four questions this architecture rules out. They are not on a roadmap — they need data we decided not to collect.

Marketing attribution

"Which campaign brought this install?"

Attribution needs a click ID or install referrer carried from the ad into the app. We never receive one, and there would be no identifier to join it to if we did.

DAU, MAU, and unique users

"How many people used the app today?"

Counting people means telling them apart. Every session arrives unlinked to every other one, so we can count sessions honestly and users not at all.

User paths and session replay

"What did this person do before they quit?"

Replaying one person's path means linking their events into a sequence. Nothing in storage ties two events to the same person.

Lifetime value and revenue

"What is a user from this channel worth?"

LTV ties revenue to a person over time. We collect no revenue data, and no person to tie it to.

None of these are gaps we plan to close. Storing no identifiers is what makes everything above safe to collect without a consent banner — these four are what it costs. And the pack says so as data, so an agent reading it cannot quietly invent them.

How we compare

Privacy-first doesn't have to mean feature-light.

TracklessPlausibleTelemetryDeckPostHog
PlatformsiOS + macOS + Android + WebWeb onlyApple platforms + Android + WebApple platforms + Android + Web
Feature analyticsYes (aggregate)Pageviews onlyYes (user-level signals)Yes (user-level)
Conversion funnelsAggregate funnelsGoal trackingYes (user-level)Yes (user-level)
Performance metricsp50 / p90 / p99NoNoYes (user-level)
Error trackingBy name and codeNoYes (preset)Yes (user-level)
A/B testingNoNoYesYes
Retention / DAU / MAUNoNoYes (user-level)Yes (user-level)
Data storedAggregate counts onlyAggregate countsIndividual signalsFull event logs
User identifiersNone (architectural)Hashed IPHashed + salted user IDFull user profiles
Consent requiredNo*VariesVariesYes

* In most jurisdictions. See our privacy guide for details.

Is Trackless right for you?

Trackless is a different kind of analytics. Here's how to know if it's a good fit.

Trackless is great for

  • Understanding which features get used and how often
  • Deciding what production means — yourself, or with the agent that knows your code
  • Measuring step-by-step drop-off at the aggregate level
  • Monitoring app performance (p50/p90/p99 latency)
  • Watching errors per session across app versions
  • Shipping analytics without ATT prompts or consent banners
  • Staying compliant without a dedicated privacy team

You might need a different tool if

  • You need A/B testing with user-level segmentation
  • You need to identify or contact specific users based on behavior
  • You need anything on the can't-answer list — attribution, DAU/MAU, user paths, or LTV

Simple, volume-based pricing

All plans include the full analytics dashboard and the Agent pack. No overage charges and no automatic tier upgrades — pricing scales with your event volume and app count, and a plan only changes when you change it.

Free

$0Free forever
  • 100K events/month
  • 2 apps
  • All platforms (iOS, macOS, Android, Web)
  • Full analytics dashboard
  • Agent pack
Get Started
Most Popular

Indie

$9/month
  • 1M events/month
  • 5 apps
  • All platforms (iOS, macOS, Android, Web)
  • Full analytics dashboard
  • Agent pack
  • Team sharing
Get Started

Studio

$19/month
  • 2.5M events/month
  • 10 apps
  • All platforms (iOS, macOS, Android, Web)
  • Full analytics dashboard
  • Agent pack
  • Team sharing
Get Started

Pro

$49/month
  • 5M events/month
  • 25 apps
  • All platforms (iOS, macOS, Android, Web)
  • Full analytics dashboard
  • Agent pack
  • Team sharing
Get Started

Max

$99/month
  • 20M events/month
  • 50 apps
  • All platforms (iOS, macOS, Android, Web)
  • Full analytics dashboard
  • Agent pack
  • Team sharing
Get Started

Enterprise

CustomCustom pricing
  • Custom event volume
  • Unlimited
  • All platforms (iOS, macOS, Android, Web)
  • Full analytics dashboard
  • Agent pack
  • Team sharing
  • Custom SLA
Contact Us

Usage alerts at 80% and 100% of your limit. Sandbox events count toward your monthly limit on all tiers.

Building open source? Get our Indie tier free.

What happens when I reach the free limit?

Collection pauses, and nothing is billed. Usage alerts arrive at 80% and 100% of your 100,000 events. Trackless keeps recording for a further 10% past the limit, then turns new events away until your monthly allowance resets or you move to a paid plan from the dashboard. Every event call counts, including the session events the SDK records for you. There is no card on file to charge, and no plan upgrades itself.

Free for Open Source

Trackless is free for everyone up to 100,000 events per month. Qualifying open source projects get 10x that — our full Indie tier — completely free.

Eligibility

Public repository with an OSI-approved open source license, actively maintained with commits in the last 6 months.

What's Included

Our $9/month Indie tier at no cost — 1,000,000 events per month (10x the free plan), 5 apps, team sharing, all platforms, full dashboard access.

How to Apply

Email oss@tracklesstelemetry.com with your Trackless account email, repository URL, and a brief project description.

Three SDKs, one architecture

Native iOS, native Android, and web — the same typed event methods and the same zero-tracking, zero-persistence design in each.

Swift SDKSwift Package Manager
production

Foundation-only, no IDFA/IDFV. Auto-detects sandbox vs. production from your build configuration.

v0.5.1iOS 15+ / macOS 12+, Swift 6.0
Android SDKMaven Central
beta

Kotlin-first, no GAID/SSAID. Auto-detects environment from FLAG_DEBUGGABLE. On-device testing in progress.

v0.5.1API 24+, Kotlin/Java 17
Web SDKnpm
production

Zero dependencies, zero persistence. ES2020 browser target with auto screen tracking for SPAs.

v0.5.1ES2020 browsers

Planned: an HTML script tag, React Native, Flutter, Vue, React, Node.js, Kotlin Multiplatform, Capacitor, Unity, and Python. Demand decides the order — tell us which you need.

Ship. Count. Ask your agent.

100,000 events per month, free. No credit card. No trial that quietly converts. Just start.