# Stormly Destination

## Destination Info

* Accepts [Page](/docs/segment/connections/spec/page), [Alias](/docs/segment/connections/spec/alias), [Group](/docs/segment/connections/spec/group), [Identify](/docs/segment/connections/spec/identify), [Track](/docs/segment/connections/spec/track) calls.
* Refer to it as **Stormly** in the [Integrations object.](/docs/segment/guides/filtering-data/#filtering-with-the-integrations-object)
* This integration is **partner owned.** Please reach out to the partner's support for any issues.

With [Stormly](https://www.stormly.com/?utm_source=segmentio\&utm_medium=docs\&utm_campaign=partners), you can access the insights which interest you the most. The Stormly interface guides you through several questions to help define personalization options, then provides insights into behavioral patterns, forecasts, and other information you want to know about your users.

This destination is maintained by Stormly. For any issues with the destination, [contact their support team](mailto:support@stormly.com).

## Getting Started

1. From the Destinations catalog page in the Segment App, click **Add Destination**.
2. Search for "Stormly" in the Destinations Catalog, and select the Stormly destination.
3. Choose which Source should send data to the Stormly destination.
4. Go to the [Stormly projects](https://www.stormly.com/projects) page, click **Set-Up Data** and under "Use tracking code from:" choose **Segment.com**. Copy the API key that appears.
5. Enter the API Key you copied from the Stormly projects page in the Stormly destination settings in the Segment app.

> \[!NOTE]
>
> Tracked data is usually available in Stormly within seconds. However, brand new projects are only "active" once they have tracked at least 50 unique users.

### Arrays

Stormly *does not* support arrays in traits or properties. In the example below the `products` property is ignored:

```js
analytics.track('View Webshop Items', {
  cartId: "cart-12345",
  products: [
    {
      productId: "1",
      price: 99.0
    },
    {
      productId: "1",
      price: 99.0
    }
  ]
});
```

Stormly supports nested properties and traits, except for nested arrays.

## Page

If you aren't familiar with the Segment Spec, take a look at the [Page method documentation](/docs/segment/connections/spec/page/) to learn about what it does. An example call would look like:

```js
analytics.page()
```

Segment sends Page calls to Stormly as a `pageview`.

## Screen

If you aren't familiar with the Segment Spec, take a look at the [Screen method documentation](/docs/segment/connections/spec/screen/) to learn about what it does. An example call would look like:

```objc
[[SEGAnalytics sharedAnalytics] screen:@"Home"];
```

Segment sends Screen calls to Stormly as a `screen`.

## Identify

If you aren't familiar with the Segment Spec, take a look at the [Identify method documentation](/docs/segment/connections/spec/identify/) to learn about what it does. An example call would look like:

```js
analytics.identify('userId123', {
  email: 'john.doe@example.com'
});
```

Segment sends Identify calls to Stormly as an `identify` event.

## Track

If you aren't familiar with the Segment Spec, take a look at the [Track method documentation](/docs/segment/connections/spec/track/) to learn about what it does. An example call would look like:

```js
analytics.track('Login Button Clicked')
```

Segment sends Track calls to Stormly as an `event`.

## Engage

You can send computed traits and audiences generated using [Engage](/docs/segment/engage) to this destination as a **user property**. To learn more about Engage, schedule a [demo](https://segment.com/contact/demo).

For user-property destinations, an [identify](/docs/segment/connections/spec/identify/) call is sent to the destination for each user being added and removed. The property name is the snake\_cased version of the audience name, with a true/false value to indicate membership. For example, when a user first completes an order in the last 30 days, Engage sends an Identify call with the property `order_completed_last_30days: true`. When the user no longer satisfies this condition (for example, it's been more than 30 days since their last order), Engage sets that value to `false`.

When you first create an audience, Engage sends an Identify call for every user in that audience. Later audience syncs only send updates for users whose membership has changed since the last sync.

> \[!NOTE]
>
> Real-time audience syncs to Stormly  may take six or more hours for the initial sync to complete. Upon completion, a sync frequency of two to three hours is expected.

## Settings

Segment lets you change these destination settings from the Segment app without having to touch any code.

| Field                     | Description                                                                                                                                                                                                                     | Required | Type    |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- |
| API Key                   | Visit the Projects page, click "Set-Up Data" and use the tracking code for "Segment.com"                                                                                                                                        | Yes      | string  |
| Track named pages         | This will track events to Stormly that use Segment's named "page" function such as: "analytics.page('Homepage')" or "analytics.page('Docs', 'Developer API')". Enabled by default.                                              | No       | boolean |
| Track pages automatically | This will track all pages to Stormly that use Segment's automatic "page" tracking function like this: "analytics.page()". We recommend to keep this disabled, because Stormly isn't really meant for general pageview tracking. | No       | boolean |
