# Segment

[Segment](https://segment.com/) is by far the most dynamic integration option, which allows you to pick and choose other third - party providers to send data to within Segment.&#x20;

## How Formsort uses `identify()` <a href="#how-formsort-uses-identify" id="how-formsort-uses-identify"></a>

When the form flow loads, and a Segment integration is enabled, we will call segment's [identify](https://segment.com/docs/connections/spec/identify/) method, using the [responder UUID](https://docs.formsort.com/core-concepts/how-data-works-in-formsort/responder-uuids) as the identification. The remaining events, using `track()` will also include the responder UUID.

If you are manually providing the responder's UUID, that will be used instead.

Alternatively, if you'd rather have ***identify*** called with the anonymous ID assigned by Segment, you can check Identify with anonymous ID. You will still have the responder UUID within the payload of the event if you need it to do some downstream correlations.

If you'd rather use the user's email as an identifying ID, you can set that option using ***Use email instead of uuid to identify users**.*&#x20;

{% hint style="info" %}
***Use email instead of uuid to identify users*** is not recommended by Segment since it is easy to have email collisions.
{% endhint %}

## Example `track()` payloads. <a href="#example-track-payloads" id="example-track-payloads"></a>

All events sent will include the flow label, [responder UUID](https://docs.formsort.com/core-concepts/how-data-works-in-formsort/responder-uuids), variant label, and variant UUID.

```javascript
analytics.track('FlowLoaded', {
  answers: {},
  flowLabel: 'segment-test',
  responderUuid: '7f2ee814-6eb2-4607-a0f0-1ccb382dc0ba',
  variantLabel: 'main',
  variantUuid: '18d59d22-b4b4-4b62-a0f6-0e22861280f9'
});
```

In the preview window, events are normally not sent to third parties, but are instead logged. When you have Segment connected, you can also verify on the Segment side.

For step-aware flow events, such as `StepLoaded` or `StepCompleted`, the step index and step ID will also be sent. Step ID falls back to step index if an ID is not explicitly defined - we recommend setting Step IDs to facilitate analysis, as the index of steps may change over time.

```javascript
analytics.track('StepLoaded', {
  answers: {},
  flowLabel: 'segment-test',
  responderUuid: '7f2ee814-6eb2-4607-a0f0-1ccb382dc0ba',
  stepId: 0,
  stepIndex: 0,
  variantLabel: 'main',
  variantUuid: '18d59d22-b4b4-4b62-a0f6-0e22861280f9'
});
```

## Sending form answers data to Segment <a href="#sending-form-answers-data-to-segment" id="sending-form-answers-data-to-segment"></a>

By default, no answers are send to Segment.

If the answer state looks like:

```javascript
{
  "email": "test@example.com",
  "favorite_cat": "Olivia",
}
```

answers will just be an empty object.

```javascript
analytics.track('StepLoaded', {
  answers: {},
}
```

If you check ***Send answers***, then all non-PII answers will be sent along with each event's metadata:

```javascript
analytics.track('StepLoaded', {
  answers: {
    "favorite_cat": "Olivia",
  },
}
```

If ***Send PII*** is checked, [PII answers](https://docs.formsort.com/getting-data-out/event-payload-shape#send-pii), such as the responder's email (when it is given that semantic label), will be sent along with the answers:

```javascript
analytics.track('StepLoaded', {
  answers: {
    "email": "test@example.com",
    "favorite_cat": "Olivia",
  },
}
```

If ***Stringify answers object in payload*** is checked, the answers will be sent as a JSON string rather than a JSON object:

```javascript
analytics.track('StepLoaded', {
  answers: '{"email": "test@example.com"}',
  // ...
});
```

If ***Only send answers from current step*** is checked, only the answers from the current step will be sent.

### Hide IP

* If *Hide IP* is checked, the IP that Segment normally sends along in the `context` will be replaced with `0.0.0.0`,  per the
* If *Hide page context* is checked,  the values of `path`, `referrer`, `url`and `search` will be replaced in the `page` set in the `context` sent by segment.

{% hint style="info" %}
Need more guidance? Follow[ our guide ](https://docs.formsort.com/integrations/integration-reference/segment/segment-setup)to set up Segment.
{% endhint %}
