Concepts

Events

What a Rabolic event is, how to name events and properties, super properties, and every reserved $ event the SDKs and the server use.

An event is one thing that happened: a page view, an app launch, a sign-up, a purchase. Every report in Rabolic is built from events.

What an event holds

PartExampleWhat it is
Namesignup_completedWhat happened
Time2026-11-08T10:00:01.000ZWhen it happened, on the device's clock. Rabolic corrects clocks that are off by more than 30 s
Anonymous ida random UUIDThe browser or app install that sent it
User idusr_8f2k1x9qYour own id for the person, after identify()
Session ida UUIDv7The session it belongs to. See Sessions
Properties{ "method": "google" }Details you choose to send
Contextplatform, app version, device, OS, locale, page, campaignFilled in by the SDK

Sending your own events

rabolic.track('signup_completed', { method: 'google' })
  • Name events in snake_case, in the past tense of what the person did: signup_completed, checkout_completed, workout_started.
  • Put the details in properties, not in the name: plan_selected with { plan: 'pro' }, not pro_plan_selected.
  • Names are 1 to 200 characters, may not start with $ and may not contain control characters.
  • Properties can be strings, numbers, booleans, null, arrays and objects. At most 255 keys per level, nested at most 5 levels deep, keys up to 255 characters.
  • One event is at most 32 KB (32,768 bytes of UTF-8 JSON). The SDKs drop larger events, and the server rejects them.

Super properties

register() sets properties that every later event carries, until unregister() or reset(). A property on the event itself wins over a super property with the same name.

rabolic.register({ app_theme: 'dark' })

Person traits

identify(userId, traits) sends $identify with traits, such as { plan: 'pro' }. Traits are properties of the person, shown on their profile in Users.

Properties Rabolic removes

Rabolic removes these keys from properties and traits without rejecting the event:

  • keys longer than 255 characters;
  • __proto__, constructor and prototype;
  • objects nested deeper than 5 levels;
  • sensitive names: password, passwd, pwd, card_number, cc_number, cvv, cvc, iban, ssn, social_security_number;
  • properties you block in Project settings → Privacy & data → Sensitive property blocking.

Don't send personal data you don't need.

Reserved events

Names that start with $ are reserved. Rabolic accepts only these; any other $ name is rejected with reserved_name.

NameSent byProperties
$pageviewWeb, automaticThe page is in context.page
$page_leaveWeb, automaticactive_ms, scroll_depth (0–1)
$screenApps, with the navigation helper or screen()The screen name, in context.screen_name and properties.name
$identifyidentify()traits
$app_first_openApps, the first launch after installNone today
$app_openApps, each launch or return to the foregroundfrom_background (boolean)
$app_backgroundApps, leaving the foregroundforeground_ms
$app_updateApps, the first launch on a new app versionprevious_version
$deep_linkApps, trackDeepLink() or handleDeepLink()url, linked_anonymous_id
$purchase, $renewal, $refundSecret keys only: your server, or Dodo Payments webhooksamount, currency, transaction_id, product

Revenue events sent with a publishable key are rejected with revenue_needs_secret_key. See Revenue and attribution.

Duplicates

Every event has an event_id, created when the event happens and kept on every retry. Rabolic drops an event whose id it has received in the last 48 hours, so a retried batch counts once. Duplicates aren't billed.

Where events show up

  • Live: within seconds, under Events as they arrive.
  • Events: the catalog of every event name the project has received, with counts and properties. See Events.
  • Reports: results are cached for a minute while the date range includes today, so trends catch up within about a minute.