Concepts

Identity

How Rabolic links browsers, app installs and server events to one person with identify(), when people are merged, what reset() does, and what doesn't link people yet.

Rabolic counts people, not devices. A person who visits your website, installs your iPhone app and pays through your server is one person in every report, once you tell Rabolic who they are.

The three ids

IdWho makes itWhat it is
Anonymous idThe SDKA random UUID per browser or app install, kept until reset()
User idYouYour own id for the account, sent with identify(), the Node.js SDK or the HTTP API
PersonRabolicRabolic's id for one person in one project

Every device starts anonymous

The SDK creates an anonymous id for each browser and each app install, and every event carries it. Rabolic keeps a person for each one, so a visitor's pages, screens and sessions are tracked before they sign up.

identify() turns a visitor into your user

Call identify() after signup and after every login:

rabolic.identify(user.id, { plan: 'pro' })
Rabolic.identify(user.id, traits: {'plan': 'pro'});
  • Use your own stable id, such as the primary key of the account. Not an email address, which can change.
  • Use the same id on every platform: web, iOS, Android and your server.
  • The user id is set on this event and every later one, until reset().

The rules

For an event with anonymous id A and, maybe, user id U:

SituationWhat Rabolic does
A device Rabolic has never seen sends its first eventCreates a new person for it
An anonymous person calls identify() with a new user idThat person becomes the user. Their earlier events are already theirs; nothing moves
A new device identifies as a user Rabolic already knowsThe device is attached to that person
A device with its own anonymous history identifies as a known userMerge: the anonymous person is merged into the user, with their history
An identified device sends a different user id (a shared device without reset())Nothing is merged. The new events go to the person with that user id, and Rabolic records an identity conflict
Two different user ids meetNever merged. Two identified people always stay two people

When two people merge, properties are combined and the newer value wins. Reports read through the merge at once. Each event keeps the raw ids it was sent with.

reset() at logout

rabolic.reset()

reset() creates a new anonymous id and a new session, and clears the user id and super properties. The next person on that device starts fresh, instead of being added to the last one.

Server events

Every event from the Node.js SDK or the HTTP API names a userId, an anonymousId or both.

  • With a userId, the event goes to that user.
  • identify({ userId, anonymousId }) on the server links that visitor to the user. That helps when sign-up happens on your backend.
  • Deep links. The web SDK's appLink() adds rb_aid to a link, and the app SDKs send it as linked_anonymous_id on $deep_link. Rabolic stores it, but doesn't link the web visitor to the app user by it yet. Use identify() with the same user id on both sides.
  • Guesses. Rabolic never links people by IP address, device fingerprint or advertising id.
  • Other projects. People are never matched across projects, even in one organization.

Where you see it

  • Users: every person, with an Identified, Anonymous only or Cross-platform filter. A person's page shows their identity graph and timeline. See Users.
  • Journeys: "How identities were matched". See Journeys.