スキル一覧に戻る

fullstory-getting-started

rcmaples / btx

0🍴 0📅 2026年1月11日

Comprehensive getting started guide for Fullstory Browser API v2 implementation. Provides the complete initialization flow, API overview, decision framework for which APIs to use, industry-specific guidance, privacy best practices, and framework integration patterns. Links to all core, meta, industry, and framework skills.

SKILL.md

---
name: fullstory-getting-started
version: v2
description: Comprehensive getting started guide for Fullstory Browser API v2 implementation. Provides the complete initialization flow, API overview, decision framework for which APIs to use, industry-specific guidance, privacy best practices, and framework integration patterns. Links to all core, meta, industry, and framework skills.
related_skills:
  - fullstory-identify-users
  - fullstory-user-properties
  - fullstory-page-properties
  - fullstory-element-properties
  - fullstory-analytics-events
  - fullstory-privacy-controls
  - fullstory-privacy-strategy
  - universal-data-scoping-and-decoration
  - fullstory-stable-selectors
---

# Fullstory Browser API v2: Getting Started Guide

> **📋 Version Note**: This guide covers Fullstory Browser API **v2**. Always verify API syntax against the [official documentation](https://developer.fullstory.com/browser/getting-started/) as the API may evolve. Rate limits, parameters, and features are subject to change.

## Overview

This guide provides everything you need to implement Fullstory's Browser API v2 in your web application. It covers:

1. **Initial Setup**: Snippet installation and configuration
2. **API Landscape**: Understanding all available APIs
3. **Implementation Order**: What to implement first
4. **Decision Framework**: Choosing the right API for your data
5. **Privacy Considerations**: What to capture, mask, or exclude
6. **Industry-Specific Guidance**: Best practices for your vertical
7. **Skill Navigation**: Finding the right detailed guide

---

## Complete Skill Inventory

### Core API Skills

| Skill                          | Purpose                     | Use When                  |
| ------------------------------ | --------------------------- | ------------------------- |
| `fullstory-identify-users`     | Link sessions to users      | Implementing login flow   |
| `fullstory-anonymize-users`    | End identified sessions     | Implementing logout flow  |
| `fullstory-user-properties`    | Set user attributes         | Adding segmentation data  |
| `fullstory-page-properties`    | Set page context            | SPA navigation, page data |
| `fullstory-element-properties` | Capture interaction context | Product grids, lists      |
| `fullstory-analytics-events`   | Track discrete actions      | Conversions, features     |
| `fullstory-observe-callbacks`  | React to FS lifecycle       | Session URL for support   |
| `fullstory-logging`            | Add logs to session         | Error debugging           |
| `fullstory-user-consent`       | Control capture consent     | GDPR/CCPA compliance      |
| `fullstory-capture-control`    | Pause/resume capture        | Sensitive screens         |
| `fullstory-async-methods`      | Promise-based API calls     | Modern async flows        |
| `fullstory-privacy-controls`   | Mask/exclude elements       | PII protection            |

### Strategy & Meta Skills

| Skill                                   | Purpose                | Use When                |
| --------------------------------------- | ---------------------- | ----------------------- |
| `fullstory-privacy-strategy`            | Data privacy decisions | Planning implementation |
| `universal-data-scoping-and-decoration` | Where to put data      | Deciding scope          |

### Industry-Specific Skills

| Skill                           | Industry             | Key Considerations               |
| ------------------------------- | -------------------- | -------------------------------- |
| `fullstory-banking`             | Banking & Financial  | PCI, GLBA, transaction masking   |
| `fullstory-ecommerce`           | E-commerce & Retail  | Conversion funnels, product data |
| `fullstory-gaming`              | Gaming               | Responsible gaming, KYC          |
| `fullstory-healthcare`          | Healthcare           | HIPAA, PHI exclusion             |
| `fullstory-saas`                | B2B SaaS             | Feature adoption, churn          |
| `fullstory-travel`              | Travel & Hospitality | Booking funnels, PCI             |
| `fullstory-media-entertainment` | Media & Streaming    | Engagement, subscriptions        |

---

## Industry Comparison at a Glance

Different industries have vastly different requirements for Fullstory implementation. This table summarizes the key differences:

### Privacy Defaults by Industry

| Industry       | Default Privacy Mode | Financial Data        | User Content   | Conversion Tracking | Primary Concern         |
| -------------- | -------------------- | --------------------- | -------------- | ------------------- | ----------------------- |
| **Banking**    | Exclude              | Exclude (ranges only) | Exclude        | Limited             | Regulatory (PCI, GLBA)  |
| **E-commerce** | Unmask               | Capture (orders)      | Mostly capture | Rich                | Conversion optimization |
| **Gaming**     | Mixed                | Exclude (ranges only) | Exclude        | Careful             | Responsible gaming      |
| **Healthcare** | Exclude              | Exclude               | Exclude        | Very limited        | HIPAA compliance        |
| **SaaS**       | Unmask               | Usually OK            | Mask/Consider  | Rich                | Feature adoption        |
| **Travel**     | Unmask               | Capture (bookings)    | Mask           | Rich                | Booking optimization    |
| **Media**      | Unmask               | N/A                   | Capture        | Rich                | Engagement metrics      |

### What to Capture by Industry

| Data Type             | Banking   | E-commerce    | Gaming          | Healthcare | SaaS        | Travel     | Media         |
| --------------------- | --------- | ------------- | --------------- | ---------- | ----------- | ---------- | ------------- |
| User names            | ❌        | ⚠️ Mask       | ⚠️ Mask         | ❌         | ⚠️ Mask     | ⚠️ Mask    | ⚠️ Mask       |
| Email                 | ❌        | ⚠️ Hash       | ⚠️ Hash         | ❌         | ⚠️ Consider | ⚠️ Mask    | ⚠️ Consider   |
| Product/content names | N/A       | ✅            | ✅ Events/games | N/A        | ✅ Features | ✅         | ✅            |
| Prices/amounts        | ❌ Ranges | ✅            | ❌ Ranges       | ❌         | ✅          | ✅         | ✅ Sub prices |
| Account balance       | ❌        | N/A           | ❌              | N/A        | N/A         | N/A        | N/A           |
| Transaction details   | ❌        | ✅ Order data | ❌              | ❌         | ✅ Usage    | ✅ Booking | ✅ Viewing    |
| Search queries        | ⚠️        | ✅            | ⚠️              | ❌         | ✅          | ✅         | ✅            |
| Payment cards         | ❌        | ❌            | ❌              | ❌         | ❌          | ❌         | ❌            |
| Government IDs        | ❌        | ❌            | ❌              | ❌         | ❌          | ❌         | ❌            |

**Legend**: ✅ = Capture, ⚠️ = Consider/Mask, ❌ = Exclude

### Key Regulatory Requirements

| Industry       | Primary Regulations      | Fullstory Requirements                               |
| -------------- | ------------------------ | ---------------------------------------------------- |
| **Banking**    | PCI DSS, GLBA, SOX       | BAA not typically needed; exclude all financial data |
| **E-commerce** | PCI DSS, CCPA, GDPR      | Exclude payment fields; consent for EU               |
| **Gaming**     | Gaming licenses, AML/KYC | Never analyze gaming patterns; exclude amounts       |
| **Healthcare** | HIPAA, HITECH            | BAA required; exclude ALL PHI; masking insufficient  |
| **SaaS**       | SOC 2, GDPR              | Enterprise privacy options; consent for EU           |
| **Travel**     | PCI DSS, GDPR            | Exclude passport/ID numbers; payment exclusion       |
| **Media**      | COPPA, GDPR              | Never track children's profiles; consent             |

---

## I. The Fullstory API Ecosystem

### Complete API Reference

| API                    | Method                                       | Purpose                     | Skill Document                 |
| ---------------------- | -------------------------------------------- | --------------------------- | ------------------------------ |
| **Identity**           | `FS('setIdentity', { uid, properties })`     | Identify known users        | `fullstory-identify-users`     |
| **Anonymize**          | `FS('setIdentity', { anonymous: true })`     | End identified session      | `fullstory-anonymize-users`    |
| **User Properties**    | `FS('setProperties', { type: 'user', ... })` | Update user attributes      | `fullstory-user-properties`    |
| **Page Properties**    | `FS('setProperties', { type: 'page', ... })` | Set page context            | `fullstory-page-properties`    |
| **Element Properties** | `data-fs-*` attributes                       | Capture interaction context | `fullstory-element-properties` |
| **Events**             | `FS('trackEvent', { name, properties })`     | Track discrete actions      | `fullstory-analytics-events`   |
| **Observers**          | `FS('observe', { type, callback })`          | React to FS lifecycle       | `fullstory-observe-callbacks`  |
| **Logging**            | `FS('log', { level, msg })`                  | Add logs to session         | `fullstory-logging`            |
| **Consent**            | `FS('setIdentity', { consent: bool })`       | Control capture consent     | `fullstory-user-consent`       |
| **Capture Control**    | `FS('shutdown')` / `FS('restart')`           | Pause/resume capture        | `fullstory-capture-control`    |
| **Async Methods**      | `FS('*Async')` variants                      | Promise-based API calls     | `fullstory-async-methods`      |

### API Categories

```
┌─────────────────────────────────────────────────────────────────────┐
│                        FULLSTORY BROWSER API v2                      │
├─────────────────────────────────────────────────────────────────────┤
│  IDENTITY & USER                                                     │
│  ├── setIdentity (uid)        - Identify users                      │
│  ├── setIdentity (anonymous)  - Anonymize users                     │
│  ├── setIdentity (consent)    - Manage consent                      │
│  └── setProperties (user)     - Update user attributes              │
├─────────────────────────────────────────────────────────────────────┤
│  CONTEXT & PROPERTIES                                                │
│  ├── setProperties (page)     - Page-level context                  │
│  └── Element Properties       - Interaction-level context           │
├─────────────────────────────────────────────────────────────────────┤
│  EVENTS & ACTIONS                                                    │
│  └── trackEvent               - Discrete business events            │
├─────────────────────────────────────────────────────────────────────┤
│  PRIVACY & CONTROL                                                   │
│  ├── fs-exclude / fs-mask     - Element privacy classes             │
│  ├── shutdown / restart       - Capture control                     │
│  └── consent                  - User consent management             │
├─────────────────────────────────────────────────────────────────────┤
│  LIFECYCLE & UTILITIES                                               │
│  ├── observe                  - Lifecycle callbacks                 │
│  ├── log                      - Session logging                     │
│  ├── getSession               - Get session URL                     │
│  └── *Async variants          - Promise-based methods               │
└─────────────────────────────────────────────────────────────────────┘
```

---

## II. Snippet Installation

### Basic Snippet (v2)

Add this snippet to your HTML `<head>`:

```html
<script>
  window['_fs_host'] = 'fullstory.com'
  window['_fs_script'] = 'edge.fullstory.com/s/fs.js'
  window['_fs_org'] = 'YOUR_ORG_ID'
  window['_fs_namespace'] = 'FS'

  ;(function (m, n, e, t, l, o, g, y) {
    if (e in m) {
      if (m.console && m.console.log) {
        m.console.log('Fullstory namespace conflict. Please set window["_fs_namespace"].')
      }
      return
    }
    g = m[e] = function (a, b, s) {
      g.q ? g.q.push([a, b, s]) : g._api(a, b, s)
    }
    g.q = []
    o = n.createElement(t)
    o.async = 1
    o.crossOrigin = 'anonymous'
    o.src = 'https://' + _fs_script
    y = n.getElementsByTagName(t)[0]
    y.parentNode.insertBefore(o, y)
    g.identify = function (i, v, s) {
      g(l, {uid: i}, s)
      if (v) g(l, v, s)
    }
    g.setUserVars = function (v, s) {
      g(l, v, s)
    }
    g.event = function (i, v, s) {
      g('event', {n: i, p: v}, s)
    }
    g.anonymize = function () {
      g.identify(!!0)
    }
    g.shutdown = function () {
      g('rec', !1)
    }
    g.restart = function () {
      g('rec', !0)
    }
    g.log = function (a, b) {
      g('log', [a, b])
    }
    g.consent = function (a) {
      g('consent', !arguments.length || a)
    }
    g.identifyAccount = function (i, v) {
      o = 'account'
      v = v || {}
      v.acctId = i
      g(o, v)
    }
    g.clearUserCookie = function () {}
    g.setVars = function (n, p) {
      g('setVars', [n, p])
    }
    g._w = {}
    y = 'XMLHttpRequest'
    g._w[y] = m[y]
    y = 'fetch'
    g._w[y] = m[y]
    if (m[y])
      m[y] = function () {
        return g._w[y].apply(this, arguments)
      }
    g._v = '2.0.0'
  })(window, document, window['_fs_namespace'], 'script', 'identify')
</script>
```

### Configuration Options

| Option                   | Description                    | Default                        |
| ------------------------ | ------------------------------ | ------------------------------ |
| `_fs_org`                | Your Fullstory organization ID | **Required**                   |
| `_fs_namespace`          | Global variable name           | `'FS'`                         |
| `_fs_capture_on_startup` | Start capturing immediately    | `true`                         |
| `_fs_host`               | Fullstory host                 | `'fullstory.com'`              |
| `_fs_script`             | Script location                | `'edge.fullstory.com/s/fs.js'` |

### How Fullstory Tracks Users (First-Party Cookies)

Fullstory uses **first-party cookies** set on YOUR domain to track users:

| Cookie   | Duration | Purpose                                            |
| -------- | -------- | -------------------------------------------------- |
| `fs_uid` | 1 year   | Tracks user across sessions (the "capture cookie") |
| `fs_cid` | 1 year   | Stores consent state for the device                |
| `fs_lua` | 30 min   | Last user action timestamp (session lifecycle)     |

**Why First-Party Cookies Matter:**

| Aspect              | First-Party (Fullstory)                  | Third-Party Cookies     |
| ------------------- | ---------------------------------------- | ----------------------- |
| Domain              | Set on YOUR domain                       | Set on external domain  |
| Browser blocking    | ✅ Not blocked by browsers/ad-blockers   | ❌ Often blocked        |
| Cross-site tracking | ❌ Cannot track across different sites   | ✅ Can track across web |
| Privacy             | ✅ Your data stays isolated to your site | ❌ Data aggregated      |

**Key Behaviors:**

- **Anonymous users persist**: Same `fs_uid` cookie = same user across sessions (until cookie expires/deleted)
- **Session merging**: When `setIdentity` is called, ALL previous anonymous sessions from that cookie merge into the identified user
- **Anonymization resets**: `setIdentity({ anonymous: true })` generates a NEW `fs_uid` cookie, breaking the link to previous sessions

> **Reference**: [Why Fullstory uses First-Party Cookies](https://help.fullstory.com/hc/en-us/articles/360020829513-Why-Fullstory-uses-First-Party-Cookies)

### Private by Default Mode (Recommended for Sensitive Industries)

Fullstory offers a **Private by Default** capture mode that inverts the default behavior:

| Mode                   | Default Behavior                        | Your Action                                                |
| ---------------------- | --------------------------------------- | ---------------------------------------------------------- |
| **Standard**           | Everything captured (unmask is default) | Add `fs-mask` / `fs-exclude` to protect sensitive elements |
| **Private by Default** | Everything masked                       | Add `fs-unmask` to reveal safe content                     |

**When to Use Private by Default:**

- ✅ Banking / Financial services
- ✅ Healthcare / HIPAA-regulated
- ✅ Enterprise SaaS with customer data
- ✅ Any app where "default open" is too risky

**Enable via:**

- **New accounts**: Select during onboarding wizard
- **Existing accounts**: Contact [Fullstory Support](https://help.fullstory.com/hc/en-us/requests/new)

> **Reference**: [Fullstory Private by Default](https://help.fullstory.com/hc/en-us/articles/360044349073-Fullstory-Private-by-Default)

### Consent-Required Configuration (GDPR)

For GDPR compliance, don't capture until consent is given:

```html
<script>
  window['_fs_capture_on_startup'] = false // Don't capture until consent
  window['_fs_org'] = 'YOUR_ORG_ID'
  // ... rest of snippet
</script>
```

Then call when consent is granted:

```javascript
FS('setIdentity', {consent: true})
```

---

## III. Implementation Order

### Recommended Implementation Sequence

```
Phase 1: Foundation
├── 1. Install snippet
├── 2. Implement privacy controls (fs-exclude, fs-mask)
├── 3. Implement user identification (login flow)
├── 4. Implement anonymization (logout flow)
└── 5. Set up basic page properties (pageName)

Phase 2: Context
├── 6. Add user properties (plan, role, company)
├── 7. Enhance page properties (search terms, filters)
└── 8. Add element properties (product IDs, positions)

Phase 3: Events
├── 9. Implement key business events
├── 10. Add funnel tracking
└── 11. Add feature usage tracking

Phase 4: Advanced
├── 12. Set up observers for session URL
├── 13. Implement consent flows (if GDPR required)
├── 14. Add error logging
└── 15. Implement capture control (if needed)
```

### Minimum Viable Implementation

For a basic integration, implement these APIs:

```javascript
// 1. Identify users on login
FS('setIdentity', {
  uid: user.id,
  properties: {
    displayName: user.name,
    email: user.email,
  },
})

// 2. Set page context
FS('setProperties', {
  type: 'page',
  properties: {
    pageName: 'Dashboard',
  },
})

// 3. Track key events
FS('trackEvent', {
  name: 'Feature Used',
  properties: {
    featureName: 'export',
  },
})

// 4. Anonymize on logout
FS('setIdentity', {anonymous: true})
```

---

## IV. Privacy First: Three Privacy Modes

Before capturing any data, understand the three privacy modes:

### Privacy Mode Comparison

| Mode        | CSS Class     | What Leaves Device | Events Captured | Use For                           |
| ----------- | ------------- | ------------------ | --------------- | --------------------------------- |
| **Exclude** | `.fs-exclude` | ❌ Nothing         | ❌ No           | Passwords, SSN, PHI, card numbers |
| **Mask**    | `.fs-mask`    | ⚠️ Structure only  | ✅ Yes          | Names, emails, addresses          |
| **Unmask**  | `.fs-unmask`  | ✅ Everything      | ✅ Yes          | Public content, products          |

### Quick Privacy Decision

```
Is this data regulated (HIPAA, PCI, GLBA)?
     │
     YES → fs-exclude (nothing leaves device)
     │
     NO
     │
     ▼
Is this PII (name, email, address)?
     │
     YES → fs-mask (structure captured, text replaced)
     │
     NO
     │
     ▼
Is this public/business data?
     │
     YES → fs-unmask or default (everything captured)
```

### Privacy by Industry Quick Reference

| Industry   | Default Recommendation                                |
| ---------- | ----------------------------------------------------- |
| Healthcare | Use Private by Default mode; explicit unmask only     |
| Banking    | Exclude financial data; mask PII                      |
| Gaming     | Exclude amounts; mask user info                       |
| E-commerce | Unmask products; mask checkout PII; exclude payment   |
| SaaS       | Unmask features; mask user content                    |
| Travel     | Unmask search/booking; mask traveler PII; exclude IDs |
| Media      | Unmask content; mask profiles                         |

---

## V. Quick Decision Guide

### "Where should I put this data?"

```
Is this data about WHO the user is?
(plan, role, company, signup date)
     │
     YES → User Properties (setIdentity or setProperties type: 'user')
     │
     NO
     │
     ▼
Is this data the same for the entire page?
(search term, product ID on detail page, filters)
     │
     YES → Page Properties (setProperties type: 'page')
     │
     NO
     │
     ▼
Is this data specific to one element among many?
(product ID in a grid, position in list)
     │
     YES → Element Properties (data-fs-* attributes)
     │
     NO
     │
     ▼
Is this a discrete action/event?
(purchase, signup, feature used)
     │
     YES → Event (trackEvent)
```

### Quick Reference Table

| I want to...            | Use this API              | Skill                          |
| ----------------------- | ------------------------- | ------------------------------ |
| Link sessions to a user | `setIdentity`             | `fullstory-identify-users`     |
| Add user attributes     | `setProperties(user)`     | `fullstory-user-properties`    |
| Set page context        | `setProperties(page)`     | `fullstory-page-properties`    |
| Track what was clicked  | Element Properties        | `fullstory-element-properties` |
| Track a conversion      | `trackEvent`              | `fullstory-analytics-events`   |
| Handle logout           | `setIdentity(anonymous)`  | `fullstory-anonymize-users`    |
| Get session URL         | `observe` or `getSession` | `fullstory-observe-callbacks`  |
| Implement GDPR consent  | `setIdentity(consent)`    | `fullstory-user-consent`       |
| Pause recording         | `shutdown`/`restart`      | `fullstory-capture-control`    |
| Log errors to session   | `log`                     | `fullstory-logging`            |
| Protect sensitive data  | CSS classes               | `fullstory-privacy-controls`   |

---

## VI. Industry-Specific Quick Start

### Banking/Financial Services

```javascript
// Use internal customer ID, never SSN or account numbers
FS('setIdentity', {uid: customer.customerId})

// Exclude all financial data, use ranges if needed
// Add fs-exclude to: balances, transactions, account numbers
FS('trackEvent', {
  name: 'transfer_completed',
  properties: {
    transfer_type: 'internal',
    amount_range: '$100-$500', // Never exact amount
  },
})
```

**→ See `fullstory-banking` for complete guide**

### E-commerce

```javascript
// Rich product tracking is valuable
FS('setProperties', {
  type: 'page',
  properties: {
    pageName: 'Product Detail',
    productId: product.id,
    productName: product.name,
    price: product.price, // Prices are fine in e-commerce
  },
})

// Track conversions with full details
FS('trackEvent', {
  name: 'purchase_completed',
  properties: {
    order_id: order.id,
    revenue: order.total,
    item_count: order.items.length,
  },
})
```

**→ See `fullstory-ecommerce` for complete guide**

### Healthcare

```javascript
// Extremely limited capture - use anonymous sessions if possible
FS('setIdentity', {uid: generateSessionId()}) // No linking to patient

// Exclude EVERYTHING medical - masking is NOT sufficient
// Use Private by Default mode
// Only track: navigation, errors, page load times
```

**→ See `fullstory-healthcare` for complete guide**

### SaaS

```javascript
// Rich user identification for feature adoption
FS('setIdentity', {
  uid: user.id,
  properties: {
    displayName: user.firstName,
    plan: organization.plan,
    role: user.role,
    org_id: organization.id,
  },
})

// Track feature usage comprehensively
FS('trackEvent', {
  name: 'feature_first_use',
  properties: {
    feature_name: 'report_builder',
    days_since_signup: user.daysSinceSignup,
  },
})
```

**→ See `fullstory-saas` for complete guide**

---

## VII. Common Integration Patterns

### Pattern 1: React Integration

```jsx
// hooks/useFullstory.js
import {useEffect} from 'react'
import {useAuth} from './useAuth'
import {useLocation} from 'react-router-dom'

export function useFullstory() {
  const {user, isAuthenticated} = useAuth()
  const location = useLocation()

  // Handle user identification
  useEffect(() => {
    if (isAuthenticated && user) {
      FS('setIdentity', {
        uid: user.id,
        properties: {
          displayName: user.name,
          email: user.email,
          plan: user.plan,
        },
      })
    }
  }, [user, isAuthenticated])

  // Handle page changes
  useEffect(() => {
    const pageName = getPageName(location.pathname)
    FS('setProperties', {
      type: 'page',
      properties: {pageName},
    })
  }, [location])

  // Return helper functions
  return {
    trackEvent: (name, properties) => {
      FS('trackEvent', {name, properties})
    },
    setUserProperty: (properties) => {
      FS('setProperties', {type: 'user', properties})
    },
  }
}
```

### Pattern 2: Privacy-First Component Wrapper

```jsx
// components/PrivacyWrapper.js
export function SensitiveData({ children, level = 'mask' }) {
  const className = level === 'exclude' ? 'fs-exclude' : 'fs-mask';
  return <div className={className}>{children}</div>;
}

export function PublicData({ children }) {
  return <div className="fs-unmask">{children}</div>;
}

// Usage
<SensitiveData level="exclude">
  <CreditCardForm />
</SensitiveData>

<SensitiveData>
  <UserProfile />  {/* Masked by default */}
</SensitiveData>

<PublicData>
  <ProductGrid />  {/* Visible */}
</PublicData>
```

---

## VIII. Testing Your Integration

### 1. Verify Snippet Installation

Open browser console and check:

```javascript
typeof FS !== 'undefined' // Should be true
FS('getSession') // Should return session URL
```

### 2. Check Privacy Controls

In browser DevTools:

- Verify `.fs-exclude` classes on sensitive elements
- Verify `.fs-mask` classes on PII fields
- Watch a session replay and confirm masked/excluded content

### 3. Check User Identification

After login, verify in Fullstory:

- Session shows user's displayName
- User can be found by search
- User properties appear in session details

### 4. Validate Events

After triggering events:

- Check Events panel in Fullstory session
- Verify event properties are captured correctly
- Test event-based searches work

---

## IX. Troubleshooting

### Fullstory Not Loading

```javascript
if (typeof FS === 'undefined') {
  console.error('Fullstory not loaded - check snippet installation')
}
```

**Common causes:**

- Snippet not in `<head>`
- Wrong org ID
- Ad blocker blocking script
- Content Security Policy blocking

### User Not Identified

```javascript
console.log('Identifying user:', user.id)
FS('setIdentity', {uid: user.id})
```

**Common causes:**

- uid is undefined or null
- setIdentity called before FS loads
- Identity called with wrong syntax

### Privacy Not Working

**Common causes:**

- CSS class not on element (check DevTools)
- Child element needs its own class
- Conflicting CSS selector rules in Settings

---

## X. Related Skills Reference

### Core Data Capture

| Skill                          | Use For                          |
| ------------------------------ | -------------------------------- |
| `fullstory-identify-users`     | User identification and login    |
| `fullstory-anonymize-users`    | Logout and user switching        |
| `fullstory-user-properties`    | User attributes and segmentation |
| `fullstory-page-properties`    | Page context and Journeys        |
| `fullstory-element-properties` | Interaction-level data           |
| `fullstory-analytics-events`   | Business events and funnels      |

### Privacy & Control

| Skill                        | Use For                       |
| ---------------------------- | ----------------------------- |
| `fullstory-privacy-controls` | Element masking and exclusion |
| `fullstory-privacy-strategy` | Data privacy decisions        |
| `fullstory-user-consent`     | GDPR/CCPA compliance          |
| `fullstory-capture-control`  | Pause/resume recording        |

### Lifecycle & Utilities

| Skill                         | Use For                          |
| ----------------------------- | -------------------------------- |
| `fullstory-async-methods`     | Promise-based API calls          |
| `fullstory-observe-callbacks` | Session URL and lifecycle events |
| `fullstory-logging`           | Error and debug logging          |

### Industry-Specific

| Skill                           | Use For                           |
| ------------------------------- | --------------------------------- |
| `fullstory-banking`             | Financial services implementation |
| `fullstory-ecommerce`           | E-commerce/retail implementation  |
| `fullstory-gaming`              | Gaming/gaming implementation      |
| `fullstory-healthcare`          | Healthcare/HIPAA implementation   |
| `fullstory-saas`                | B2B SaaS implementation           |
| `fullstory-travel`              | Travel/hospitality implementation |
| `fullstory-media-entertainment` | Media/streaming implementation    |

### Strategy

| Skill                                   | Use For                    |
| --------------------------------------- | -------------------------- |
| `universal-data-scoping-and-decoration` | Deciding where to put data |

### Framework Integration

| Skill                        | Use For                                                                  |
| ---------------------------- | ------------------------------------------------------------------------ |
| `fullstory-stable-selectors` | Stable `data-*` attributes for any framework (React, Angular, Vue, etc.) |

---

## Key Takeaways for Agent

When helping developers get started with Fullstory:

1. **Privacy first**:
   - Ask what industry/regulations apply
   - Point to appropriate industry skill
   - Default to more restrictive privacy in regulated industries

2. **Implementation order matters**:
   - Start with privacy controls
   - Then identification (login/logout)
   - Add page properties (pageName is crucial for Journeys)
   - Then events and element properties

3. **Minimum viable integration**:
   - Privacy classes on sensitive elements
   - setIdentity on login
   - setIdentity anonymous on logout
   - setProperties(page) with pageName
   - A few key trackEvent calls

4. **Industry matters**:
   - Healthcare: Default exclude, BAA required
   - Banking: Exclude financial data, use ranges
   - E-commerce: Can capture most product data
   - SaaS: Rich feature tracking is valuable

5. **Common first questions**:
   - "How do I link sessions to users?" → `fullstory-identify-users`
   - "Where should I put this data?" → `universal-data-scoping-and-decoration`
   - "How do I track conversions?" → `fullstory-analytics-events`
   - "What should I mask vs exclude?" → `fullstory-privacy-controls`

6. **Point to specific skills** for detailed implementation guidance

---

## Reference Links

- **Getting Started**: https://developer.fullstory.com/browser/getting-started/
- **Privacy Controls**: https://help.fullstory.com/hc/en-us/articles/360020623574
- **Custom Properties**: https://developer.fullstory.com/browser/custom-properties/
- **Help Center**: https://help.fullstory.com/

---

_This getting started guide provides the foundation for implementing Fullstory Browser API v2. For detailed implementation guidance on any specific API or industry, refer to the linked skill documents._