HockeyStack
HomeLive DemoBook a DemoLogin
  • Getting Started
    • 👋Welcome to the Docs!
    • Product Onboarding
    • HockeyStack Implementation Scope: Reporting Product
  • Release Notes
    • May 5, 2025
    • April 21, 2025
    • April 14, 2025
    • April 7, 2025
    • March 31, 2025
    • March 24, 2025
    • March 14, 2025
    • March 6, 2025
    • February 28, 2025
    • February 17, 2025
  • Guides
    • ❓FAQ
      • Merging in HockeyStack
      • Why has my data changed?
      • Viewing form submissions by page
      • A touchpoint's influence on conversion rates
      • Average number of touchpoints
      • Self-reported attribution
      • Trend of Engagement Score
      • How do I see which individuals / companies are included in a metric?
      • What touchpoints get credit in attribution?
      • What object/integration is this field pulling from?
      • What is "Source"?
      • What is "UTM Source"?
      • What is "UTM Medium"?
      • What is an Action?
      • How can I add Salesforce Task object into Defined Properties?
      • How can I track offline events in HubSpot?
      • How can I use LinkedIn Impressions and Engagements in my reports?
      • Measuring sales and marketing penetration in an account list
      • Measuring number of engaged contacts per company
      • Offline conversions for ad platforms
      • Tracking progression on targets
      • Building a Campaign / Asset Grouping property
      • Percentage of high quality job titles by Channel
      • Measuring conversion rates
      • Building a goal that shows open opportunities
      • Number report: Funnel stages influenced by different types of marketing touchpoints
      • Best Practices for Lifecycle Tracking in Salesforce / HubSpot
      • Adding HubSpot form fills to defined properties
      • Does HockeyStack website pixel track US States?
      • Measuring Time Between Two Goals in HockeyStack
      • What is the HubSpot "email bounces" action?
      • Hiding Fields from your CRM in HockeyStack
      • How long does it take for a relation mapping to be ready to use?
      • Can I integrate multiple LinkedIn ads accounts?
      • Can I use Zapier for integrations with HockeyStack?
      • I created a new field in Salesforce (SFDC), but I don’t see it in HockeyStack. What should I do?
      • Using two similar fields in one breakdown
      • Why can't I map back to property?
      • GA4 vs. HockeyStack Website Data Tracking
      • How does HockeyStack deduplicate accounts?
      • How do Table Totals Work: Campaign vs Campaign Group?
      • Can I create one field that calculates the total ad spend + SFDC campaign spend?
      • HubSpot: Can I filter a goal on X object by Y object fields?
      • LinkedIn Impressions: Different Ways of Measuring
      • How to define Engaged Accounts and Engaged People?
      • Building a Campaign Grouping property
    • 🖥️Dashboard Building Guides
      • Business Overview Dashboard
      • CMO Dashboard
      • Website Analytics Dashboard
      • Paid Ads Dashboard
      • Google Ads Dashboard
      • LinkedIn Ads Dashboard
      • In-Person Events
      • ABM Live-Demo
      • Content/Organic Dashboard
      • Dashboards from Labs Reports
        • LinkedIn Ads Benchmarks
        • Google Ads Benchmarks
        • Q1 2024 Recap
        • G2 Impact 2024 Report
        • Website Benchmarks
  • Documentation
    • The HockeyStack Data Model
    • 🎯Goals
      • Funnel Stages Goals
      • Form Fill Goals
      • Page View Goals
      • Click Goals
      • Finding Out a Button's CSS Selector
      • Goals on the Task Object
      • Building an All Touchpoints (Channel) Goal
    • Defined Properties
    • Track Date Properties
    • 📊Reports
      • Building a Basic Report
      • Journeys Use Cases
      • Customer Touchpoint Hierarchy
      • Sequences
      • Lift Reports
      • Lift Analysis vs. Multi-Touch Attribution
      • Types of report filters and when to use them
      • Attribution Models
      • Attribution Lookback
      • Defining Custom Attribution Weights
      • Importing a Google Sheet to use as a Goal Column
      • Advanced Attribution Models
    • 🖥️Dashboards
    • Dashboard Filters
      • When to use AND vs. OR logic?
      • Using Regex
    • 🌠Journeys
      • Syncing journeys to CRM and Slack
    • 🥇Golden Paths
    • Funnels
    • Attribution Funnel
    • 👥Segments
    • ⚙️Settings
      • Account Reset Guide
      • Auto-tagging of URLs
      • Data Categorization in HockeyStack
      • Team Sharing
      • Tracking Multiple Domains
      • Excluding Users
      • Reporting Configuration
      • Multi-Factor Authentication
    • Advanced Data Connections
      • Account List Import
      • Property Relation Mappings
      • Sync Spend
      • Syncing spend from offline channels and campaigns
    • 🔃Audience Syncs
    • Send View updates to Webhooks
    • Odin AI
      • HockeyStack AI: Security, Privacy, and Responsible Use
  • DataSyncs
    • Connecting your Warehouse
      • Authenticate Snowflake
      • Authenticate Google Sheets
      • Authenticate BigQuery
      • Authenticate S3
        • Use an S3 User
        • Use an IAM Role
    • Configure a DataSync Import
    • Configure a DataSync Export
      • Data Export Schema
        • Raw Actions Export Schema
  • Integrations
    • Website Tracker
      • Google Tag Manager
      • WordPress
      • React
      • Troubleshooting
      • Reverting to Cookie-Based Tracking
      • Identifying Users
      • Tracking Custom Goals
    • Ad Platforms
      • LinkedIn Ads
      • Bing Ads
      • Capterra Ads
      • Google Ads
      • Facebook Ads
      • Tiktok Ads
      • Twitter Ads
      • StackAdapt Ads
      • Reddit Ads
      • AdRoll Ads
    • Analytics & Data Warehouse
      • Snowflake
      • Amazon Redshift
      • Google Bigquery
      • Amazon S3
      • Azure Databricks
    • CRMs
      • Salesforce
        • Properties Pulled from Salesforce
        • Salesforce Pulled Objects List
        • Sending Data to Salesforce
      • HubSpot
        • HubSpot Pulled Objects List
    • SSO
      • Azure AD
      • Google Workspace
      • Okta
    • ABM
      • Qualified
      • 6sense
      • Demandbase
      • Clearbit
      • Rollworks
      • G2 Intent
      • Stackadapt
    • Marketing Automation
      • Marketo
        • How to Find Your Marketo Account Details
        • Marketo Pulled Objects List
      • Pardot
      • HubSpot
        • HubSpot Pulled Objects List
    • Other Integrations
      • Calendly
      • Drift
      • Okta
      • Segment
      • Customer.io
  • Setting up your Data for import
    • Import Custom Actions
    • Import Website Actions
    • Import Properties
    • Import Metadata
  • Technical Details
    • ↖️Website Tracking
      • How Website Tracking Works
      • Cookieless Tracking
      • Bot Traffic
      • Privacy Policy
      • GDPR Compliance
    • ⚙️Data Processing from Integrations
    • 🧮Data Cleaning
  • Account Intelligence
    • ☕Getting Started
      • HockeyStack Implementation Scope: Account Intelligence Product
      • Salesforce
        • Salesforce Permissions
        • Salesforce iFrame Installation
        • Salesforce Sync Fields
    • 🏗️Workflows
      • Creating a Workflow
      • List of Workflows
      • Starter Workflow
      • Recurring Workflow Runs
      • Nodes
        • Transformations
          • Condition
          • AI for Accounts
          • Contact Discovery
          • Contact Enrichment
          • Branching
        • Destinations
          • Salesforce
          • HubSpot
          • Outreach
          • StackAdapt
          • Salesloft
          • LinkedIn
          • Pardot
    • 👀Views
      • Create a New View
    • 🔢Scoring
      • Data
