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
  • Getting Started
  • What gets tracked as Metadata
  • High-Level Integration Flow
  1. Integrations
  2. Ad Platforms

Google Ads

With HockeyStack you can seamlessly authenticate, fetch, and analyze ad performance metrics from Google Ads.

PreviousCapterra AdsNextFacebook Ads

Last updated 3 months ago

Getting Started

First find the Connect button for Google Ads in the your "API & Integrations" settings.

Sign in with your Google Account that has access to Google Ads

Allow HockeyStack access to your account

Select the ad account that you want to connect. After granting permissions, you'll be redirected back to the ad reporting platform, confirming the successful connection.

Data will then get pulled daily so that it can be synced to users' tables.

What gets tracked as Metadata

Information collected from each ad gets stored in our metadata table. Each row has the following format:

Property

Description

account_id_hashed

Domain's API Key hashed

type

Type will always be paid-ads

id

A unique MD5 hash combining date, creative

ID, keyword, etc., used to de-duplicate entries.

date

The date of the metrics (in YYYY-MM-DD format).

account_id

The Google Ads customer ID (e.g., "123-456-7890").

network

The advertising network (always "Google Ads" in this integration).

campaign_id

The identifier of the campaign (e.g., "123456789").

campaign_name

The display name of the campaign (e.g., "Brand Awareness 2024").

adgroup_id

The identifier of the ad group within that campaign.

adgroup_name

The display name of the ad group.

ad_id

The identifier of the specific ad (e.g., "987654321").

utm_source

The UTM source parameter extracted from the ad’s final/tracking URL or defaulted to "google".

utm_campaign

The UTM campaign parameter extracted from the ad’s URL or fallback to the campaign name.

utm_medium

The UTM medium parameter extracted from the ad’s URL (e.g., "cpc").

utm_content

The UTM content parameter extracted from the ad’s URL.

utm_term

The UTM term parameter extracted from the ad’s URL (or keyword).

keyword

The matched keyword text (if applicable to the ad type).

impressions

The total impressions for that ad on the specified date.

clicks

The total clicks for that ad on the specified date.

cost

The total cost of those clicks, expressed in the account’s currency (converted from costMicros).

currency

The currency code (e.g., "USD"), usually derived from account.currency or defaulted to "USD".

High-Level Integration Flow

  1. OAuth Connection

    • A user connects their Google Ads account via OAuth, granting us read access.

  2. Refresh/Validate Tokens

    • We periodically refresh the OAuth token with refreshOAuth to keep our access valid.

    • We validate permissions with testPermission.

  3. Fetching Account and Campaign Data

    • We call getAdAccounts to list accessible accounts.

    • For each account, we run fetchCustomerCurrencies to map currency codes to customer IDs.

    • We call processAccount (the main function to pull historical performance data in daily batches).

  4. Data Processing

    • Within processAccount, we break date ranges into smaller windows (e.g., 30 days).

    • For each window, we call processRequest (which internally calls createRequestConfig and processes multiple pages of results).

    • createRequestConfig is the function responsible for building the request that goes to Google Ads.

      • It starts with a base configuration (like headers, tokens, and the account’s customer ID), then adds a custom query based on your needs—such as whether you want keyword data, Performance Max campaigns, YouTube campaigns, or a specific date range.

      • It also handles pagination (by adding a pageToken when there’s more data). Essentially, this function combines all the who, what, and when into a single request so we can precisely fetch the desired metrics from Google Ads.

    • We parse the raw results in formatData, combine them with any extracted UTMs in extractURL, and then store them in our system with insertToMetadata.

  5. Reporting & Utilities

    • We can also call pullCampaignReporting to get summarized campaign-level data.

    • getDuplicateUTMs can help identify multiple different UTMs attached to the same campaign.

    • If the user removes the connection, we call revokeOAuth to invalidate tokens.