Skip to main content
5 min read

Visitor Identification

Identify and track individual users across sessions to understand user journeys and build complete user profiles.

Overview

Visitor identification allows you to:

  • Link anonymous visitors to known users when they log in
  • Track user behavior across multiple sessions and devices
  • Build comprehensive user profiles
  • Personalize experiences based on user history

Basic Identification

Identify a user after they sign up or log in:

Identify UserJavaScript
zenovay('identify', 'user_123', {
email: '[email protected]',
name: 'John Doe',
plan: 'pro',
created_at: '2025-01-15T10:00:00Z'
});

User Traits

Include relevant user properties:

User TraitsJavaScript
zenovay('identify', user.id, {
// Contact information
email: user.email,
name: user.name,
phone: user.phone,

// Account details
plan: user.subscription.plan,
status: 'active',
created_at: user.createdAt,

// Company information (B2B)
company: user.company.name,
company_size: '50-200',
industry: 'SaaS',

// Custom properties
lifetime_value: user.lifetimeValue,
total_purchases: user.totalPurchases
});

Never include sensitive information like passwords, credit card numbers, or SSNs in user traits.

Anonymous to Identified

Track anonymous visitors and link them when they identify:

Anonymous TrackingJavaScript
// Before login - track as anonymous
zenovay('track', 'page_view', {
path: '/pricing'
});

zenovay('track', 'button_click', {
button: 'sign_up'
});

// After login - identify the user
zenovay('identify', 'user_456', {
email: '[email protected]',
name: 'Jane Smith'
});

// All previous anonymous events are now linked to this user

Identity status badges in the dashboard

Once visitors are identified, Zenovay automatically labels them in your dashboard with one of three status badges:

  • Anonymous — A visitor that has not yet called zenovay('identify', ...). Tracked by an anonymous in-memory ID (no cookies, no localStorage in cookieless mode).
  • Identified — A visitor that has called zenovay('identify', userId, traits). The identity card on the visitor's session detail panel shows the email, name, plan, and any custom attributes you sent.
  • Paying customer — A visitor whose record is linked to a paid subscription via Stripe, LemonSqueezy, Polar, or PayPal — OR whose total_revenue is greater than zero. The link is established automatically by your payment provider's webhook (no extra tracker call required).

Badges appear on:

  • Globe markers — Paying customers get a green-glow crown icon, identified visitors get a blue-ringed user icon, anonymous visitors get the default value-score colour.
  • Profiles list — Each row shows a coloured badge. Filter chips above the list narrow to one status.
  • Live Analytics — Live rows show the badge inline.
  • Visitor detail panel — Identity card section displays full identity attributes when present.

Edge cases

  • A visitor who calls identify() with only a customer ID (no email) is still classified as Identified. The identity card renders ID only in the Email row.
  • A visitor whose subscription is later cancelled BUT whose total_revenue > 0 remains classified as Paying — past lifetime value is still relevant to your team.
  • A visitor identified across two different websites you track shows independently per website (data is scoped per website, never bled across).

Screenshot mode: blur identifiers

For demos, public screenshots, or screen-sharing in calls, you can mask all visitor emails and names across the dashboard:

  1. Open /profile → Preferences.
  2. In the Display section, toggle Blur identifiers ON.
  3. Emails render as ••••••@•••••• and names as J••• D•. Reload-persistent (per browser).

The blur toggle is a presentation aid for screenshots — not an access control. A user with browser DevTools can still see the unmasked data when the toggle is ON. To genuinely restrict access to identifiers, manage your team membership in Settings → Team.

Public dashboards always blur

Identifiers are ALWAYS masked on a public dashboard share, regardless of the toggle state. The Globe API also omits identity_email / identity_name / identity_plan fields entirely from the shared response — the data is not just hidden in the UI, it is not transmitted.

React Example

In React applications:

React IdentificationTSX
import { useEffect } from 'react';

function UserProvider({ user, children }) {
useEffect(() => {
  if (user && window.zenovay) {
    // Use the global zenovay object from the tracking script
    window.zenovay('identify', user.id, {
      email: user.email,
      name: user.name,
      plan: user.plan,
      created_at: user.createdAt
    });
  }
}, [user]);

return <>{children}</>;
}

Privacy Compliance

Respect user privacy and comply with regulations:

GDPR Compliance

To delete all data for a specific user, go to Settings → Privacy → Delete User Data in the Zenovay dashboard, or use the External API.

Opt-Out Tracking

Opt-OutJavaScript
// Disable tracking for a user who opts out
zenovay('disable');

// Re-enable tracking if user opts back in
zenovay('enable');

Session Management

Sessions are managed automatically by the Zenovay tracker. A new session starts when a visitor arrives or after 30 minutes of inactivity. You can query session timing:

Session InfoJavaScript
// Get time spent in current session (seconds)
const sessionTime = zenovay('getSessionTime');

// Get active engagement time (seconds)
const engagementTime = zenovay('getEngagementTime');

Best Practices

When to Identify

Do identify users:

  • After successful signup
  • After login
  • When user updates their profile
  • When subscription changes

Don't identify users:

  • Before they've created an account
  • With temporary or test data
  • In development/testing environments

ID Format

Use consistent, immutable user IDs:

Good vs Bad IDsJavaScript
// ✅ Good: Use database IDs
zenovay('identify', 'usr_1234567890');

// ❌ Bad: Email addresses can change
zenovay('identify', '[email protected]');

// ❌ Bad: Usernames can change
zenovay('identify', 'johndoe123');

Next Steps

You're now tracking identified users! View user profiles in your Zenovay dashboard.

Continue learning:

Was this page helpful?