Hanzo
PlatformInsights

Session Recording

Replay user sessions with full privacy controls using Hanzo Insights session recording.

Session Recording

Hanzo Insights captures full session replays using rrweb, giving you a video-like playback of every user interaction. Privacy controls let you mask sensitive data while keeping the recordings useful.

Setup

Enable session recording in the SDK initialization:

insights.init('your-api-key', {
  api_host: 'https://insights.hanzo.ai',
  session_recording: {
    maskAllInputs: true,
  },
})

Recordings appear in insights.hanzo.ai → Session Recordings within seconds.

Privacy Controls

Input Masking

insights.init('your-api-key', {
  api_host: 'https://insights.hanzo.ai',
  session_recording: {
    maskAllInputs: true,           // Mask all input values with ****
    maskInputOptions: {
      password: true,              // Always mask passwords
      email: true,                 // Mask email fields
      color: false,                // Don't mask color pickers
    },
  },
})

Text Masking

session_recording: {
  maskTextSelector: '.sensitive',    // Mask text in elements with this class
  maskAllText: false,                // Set true to mask ALL text
}

Element Blocking

session_recording: {
  blockSelector: '.no-record',     // Completely hide these elements
  blockClass: 'insights-no-record', // Block by class name
}

Attribute Masking

session_recording: {
  maskAllElementAttributes: false,   // Mask all HTML attributes
  maskAttributeFn: (attr, value, element) => {
    if (attr === 'data-email') return '****'
    return value
  },
}

What Gets Captured

DataCapturedNotes
DOM mutationsYesVia rrweb snapshots
Mouse movementsYesPosition tracking
ClicksYesClick targets
ScrollingYesScroll position
Form inputsConfigurableMasked by default
Network requestsOptionalURL and status only
Console logsOptionalEnable with console_log_recording
Performance metricsOptionalCore Web Vitals

Enable Optional Captures

session_recording: {
  recordCrossOriginIframes: false,  // Record cross-origin iframes
  captureConsoleLogLevel: 'warn',   // Capture console.warn and above
  recordHeaders: false,             // Record network request headers
  recordBody: false,                // Record network request/response bodies
}

Sampling

Control recording volume to manage storage costs:

insights.init('your-api-key', {
  api_host: 'https://insights.hanzo.ai',
  session_recording: {
    // Record 50% of sessions
    sampleRate: 0.5,
  },
})

Conditional Recording

Start recordings based on specific conditions:

insights.init('your-api-key', {
  api_host: 'https://insights.hanzo.ai',
  disable_session_recording: true, // Disabled by default
})

// Start recording after a specific event
function onCheckoutError(error: Error) {
  insights.startSessionRecording()
  insights.capture('checkout_error', { error: error.message })
}

Playback

Session recordings in the dashboard show:

  • Timeline — Scrubable timeline with event markers
  • Events overlay — Custom events, errors, and page changes marked on timeline
  • Console logs — JavaScript console output (if enabled)
  • Network tab — HTTP requests and responses (if enabled)
  • User info — Identified user properties and session metadata

Filtering Recordings

Filter recordings by:

  • User properties (plan, country, email domain)
  • Events that occurred during the session
  • Duration (minimum/maximum)
  • Page visited
  • Errors encountered
  • Cohort membership

Data Retention

Session recordings are stored on your Insights instance (ClickHouse). Configure retention in the Insights admin:

SettingDefaultDescription
Recording retention30 daysHow long recordings are kept
Max recording duration24 hoursMaximum single recording length
Storage per recording~500KB/minAverage storage requirement

How is this guide?

Last updated on

On this page