Step 1: Add your domain and get the tracking script
Budget: 1 minute. In CRM Solid, navigate to Visitors > Settings > Domains > Add domain. Enter your root domain (e.g., yourcompany.com). CRM Solid generates a one-line script tag that looks like this:
<script async src="https://cdn.crmsolid.com/v.js" data-site="vs_abc123"></script>The data-site attribute is your workspace identifier. Copy the full tag; you will paste it in the next step. You can track multiple domains from one workspace - just add each domain and get its own tag.
Step 2: Install the script tag on your website
Budget: 2 minutes. Paste the tag inside your page <head> on every page you want to track. Because the script is loaded with the async attribute, it will never block rendering or affect your Core Web Vitals scores.
WordPress
- Install the "Insert Headers and Footers" plugin if you do not have one.
- Go to Settings > Insert Headers and Footers.
- Paste the script tag into the Header box.
- Save. Reload any page on the front end and look for the live counter in your CRM Solid dashboard.
Shopify
- In Shopify admin: Online Store > Themes > Actions > Edit code.
- Open
theme.liquidunder Layout. - Find the closing
</head>tag and paste the script tag on the line before it. - Save. The tracker is now active on all Shopify pages.
Webflow
- In Webflow, go to Site Settings > Custom Code.
- Paste into the Head Code box.
- Save and republish. The tracker loads on every published page.
Next.js (App Router)
// app/layout.tsx
import Script from 'next/script';
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en">
<head>
<Script
id="crmsolid-visitors"
strategy="afterInteractive"
src="https://cdn.crmsolid.com/v.js"
data-site="vs_abc123"
/>
</head>
<body>{children}</body>
</html>
);
}Plain HTML
- Open any HTML file you want to track.
- Paste the tag before
</head>. - If the tracker does not fire, check the browser console for a Content Security Policy error. Add
cdn.crmsolid.comto yourscript-srcdirective.
Step 3: Verify the live counter in the /visitors dashboard
Budget: 1 minute. Open app.crmsolid.com/visitors in one browser tab. In a second tab (or on your phone), load any page on your site. Within approximately two seconds you should see:
- Active right now: the large counter increments by at least 1.
- Live activity feed: a new row appears showing the page path (e.g.,
/pricing), country flag, city name, and device icon (desktop or mobile).
The feed streams via Redis presence and SignalR, so updates arrive within about 2 seconds of each page view. If the row does not appear after 10 seconds, check that the script tag is present in the HTML source (View Source > search for "crmsolid") and that your Content Security Policy allows the CDN domain.
Tip: open the visitors dashboard on a phone next to your laptop when you first install. It is more satisfying than a terminal and confirms the mobile device icon also works.
Step 4: Understand UTM and ad-click attribution
The tracker reads attribution parameters automatically on the first page view of each session. No extra configuration is required. The full set of captured parameters is:
utm_source utm_medium utm_campaign
utm_term utm_content
gclid fbclid msclkidWhen a visitor arrives via a URL that contains any of these parameters, CRM Solid attaches the attribution to that visitor row in the live feed. Paid visitors (those with gclid, fbclid, or msclkid) get a colored network badge - Google Ads, Facebook, or Microsoft Ads - so you can spot paid traffic at a glance without switching to a separate analytics tab.
To see aggregated campaign data, go to Visitors > Attribution > Campaigns. The table shows each UTM campaign name, its source/medium pair, and the number of visitors it delivered. You can sort by visitors to find your highest-traffic campaigns in real time.
Practical test: build a test URL with a UTM campaign tag (e.g., yourcompany.com/pricing?utm_source=guide&utm_campaign=test) and load it. The live feed should show the campaign tag on that visitor row immediately.Step 5: Read the GeoIP location data per visitor
Each visitor row in the live feed shows:
- Country flag and code (e.g., US, DE, GB) resolved from the visitor IP using an offline GeoIP database. Country-level accuracy is typically above 98%.
- City name (e.g., Austin, Berlin, London). City accuracy is high for US, EU, and UK traffic and generally useful for the rest of the world.
- Device type - a monitor icon for desktop or a phone icon for mobile, inferred from the user-agent string.
Location lookups happen in the API server itself using a bundled offline database, so they add zero latency to page loads and make no outbound calls to third-party GeoIP services. This also means location data is never shared with an external vendor.
In the history dashboard (Visitors > History > By country), you can see the percentage breakdown across countries for any 7, 30, or 90-day window - useful for deciding where to focus localization or paid ad targeting.
Step 6: Configure hot-visitor alerts to Telegram and email
Budget: 3 minutes. Go to Visitors > Settings > Alerts. You will see four configurable alert rules:
- High-intent page: fires when a visitor lands on a buying page such as
/pricing,/demo,/contact,/checkout, or/signup. CRM Solid uses AI to detect high-intent pages from your own site automatically, so this works without manual URL lists. - Paid ad arrival: fires the moment a visitor arrives from a Google, Facebook, or Microsoft ad (detected via gclid, fbclid, or msclkid). The alert tells you the spend you paid for is on the page right now.
- Time on site (dwell): fires when a visitor lingers past your threshold. Set the threshold in seconds or minutes. Deep readers and visitors who seem stuck are worth a proactive nudge.
- Returning visitor: fires when a known visitor comes back. Second and third visits are where decisions get made.
For each rule, toggle it on and pick the notification channel:
- Telegram: alerts arrive in your CRM Solid Alerts bot with the page, city, traffic source, time on site, and a "Watch live" link back to the visitors dashboard.
- Email: the same alert data delivered to your workspace email address.
- Both: each rule can independently target Telegram, email, or both.
Quiet period: the default cooldown is 6 hours per visitor. This prevents the same person from firing repeated alerts if they navigate through several pages in one session. You can lower it for high-value pipelines or raise it to avoid noise during busy campaign days.
Recommended starting config: enable "High-intent page" and "Paid ad arrival" on Telegram only. Run for one week and see how many alerts arrive per day. Add "Returning visitor" once you have a baseline.
Step 7: Convert a hot visitor into a CRM contact or conversation
This is the step that turns live analytics into pipeline. When you get a hot-visitor alert or spot an interesting row in the live feed, click the visitor row. A side panel opens with the full visitor context:
- Current page and full browsing path in this session.
- Country and city from GeoIP.
- Device type.
- Traffic source, UTM campaign, and ad-click ID if applicable.
- Time on site.
From the side panel you have two actions:
- Create contact: opens the new-contact form pre-filled with the attribution data (source, campaign, landing page). Save it and the visitor becomes a CRM contact you can enrich, assign, and enter into a pipeline.
- Open conversation: starts a live chat, Telegram DM, or email thread via the unified inbox. The conversation is linked to the visitor session, so any agent picking it up sees full context immediately.
The most effective workflow for B2B sites: when the paid-ad alert fires and the visitor has been on /pricing for more than 90 seconds, open a conversation immediately. The time between "visitor is on the page" and "agent starts a chat" is a bigger conversion lever than any landing page copy change.
Step 8: Week-1 history review and setup tuning
After 7 days, go to Visitors > History and select the 7 days range. Review these metrics:
- Pageviews vs. unique visitors: a ratio above 3:1 suggests good multi-page engagement or a small but dedicated audience. Below 1.5:1 often means a bounce problem on the entry page.
- Average time on page: target above 90 seconds for marketing pages. Below 45 seconds on
/pricingis a signal to test layout or copy changes. - Top pages: confirm the pages getting the most traffic are also the ones with alert rules enabled. If
/demois in the top 3, make sure the high-intent-page alert is on. - Traffic sources: see the percentage split between paid, organic, direct, and referral. Use this to calibrate whether your UTM tagging is consistent - a high "direct" share often means UTMs are missing from some campaigns.
- Campaign breakdown: identify which UTM campaigns brought the most visitors. Cross-reference with hot-visitor alert logs to see which campaigns produced the most high-intent arrivals, not just volume.
- Alert volume: in Visitors > Settings > Alerts, review how many alerts fired per day for each rule. More than 20 per day per rule is usually a sign the quiet period needs to be increased. Fewer than 1 per week means the rule threshold is too strict.
Most teams iterate their alert rules twice in the first month and then stabilize. The goal is 3 to 10 high-signal alerts per day - enough to act on without creating alert fatigue.