Skip to main content

Type-safe analytics,
built for Kotlin.

Scan your Kotlin codebase for every analytics call, define events as a typed schema, and generate sealed classes. Ship with Android Studio confidence and block tracking drift before it reaches the Play Store.

From string-typed to Kotlin-typed

Delete the magic strings. Let the compiler check.

BeforeHandwritten · no guarantees
analytics.track("purchase_completed", mapOf(
"amount" to 9.99,
"currency" to "USD",
// ⚠️ typo? missing required? enum wrong?
))
AfterGenerated · checked at compile time
Analytics.PurchaseCompleted(
amount = 9.99,
currency = Currency.USD
).track()
// ✓ compiler catches renamed props
Static source analysis

Scans every .kt file in seconds.

One command walks your Android project, matches every analytics call against your tracking plan, and reports coverage per screen, per SDK, per module. No runtime overhead. No SDK to install. Nothing ships to your users.

  • • Detects Segment, Amplitude, Mixpanel, Firebase, PostHog patterns
  • • Works on Activities, Fragments, Compose, ViewModels, flows
  • • Runs locally or in CI — same command, same output
  • • Honest about its limits: indirect calls get flagged, not missed
~/projects/checkout-android
$ ordaze scan --platform android
Scanning app/src/ (946 .kt files)…
 
42 analytics calls found
36 matched to tracking plan
4 unknown events
2 missing required properties
 
Coverage: 86%
Full report: ordaze.com/r/mt7p2
CI that respects your release train

One workflow file. Zero bad events on the Play Store.

Android apps ship on a release train — bad analytics can't be hot-fixed. Ordaze runs on every PR and fails the build before a broken event reaches users.

.github/workflows/analytics.ymlCI
name: Analytics Coverage
on: [pull_request]

jobs:
  scan:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: ordaze/ordaze-scanner@v1
        with:
          token: ${{ secrets.ORDAZE_TOKEN }}
          platform: android
          strict: true
          min-coverage: 80
Android FAQ

Common questions from Android teams

Ordaze is a static source-code scanner — it reads your .kt and .java files directly and doesn't touch your Gradle build. Nothing is added to your app's dependency graph. The scanner runs on your repo (locally or in CI) and reports matched / unmatched events. Generated Kotlin event files drop into any Android project regardless of Gradle or AGP version.
Ordaze recognizes Segment, Amplitude, Mixpanel, Firebase Analytics, PostHog, Braze, Snowplow, and CleverTap call patterns out of the box. Generated Kotlin code is provider-agnostic — you pick which SDK it ultimately calls. Ordaze never locks you into a specific vendor.
Ordaze generates a sealed-class wrapper (for example `Analytics.PurchaseCompleted(amount = 9.99, currency = Currency.USD).track()`). Required properties become non-nullable Kotlin types, enums become `enum class` cases, and optional fields use nullable types. The generated file has zero runtime dependencies beyond whichever analytics SDK you call through.
Yes — the scanner is pattern-based (regex across Kotlin source), so it finds analytics calls regardless of whether they're in Activities, Fragments, Compose composables, ViewModels, or coroutine flows. Dynamic event names like `track(eventNameFromState)` are flagged for manual review — an honest limit of static analysis that's the same tradeoff every source-code scanner makes.
Avo is an established tracking-plan platform with strong enterprise governance. Ordaze is leaner and cheaper, with a static source scanner that runs in CI (no Avo Inspector runtime required), default Swift + Kotlin code generation, and transparent pricing starting at a \$0 free tier with 100 events and unlimited team members. See the full comparison at /compare/ordaze-vs-avo.

Ready to fix your analytics?

Free plan. No credit card required.

Get Started Free