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
  • How to use this in reports
  • Best Practice: Connecting Spend to Channel (previously: Unified Channel) and Campaigns (previously: Unified Campaigns)
  • Example 2: Tracking SFDC Campaign Spend
  • When Encountering Data Mismatch
  1. Documentation
  2. Advanced Data Connections

Syncing spend from offline channels and campaigns

PreviousSync SpendNextAudience Syncs

Last updated 9 days ago

Pre-requisite Reading:

The spreadsheet-based Sync Spend functionality can also be applied to spend that may not be connected to a website visit.

Example:

  • Headcount

  • Events

  • Webinars

  • Partnerships

  • Tooling

These types of costs are not tied to website visits, but are very important to track and include in ROI and CAC calculations.

To do so, we first want to determine UTM parameters for each of the cost line items that we want to sync.

As an example, if you wanted to sync Events, you might want to do something like below:

utm_source

utm_campaign

cost

offline_events

saastr_2024

$9327

offline_events

inbound_2024

$10103

Or if you wanted to sync Tooling, you might want to do something like below:

utm_source

utm_medium

utm_campaign

cost

marketing_tools

demand_gen_team

HockeyStack

$164271

marketing_tools

outbound_team

Outreach

$129742

In any case, before getting started, we recommend taking stock of all types of costs you might want to sync and determining a UTM structure that has set meanings for each UTM parameter. The recommended structure is as follows:

  • UTM Source = Broad Category

  • UTM Medium = Associated Team

  • UTM Campaign = Specific Line Item

    • Ex: campaign name, event name, tool name, etc.

    • If you will connect this to datapoints in other integrated platforms, you should use the same naming convention as other platforms

      • For example, if you have Salesforce Campaigns that you will be tracking spend for, you should add the full exact name of the Salesforce Campaign here.

  • UTM Content = Line Items inside the specific line item (optional)

    • Ex: “asset design”, “agency retainer”, “booth expenses”

We also want to associate these line items with dates when the spend was made. How you want to do this depends on what reports you might want to create.

  • If you will only be doing yearly reporting on blended costs, you can just enter the actual date when the spend happened

  • If you will be doing monthly or weekly reporting on blended costs, ROI, CAC, you might want to divide an annual spend into equal monthly or weekly parts

The spend will only show up in reports where the time range includes the date that you insert the spend for.

How to use this in reports

To connect this spend data that has a “fake UTM” to the other datapoints in HockeyStack, you can use Defined Properties!

Since Defined Properties offer a way to group things together, it is the perfect way to group our spend data with other types of data.

Best Practice: Connecting Spend to Channel (previously: Unified Channel) and Campaigns (previously: Unified Campaigns)

Connecting your offline cost data to your Unified defined properties, is the best way to have you cost data across all department appear as “Ad Spend” does for your paid initiatives.

Connect the “fake” UTMs inside Channel (previously: Unified Channel) and Campaign (previously: Unified Campaign)

Channel (previously: Unified Channel):

Add an additional mapping to capture spend for each offline channel your currently tracking and map accordingly.

Campaign (previously: Unified Campaign):

Add an additional mapping to capture spend for each offline channel your currently tracking and map accordingly.

Other Examples: Tracking Team Level Spend

We have the following spend data synced into HockeyStack:

utm_source

utm_medium

utm_campaign

cost

marketing_tools

demand_gen_team

HockeyStack

$164271

marketing_tools

outbound_team

Outreach

$129742

headcount

outbound_team

$509472

We also have more spend items pulled from integrated ad platforms, under UTM Medium contains “paid”.

We also have non-spend items pulled from ad platforms and CRM that we want to track revenue from.

If we use this defined property in our reports, we will see both the spend items pulling in and the non-spend items being used for touchpoints!

Example 2: Tracking SFDC Campaign Spend

We have the following spend data synced into HockeyStack:

utm_source

utm_medium

utm_campaign

cost

offline_events

field_team

AMER_FY24_EV_SAASTR

$12083

offline_events

field_team

AMER_FY24_EV_INBOUND

$10926

offline_events

field_team

AMER_FY24_EV_HOCKEYSTACK_ROUNDTABLE

$5275

We also have the same utm_campaigns available in Salesforce as Campaign Names.

We can create a Campaign property like below:

In this case we are showing UTM Campaign as the property value when there is a UTM. We are showing Campaign Name if it is a Salesforce Campaign.

This is really cool, because if UTM Campaign and Campaign Name are the same, they will be displayed on a single row, and you will be able to create a single column that shows ROI!!

When Encountering Data Mismatch

If you notice mismatches in spend data, follow these steps before escalating the issue:

1. Reset the Sync After Any Modification

This issue can occur when you edit an existing line item inside the synced spreadsheet. Whenever updates are made to the synced spreadsheet, such as adjusting spend values, renaming UTMs, or restructuring data, reset the sync in HockeyStack.

2. Reset the Sync When Seeing Incorrect Numbers

If you notice unexpected figures in reports—such as duplicate entries, or misaligned spend values—resetting the sync should be the first troubleshooting step. Clicking "Reset Sync Spend" in Settings can often resolve these discrepancies instantly. This action refreshes the connection between your source data and HockeyStack, resolving most mismatches without requiring further investigations.

After creating your UTM convention, deciding on a way to break down cost into dates, and , you can move on to using the data in reports.

Pre-requisite Reading:

Sync Spend
creating the spreadsheet(s) to sync, and syncing it into HockeyStack
Defined Properties