/track is a public endpoint, an address alone proves nothing. Identification is always signed.
identify()
Callidentify once you know who the visitor is, with the address and a signature computed on your server.
identify without them rejects rather than failing quietly, as does an address over 255 characters or a signature over 64 bytes. A wrongly signed address is the silent case — the server discards the identity and still records the visit, anonymously.
Computing the signature
The signature is an HMAC-SHA256, hex-encoded, over the stringwa_identify: followed by the email address, keyed with your workspace secret key.
identify — the signature is checked before the address is normalised, so Alice@Example.com must be signed as Alice@Example.com.
clearIdentity() stops later beats from carrying the identity. It does not anonymise what was already recorded.
Identifying from Email Links
Notifuse can add a signed identity to the links of tracked emails, so a recipient who clicks one is recognised on landing without any code on your site. This is off by default. Turn on Identify recipients who click a tracked email link under Settings → Web Analytics.Unlike
identify(), which your own server calls with your own secret, this credential is minted by Notifuse for every recipient of every tracked send — which is why it is a separate decision rather than something that follows from enabling web analytics.nf_id parameter that expires 7 days after it is minted. It is added only to links whose host is in your allowed domains, so third-party links in the same email never carry it. The tracker reads it on landing and strips it from the URL.
A send never carries one when the notification has tracking explicitly disabled, or — on the transactional API — when the message has any CC or BCC recipient, since the identity would otherwise be handed to someone who is not the contact.
What Identification Records
Once a visitor is identified, that visit and everything already recorded in it is attributed to the contact:- On the analytics rows: the contact’s address, so Contact Email becomes a dimension and Identified Contacts becomes a measure.
- On the contact timeline: one entry per page they viewed and one summarising the visit, plus any goals as custom events.
Segments
Web behaviour is available as Activity conditions on a segment:
So “viewed
/pricing at least twice in the last 30 days” or “visited from a newsletter campaign and reached at least one goal” are ordinary segment conditions. See Contacts for how conditions combine.
Navigation never triggers an automation. Pageviews and visits are recorded and segmentable, but only goals reach automations — through the
custom_event trigger, under the goal’s normalised name. Goals carry a declared type, so they are also reachable through the Custom Events Goal condition; see Goals.Privacy
- No cookie is set, and no identifier follows a visitor between sites.
- IP addresses are used to resolve a location and are never stored.
- An anonymous visit stays anonymous. Nothing links it retroactively to a contact identified in a later session.
- Deleting a contact removes their address everywhere it was stored: the analytics rows, their timeline entries, and the custom events created from their web goals. The traffic survives as anonymous, so historical totals do not change.
Notes
- Identification is rate limited per address and per source IP. Creating a new contact from an identification is additionally rate limited per workspace.
- Exceeding a limit costs the identity on that beat, never the visit.
- Each projection pass writes at most 100 pageviews per visit, keeping the most recent. A long visit projected over several passes can leave more than 100 pageview entries on the timeline.
- Goals older than 24 hours are not added to a timeline, so a replayed offline visit does not fire automations a day late.
- API Reference
