---
title: Insider One
slug: insider-one
docTags: 
createdAt: 2026-04-03T17:56:21.630Z
---

**Insider One** is a cross-channel marketing automation platform for personalizing user experiences and triggering journeys across web, mobile, and messaging channels. This destination sends events to Insider One using the **server-side Upsert API**, making it immune to ad blockers and browser restrictions.

Use this destination alongside the [Insider Pixel device-mode destination](#) for maximum coverage.

# Getting Started

This is a cloud-mode destination. You will need:

- **Account Name** — your Insider One account name. Found in **InOne Panel > Settings > Inone Settings > Account Preferences**.
- **API Key** — your Insider One API key. Found in **InOne Panel > Settings > Preferences > Integration Settings**.

# Connecting to the Insider One CDP Destination

:::BlockQuote
**Warning:** Before connecting destinations in the Chord CDP, please verify with all Destination owners that all **non-Chord CDP** configured destinations are **disabled**. Running external destinations alongside configured Chord CDP destinations **can result in duplicate events downstream.**
:::

1. Log into the Chord data platform.
2. Navigate to the CDP.
3. Click the **"Add"** button next to Destinations.
4. Select **Insider One** from the destination catalog.
5. Enter the destination name, **Account Name**, and **API Key**.
6. Optionally configure:
   - **Treat Email as Identifier** — if enabled, the user's email address is included as an Insider One identifier in addition to the user ID.
   - **Treat Phone Number as Identifier** — if enabled, the user's phone number is included as an Insider One identifier.
7. Click **"Create"** to connect.

# Events

# Event Mapping

| Chord Event Type | Insider One API            | Notes                                                            |
| ---------------- | -------------------------- | ---------------------------------------------------------------- |
| `identify`       | `POST /api/user/v1/upsert` | Updates user attributes and identifiers; no event recorded       |
| `track`          | `POST /api/user/v1/upsert` | Sends one or more events; user attributes updated simultaneously |
| `page`           | `POST /api/user/v1/upsert` | Sent as a `page_view` event                                      |

Unsupported event types (e.g. `group`, `alias`) are silently dropped.

# Ecommerce Event Name Mapping

Chord ecommerce track event names are translated to Insider One's reserved event names:

| Chord Event Name       | Insider One Event Name     |
| ---------------------- | -------------------------- |
| `Product Viewed`       | `product_detail_page_view` |
| `Product List Viewed`  | `listing_page_view`        |
| `Product Added`        | `item_added_to_cart`       |
| `Product Removed`      | `item_removed_from_cart`   |
| `Cart Viewed`          | `cart_page_view`           |
| `Order Completed`      | `confirmation_page_view`   |
| `Checkout Started`     | `checkout_page_view`       |
| `Checkout Step Viewed` | `checkout_page_view`       |
| `User Registered`      | `sign_up_confirmation`     |

All other event names are lowercased and spaces are replaced with underscores (e.g. `Button Clicked` → `button_clicked`). Note: camelCase names are not converted — `myCustomEvent` becomes `mycustomevent`, not `my_custom_event`.

# Identify Events

Identify events update user attributes in Insider One. No event entry is recorded.

| Insider One Field                         | Chord Source (Priority Order)                                   | Notes                                                                                                        |
| ----------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `identifiers.uuid`                        | `userId`                                                        | Primary user identifier                                                                                      |
| `identifiers.email`                       | `context.traits.email` > `traits.email`                         | Only included if **Treat Email as Identifier** is enabled                                                    |
| `identifiers.phone_number`                | `context.traits.phone` > `traits.phone` > `traits.phone_number` | Only included if **Treat Phone Number as Identifier** is enabled                                             |
| `identifiers.custom.segment_anonymous_id` | `anonymousId`                                                   | Always included as a custom identifier                                                                       |
| `attributes.*`                            | `traits` merged with `context.traits`                           | Reserved attribute names mapped directly; others placed in `attributes.custom` — see Attribute Mapping below |

# Track Events

Track events send one or more event entries to Insider One alongside updated user attributes.

| Insider One Field                         | Chord Source (Priority Order)                                   | Notes                                                                                                            |
| ----------------------------------------- | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `identifiers.uuid`                        | `userId`                                                        | Primary user identifier                                                                                          |
| `identifiers.email`                       | `context.traits.email` > `traits.email`                         | Only included if **Treat Email as Identifier** is enabled                                                        |
| `identifiers.phone_number`                | `context.traits.phone` > `traits.phone` > `traits.phone_number` | Only included if **Treat Phone Number as Identifier** is enabled                                                 |
| `identifiers.custom.segment_anonymous_id` | `anonymousId`                                                   | Always included as a custom identifier                                                                           |
| `attributes.*`                            | `context.traits` merged with `traits`                           | Reserved attribute names mapped directly; others placed in `attributes.custom` — see Attribute Mapping below     |
| `events[].event_name`                     | `event` (translated via ecommerce map)                          | See Ecommerce Event Name Mapping above                                                                           |
| `events[].timestamp`                      | `timestamp`                                                     | ISO 8601 format                                                                                                  |
| `events[].event_params.*`                 | `properties`                                                    | Reserved param names mapped directly; others placed in `event_params.custom` — see Event Parameter Mapping below |

If `properties.products` is a non-empty array, each product is expanded into its own event entry. Top-level properties (e.g. `currency`, `order_id`) are merged into each product's event params.

# Page Events

Page events are sent as `page_view` events.

| Insider One Field                         | Chord Source (Priority Order)                                   | Notes                                                                                                        |
| ----------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `identifiers.uuid`                        | `userId`                                                        | Primary user identifier                                                                                      |
| `identifiers.email`                       | `context.traits.email` > `traits.email`                         | Only included if **Treat Email as Identifier** is enabled                                                    |
| `identifiers.phone_number`                | `context.traits.phone` > `traits.phone` > `traits.phone_number` | Only included if **Treat Phone Number as Identifier** is enabled                                             |
| `identifiers.custom.segment_anonymous_id` | `anonymousId`                                                   | Always included as a custom identifier                                                                       |
| `attributes.*`                            | `context.traits` merged with `traits`                           | Reserved attribute names mapped directly; others placed in `attributes.custom` — see Attribute Mapping below |
| `events[].event_name`                     | *(hardcoded)* `page_view`                                       |                                                                                                              |
| `events[].timestamp`                      | `timestamp`                                                     | ISO 8601 format                                                                                              |
| `events[].event_params.url`               | `properties.url` > `context.page.url`                           |                                                                                                              |
| `events[].event_params.referrer`          | `properties.referrer` > `context.page.referrer`                 |                                                                                                              |
| `events[].event_params.*`                 | remaining `properties`                                          | Reserved params mapped directly; others in `event_params.custom`                                             |

# Attribute Mapping

Chord trait names are lowercased and spaces replaced with underscores before being matched against Insider One's reserved attribute names. Note: camelCase traits are not converted to snake\_case — send reserved attributes using Insider One's expected names to have them mapped correctly. Unrecognized traits are placed in the `attributes.custom` object.

**Special-cased trait mappings:**

| Chord Trait       | Insider One Attribute | Notes                                                    |
| ----------------- | --------------------- | -------------------------------------------------------- |
| `firstName`       | `name`                | Renamed to match Insider's reserved field                |
| `lastName`        | `surname`             | Renamed to match Insider's reserved field                |
| `address.city`    | `city`                | Nested trait flattened                                   |
| `address.country` | `country`             | Nested trait flattened                                   |
| `locale`          | `locale`              | Hyphens converted to underscores, e.g. `en-US` → `en_US` |

**Reserved attributes** (mapped directly when sent with the exact Insider field name):

| Insider One Attribute | Notes |
| --------------------- | ----- |
| `email`               |       |
| `phone_number`        |       |
| `age`                 |       |
| `birthday`            |       |
| `name`                |       |
| `gender`              |       |
| `surname`             |       |
| `city`                |       |
| `country`             |       |
| `app_version`         |       |
| `idfa`                |       |
| `model`               |       |
| `last_ip`             |       |
| `carrier`             |       |
| `os_version`          |       |
| `platform`            |       |
| `timezone`            |       |
| `locale`              |       |
| `gdpr_optin`          |       |
| `email_optin`         |       |
| `sms_optin`           |       |
| `whatsapp_optin`      |       |
| `language`            |       |

Any trait not in the special-cased list or reserved attributes list is placed in `attributes.custom`.

# Event Parameter Mapping

Chord property names are lowercased and spaces replaced with underscores. Note: camelCase property names are not converted to snake\_case. Known property aliases are remapped to Insider One's reserved event parameter names:

**Aliased property mappings:**

| Chord Property          | Insider One Event Param | Notes                                                                                                       |
| ----------------------- | ----------------------- | ----------------------------------------------------------------------------------------------------------- |
| `order_id` or `cart_id` | `event_group_id`        |                                                                                                             |
| `category`              | `taxonomy`              | Wrapped in array if not already                                                                             |
| `image_url`             | `product_image_url`     |                                                                                                             |
| `price`                 | `unit_sale_price`       | Fallback only — applied when `unit_sale_price` is not explicitly set on the product or top-level properties |

:::BlockQuote
**Note:** Insider One requires `unit_sale_price` on ecommerce events such as `confirmation_page_view` (mapped from `Order Completed`). Because Chord Pixel sends the Segment-standard `price` on products, this destination automatically aliases `price` → `unit_sale_price` when no explicit `unit_sale_price` is provided. If you send both, the explicit `unit_sale_price` wins and `price` is placed in `event_params.custom.price`.
:::

**Reserved event parameters** (mapped directly when sent with the exact Insider field name):

| Insider One Event Param |
| ----------------------- |
| `campaign_id`           |
| `campaign_name`         |
| `url`                   |
| `product_id`            |
| `user_agent`            |
| `taxonomy`              |
| `name`                  |
| `variant_id`            |
| `unit_sale_price`       |
| `unit_price`            |
| `quantity`              |
| `product_image_url`     |
| `event_group_id`        |
| `referrer`              |
| `currency`              |

Any property not in the aliased or reserved lists is placed in `event_params.custom`.

# Testing and Validation

After connecting the destination:

1. Trigger a test event from your storefront or use the **Live Events** tab in the Chord CDP.
2. In Insider One, navigate to **InOne Panel > Audience** and verify the user profile was created or updated.
3. Check event history under the user profile to confirm events were received.
4. Review the **Live Events** diagnostics in the Chord CDP for any API errors or credential issues.

# Use Cases

- **Personalize onsite experiences** using purchase history and loyalty tier attributes synced from Chord.
- **Trigger re-engagement journeys** when Chord sends a track event like `Subscription Cancelled` or `Cart Abandoned`.
- **Build high-value segments** in Insider using enriched customer attributes from Chord (e.g., LTV tier, acquisition channel).
- **Suppress messaging** by syncing opted-out users from Chord to keep Insider audiences up to date.
- **Activate post-purchase flows** by sending `Order Completed` events with product and revenue details.

# Best Practices

- **Always include an identifier.** Insider needs at least one identifier (email, phone, or UUID) to match or create a profile. Events without identifiers will be dropped.
- **Use consistent user IDs.** Ensure the `userId` sent from Chord matches the UUID Insider already has on file for existing profiles.
- **Format phone numbers correctly.** Include the country code (e.g., `+14155550123`). Incorrectly formatted numbers will not match existing profiles.
- **Filter events deliberately.** Sending all track events is rarely necessary. Start with high-signal events (e.g., `Order Completed`, `Product Viewed`) and expand from there.
- **Monitor delivery logs after launch.** Check for 4xx errors in the first few days — these typically indicate a mapping or credential issue.

# Troubleshooting

# Data not sending

**Problem:** Events are not appearing in Insider One after the destination is enabled.

- Confirm the destination is enabled in Chord.
- Verify your **API Key** and **Account Name** are correct — a single character error will cause all requests to fail.
- Check the **Live Events** diagnostics in the Chord CDP for error responses (look for 401 or 403 status codes).
- Confirm that the event types you want to send (identify, track, page) are being emitted by your storefront.

# Missing attributes

**Problem:** User profiles appear in Insider One but expected attributes (e.g., custom traits) are missing.

- Custom traits not in Insider's reserved attribute list are nested under `attributes.custom`. Verify the attribute name in Insider includes the `custom.` prefix.
- Check whether the attribute exists in Insider's schema. New custom attributes may need to be created in Insider before data can be written to them.
- Confirm the trait is present on the identify event being sent from Chord by inspecting the **Live Events** payload.

# Duplicate users

**Problem:** Insider One is creating multiple profiles for the same customer.

- Confirm that identify events consistently include the same identifier (email or UUID). Inconsistent identifiers cause Insider to create separate profiles.
- If your store captures both anonymous and logged-in sessions, ensure an identify call is sent when a user logs in so Insider can merge the profiles.
- Check that phone numbers are formatted consistently — a mismatch (e.g., with and without country code) can prevent profile matching.

***

**Updated 15 Apr 2026**
