Support/Advanced Features
Advanced Features

User identification

Turn anonymous visitors into persistent and searchable profiles.

Profiles let you track users with a stable identifier and provide several advantages:

  • Cross-device continuity when the same user is identified again
  • Searchable visitor records in the dashboard
  • Better attribution from anonymous traffic to known accounts

How to identify a user

Flowsery does not auto-detect logged-in users. Installing the script tracks anonymous pageviews and sessions; it has no way to know who the current user is. You link the visitor to an account by calling identify explicitly after signup, login, or whenever your app knows the user — the same model as DataFast and Segment.

JavaScript
window.flowsery('identify', {
  userId: 'user_123',
  email: 'john@example.com',
  name: 'John Wayne',
  image: 'https://example.com/avatar.jpg',
  profileData: {
    role: 'admin',
    plan: 'pro',
  },
});

Call it from your app once the user is known. In React:

JSX
'use client';
import { useEffect } from 'react';
 
export function FlowseryIdentify({ user }) {
  useEffect(() => {
    if (user?.id) {
      window.flowsery?.('identify', {
        userId: user.id,
        email: user.email,
        name: user.name,
      });
    }
  }, [user]);
 
  return null;
}

Current contract

  • userId is required — your stable account id
  • email is optional but required to match payments by email (see below)
  • name is optional
  • image is optional
  • Custom fields belong inside profileData

Revenue attribution by email

When you can't forward the _fs_vid cookie into your payment provider's metadata (see Stripe PaymentIntent API), identify is the fallback: Flowsery matches an incoming payment to the visitor when the payment's email equals the identified user's email. Pass the user's email to identify for this to work. This links a payment to the persistent visitor you see in the dashboard for weeks, even across devices.

Reliable loading

If identify calls can fire before the main tracker script loads, place the queue shim in your document head:

HTML
<script id="flowsery-queue">
  window.flowsery =
    window.flowsery ||
    function () {
      window.flowsery.q = window.flowsery.q || [];
      window.flowsery.q.push(arguments);
    };
</script>

Notes

  • Identify links a known user to the visitor profile. It does not replace custom goals.
  • If revenue attribution is enabled, connected payment-provider flows can also enrich customer identity when matching data is available.