Skip to main content
Scale Plan10 minutesIntermediate

Identified Users & CRM Integration

Connect known users to their analytics data - identify visitors, link them to your CRM records, and track individual journeys. Explore users setup and best practices.

usersidentificationcrmb2btracking
Last updated:
Scale Plan

Link anonymous visitor data to known users. When visitors log in or submit forms, Zenovay connects their full history to their identity.

How User Identification Works

Anonymous to Known

Visitor journey:

Visit 1 (Anonymous):
Anonymous visitor browses site
→ Assigned visitor ID: viz_abc123

Visit 2 (Anonymous):
Same visitor returns
→ Same visitor ID: viz_abc123

Visit 3 (Identified):
Visitor logs in as [email protected]
→ zenovay('identify', '[email protected]')
→ All history linked to [email protected]

Future Visits:
Automatically recognized
→ Full journey preserved

Data Merged

When identified:

  • Past anonymous visits linked
  • Future visits tracked
  • Full journey visible
  • Cross-device possible

Implementing Identification

Basic Identification

Call identify when the user is known:

// When user logs in
zenovay('identify', userId);

// Example
zenovay('identify', 'user_12345');
// or
zenovay('identify', '[email protected]');

With User Properties

Add user details as a third argument:

zenovay('identify', 'user_12345', {
  email: '[email protected]',
  name: 'John Smith',
  company: 'Acme Corporation',
  plan: 'enterprise',
  role: 'admin'
});

Info

Either an email or a customer ID is required to identify a visitor. The first argument can be an email address or your own user ID.

Supported Properties

PropertyTypeDescription
emailstringEmail address
namestringFull name
first_namestringFirst name
last_namestringLast name
companystringCompany name
phonestringPhone number
custom_*anyCustom properties

Any extra keys you pass are stored as custom attributes on the user profile.

Implementation Examples

On Login

// After successful login
async function handleLogin(credentials) {
  const user = await loginUser(credentials);

  // Identify in Zenovay
  zenovay('identify', user.id, {
    email: user.email,
    name: user.name,
    company: user.company_name
  });

  // Continue with app
  redirectToDashboard();
}

React Hook

import { useEffect } from 'react';
import { useAuth } from './auth';

function useZenovayIdentify() {
  const { user, isAuthenticated } = useAuth();

  useEffect(() => {
    if (isAuthenticated && user) {
      if (window.zenovay) {
        window.zenovay('identify', user.id, {
          email: user.email,
          name: user.name,
          company: user.company
        });
      }
    }
  }, [user, isAuthenticated]);
}

Form Submission

// On form submit (before login)
async function handleFormSubmit(formData) {
  // Identify with email from form
  zenovay('identify', formData.email, {
    email: formData.email,
    name: formData.name,
    company: formData.company
  });

  // Track the form submission
  zenovay('goal', 'form_submission');

  // Submit to backend
  await submitForm(formData);
}

Viewing Identified Users

Users View

  1. Open your website's dashboard (/domains/{id})
  2. In the sidebar's Audience group, open the Journeys tab
  3. Select the Users sub-tab to see identified users and their timelines
  4. Click a user to open their profile and full activity timeline

User List

Each row shows the visitor's name or email, where they came from, how many pages they've viewed, any revenue attributed to them, and when they were last active. Sort the list to surface your most active or highest-spending users:

VisitorSourcePageviewsSpentLast Active
[email protected]Google24$4,999Today
[email protected]Direct18Yesterday
[email protected]Twitter12$993 days ago

Visitors who haven't identified themselves yet appear as Anonymous until an identify call (or a known email from an event) links a real identity. Click any row to open that visitor's full profile and activity timeline.

User Profile

┌─────────────────────────────────────────────────────┐
│ John Smith                                          │
│ [email protected]                                       │
│ ─────────────────────────────────────────────────── │
│                                                     │
│ Company: Acme Corporation                           │
│ Plan: Enterprise                                    │
│ Role: Admin                                         │
│ Created: November 15, 2024                          │
│                                                     │
│ ─────────────────────────────────────────────────── │
│                                                     │
│ Analytics Summary:                                  │
│ • Total Sessions: 24                                │
│ • Total Time: 3h 45m                                │
│ • Pages Viewed: 89                                  │
│ • Goals Completed: 5                                │
│ • Revenue: $4,999                                   │
│                                                     │
│ First Visit: Oct 20, 2024 (anonymous)               │
│ Identified: Nov 15, 2024                            │
│ Last Visit: Today at 2:30 PM                        │
│                                                     │
└─────────────────────────────────────────────────────┘

User Journey

Full Timeline

See complete user history:

John Smith - Journey Timeline

January 15, 2025
├── 2:30 PM - Settings page (5 min)
├── 2:00 PM - Dashboard (10 min)
└── Logged in

January 10, 2025
├── 3:45 PM - Billing page (3 min)
├── 3:40 PM - Upgrade modal → Upgraded ✓
└── Logged in

December 15, 2024
├── 10:00 AM - Onboarding flow
└── Account created, identified

November 28, 2024 (anonymous)
├── Demo request submitted → Identified
├── /pricing (8 min)
└── /features (5 min)

October 20, 2024 (anonymous)
├── /blog/guide (4 min)
└── First visit via Google search

Cross-Device Tracking

When a user logs in on multiple devices, their sessions are linked to the same identity:

Devices Used:

Desktop (Chrome/Windows)
├── 18 sessions
└── Last: Today

Mobile (Safari/iOS)
├── 4 sessions
└── Last: Jan 10

Tablet (Chrome/iPad)
├── 2 sessions
└── Last: Dec 20

All sessions linked to [email protected]

If the same visitor is identified on more than one of your tracked domains, the timeline also surfaces the other domains they were seen on.

Privacy Considerations

Before identifying:

  • Ensure proper consent
  • Follow your privacy policy
  • Respect opt-outs

Data Handling

User data is:

  • Encrypted in transit
  • Access controlled by team membership and role
  • Retained according to your plan's data-retention window

Deleting a User's Data

To remove a person's personal data, use a standard data-subject request: have them (or you, on their behalf) request deletion through Settings → Account for an account holder, or contact support at [email protected] for a visitor who isn't an account holder. Removing the website's tracking association also stops further collection.

Opt-Out Respect

// Check for opt-out before identifying
if (!userHasOptedOut()) {
  zenovay('identify', userId, userData);
}

API Access

Identified-user data is available through the Zenovay REST API on paid plans. Use it to pull a user's profile, stats, and timeline into your own systems or to push identification from a backend.

For authentication, endpoints, and response formats, see the API overview. The identify call shown above (zenovay('identify', ...)) is the client-side way to create or update a user; the REST API is the server-side equivalent for reading that data back.

Best Practices

Identify Early

Identify as soon as possible:

  • On signup/login
  • On form submission
  • When email known

Use Consistent IDs

Pick one ID strategy:

  • Email (if unique)
  • User ID from database
  • UUID

Update Properties

Keep properties current:

// When user upgrades plan
zenovay('identify', userId, {
  plan: 'enterprise',
  upgraded_at: new Date()
});

Don't Over-Identify

Avoid calling identify:

  • On every page load
  • For anonymous visitors
  • Without user consent

Troubleshooting

User Not Identified

If identification fails:

  • Check the console for errors
  • Verify the tracking script loaded
  • Confirm identify was called after the script

History Not Linked

If past visits don't appear:

  • Cookies may have been cleared
  • Different browser/device
  • Incognito mode used

Next Steps

Was this article helpful?