CRM Solid logo
GUIDE13 min read

How to track live website visitors in real time

A practical walkthrough that gets a cookieless, privacy-friendly tracking script on your site in under 5 minutes, shows you who is on which page right now, captures every UTM parameter and ad-click ID automatically, and alerts you on Telegram or email the moment a visitor turns hot.

14-day free trial · No credit card required · Cancel anytime

What you will learn

Four visitor-tracking skills by the end of this guide

Install in 5 minutes

One script tag, no cookies, no backend changes. Works on WordPress, Shopify, Webflow, Next.js, and plain HTML.

Read the live feed

Understand the real-time counter, page-by-page activity feed, GeoIP location, and device breakdown updated every 2 seconds.

Catch hot visitors

Configure the four alert rules and Telegram/email channels so you know the moment a high-intent visitor lands on your pricing page.

Convert to contacts

Turn a live visitor into a CRM contact or open a conversation with one click, while they are still on the page.

What you will need

Live visitor tracking is a paste-and-verify job. The prerequisites below determine whether you are done in 5 minutes or spending an hour chasing a Content Security Policy error.

  • A CRM Solid workspace (free 14-day trial works for the full guide).
  • Edit access to your website head tag - theme editor, CMS, or code repo.
  • The domain(s) you want to track (you can add more later in Visitors > Settings > Domains).
  • A Telegram bot token or email address for hot-visitor alert delivery.
  • Optional: UTM-tagged URLs or ad campaigns to see attribution in action during Step 4.

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

  1. Install the "Insert Headers and Footers" plugin if you do not have one.
  2. Go to Settings > Insert Headers and Footers.
  3. Paste the script tag into the Header box.
  4. Save. Reload any page on the front end and look for the live counter in your CRM Solid dashboard.

Shopify

  1. In Shopify admin: Online Store > Themes > Actions > Edit code.
  2. Open theme.liquid under Layout.
  3. Find the closing </head> tag and paste the script tag on the line before it.
  4. Save. The tracker is now active on all Shopify pages.

Webflow

  1. In Webflow, go to Site Settings > Custom Code.
  2. Paste into the Head Code box.
  3. 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

  1. Open any HTML file you want to track.
  2. Paste the tag before </head>.
  3. If the tracker does not fire, check the browser console for a Content Security Policy error. Add cdn.crmsolid.com to your script-src directive.

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       msclkid

When 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:

  1. 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.
  2. 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 /pricing is 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 /demo is 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.

CRM Solid Live Visitors vs GA4 vs Plausible vs Hotjar

Honest comparison of what each tool gives you for real-time visitor intelligence.

CapabilityCRM SolidRecommendedGoogle Analytics 4PlausibleHotjar
Real-time data
Live per-visitor feed (page, city, device)
Real-time active user count
Per-visitor page-by-page tracking live
Attribution
UTM parameter capture
gclid / fbclid / msclkid capture
Live badge on paid-ad visitors
CRM and alerts
Hot-visitor alerts (Telegram and email)
One-click convert visitor to CRM contact
Unified inbox linked to visitor session
Privacy
Cookieless (no consent banner needed for tracker)
Offline GeoIP (no third-party IP lookup)
Session replay

GA4 shows a real-time report but it is aggregate (no per-visitor rows). Plausible is privacy-first but shows only aggregate data, no per-visitor live feed. Hotjar provides session replay but is cookie-dependent, has no CRM link, and sends no proactive alerts.

“We added the script on a Tuesday afternoon. By Thursday we had caught two enterprise visitors on our pricing page from a LinkedIn campaign we forgot to check. One of them became a contract. The alert paid for six months of the plan in that one conversation.”
Marcus Fleischer
Head of Growth · Cordova Labs

Live visitor tracking FAQ

The eight questions teams ask in the first week after installing the tracking script.

Yes. The CRM Solid tracking script does not set any cookies and does not fingerprint individual users. It uses a session-scoped presence signal (Redis-backed) that expires when the browser session ends. Because no persistent identifier is stored on the visitor device, you do not need cookie-consent banners for the tracker alone. Always consult your own legal counsel for your specific jurisdiction.
The script is loaded asynchronously after the page becomes interactive, so it does not block rendering or affect Largest Contentful Paint. On a Lighthouse test against a typical Next.js marketing site it contributes zero to Total Blocking Time. The payload is small and served from a CDN edge node.
A hot visitor is one who triggers at least one of four configurable rules: (1) landing on a high-intent page such as /pricing, /demo, /contact, or /signup - detected automatically by AI; (2) arriving from a paid ad click (gclid, fbclid, or msclkid present); (3) staying on site past your configured dwell threshold; or (4) returning for a second or later visit. Any combination can fire an alert. A quiet-period cooldown (default: 6 hours per visitor) prevents the same person from sending repeated alerts.
Yes. The "Returning visitor" alert rule fires specifically when a known visitor comes back. In the dashboard history view you can see unique visitors vs. total pageviews across 7, 30, and 90-day windows, and the returning-visitor alert logs give you a timeline of who came back and when.
Yes. The script listens for client-side navigation events (pushState, replaceState, popstate) and records each virtual page view automatically. No extra configuration is needed for React Router, Next.js App Router, Vue Router, or similar SPA frameworks. Each page visit appears in the live feed with the updated path.
GeoIP resolution uses an offline database (DB-IP style) bundled with the CRM Solid API server. This means location lookups have zero latency and no third-party calls. Country-level accuracy is typically above 98%; city-level accuracy varies by region but is reliable for most English-speaking and European markets.
The dashboard history tab supports 7, 30, and 90-day views. Raw pageview data is retained so you can query any window within the retention period. Older data is archived rather than deleted, so history does not disappear as your account matures.
Yes. In the live feed, clicking on any active visitor row opens a side panel showing their page, location, device, and traffic source. From that panel you can create a new CRM contact (pre-filled with the attribution data) or start a conversation via the unified inbox. This is the core workflow described in Step 7 of this guide.
Ready to ship

See who is on your site right now

A 14-day free trial includes the live visitor tracker, cookieless GeoIP, UTM attribution, hot-visitor alerts to Telegram and email, and one-click CRM contact creation. Script installed in under 5 minutes.

Trusted by 2,500+ teams · GDPR-ready · 99.95% uptime

We value your privacy

We use cookies to improve our site, analyze traffic, and personalize ads. You can accept all, reject non-essential, or customize your choices. Read our Cookie Policy.