Track Events

Send behavioral events from web and mobile with consistent naming, properties, and batching behaviour.

Introduction

Events describe what users do. Profiles describe who they are. Use track / logEvent for behaviour; use profilePush / login traits for attributes.

Web — track()

Batched (up to 100 or every 5s) via sendBeacon with fetch fallback. Queued until guest_id exists.

  • Auto: $init, app_installed, app_opened, $pageview, app_closed
  • System props: $os, $browser, $url, $platform, $lib_version, $session_id, …
  • Sessions expire after 30 minutes inactivity
Custom eventjavascript
growise.track('Product Viewed', {
  product_id: 'SKU-12345',
  category: 'Footwear',
  price: 2499,
})

Android — logEvent / track

SQLite cache; flush ~every 5 events and on background.

  • Auto: app_install, App First Open, App Updated, app_open, notification_received, App Crashed
Kotlinkotlin
GrowWise.logEvent(
    "product_viewed",
    mapOf(
        "item_id" to "sku_1001",
        "category" to "Electronics",
        "price" to 199.99
    )
)

Flutter — logEvent

Eventsdart
await GrowWise.logEvent('app_opened');
await GrowWise.logEvent('product_viewed', {
  'item_id': 'prod_headphone_2026',
  'price': 199.99,
});
Auto page_visiteddart
MaterialApp(
  navigatorObservers: [GrowWiseNavigatorObserver()],
  // ...
);

Naming conventions

  • Past-tense, human-readable: Product Viewed, Purchase Completed
  • Stable property keys: product_id, amount, currency
  • Avoid PII in event properties when a profile trait is enough