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.
Work through these items before you create the integration. The setup wizard will need everything listed here.
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.
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.
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.
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:
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.
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.
Choose which unified customer profile columns populate each Klaviyo profile field.
msdynci_email → Email); adjust the source column or toggle rows on/off.Click Save Mapping & Continue.
En Pointe reads the consent structure (purposes and topics) from your Dataverse environment and lets you decide how each maps to Klaviyo:
Click Save Mapping & Continue.
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).
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).
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.
Give the integration a name and click Establish Sync. En Pointe creates everything and the integration starts running immediately:
klaviyo_event table in your Dataverse environment.Three data flows run continuously once the integration is established.
Dataverse sends En Pointe a signed webhook whenever a relevant record changes; En Pointe fetches the full record and applies it to Klaviyo:
| Dataverse change | Klaviyo result |
|---|---|
| Contact created | Microsoft Created Contact event + profile created/updated |
| Contact status change | Microsoft Changed Contact Status event |
| Contact other edits | Profile updated (no event) |
| Opportunity created | Microsoft Created Opportunity event |
| Opportunity won | Microsoft Won Opportunity event + purchase-history properties (lifetime value, 12-month spend/order count, last purchase date) |
| Consent created/updated | Microsoft Consent Update event + list membership / channel subscription change per your consent mapping |
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.
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.