> Part of the walkerOS documentation. Project overview and full index: <https://www.walkeros.io/llms.txt>

# FullStory

<!-- -->

[Web](#)[ ](https://github.com/elbwalker/walkerOS/tree/main/packages/web/destinations/fullstory)

<!-- -->

[Source code](https://github.com/elbwalker/walkerOS/tree/main/packages/web/destinations/fullstory)[ ](https://www.npmjs.com/package/@walkeros/web-destination-fullstory)

<!-- -->

[Package](https://www.npmjs.com/package/@walkeros/web-destination-fullstory)

<!-- -->

Beta

[FullStory](https://www.fullstory.com/) delivers enterprise session replay and digital-experience analytics. This destination forwards walkerOS events to FullStory via the official [`@fullstory/browser`](https://www.npmjs.com/package/@fullstory/browser) SDK v2, calling `FullStory('trackEvent', ...)` for events and supporting identity, user/page properties, and consent gating via `start`/`shutdown`.

<!-- -->

Where this fits

FullStory is a **web destination** in the walkerOS flow:

## Installation[​](#installation "Direct link to Installation")

```
npm install @walkeros/web-destination-fullstory
```

* Integrated
* Bundled

```
import { startFlow } from '@walkeros/collector';
import { destinationFullStory } from '@walkeros/web-destination-fullstory';

await startFlow({
  destinations: {
    fullstory: {
      code: destinationFullStory,
      config: {
        settings: {
          orgId: 'o-XXXXXX-na1',
        },
      },
    },
  },
});
```

Add to your `flow.json` destinations:

```
"destinations": {
  "fullstory": {
    "package": "@walkeros/web-destination-fullstory",
    "config": {
      "settings": {
        "orgId": "o-XXXXXX-na1"
      }
    }
  }
}
```

[See bundled mode setup](https://www.walkeros.io/docs/getting-started/modes/bundled.md) | [CLI reference](https://www.walkeros.io/docs/apps/cli.md)

## Configuration[​](#configuration "Direct link to Configuration")

This <!-- -->destination<!-- --> uses the standard <!-- -->destination<!-- --> config wrapper (consent, data, env, id, ...). For the shared fields see [destination<!-- --> configuration](https://www.walkeros.io/docs/destinations.md#configuration). Package-specific fields live under `config.settings` and are listed below.

## Settings[​](#settings "Direct link to Settings")

| Property                   | Type                     | Description                                                                                                                                                                                                             | More |
| -------------------------- | ------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---- |
| `orgId*`                   | `string`                 | Your FullStory organization ID (e.g. "o-XXXXXX-na1"). Find it in FullStory under Settings > General.                                                                                                                    |      |
| `host`                     | `string`                 | Recording server host for proxy support.                                                                                                                                                                                |      |
| `script`                   | `string`                 | Custom script CDN host domain.                                                                                                                                                                                          |      |
| `cookieDomain`             | `string`                 | Override cookie domain for cross-subdomain tracking.                                                                                                                                                                    |      |
| `debug`                    | `boolean`                | Enable browser console debug logging.                                                                                                                                                                                   |      |
| `devMode`                  | `boolean`                | Disable recording entirely for development environments.                                                                                                                                                                |      |
| `startCaptureManually`     | `boolean`                | Delay capture until FullStory("start") is called. Recommended for GDPR: init the SDK immediately but wait for consent before recording.                                                                                 |      |
| `namespace`                | `string`                 | Global FS identifier override (default: "FS").                                                                                                                                                                          |      |
| `recordCrossDomainIFrames` | `boolean`                | Enable cross-domain iframe recording.                                                                                                                                                                                   |      |
| `identify`                 | `any`                    | Destination-level identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Fires on every push.                                                                                                    |      |
| `consent`                  | `Record<string, string>` | Translation table from walkerOS consent keys to FullStory consent actions. "capture" controls start/shutdown (recording on/off). "consent" controls setIdentity({ consent }) flag. Example: { "analytics": "capture" }. |      |

\* Required fields

## Mapping[​](#mapping "Direct link to Mapping")

Per-event rules under `config.mapping`. For the standard rule fields (consent, condition, data, batch, name, policy) see [mapping](https://www.walkeros.io/docs/mapping.md).

| Property   | Type               | Description                                                                                                                                  | More |
| ---------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | ---- |
| `identify` | `any`              | Per-event identity mapping. Resolves to { uid, properties? } for FullStory setIdentity. Overrides destination-level identify for this event. |      |
| `set`      | `any`              | Property mapping. Resolved object keys become FullStory setProperties() properties. Use with setType to control scope.                       |      |
| `setType`  | `'user' \| 'page'` | Property scope for the set mapping. "user" persists across sessions; "page" resets on navigation. Default: "user".                           |      |

## Examples

### Combined features

A purchase fires FullStory setIdentity, setProperties, and trackEvent in the canonical execution order.

Event

```
{
  "name": "order complete",
  "data": {
    "id": "0rd3r1d",
    "currency": "EUR",
    "shipping": 5.22,
    "taxes": 73.76,
    "total": 555
  },
  "context": {
    "shopping": [
      "complete",
      0
    ]
  },
  "globals": {
    "pagegroup": "shop"
  },
  "custom": {
    "completely": "random"
  },
  "user": {
    "id": "us3r",
    "device": "c00k13",
    "session": "s3ss10n"
  },
  "nested": [
    {
      "entity": "product",
      "data": {
        "id": "ers",
        "name": "Everyday Ruck Snack",
        "color": "black",
        "size": "l",
        "price": 420
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    },
    {
      "entity": "product",
      "data": {
        "id": "cc",
        "name": "Cool Cap",
        "size": "one size",
        "price": 42
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    },
    {
      "entity": "gift",
      "data": {
        "name": "Surprise"
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    }
  ],
  "consent": {
    "functional": true
  },
  "id": "e8c760b529851fca",
  "trigger": "load",
  "entity": "order",
  "action": "complete",
  "timestamp": 1700000107,
  "timing": 3.14,
  "source": {
    "count": 1,
    "trace": "0a1b2c3d4e5f60718293a4b5c6d7e8f9",
    "type": "collector",
    "schema": "4"
  }
}
```

Mapping

```
{
  "name": "Purchase",
  "settings": {
    "identify": {
      "map": {
        "uid": "user.id"
      }
    },
    "set": {
      "map": {
        "order_id": "data.id"
      }
    }
  }
}
```

Out

```
fullstory.setIdentity({
  "uid": "us3r"
});

fullstory.setProperties({
  "type": "user",
  "properties": {
    "order_id": "0rd3r1d"
  }
});

fullstory.trackEvent({
  "name": "Purchase",
  "properties": {}
})
```

### Start capture

A walker consent grant for analytics calls FullStory start to resume session recording.

Event

```
{
  "analytics": true
}
```

Out

```
fullstory.start()
```

### Consent flag granted

A walker consent grant with action consent sets the FullStory identity consent flag to true.

Event

```
{
  "marketing": true
}
```

Out

```
fullstory.setIdentity({
  "consent": true
})
```

### Shutdown capture

A walker consent revoke for analytics calls FullStory shutdown to stop session recording.

Event

```
{
  "analytics": false
}
```

Out

```
fullstory.start();

fullstory.shutdown()
```

### Consent flag revoked

A walker consent revoke with action consent sets the FullStory identity consent flag to false.

Event

```
{
  "marketing": false
}
```

Out

```
fullstory.setIdentity({
  "consent": true
});

fullstory.setIdentity({
  "consent": false
})
```

### Default event

A walker event becomes a FullStory trackEvent call with the event name and empty properties.

Event

```
{
  "name": "product view",
  "data": {
    "id": "ers",
    "name": "Everyday Ruck Snack",
    "color": "black",
    "size": "l",
    "price": 420
  },
  "context": {
    "shopping": [
      "detail",
      0
    ]
  },
  "globals": {
    "pagegroup": "shop"
  },
  "custom": {
    "completely": "random"
  },
  "user": {
    "id": "us3r",
    "device": "c00k13",
    "session": "s3ss10n"
  },
  "nested": [],
  "consent": {
    "functional": true
  },
  "id": "a1eaa21f00834513",
  "trigger": "load",
  "entity": "product",
  "action": "view",
  "timestamp": 1700000100,
  "timing": 3.14,
  "source": {
    "count": 1,
    "trace": "0a1b2c3d4e5f60718293a4b5c6d7e8f9",
    "type": "collector",
    "schema": "4"
  }
}
```

Out

```
fullstory.trackEvent({
  "name": "product view",
  "properties": {}
})
```

### Destination identify

Destination-level identify fires FullStory setIdentity with the user id before every track call.

Event

```
{
  "name": "page view",
  "data": {
    "domain": "www.example.com",
    "title": "walkerOS documentation",
    "referrer": "https://www.walkeros.io/",
    "search": "?foo=bar",
    "hash": "#hash",
    "id": "/docs/"
  },
  "context": {
    "dev": [
      "test",
      1
    ]
  },
  "globals": {
    "pagegroup": "docs"
  },
  "custom": {
    "completely": "random"
  },
  "user": {
    "id": "us3r",
    "device": "c00k13",
    "session": "s3ss10n"
  },
  "nested": [
    {
      "entity": "child",
      "data": {
        "is": "subordinated"
      }
    }
  ],
  "consent": {
    "functional": true
  },
  "id": "250ac140b9107e06",
  "trigger": "load",
  "entity": "page",
  "action": "view",
  "timestamp": 1700000104,
  "timing": 3.14,
  "source": {
    "count": 1,
    "trace": "0a1b2c3d4e5f60718293a4b5c6d7e8f9",
    "type": "collector",
    "schema": "4"
  }
}
```

Out

```
fullstory.setIdentity({
  "uid": "us3r"
});

fullstory.trackEvent({
  "name": "page view",
  "properties": {}
})
```

### Renamed event

A mapping renames the event so the FullStory trackEvent uses Purchase instead of the walker name.

Event

```
{
  "name": "order complete",
  "data": {
    "id": "0rd3r1d",
    "currency": "EUR",
    "shipping": 5.22,
    "taxes": 73.76,
    "total": 555
  },
  "context": {
    "shopping": [
      "complete",
      0
    ]
  },
  "globals": {
    "pagegroup": "shop"
  },
  "custom": {
    "completely": "random"
  },
  "user": {
    "id": "us3r",
    "device": "c00k13",
    "session": "s3ss10n"
  },
  "nested": [
    {
      "entity": "product",
      "data": {
        "id": "ers",
        "name": "Everyday Ruck Snack",
        "color": "black",
        "size": "l",
        "price": 420
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    },
    {
      "entity": "product",
      "data": {
        "id": "cc",
        "name": "Cool Cap",
        "size": "one size",
        "price": 42
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    },
    {
      "entity": "gift",
      "data": {
        "name": "Surprise"
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    }
  ],
  "consent": {
    "functional": true
  },
  "id": "958b449993e009c6",
  "trigger": "load",
  "entity": "order",
  "action": "complete",
  "timestamp": 1700000102,
  "timing": 3.14,
  "source": {
    "count": 1,
    "trace": "0a1b2c3d4e5f60718293a4b5c6d7e8f9",
    "type": "collector",
    "schema": "4"
  }
}
```

Mapping

```
{
  "name": "Purchase"
}
```

Out

```
fullstory.trackEvent({
  "name": "Purchase",
  "properties": {}
})
```

### Set page properties

A page view sets FullStory page-type properties without firing a track, since FullStory auto-captures navigation.

Event

```
{
  "name": "page view",
  "data": {
    "id": "/docs/",
    "title": "Getting Started"
  },
  "context": {
    "dev": [
      "test",
      1
    ]
  },
  "globals": {
    "pagegroup": "docs"
  },
  "custom": {
    "completely": "random"
  },
  "user": {
    "id": "us3r",
    "device": "c00k13",
    "session": "s3ss10n"
  },
  "nested": [
    {
      "entity": "child",
      "data": {
        "is": "subordinated"
      }
    }
  ],
  "consent": {
    "functional": true
  },
  "id": "ec5dc7ee708af927",
  "trigger": "load",
  "entity": "page",
  "action": "view",
  "timestamp": 1700000106,
  "timing": 3.14,
  "source": {
    "count": 1,
    "trace": "0a1b2c3d4e5f60718293a4b5c6d7e8f9",
    "type": "collector",
    "schema": "4"
  }
}
```

Mapping

```
{
  "silent": true,
  "settings": {
    "set": {
      "map": {
        "pageName": "data.title"
      }
    },
    "setType": "page"
  }
}
```

Out

```
fullstory.setProperties({
  "type": "page",
  "properties": {
    "pageName": "Getting Started"
  }
})
```

### Set user properties

A purchase sets user-level FullStory properties such as revenue and currency alongside the tracked event.

Event

```
{
  "name": "order complete",
  "data": {
    "id": "0rd3r1d",
    "currency": "EUR",
    "shipping": 5.22,
    "taxes": 73.76,
    "total": 555
  },
  "context": {
    "shopping": [
      "complete",
      0
    ]
  },
  "globals": {
    "pagegroup": "shop"
  },
  "custom": {
    "completely": "random"
  },
  "user": {
    "id": "us3r",
    "device": "c00k13",
    "session": "s3ss10n"
  },
  "nested": [
    {
      "entity": "product",
      "data": {
        "id": "ers",
        "name": "Everyday Ruck Snack",
        "color": "black",
        "size": "l",
        "price": 420
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    },
    {
      "entity": "product",
      "data": {
        "id": "cc",
        "name": "Cool Cap",
        "size": "one size",
        "price": 42
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    },
    {
      "entity": "gift",
      "data": {
        "name": "Surprise"
      },
      "context": {
        "shopping": [
          "complete",
          0
        ]
      },
      "nested": []
    }
  ],
  "consent": {
    "functional": true
  },
  "id": "645beddcf9d2ba97",
  "trigger": "load",
  "entity": "order",
  "action": "complete",
  "timestamp": 1700000105,
  "timing": 3.14,
  "source": {
    "count": 1,
    "trace": "0a1b2c3d4e5f60718293a4b5c6d7e8f9",
    "type": "collector",
    "schema": "4"
  }
}
```

Mapping

```
{
  "name": "Purchase",
  "settings": {
    "set": {
      "map": {
        "revenue": "data.total",
        "currency": "data.currency"
      }
    }
  }
}
```

Out

```
fullstory.setProperties({
  "type": "user",
  "properties": {
    "revenue": 555,
    "currency": "EUR"
  }
});

fullstory.trackEvent({
  "name": "Purchase",
  "properties": {}
})
```

### User login identify

A user login fires FullStory setIdentity with uid and profile properties before tracking the event.

Event

```
{
  "name": "user login",
  "data": {
    "id": "u-123",
    "name": "Jane Doe",
    "email": "jane@example.com"
  },
  "context": {
    "dev": [
      "test",
      1
    ]
  },
  "globals": {
    "lang": "elb"
  },
  "custom": {
    "completely": "random"
  },
  "user": {
    "id": "us3r",
    "device": "c00k13",
    "session": "s3ss10n"
  },
  "nested": [
    {
      "entity": "child",
      "data": {
        "is": "subordinated"
      }
    }
  ],
  "consent": {
    "functional": true
  },
  "id": "be490b723a7d9ca8",
  "trigger": "test",
  "entity": "user",
  "action": "login",
  "timestamp": 1700000103,
  "timing": 3.14,
  "source": {
    "count": 1,
    "trace": "0a1b2c3d4e5f60718293a4b5c6d7e8f9",
    "type": "collector",
    "schema": "4"
  }
}
```

Mapping

```
{
  "settings": {
    "identify": {
      "map": {
        "uid": "data.id",
        "properties": {
          "map": {
            "displayName": "data.name",
            "email": "data.email"
          }
        }
      }
    }
  }
}
```

Out

```
fullstory.setIdentity({
  "uid": "u-123",
  "properties": {
    "displayName": "Jane Doe",
    "email": "jane@example.com"
  }
});

fullstory.trackEvent({
  "name": "user login",
  "properties": {}
})
```

## Consent[​](#consent "Direct link to Consent")

FullStory supports runtime consent via `start`/`shutdown` (recording on/off) or the `consent` flag on `setIdentity`. Map walkerOS consent keys to FullStory actions via `settings.consent`, and combine with `startCaptureManually: true` to delay recording until consent is granted:

```
destinations: {
  fullstory: {
    code: destinationFullStory,
    config: {
      consent: { analytics: true },
      settings: {
        orgId: 'o-XXXXXX-na1',
        startCaptureManually: true,
        consent: {
          analytics: 'capture',
        },
      },
    },
  },
}
```

* `"capture"` toggles `start`/`shutdown` (recording on/off)
* `"consent"` sets the `consent` flag on `setIdentity`
