TL;DR Yes, we can connect any data, even if we fingerprinted user in one browser and they opened an email on another laptop.
user ID
After user signs up in our product we issue this user a unique user ID
– usually an ID of this user record in our database. 
Now comes the question – how can we association all previous pageviews of this user before signup? They simply didn’t have any user ID because user hadn’t signed up yet. 
This is where fingerprinting comes into play. 
Fingerprinting
Fingerprint is a unique identifier of a visitor issued by our web analytics system. That way every pageview or event have 2 user identifiers – fingerprint (for logged out users) and user ID (for logged in users).
How it works
A user visits our website for the first time. Our web analytics system sees no fingerprint cookie – we generate a unique fingerprint (like Uzbpd2RgPs7Bc4MwacPkUwuF
) and save it to a specific cookie.
Next time this user visits our website – we see the cookie and record a pageview with the fingerprint from the cookie.
When user signs up we can connect the fingerprint from the cookie to the user ID.
When user logs in we’ll connect the fingerprint from the cookie to the user ID of an existing user. That way every user ID can have multiple fingerprints.
Almost there
Now we can connect all pageviews of a user before signup. 
We can connect all pageviews of a user before login in a new browser (after following an email link, for example). 
But what if user opened an email but didn’t log in? That way we won’t be able to attribute these pageviews to the correct user ID (actually to any user ID).
Final solution
As I mentioned in the question about tracking CRM conversions, the trick is to pass a user ID/fingerprint to the email link URL.
All modern CRM system allow us to upload custom fields so we can later add them to URL as a parameter.
Before sending any email we need to make sure that we’ve uploaded all user ID-s (encrypted
) or fingerprints to our CRM system. After we see a pageview with a specific URL parameter (&fingerprint=Uzbpd2RgPs7Bc4MwacPkUwuF
for example) we’ll know that it’s coming from an email and we’ll be able to derive user ID from the fingerprint from the URL parameter.
We might want to tune our web analytics system to correctly detect a fingerprint in case it’s in the URL.
