Auto-Identify
By default, Outlit automatically identifies visitors when they submit a form containing an email field—no code required.How It Works
When a form is submitted, Outlit:-
Detects email by looking for:
- Field names:
email,e-mail,user_email,emailAddress - Input type:
type="email" - Any field with a valid email value (fallback)
- Field names:
-
Extracts name by looking for:
- Full name:
name,full_name,fullname,your_name - First name:
first_name,fname,firstname,given_name - Last name:
last_name,lname,surname,family_name
- Full name:
-
Calls
identify()automatically:
The form submission event is still captured separately. Auto-identify adds an additional
identify event when an email is found.Supported Form Types
Auto-identify works with common form patterns:| Form Type | Fields Detected |
|---|---|
| Newsletter signup | email |
| Contact form | email, name, company |
| Demo request | email, first_name, last_name, company |
| Lead magnet | email, name |
| Account signup | email, password (password excluded from capture) |
Disabling Auto-Identify
If you prefer to handle identification manually (e.g., for custom validation or delayed identification):- Script Tag
- React
- NPM
The Identity Challenge
Modern customers interact with your business across multiple touchpoints:- Multiple devices (phone, laptop, tablet)
- Different browsers
- Various email addresses
- Social logins vs email logins
- Website visits before signup
How Identity Resolution Works
Identity Priority
When multiple identifiers exist, Outlit uses this priority order:| Priority | Identifier Type | Example | Source |
|---|---|---|---|
| 1 (Highest) | jane@acme.com | Identify call, form submission | |
| 2 | External User ID | usr_12345 | Auth provider (Supabase, Auth0) |
| 3 | Stripe Customer ID | cus_abc123 | Stripe integration |
| 4 | CRM Contact ID | contact_xyz | Salesforce, HubSpot sync |
| 5 | Phone Number | +1-555-1234 | Form submission |
| 6 (Lowest) | Anonymous ID | abc-def-123 | Browser visitor ID |
Resolution Process
When you callidentify():
- Search existing contacts by provided identifiers
- Match found? Link the anonymous visitor to existing contact
- No match? Create new CustomerContact and Customer
- Multiple matches? Merge profiles, keeping the most complete one
Identifier Types
Email (Primary)
Email is the most reliable identifier because:- Unique per person (usually)
- Verified through login/signup
- Works across devices
External User ID
Your application’s internal user ID (from Supabase, Auth0, Firebase, etc.):Anonymous Visitor ID
Automatically generated for browser visitors:- Is stored in localStorage and cookies
- Persists across sessions (same browser)
- Gets linked to CustomerContact after identify
Profile Merging
When Outlit detects the same person with different identifiers, profiles are merged:Merge Triggers
Same email, different visitor IDs
Same email, different visitor IDs
User visits on phone (visitorId: A), then laptop (visitorId: B), identifies with same email on both.Result: Both visitor histories merge into one CustomerContact.
Email change / correction
Email change / correction
User identifies as
jane@old-company.com, later updates to jane@new-company.com while logged into same account (userId).Result: New email added to contact identifiers, profiles linked.Multiple auth methods
Multiple auth methods
User signs up with email, later links Google OAuth which has different email.Result: Both emails link to same contact via shared userId.
Merge Rules
When merging two contacts:| Data | Rule |
|---|---|
| Events/Activities | Combined into unified timeline |
| Traits | Newer values overwrite older |
| Identifiers | All identifiers preserved |
| Anonymous history | All visitor events included |
Browser vs Server Identity
- Browser Tracking
- Server Tracking
Anonymous visitors are supported
- visitorId auto-generated
- Events stored until identification
- Later linked via identify() or setUser()
Best Practices
1. Identify Early
Callidentify() as soon as you have user information:
2. Always Send Both Identifiers
When you have both email and userId, send both:3. Update Traits on Changes
Re-identify when user data changes:4. Handle Multiple Emails
If users can have multiple emails, use a primary:Debugging Identity Issues
Check Current Visitor ID
Verify Identify Calls
Check the Network tab for/api/i/v1/ requests:
Common Issues
Events not linking to user
Events not linking to user
- Ensure
identify()is called after the user authenticates - Check that email/userId matches what you expect
- Verify the domain is in your allowlist
Duplicate customer profiles
Duplicate customer profiles
- Same person using different emails
- Missing
userIdthat would link them - Contact support for manual merge
Anonymous history not appearing
Anonymous history not appearing
identify()must be called from the same browser/device- Check visitorId is consistent (not cleared)
- Background job processes links periodically (up to 5 min delay)