The Two Types of Users
Every person who interacts with your product exists in one of two states in Zixflow: anonymous or identified. Understanding these states is crucial because they determine what you can do with your data—from personalization to multi-channel messaging to conversion tracking. Think of it like this: an anonymous user is someone browsing your store with a shopping basket (we can see what they’re doing), while an identified user is someone with a loyalty card (we know who they are and can engage with them directly).What is an Anonymous User?
An anonymous user is someone using your product before you know who they are. They haven’t signed up, logged in, or given you their email address. You don’t know their name, contact information, or anything personally identifiable about them. But here’s the powerful part: Even though you don’t know who they are, you can still track what they do.How Anonymous Tracking Works
When someone first visits your website or opens your mobile app, the Zixflow SDK automatically generates a unique identifier called ananonymousId. This is a random string (UUID) that looks like abc-123-def-456.
Where this ID is stored:
- Web browsers: First-party cookie (or localStorage as fallback)
- Mobile apps: Device keychain (iOS) or SharedPreferences (Android)
- Server-side: Your session management system (you generate and pass it)
anonymousId—until they identify themselves, at which point we can connect all their devices.
What You Can Do With Anonymous Users
Even without knowing who they are, you can:- ✅ Track their behavior: Every page view, button click, product view
- ✅ Measure conversion funnels: See where anonymous visitors drop off
- ✅ Show personalized content: “You recently viewed these items”
- ✅ Retarget with ads: Connect anonymous IDs to ad platforms
- ✅ Calculate true conversion rates: Include pre-signup behavior in your metrics
- ✅ Send push notifications: If a device is registered before sign-up, you can send push notifications to it immediately — no sign-up required. The device is also automatically linked to the user’s profile when they identify later.
- ❌ Send them emails (you don’t have their email)
- ❌ See their activity across different devices (each device has its own anonymousId)
- ❌ Connect their behavior to your CRM or internal systems
Real-World Anonymous User Journey
Example: Sarah discovers your productanon_abc-123-def. You can see what they did, when they did it, and that they abandoned their cart—but you can’t email them a reminder because you don’t know who they are.
What is an Identified User?
An identified user is someone you know. They’ve given you their email, created an account, logged in, or otherwise told you who they are. Now you have a way to reach them and can track their behavior across all their devices. When a user identifies themselves, Zixflow transitions them from anonymous tracking (usinganonymousId) to identified tracking (using userId from your system).
How User Identification Works
You tell Zixflow who the user is by calling theidentify() method, usually triggered by:
- User signs up: Creates a new account
- User logs in: Existing account authentication
- Email capture: Newsletter signup, waitlist, lead form
- OAuth/SSO: Google, Facebook, Apple, Microsoft login
- Guest checkout: Enters email to complete purchase
- Zixflow creates or updates a user profile with
userId = "user_12345" - All future events from this user are linked to their profile
- You can now message them across multiple channels
The Magic of userId
TheuserId is your identifier for this person—the primary key from your database, their email address, or any other stable, unique identifier in your system. This is how Zixflow connects to the rest of your infrastructure.
What You Can Do With Identified Users
Once you know who someone is, the possibilities expand dramatically:- ✅ Send multi-channel messages: Email, push notifications, SMS, in-app messages
- ✅ Track across all devices: Same userId on iPhone, iPad, and web browser
- ✅ Enrich with external data: Sync with your CRM, customer support, billing systems
- ✅ Build rich user profiles: Combine behavior data with demographic and firmographic data
- ✅ Personalize deeply: “Hi Sarah, your trial expires in 3 days”
- ✅ Calculate customer lifetime value: Aggregate all purchases, subscriptions, and activities
- ✅ Attribute marketing campaigns: Know which campaign brought them in originally
Real-World Identified User Journey
Example: Sarah creates an account- Email Sarah about her abandoned cart (you have her email)
- Send her push notifications when she installs your app
- Show her personalized recommendations based on her full history
- Calculate her conversion path from first touch (LinkedIn ad) to signup
- Track her across all devices once she logs in on each one
The Power of Identification
The transition from anonymous to identified is where Zixflow becomes most powerful. You get:- Complete customer journey: See everything from their first visit to their latest purchase
- True conversion attribution: Know which marketing channel brought them in (even if they didn’t convert immediately)
- Cross-device continuity: Track them seamlessly across phone, tablet, and desktop
- Personalization at scale: Speak to thousands of users as individuals
- Predictive capabilities: Use their full behavioral history to predict churn, upsell opportunities, and lifetime value
Identity Merging: How It Works
Identity merging is what makes pre-signup attribution and funnel analysis possible. When someone signs up or logs in, Zixflow automatically connects all their previous anonymous activity to their identified profile.When Merging Happens
You call identify with both IDs:- Finds all events from that anonymous visitor
- Upgrades the existing anonymous profile in-place — the user’s
first_seen_atandcreated_attimestamps are preserved from when they first arrived, not from when they signed up - Links all anonymous events to the identified profile
- Links all devices registered before sign-up to the user’s profile (enables push notifications immediately after identify)
- Makes everything searchable under their user ID
Profile Timeline Preservation
When a user signs up after browsing anonymously, their profile retains the original timestamps from their first visit:Visual Timeline Example
Why Identity Merging Matters
1. Multi-Touch Attribution
Connect first-touch (anonymous) to conversion (identified):2. Funnel Completion Analysis
Measure conversion rates including anonymous drop-offs:3. Behavioral Enrichment for Activation
Use pre-signup behavior to optimize onboarding:User IDs: What to Use
When callingidentify(), you need to provide a userId — your application’s unique identifier for this user.
Choosing Your User ID
Option 1: Database Primary Key (Recommended)- ✅ Never changes (stable identifier)
- ✅ Unique per user
- ✅ Works even if user changes email
- ❌ Not human-readable in reports
- ✅ Human-readable
- ✅ Unique (in most systems)
- ❌ Can change if user updates email
- ❌ Privacy concerns (visible in logs)
- ✅ Human-readable
- ❌ Can change
- ❌ Not always unique
❌ What NOT to Use
Session IDs ❌- Problem: User gets a new ID every session → Can’t track across sessions
- Problem: Same user on multiple devices → Looks like different people
- Problem: ID might expire or be reassigned
Rule of Thumb
Use an identifier that:- Never changes for the lifetime of the user
- Is unique across all users
- Exists in your system (so you can look up the user)
User Profiles
Once a user is identified, the system maintains a profile with all their data.Profile Structure
Profile information stored:What Profiles Contain
Core identity fields:user_id: Your application’s ID for this useremail: Email address (if provided in traits)name: Name(if provided in traits)phone: Phone number (if provided in traits)anonymous_id: Original anonymous ID before identification
- Anything you pass in
traitsduringidentify() - Anything you set via
setProfileAttributes() - Examples: name, plan, company, preferences, computed values
created_at: When we first saw this userupdated_at: When profile was last modifiedlast_seen_at: Timestamp of most recent event
- Events: All events linked to this user_id
- Devices: All devices registered for push notifications
Multiple Devices Per User
One user can interact with your product across multiple devices. The system automatically links them all to the same profile.Scenario: Sarah’s Devices
- Sarah logs in on iPhone →
identify()called with her userId - Sarah logs in on iPad → Same userId, different device token
- Sarah logs in on web browser → Same userId, different device token
user_id = "sarah@example.com").
Benefits:
- Send push notifications to ALL her devices (or target specific platforms)
- Track cross-device behavior (started on mobile, finished on desktop)
- Unified view of engagement across devices
Common User Scenarios
Scenario 1: First-Time Visitor
Scenario 2: Returning Visitor (Not Logged In)
Scenario 3: User Logs In
first_seen_at reflects when the anonymous session started, not when sign-up happened.
Scenario 4: User Logs Out
- Identified profile: sarah@example.com (previous history intact)
- New anonymous user: anon_456 (new browsing session)
clearIdentify() on logout to ensure clean separation:
Scenario 5: User Switches Devices
User Lifecycle States
Beyond anonymous/identified, a user profile can be in one of these server-controlled states:User Deleted
WhenUser Deleted is triggered:
- Profile is soft-deleted (
is_deleted = true) - All linked devices are deactivated (push tokens disabled)
- Existing event history is preserved for analytics
DELETE /api/v1/customers/{id} endpoint or from your backend. Cannot be triggered from the client SDK.
User Suppressed / Unsuppressed
Suppression blocks all outbound messages for a user across every channel, regardless of their individual opt-out settings:| State | Profile flag | Effect |
|---|---|---|
User Suppressed | is_suppressed = true | No push, email, SMS, or any channel |
User Unsuppressed | is_suppressed = false | Normal message delivery resumes |
Device Registration for Anonymous Users
A common pattern — especially for mobile apps — is that a user registers their device for push notifications before they create an account or log in. Zixflow handles this as a first-class use case:-
Anonymous device registration: The SDK fires a
Device Created or Updatedevent with the device’s push token and the user’sanonymousId. Zixflow creates an anonymous profile and links the device to it. - Push notifications work immediately: The anonymous device is fully active. You can send push notifications to it right away — no sign-up required.
-
User signs up / logs in: The app calls
identify()with theuserIdandanonymousId. -
Automatic device migration: Zixflow finds all devices registered under that
anonymousIdand links them to the now-identified user profile. Push notifications continue working unchanged.
identify() at sign-up.
Next: Learn how to register devices for push notifications → Devices & Push Notifications