Loading tutorials…
Loading tutorials…
Site tracking is what turns ActiveCampaign from an email tool into a behavior platform. Done wrong, 35% of your behavior-triggered automations never fire. Here is the GTM install path most guides skip.
Who this is forOperators on the Plus plan or higher who need site behavior to drive automations — abandoned browse, page-visit triggers, scoring on key pages. Site tracking is unavailable on Lite; if you're there, upgrade first.
What you'll need
Step 1
Settings → Tracking → Site Tracking → toggle ON. Add the domain(s) you'll track in the whitelist.
ActiveCampaign → Settings → Tracking → Site Tracking section.
Toggle 'Enable site tracking' to ON.
Add your website domain (e.g., `yourbrand.com`, `www.yourbrand.com`) to the whitelist. AC rejects tracking calls from non-whitelisted domains — this is the most common cause of 'tracking installed but no data appearing.'
Copy the tracking snippet shown. It looks like `<script type="text/javascript">(function(e,t,o,n,p,r,i){...})(...)</script>` with your unique account ID embedded.
Save. The whitelist update is instant; new domain additions don't require re-publishing.
Step 2
Inline installs break when developers re-template. GTM keeps tracking durable and editable by marketing, not engineering.
Open Google Tag Manager → your container → Tags → New.
Tag type: 'Custom HTML.' Paste the entire AC tracking snippet you copied.
Trigger: 'All Pages' (page view) — or 'DOM Ready' for slightly later firing if you have a heavy SPA.
Name the tag clearly: `AC - Site Tracking - All Pages.`
Save. In GTM Preview mode, navigate to your site. Confirm the AC tag fires on each page in the GTM debug pane.
Publish the GTM container (Submit → name version → Publish).
Open your site in a normal browser, then ActiveCampaign → Contacts → search for any contact you control. Visit a page on your site (logged in or after clicking through a campaign link). Within 60 seconds the contact should show a 'Visited [page URL]' event.
Step 3
Site tracking only attaches behavior to a contact AFTER the email is captured. Wire form submits to pass email to the tracker.
When a visitor lands anonymously, AC stores their behavior under a temporary cookie ID. Once they submit a form with an email, AC merges that anonymous history into the contact's profile.
If you use ActiveCampaign-hosted forms, this is automatic. If you use custom forms (Webflow, Typeform, Gravity Forms), you must explicitly identify the visitor.
Add this JS to your form's success handler, replacing the email reference with however your form structures its submit event: `vgo('setEmail', 'visitor@example.com'); vgo('process');`
In GTM, you can do this with a Custom HTML tag triggered on a 'Form Submit Success' event with the email captured in a data layer variable.
Test: submit a form with a new test email. Check ActiveCampaign → Contacts → that email → recent activity. Pre-submit page visits should now be attached to the new contact.
Step 4
Page visits are passive. Use AC's event tracking API for 'meaningful' actions — viewed pricing, added to cart, completed demo signup.
Site Tracking captures every page view. Event tracking is the higher-signal layer for triggers in automations.
In ActiveCampaign → Settings → Tracking → Event Tracking → toggle ON. Note your Event Tracking API Key (separate from the main tracking ID).
For each high-signal action (viewed pricing, viewed enterprise page, started checkout, completed demo form), fire an AC event from GTM with: `trackcmp.net/event?actid=YOUR_ACT_ID&key=YOUR_EVENT_KEY&event=Viewed+Pricing&visit={"email":"contact@example.com"}`
Or in JS: `vgo('setAction','event'); vgo('setProperties',{actid: 'YOUR_ACT_ID', key: 'YOUR_EVENT_KEY', event: 'Viewed Pricing'}); vgo('process');`
Each event becomes a usable trigger in Automations → Start trigger → 'Event tracking' → pick the event name.
Cap explicit events at the 5-10 you'll actually use as automation triggers. Tracking 80 events is noise — they pile up in contact history but no automation watches them.
Step 5
The point of tracking isn't dashboards — it's driving scores and automations. Add tracking-based score rules.
Contacts → Scoring → 'New score' → 'Contact score.'
Add rules like: 'Visits pricing page → +5,' 'Visits enterprise page → +10,' 'Visits >5 pages in 24 hours → +15,' 'Submits demo form → +25.'
Add decay: 'No site activity in 30 days → -10.' Without decay, scores trend up forever and stop being signal.
Save. Existing contacts re-score based on their tracking history within 24 hours.
In Automations, you can now trigger off 'Score changes' → e.g., when contact score crosses 50, route to sales-ready automation. This is where tracking → score → automation becomes a real funnel.
Step 6
Create a test contact, submit a form with their email, browse several pages, fire a custom event, and verify scoring reflects all four signals.
Use an incognito browser. Visit your site (anonymous).
Submit a form on the site with a test email you control (e.g., `test+actrack@yourbrand.com`).
Browse 3-4 more pages including pricing.
Within 5 minutes, find the contact in ActiveCampaign. Recent activity should show: form submit, all page visits, and (if you fired a Viewed Pricing event in GTM) the event.
Their score should reflect the visits + form submit per your score rules.
If page visits are showing but events aren't, the event tracking API key is wrong or the event name has a typo (case-sensitive). If neither shows, identification failed — the form wasn't passing the email to the tracker on submit.
Common mistakes
Installing the tracker but never identifying visitors
What goes wrong: Anonymous browsing data piles up under cookie IDs and never merges into contact profiles. Automations using 'Visits page X' as a trigger fire for known contacts only — missing 60-80% of high-intent visitors. Loses the entire ROI of installing tracking.
How to avoid: Add `vgo('setEmail', email)` on every form submit success handler. For e-com, identify on every checkout. For SaaS, identify on every login. After this fix, attribution typically lifts within 14 days.
Domain not in tracking whitelist
What goes wrong: Tracker calls fire but ActiveCampaign rejects them. Looks installed in GTM, but ActiveCampaign shows zero events. Debugging eats 4-8 hours before someone checks the whitelist.
How to avoid: Settings → Tracking → Site Tracking → whitelist. Add both apex (`yourbrand.com`) and `www.yourbrand.com`. For multi-domain setups, add each.
Firing event tracking on every micro-interaction
What goes wrong: Rate-limit kicks in (60 events/min on Plus). High-signal events get silently dropped because the bucket is full of scroll/hover noise. Automations using rate-limited events fire intermittently — looks like a bug, but it's the rate limit.
How to avoid: Limit explicit events to 5-10 meaningful transitions. Page views via Site Tracking are unlimited; use those for low-signal browsing. Reserve event tracking for actions that warrant a score change or automation.
Tracking installed both via WordPress plugin AND GTM
What goes wrong: Every page fires two tracker calls. Visit counts double. Scores inflate (a 5-point pricing visit becomes 10). Throws off every score-based segment and decision.
How to avoid: Pick one install method. GTM is more flexible. Deactivate the AC plugin's tracking option (or vice versa) and validate with browser dev tools that only one `trackcmp.net` request fires per page.
No score decay configured
What goes wrong: Active contacts accumulate scores for years and never drop. The 'hot lead' segment fills with people who visited once 8 months ago. Sales team loses trust in scoring within 2-3 months.
How to avoid: Add a decay rule: '-X points for no activity in 30 days' (and another at 90). This keeps scores reflecting CURRENT engagement, not lifetime.
Tracking on dev/staging domains polluting production data
What goes wrong: Internal QA traffic to staging shows up as real contact activity. A handful of developers visiting `staging.yourbrand.com` 50x/day inflates scores and triggers automations against real contacts.
How to avoid: Either don't whitelist staging domains, or use a separate ActiveCampaign account for non-production. If staging shares the prod AC account, add `localhost` and staging hostname filters in GTM so the tracker doesn't fire there.
Recap
Done — what's next
How to set up an ActiveCampaign account the right way
Read the next tutorial
Hand it off
Site tracking unlocks the difference between 'an email tool' and 'a behavior platform.' A specialist install (GTM tag, form identification, event mapping, scoring rules) is typically $400-700 at $14-16/hr. Worth doing right the first time — broken tracking quietly kills automation ROI for months before anyone notices.
See specialist rates
No. Site tracking is a Plus, Professional, and Enterprise feature. If you're on Lite and need behavior-triggered automations, upgrade to Plus ($49/mo at 1K contacts) first. There is no workaround on Lite.
They won't appear until you identify them. Site tracking captures anonymous behavior under a temporary cookie ID; that history only merges into a contact profile when you call `vgo('setEmail', email)` after a form submit or login. Without identification, anonymous visitors stay anonymous forever.
5-60 seconds for individual events. Initial setup (after enabling + installing) starts capturing data immediately, but scoring rules backfill within 24 hours. If nothing shows after 1 hour, check the whitelist and confirm the tracker is actually firing in browser dev tools (look for `trackcmp.net` network requests).
Yes — UTMs are captured automatically on each page visit. They appear in the contact's profile under the visit event details. To use UTMs as automation triggers, you'd typically capture them on form submit into custom fields (`utm_source`, `utm_campaign`) and trigger off the field values rather than the visit metadata.
Site Tracking is automatic — every page view by an identified contact is captured. Event Tracking is explicit — you fire named events (`Viewed Pricing`, `Started Checkout`) via JS or API. Site Tracking is for general behavior; Event Tracking is the trigger surface for automations.
Yes, but you must fire `vgo('process')` manually on each route change since SPAs don't trigger full page reloads. Most React/Vue/Angular apps need a small router hook to call `vgo('process')` after each navigation. Without this, only the initial page load is tracked.
ActiveCampaign
ActiveCampaign rewards careful setup more than almost any other email platform — get the plan, auth, and import order wrong and you're cleaning up data for months. Here is the setup sequence that doesn't trap you in 60 days.
ActiveCampaign
The automation builder is ActiveCampaign's highest-leverage feature — and the place most operators get stuck. Triggers, conditions, and goals each have a 'right' way that doesn't show up in the in-app tutorial. Here's the build that scales.
ActiveCampaign
ActiveCampaign's Shopify integration has two tiers: the basic install (free) and Deep Data ($49/mo addon). Most e-com operators need Deep Data to make abandoned-cart and win-back flows actually work. Here's the setup.
ActiveCampaign
One email, four audiences. Conditional content is how mature operators send one campaign and let each subscriber see content matched to their segment. Done wrong, it leaks unmasked variables and breaks deliverability. Here's the build that scales.
ActiveCampaign
DIY ActiveCampaign works — until the automations stack, the data model frays, and you spend more time debugging flows than running the business. This is the honest framework: when the cost of self-managing exceeds the cost of hiring.