How do I connect a user's signup to the visit that brought them?
19 September 2026 · by Nordva, who make Nordva Launch
The short answer
Keep an anonymous id for the visitor from their first visit, and when they sign up, tell your analytics which user that visitor became (the user id, the email, or both). Store the first visit's source on the user record too. From then on, the signup, and any payment you match to the same user, belongs to the source of that first visit.
Why the link breaks
Analytics sees a visitor: an anonymous id, the site they came from, the pages they read. Your app sees a user: an email and an account. Nothing connects the two unless you do it at the moment of signup. Skip it, and a paying customer six months later can’t be traced back to the post that found them.
The three pieces
- An id for the visitor from the first page. Most analytics tools keep one in a first-party cookie (where the visitor’s privacy rules allow it). It carries the first visit’s source.
- One call after signup that says “this visitor is user 123, anna@example.com”.
- The same user id or email on the payment, so the payment can be matched to the user.
Do it in the browser
Right after the signup succeeds (or on the first page they see once logged in), call your analytics’ identify function with the user’s id and email. A sketch with Launch’s script:
// After your own signup call succeeds:
window.nordva?.("identify", { user_id: user.id, email: user.email });
Call it on login too, so someone who signed up on another device is connected as well.
Or from your server
If the signup happens on your server, read the visitor id from the request’s cookie and send it with the user:
curl -X POST https://api.nordva.dev/v1/analytics/identify \
-H "Authorization: Bearer $NORDVA_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{ "visitor_id": "…", "user_id": "123", "email": "anna@example.com" }'
The secret key belongs on the server only.
Store the source on the user as well
Copy the first visit’s source (referring site, UTM tags, first page) onto the user record at signup. Cookies expire and browsers clear them; your database doesn’t. It also lets you answer questions about sources inside your own app.
Make payments findable
When you create the customer in your payment provider, put your user id in its metadata. Then a payment can be matched to the user even if they pay with a different email.
With Nordva Launch
Launch’s script keeps the visitor id and first touch in first-party cookies where the tracking mode allows it; nordva.visitor() returns both in the browser, and on your server the id is the nv_vid cookie’s value before the dot. identify from the browser or POST /v1/analytics/identify (secret key) links the visitor to your user, and the person then appears under Contacts with their email. With Stripe connected (read-only, every plan), a customer whose metadata carries your user id, or whose email matches, is traced to that first visit.
When Launch is the wrong tool
If your signup is a Launch waitlist form or hosted page, you don't need this: the source is recorded with the signup already.
- How do I track where my users signed up from?
- How do I link analytics to user accounts?
- How do I pass UTM parameters to my signup?