Powered by GitBook
On this page
  • Sending Unique Identifier
  • Method #1
  • Method #2
  • Sending Custom Properties
  • ⚠️ Disclaimer
  1. Integrations
  2. Website Tracker

Identifying Users

PreviousReverting to Cookie-Based TrackingNextTracking Custom Goals

Last updated 6 months ago

Beware, this guide requires basic coding and javascript knowledge.

If you will be using personally identifiable information (PII) in your identifier, please include this in your privacy policy. HockeyStack bears no responsibility for holding this type of data.

It is just as important to know who your users are as what actions they’ve performed.

You can send both a unique identifier (usually email but can also be another id, username etc.) and any other custom properties (plan, role, company etc.) of your users to HockeyStack.

Bear in mind that using this method does not send a separate action to HockeyStack, it only updates the properties of that user. For sending custom actions, see .

Sending Unique Identifier

As mentioned before, this unique identifier is in most cases the email of the user. However, if you know the consequences (ask us!), you can send any other unique identifier - like an id or a username - here as well.

Method #1

For this method, you would need HockeyStack to be already loaded in the website. See the for more technical info. Then, anywhere in your JavaScript, include:

HockeyStack.identify('<your identifier>');

Method #2

Change the script to include data-identity.

Example for HTML

Add the highlighted section to your integration snippet:

<script async data-identity="<your identifier>" data-apikey="<your api key>" data-cookieless src="https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack.min.js"></script>

Example for other platforms

Add the highlighted line to your integration snippet:

<script>
  var hsscript = document.createElement("script");
  hsscript.id = "hockeystackscript";
  hsscript.src = "https://cdn.jsdelivr.net/npm/hockeystack@latest/hockeystack.min.js";
  hsscript.async = 1;
  hsscript.dataset.apikey = "<your api key>";
  hsscript.dataset.cookieless = 1;
  hsscript.dataset.identity = <your identifier>;
  document.getElementsByTagName('head')[0].appendChild(hsscript);
</script>

Sending Custom Properties

You can also send custom properties other than an identifier! It works similar to sending an identifier, but instead, you use an object:

// assuming there is an object called `user` in your code that has the necessary data
HockeyStack.identify({
	plan: user.plan, // "Premium"
  revenue: user.revenue // 150.2
});

// or you can use the same identify call to both send a unique identifier and other custom properties
HockeyStack.identify(user.email,
	{
		plan: user.plan, // "Premium"
	  revenue: user.revenue // 150.2
	});

You can send Strings, Numbers or Booleans as custom properties.

⚠️ Disclaimer

You should be very careful whether the HockeyStack object has been defined in the code at that point or not. If not defined, your users can get an error that would prevent the rest of the script (where you added the identify function) from executing.

In order to overcome this error:

1. Or you can check whether the HockeyStack object is undefined.

if (typeof HockeyStack !== 'undefined') HockeyStack.identify('<your identifier>');

2. Or you can put a try-catch block around the identify function:

try { HockeyStack.identify('<your identifier>'); } catch(e) {}

3. You can add another script that creates the HockeyStack buffer object:

<script>window.HockeyStack = window.HockeyStack || { identify: () => {}, goal: () => {} };</script>
Tracking Custom Goals
disclaimer