Tracking Script
The Tracking Script is the HowdyGo SDK installed with a publishable key. It captures visitor information and campaign traits on your website, including pages without a demo, then supplies that identity to embedded demos. On pages with a demo, it can also send demo events to Google Analytics or Google Tag Manager.
An Admin must create and configure tracking keys.
Create and install a key
- Open Settings > Integrations > Tracking Script.
- Give the key a name that identifies its website or app.
- Create the key, then choose Script tag or Google Tag Manager.
- Copy the generated snippet and install it once on each page of your website or app. For a script-tag installation, place it in the
<head>before SDK calls. In Google Tag Manager, use a Custom HTML tag that fires on all pages. - Use Seen on pages to confirm where HowdyGo has detected the script.
The hgk_ value in the snippet is a publishable browser key. Each key has its own tracking configuration, so you can use separate keys for different websites or environments. The generated snippet sets the key through window.HOWDYGO_CONFIG and makes window.howdygo available before loading the SDK in the background.
For a direct script-tag installation, the snippet also accepts a data-key attribute:
<script
src="https://app.howdygo.com/sdk/snippet.js"
data-key="hgk_your_publishable_key"
></script>Replace the placeholder with your key. This example loads the small snippet before subsequent scripts run. Adding async means your app must wait for it before calling howdygo. In Google Tag Manager, use the generated inline snippet from settings.
![]()
Configuration changes reach installed scripts within about five minutes.
Keyless SDK installations are deprecated and log a console warning once per
instance. Existing manual identify(), personalize(), modal, and player
control calls still work without a key. Automatic capture, standalone website
identification events, and install page reporting require a key.
Choose what the script tracks
Turn on the sources you want this key to collect:
| Setting | What it does |
|---|---|
| CRM cookie tracking | Reads HubSpot’s hubspotutk and Marketo’s _mkto_trk cookies so HowdyGo can match demo activity to CRM contacts. |
| Query param tracking | Captures utm_* and other query parameters as visitor traits, then keeps them as the visitor navigates a single-page app. |
| Auto form tracking | Captures identification fields such as email, name, phone, and company from submitted forms, including embedded HubSpot forms. It does not capture passwords or complete form contents. |
| Anonymous visitor ID | Assigns a persistent visitor ID before the visitor has been identified. |
| Cross-subdomain tracking | Shares visitor identity across subdomains of your website. |
| Segment | Mirrors visitor traits supplied through Segment’s analytics.js. |
| RudderStack | Mirrors visitor traits supplied through RudderStack. |
| GA4 / Google Tag Manager | Pushes HowdyGo demo events to dataLayer for GA4 and GTM. |
| Install page reporting | Reports which pages contain the script so you can verify the installation. HowdyGo removes query parameters from reported page URLs. |
New keys enable CRM cookie tracking, query parameter tracking, and install page reporting by default. The other options start off. Review these settings when creating a key.
Auto form tracking is limited to forms submitted to your own domain, HubSpot forms, and Marketo forms.
Automatic capture and manual identity
Use identify() when your app already knows the visitor. Send your application’s ID as externalUserId and the email address as email:
howdygo.identify({
externalUserId: "customer-123",
email: "jane@example.com",
name: "Jane Smith",
});Automatic capture supplements this identity. Query parameters, CRM cookies, Segment traits, and RudderStack traits do not replace an explicitly supplied external ID or email.
Website form capture writes the address to top-level email. It can add an email to a visitor known only by external ID. Later forms can replace a previous form-captured email, including after a page reload, but cannot replace an email explicitly supplied by your app. Calling identify({ email }) makes that email explicit, even if it matches the form’s value.
Segment and RudderStack mirror visitor traits. To supply an application user ID, call identify({ externalUserId }) directly; putting it in traits does not set the external ID.
Configure the script in code
The settings page controls each key’s tracking options. If your app needs a local override, set window.HOWDYGO_CONFIG before the snippet runs:
<script>
window.HOWDYGO_CONFIG = {
config: {
key: "hgk_your_publishable_key",
autoFormTracking: true,
trackQueryParams: false,
debug: false,
},
};
</script>
<script src="https://app.howdygo.com/sdk/snippet.js"></script>Add these values to an existing configuration if you already have one. Local tracking options override the key’s remote settings; organization privacy controls remain authoritative.
| Setting | Configuration property |
|---|---|
| CRM cookie tracking | crmCookieTracking |
| Query param tracking | trackQueryParams |
| Auto form tracking | autoFormTracking |
| Anonymous visitor ID | anonymousTracking |
| Cross-subdomain tracking | crossDomainTracking |
| Segment | trackSegment |
| RudderStack | trackRudderstack |
| GA4 / Google Tag Manager | pushToGA4 |
| Install page reporting | pagePing |
These options are booleans. Use debug: true while checking an installation to enable diagnostic logging.
Send demo events to GA4 or GTM
Enable GA4 / Google Tag Manager and initialize window.dataLayer on the host page before demo events occur. The script pushes messages in this shape:
{
"event": "howdygo_event",
"event_name": "howdygo_demo_engagement",
"demo_id": "your-demo-id",
"demo_title": "Product tour",
"demo_url": "https://app.howdygo.com/embed/your-demo-id",
"demo_session_id": "viewing-session-id"
}In GTM, use a Custom Event trigger for howdygo_event and read event_name to distinguish session starts, step views, engagement, CTA clicks, and completion. The bridge forwards event properties; it does not copy top-level viewer email or external IDs into dataLayer. The custom event reference describes the event properties.
Account-based marketing
Account-based marketing (ABM) depends on knowing who engaged and what brought them to the demo. The Tracking Script can keep that context with each visitor:
- CRM cookie tracking to recognize known HubSpot or Marketo contacts.
- Query param tracking to retain campaign, source, and target-account parameters from the landing page.
- Auto form tracking to identify a visitor after they convert.
- Segment or RudderStack to attach company or account traits already available on your website.
After HowdyGo identifies the visitor, later demo activity stays tied to the same person and traits. Your CRM or analytics setup can then use those signals to spot target-account engagement and trigger the right follow-up.
The script tracks individual visitors rather than rolling several people into one account. Keep account-level reporting and buying-group analysis in your CRM or analytics platform.
Common uses
- Match a demo session on your marketing site to a known HubSpot or Marketo contact.
- Preserve campaign and company context for target-account demo engagement.
- Keep the same viewer identity as someone moves between your marketing site and app subdomains.
- Send demo engagement events to GA4 alongside the rest of your website funnel.
- Identify a visitor after they submit a form, then associate later demo activity with the same person.
For visitors you already know inside your app, you can also call identify() directly.
Privacy controls
Tracking settings work alongside your organization’s Data & privacy controls. Disable viewer identification suppresses standalone SDK identification events. For demo analytics, the demo’s owning organization controls whether viewer identity is included and retained. Anonymize viewer IP addresses applies to both demo analytics and Tracking Script analytics. Local script configuration cannot override these organization controls.
Use setOptOut(true) to clear stored viewer information and stop automatic tracking in that browser. Your app should also stop manual identify() calls while the visitor is opted out. Opting back in restarts the automatic tracking configured for the key.
Revoke, restore, or delete a key
Revoke a key to pause its tracking configuration while keeping the option to restore it. Delete it only when you no longer need it.
If you replace a key, replace the old snippet wherever you installed it.