Microsoft Dynamics Customer Insights ↔ Klaviyo

User Guide

En Pointe keeps Microsoft Dynamics 365 Customer Insights and Klaviyo in sync bi-directionally: contacts, opportunities, and consent flow to Klaviyo in real time, unified customer profiles sync on a schedule, and Klaviyo engagement events are written back into your Dataverse environment. This guide walks you through getting started and creating the integration.

Getting started checklist

Work through these items before you create the integration. The setup wizard will need everything listed here.

Creating the integration

From the En Pointe application, open Integrations and click Create Integration. The wizard walks you through connecting both systems and configuring the sync. You can move back and forth between steps until you finalize.

1

Select the integration type

Choose Customer Insights → Klaviyo (Enterprise) and click Next Step. If it isn't listed, your account hasn't been provisioned yet — see the checklist above.

2

Connect Customer Insights — environment details & admin consent

Give the endpoint a display name, then enter your Dataverse environment URL and Tenant ID. Click Grant Admin Consent — you'll be redirected to Microsoft to sign in and approve the permissions En Pointe's app registration needs. You'll be returned to the wizard automatically.

Admin required: the Microsoft sign-in must be a user who can grant tenant-wide admin consent (e.g. a Global Administrator). Admin consent must be in place before the Application User in the next step can be created.
3

Create the Application User

Back in the wizard, you'll see the Application (client) ID for En Pointe's app registration. In the Power Platform Admin Center, create an Application User in your environment using that client ID, and assign it these security roles:

  • Basic User
  • Customer Insights Data Read Access
  • Service Deleter
  • Service Writer
  • System Customizer

Then click Save & Connect. En Pointe verifies the connection and provisions your environment (this registers the webhook plumbing used for real-time sync). If provisioning fails, re-check that the Application User exists and has all five roles.

4

Connect Klaviyo

Name the Klaviyo endpoint and click Connect with Klaviyo. You'll be redirected to Klaviyo to authorize En Pointe (OAuth), then returned to the wizard automatically.

5

Map Customer Insights profiles to Klaviyo profiles

Choose which unified customer profile columns populate each Klaviyo profile field.

  • Klaviyo profile attributes — standard fields (email, name, phone, address, …). Sensible defaults are pre-filled from the Customer Insights profile (e.g. msdynci_email → Email); adjust the source column or toggle rows on/off.
  • Klaviyo profile properties — custom properties on the Klaviyo profile. A default set of Microsoft … properties (Unified Customer ID, Customer Profile ID, Dataverse Contact ID, and more) is included, and you can add your own source-column → property-name pairs.

Click Save Mapping & Continue.

6

Map consent to Klaviyo

En Pointe reads the consent structure (purposes and topics) from your Dataverse environment and lets you decide how each maps to Klaviyo:

  • Purposes → global subscription. Map each purpose to Klaviyo Marketing or Transactional consent, or leave it as No Effect. If your environment has the standard single compliance profile with Commercial and Transactional purposes, this collapses to a single checkbox that maps them to marketing and transactional consent respectively.
  • Topics → list membership. Map each consent topic to a Klaviyo list. Topic consent adds/removes profiles from the list without changing their global subscription.
Historical import: when enabled, profiles being subscribed bypass double opt-in emails and are subscribed immediately — and they skip any “Added to list” flows. Use it for the initial import of existing consent; leave it off if you want normal opt-in behavior.

Click Save Mapping & Continue.

7

Filter by segment (optional)

Select one or more Customer Insights segments to limit which profiles sync to Klaviyo. If you select none, all profiles are synced. Click Save & Continue (or Skip & Continue).

8

Schedule the profile sync

The unified-profile → Klaviyo sync is a batch job that runs at up to four daily run times in the timezone you choose (default 02:00 local).

Tip: schedule these run times to follow your Customer Insights data refresh, so each batch picks up freshly unified profiles and segment membership.
9

Choose which Klaviyo events sync back

Sync all Klaviyo events is on by default (recommended) — every Klaviyo event is written to Customer Insights. To narrow it down, expand Choose individual events and pick from the standard list (Placed Order, Opened Email, Clicked Email, …) or add custom event names.

10

Finalize

Give the integration a name and click Establish Sync. En Pointe creates everything and the integration starts running immediately:

  • The scheduled Customer Insights profiles → Klaviyo sync.
  • The Klaviyo → Customer Insights event sync, including the klaviyo_event table in your Dataverse environment.
  • Three real-time webhook syncs from Dataverse: Consent, Contacts, and Opportunities.
You're done. No separate “enable” step is needed — new integrations are created active.

What happens after setup

Three data flows run continuously once the integration is established.

Dynamics → Klaviyo, in real time

Dataverse sends En Pointe a signed webhook whenever a relevant record changes; En Pointe fetches the full record and applies it to Klaviyo:

Dataverse changeKlaviyo result
Contact createdMicrosoft Created Contact event + profile created/updated
Contact status changeMicrosoft Changed Contact Status event
Contact other editsProfile updated (no event)
Opportunity createdMicrosoft Created Opportunity event
Opportunity wonMicrosoft Won Opportunity event + purchase-history properties (lifetime value, 12-month spend/order count, last purchase date)
Consent created/updatedMicrosoft Consent Update event + list membership / channel subscription change per your consent mapping

Klaviyo → Dynamics, polled every minute

En Pointe polls the Klaviyo Events API on a ≤ 1-minute interval and writes new events into the klaviyo_event table in Dataverse. Events En Pointe itself created in Klaviyo (the Microsoft … events above) are not echoed back. Consent-related Klaviyo activity (subscribes/unsubscribes) is also reflected back into the Dataverse consent tables.

Unified profiles → Klaviyo, on your schedule

At each configured run time, En Pointe scans for unified customer profiles changed since the last run and bulk-imports them to Klaviyo using your profile mapping (and segment filter, if set). Because Customer Insights only rebuilds unified profiles and segment membership on its own refresh schedule, a brand-new contact won't have segments or a unified profile until that refresh runs.

Managing your integration