User identification

Turn anonymous visitors into persistent and searchable profiles with custom parameters.

Visitor profile and journey

Profiles let you track users with persistent IDs (like email or userId) and provide several advantages:

  • Cross-platform tracking: Follow users across browsers and devices
  • Search visitors: Locate specific users and their journeys in your analytics dashboard
  • Persistent tracking: Maintain the user journey even when cookies are cleared
  • Better attribution: Connect anonymous traffic to known users

How to identify a user

Use the window.flowsery() method to identify a visitor:

window?.flowsery("identify", {
  user_id: "unique-user-id", // required
  name: "John Wayne", // optional - if present, it will replace the anonymous name in the visitor profile
  image: "https://example.com/avatar.jpg", // optional - profile image URL
  // ... any other custom parameters you want to track
});

Required parameters

  • user_id (string, required): A unique identifier for the user such as email or userId

Special parameters (optional)

  • name (string): When provided, replaces the anonymous name in the visitor profile
  • image (string, 250 char. max.): A valid URL pointing to a profile image for display in Journeys and the Realtime Map. Example: https://lh3.googleusercontent.com/-WuQbhWk1Xso/AAAAAAAAAAI/AAAAAAAAAAA/ALKGfklNb9VSEpE-xxOXfgy6n9NGIdz-2g/photo.jpg?sz=46

Custom parameters validation rules

  • Property names: lowercase letters, numbers, underscores (_), and hyphens (-) only. Max 64 characters.
  • Property values: any string, max 255 characters.
  • Limits: maximum 10 custom parameters.

Add this script to your HTML <head> to guarantee identification calls are captured even when triggered before the main script loads:

<script id="flowsery-queue">
  window.flowsery = window.flowsery || function() {
    window.flowsery.q = window.flowsery.q || [];
    window.flowsery.q.push(arguments);
  };
</script>

Example usage

useEffect(() => {
  if (user && user.email) {
    window?.flowsery("identify", {
      user_id: user.email,
      name: user.name,
      image: user.profileImage,
      role: user.role,
      plan: user.plan,
    });
  }
}, [user]);

Note: User identification is separate from custom goals. Use identify to link users to their accounts, and use custom goals to track specific user actions.

Special notes

  • Persistent tracking: You need to identify the visitor each time their cookie changes for persistent tracking. You can call window.flowsery("identify") every time their session changes.
  • Revenue attribution: If revenue attribution is active, we automatically identify the customer using data from the payment provider.