Zenovay shows one of three badges next to every visitor — Anonymous, Identified, or Paying. The badges appear on the 3D Globe (in a visitor's hover popup) and inside the Journeys → Users tab. This article explains what each state means, how a visitor moves between them, and how to mask the data when sharing the dashboard externally.
The three badges
| Badge | What it means | When a visitor gets it |
|---|---|---|
| Anonymous (gray) | The visitor browses without logging in. Zenovay knows their device, country, and behaviour but not who they are. | Default for any unidentified pageview. No cookies are set in cookieless mode. |
| Identified (blue) | The visitor is signed into your product. Zenovay knows their email, name, and any custom traits you sent. | After your site calls zenovay('identify', userId, { email, name }) — usually right after login or signup. |
| Paying (green) | The visitor's record is linked to a paid subscription or has lifetime revenue greater than zero. | Automatically, when Zenovay receives a payment webhook from Stripe, LemonSqueezy, Polar, or PayPal — no extra tracker call needed. |
How to make visitors "Identified"
Identification is opt-in: your site needs to call zenovay('identify', ...) when a user logs in. The simplest call:
// Right after login, signup, or whenever you have a known user
zenovay('identify', user.id, {
email: user.email,
name: user.name
});
That's it. The next pageview is associated with that identity, and the badge flips from Anonymous to Identified. Common pitfall: call identify() only with stable IDs (your database primary key) — don't pass an email or username as the userId, because users can change those.
For step-by-step setup with code samples for Next.js, React, Vue, plain HTML, Shopify, and WordPress, see the Visitor Identification documentation.
Working with Claude Code, Cursor, ChatGPT, or GitHub Copilot? Point your AI assistant at the Visitor Identification docs and ask it to wire up zenovay('identify') for your stack. The doc has copy-paste-ready snippets for the major frameworks.
How to make visitors "Paying"
You don't make a visitor Paying with a tracker call. Zenovay receives webhook events from the payment providers you connect (Stripe, LemonSqueezy, Polar, PayPal) and links the customer record automatically. As soon as a payment lands, the visitor's badge flips to Paying. Their lifetime revenue and order count appear in the visitor detail panel.
If a visitor cancels their subscription later, they keep the Paying badge as long as their total_revenue is greater than zero — past customer value is still relevant to your team.
What if I only have a customer ID, no email?
Some integrations (e.g. mobile apps that have an internal user ID but no email yet) can call:
zenovay('identify', user.id, {
customer_id: 'cus_internal_123'
});
That visitor counts as Identified — the badge appears, and the visitor detail card shows ID only in the email row. They become Paying the moment a payment webhook links that customer ID to a Stripe / LemonSqueezy / Polar / PayPal account.
Hiding identifiers in screenshots and demos
Open /profile → Preferences → toggle Blur identifiers. Emails render with everything but the first couple of characters and the top-level domain masked (e.g. jo••••@ex••.com) and names keep only each part's first letter (e.g. J••• D•) everywhere on your dashboard. The toggle persists per browser, so you don't need to re-enable it after a reload.
Blur is a presentation aid, not 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
Whenever you share a public read-only dashboard, identifiers are masked regardless of the blur toggle. Emails are masked even for the dashboard owner if they view through the public URL. The Globe data endpoint also omits the identity_email, identity_name, and identity_plan fields entirely from the public response — the data is not just hidden in the UI, it is never transmitted.
This is a hard guarantee: you can share a public link without leaking real customer emails to whoever you send it to.
Where the badges appear
- 3D Globe: click a visitor marker to open its popup — the popup shows the badge (green for Paying, blue for Identified).
- Journeys → Users tab: each row in the Users list shows the badge, plus a full identity card on the visitor detail panel showing email, name, plan, and any custom traits you sent with
identify(). You can narrow the list with the goal, device, OS, country, and source filters above the table.
Frequently asked questions
Q: Do I need cookies to use identify()?
A: No. Zenovay's cookieless mode uses an in-memory window-scoped visitor ID — calling identify() links the existing session to the user without setting any cookie or localStorage entry.
Q: Does identify() need consent under GDPR / ePrivacy?
A: It depends on your processing basis. The cookieless tracker itself doesn't store anything on the user's device, so it doesn't trigger ePrivacy Article 5(3). However, the identify() call processes personal data (email, name) — you need a lawful basis under GDPR Article 6 for that. For most products, "performance of a contract" (the user is signed in to your product) is the basis.
Q: Can I use identify() to mark a visitor as paying directly, without a webhook?
A: Not by design. Paying status is derived from total_revenue > 0 or a payment-provider customer ID, both of which are set by webhooks. This keeps the value verifiable — your finance team trusts the badge because it's tied to actual money. If you need to mark a visitor manually for testing, run a $0 test payment through Stripe Test Mode.
Q: What happens if I call identify() with a different ID for the same browser session?
A: Zenovay treats it as an account switch — the new identity replaces the old one for that visitor record. The previous identify event remains in the timeline so you can audit account changes.
Related articles
- How do I share a public dashboard? — masking + access control for shared links
- Does Zenovay use cookies? — how identification works without cookies
- Stripe revenue integration — connecting payment webhooks for Paying badges