Freshsales ships a web tracking script that captures sessions, pageviews, source, and UTM parameters. Default install gives you a working dashboard. True attribution requires three additional steps.
Install the script with identify-on-known
The vanilla script tracks anonymous visitors. To stitch sessions to known contacts, call the identify method as soon as you have an email — typically post-signup or post-login.
fwTrack.identify({
email: "[email protected]",
firstName: "Jane",
lastName: "Doe"
});
Pre-identify sessions then merge into the contact record on identify. Without this, your “first touch” is the post-signup pageview, not the original ad click.
UTM persistence
UTM parameters land on the entry page and disappear by page two. Capture them on first visit, store in a cookie, and pass to the identify call so the contact record gets the original campaign.
const utms = {
utm_source: getCookie("first_utm_source"),
utm_medium: getCookie("first_utm_medium"),
utm_campaign: getCookie("first_utm_campaign")
};
fwTrack.identify({ ...userData, ...utms });
Multi-touch modeling
Freshsales’s built-in attribution is last-touch. For multi-touch, export the session log via the API and run the model in your warehouse.
GET /api/web_sessions?contact_id={id}
// Returns ordered session list with source, utm, pages
A common starter model is U-shaped (40% first, 40% last, 20% middle).
Spam and bot filtering
Freshsales does not filter all bot traffic by default. Add a referrer-blocklist in the tracking config and exclude employee IP ranges. Internal pageviews bias every funnel metric.
Cross-domain tracking
If your marketing site and product live on different root domains, configure cross-domain linker so the visitor ID survives the jump. Without it, the post-signup pageview starts a new session.
Privacy compliance
The tracking script sets a first-party cookie. For EU traffic, gate it behind your CMP consent. Most CMPs expose a cookieConsent event you can listen to before calling fwTrack.init.
What to do this week
Add the identify call to your post-signup flow, persist UTMs in a cookie, exclude employee IPs, and gate the script behind your CMP for EU visitors.