Tracking & Analytics on Teachable: Source of Truth for Code Snippets, Integrations, and Data Layer Events

This article outlines everything you need to know about how tracking and attribution tools like Google Tag Manager (GTM), Google Analytics 4 (GA4), Meta Pixel, LinkedIn Insight Tag, and others are supported across Teachable's student-facing pages.

It is intended to be the source of truth for customers, analytics consultants, and developers who are configuring attribution and event tracking for Teachable schools.

NOTE: We recommend leveraging a direct integration wherever possible as opposed to the code snippet to simplify setup and possible tracking complexities.

Summary & Best Practices

  • Use native integrations wherever possible for broader support and easy-of-setup.

  • Avoid duplicating container IDs — prefer using only the integration.

  • Checkout pages do not allow custom code snippets — use the integrations to track sales attribution.

  • add_to_cart and purchase events are available in the data layer.

  • For advanced tracking, use GTM's built-in features and preview/debug mode to validate data layer pushes.

Overview: Code Snippets vs. Integrations

Teachable supports tracking tools via two mechanisms:

  • Code Snippets: Manually added through the "Code Snippets" settings in the admin.

  • Native Integrations: Enabled via the "App Hub" section in the admin dashboard (e.g., GTM, GA4, Meta Pixel, etc.).

Type How It's Added Where It Loads
Code Snippet Manually in Admin > Code Snippets Most student-facing pages
Integration Admin > Integrations Broadly across all pages, including Checkout

Important: Due to security concerns, there are pages where the integration is present but the code snippet is not

Page-Level Presence of Integrations and Snippets

0 = Neither present

1 = Integration only present

2 = Code Snippet + Integration Present

Page GA4 GTM LinkedIn Meta Pixel Pinterest TikTok Segment
Landing Page (/) 2 2 2 2 2 2 2
Sales Page (/p) 2 2 2 2 2 2 2
Checkout (/checkout) 1 1 1 1 1 1 1
Thank You Page 1 1 1 1 1 1 1
Product Detail (/l) 1 1 1 1 1 1 1
Course Index (/courses) 2 2 2 2 2 2 2
Course Curriculum (/courses/enrolled/*) 2 2 2 2 2 2 2
Lecture Player(/lectures)  2 2 2 2 2 2 2
Student Profile, Address, Purchase History, Contact 1 1 1 1 1 1 1
Coaching Enrolled  1 1  1 1 0 0 0
Coaching Milestones 1 1  1 1 0 0 0
Login / Signup / OTP 0 0 0 0 0 0 0

 

Data Layer Events for Checkout & Purchase

Teachable fires 2 key data layer events to track checkout conversion:

  • add_to_cart: Fired when a user lands on the checkout
  • purchase: Fired after a customer completes a purchase

1. Add to Cart event data layer structure

window.dataLayer.push({
  event: "add_to_cart",
  eventModel: {
    currency: "USD",
    value: "0.99",
    coupon: "null",
    tax: "0",
    items: [
      {
        item_id: 1217085,
        item_name: "Sushi rolling technique",
        item_variant: "Sushi rolling technique",
        price: 0.99,
        quantity: 1
      }
    ]
  },
  gtm.uniqueEventId: 7
});

2. Purchase event data layer structure

window.dataLayer.push({
  event: "purchase",
  eventModel: {
    transaction_id: "174719268",
    value: 0.99,
    tax: 7,
    currency: "USD",
    coupon: null,
    items: [
      {
        item_id: "5450802",
        item_name: "Sushi rolling technique",
        item_variant: "99",
        price: 0.99,
        quantity: 1
      }
    ]
  },
  gtm.uniqueEventId: 9
});

 

GTM Container Duplication Behavior

If both the GTM integration and a manual code snippet are added with the same container ID, GTM will deduplicate automatically:

  • GTM detects existing containers and prevents loading the same container twice.

However, if different container IDs are added via:

  • App integration (e.g., GTM container ID in Teachable settings), and

  • A separate manual snippet in the header

Then two containers will load, which can result in duplicate events or parallel tracking setups.

Recommendation: Use only the GTM integration and avoid also adding the GTM container via code snippets.

 

 

Was this article helpful?

1 out of 1 found this helpful