Send Microsoft Dynamics CRM Data to Insider One

Prev Next

You cannot make any changes to External Platform Integrations without having either an Administrator or an Editor with PII access in InOne. Refer to User Roles for further information.

This guide explains how to set up the Microsoft Dynamics CRM integration in InOne. Once configured, InOne regularly pulls records from your Dynamics 365 environment and syncs them as user profiles, attributes, and behavioral events in Insider One.

The integration supports two use cases and two authentication methods, resulting in four configuration options. The table below helps you choose the right setup.

Use Case

OAuth Authorization Code

OAuth Client Credentials

Sync Dynamic Lists:
Imports contacts from a Dynamics Marketing List into Insider One user profiles.

Syncs Marketing List members using user-based authentication.

Syncs Marketing List members using server-to-server authentication.

Sync User and Lead Profiles:
Imports CRM entities such as contacts, leads, and custom records using configurable field mappings and incremental sync options.

Syncs any CRM entity using user-based authentication.

Syncs any CRM entity using server-to-server authentication.

Requirements

Before you start the setup, make sure you have the following information ready. This will help you complete the configuration without interruptions.

Information

Notes

Dynamics 365 Web API URL

Format: https://yourorg.crm4.dynamics.com/
Navigate to Dynamics Admin Center > Settings > Customization > Developer Resources.

Azure AD App Client ID

Navigate to Azure Portal > App Registrations > your app > Overview.

Azure AD App Client Secret

Navigate to Azure Portal > App Registrations > your app > Certificates and Secrets.

Token URL (Client Credentials only)

The OAuth 2.0 token endpoint for your Azure AD tenant.
Format: https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token

Scopes (Client Credentials only)

Typically: https://yourorg.crm4.dynamics.com/.default

Marketing List name (Dynamic Lists only)

The Dynamics Marketing List you want to sync.

You also need admin or appropriate permissions to access the InOne panel, and a Microsoft Dynamics 365 instance with an active Web API endpoint.

Step 1: Create a new integration

  1. Navigate to InOne > Components > Integrations > External Integrations.

  2. Search for "dynamic" and click the Microsoft Dynamics CRM tile.

  3. A setup panel opens on the right. Fill in the following fields:

Field

Description

Integration Method

Sync Dynamic Lists: Syncs contacts from a Dynamics Marketing List into Insider One user profiles. Sync User and Lead Profiles: syncs any CRM entity using configurable field mappings and incremental fetch modes.

Authentication Method

OAuth Authorization Code: Opens a browser login prompt to authorize access. Requires user interaction once during setup. OAuth Client Credentials: Uses server-to-server authentication with no browser pop-up.

Click Save to proceed.

Step 2: Connect your Dynamics Account

Fill in the connection form based on the Authentication Method you selected in Step 1. Both methods use an Azure AD App Registration.

OAuth Authorization Code

Field

Description

Web API URL

Base URL of your Dynamics 365 Web API. Format: https://yourorg.crm4.dynamics.com/

Scopes

Replace the URL with your base domain: https://<REPLACE_WITH_YOUR_CRM_URL>/user_impersonation offline_access

Click Connect. A browser pop-up opens asking you to sign in with your Microsoft account. After completing the login, close the pop-up tab. The status indicator in the top-right corner of the panel turns green to confirm the connection succeeded.

The user authenticating must have access to consent to the following permissions in Microsoft Entra:

Delegated Dynamic CRM

  • user_impersonation

  • offline_access

OAuth Client Credentials

Field

Description

Web API URL

Base URL of your Dynamics 365 Web API. Format: https://yourorg.crm4.dynamics.com/

Token URL

The OAuth 2.0 token endpoint for your Azure AD tenant. Format: https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/token

Scopes

The permission scopes required to access Dynamics. Typically: https://yourorg.crm4.dynamics.com/.default

Client ID

The Application (Client) ID from your Azure AD App Registration.

Client Secret

The client secret generated under Certificates and Secrets.

Click Connect. No browser pop-up appears; the connection is established server-to-server. The status indicator turns green to confirm success.

Click Next to proceed.

Step 3: Select your data source

This step differs based on the Integration Method chosen in Step 1.

Dynamic Lists

Select the Marketing List from the Selected Dynamic List dropdown. InOne will fetch all contacts that are members of this list on each sync run.

If your list does not appear in the dropdown, confirm the Azure app has read permissions for Marketing Lists in Dynamics.

You can only sync one list per integration instance. To sync multiple lists, create separate integrations.

Sync User and Lead Profiles

Field

Description

Selected Entity

Choose which Dynamics entity to sync (e.g., contact, lead, or a custom entity). The dropdown is populated dynamically from your Dynamics environment.

Fetch Mode

Controls which records are retrieved on each run:

  • New and Updated Since Last Sync (default): fetches records created or modified since the last successful run.

  • Only New Since Last Sync: fetches only newly created records.

  • Only Updated Since Last Sync (Exclude New): fetches only modified records, skipping new ones.

  • Always Fetch All Records: fetches every record on every run; use with caution on large datasets.      

Days To Get

Lookback window in days. Applies only to "Always Fetch All Records" mode. When greater than 0, only records modified within the last N days are fetched. Leave at 0 to fetch all records regardless of modification date.

Click Next when done.

Step 4: Select fields to sync

Choose which Dynamics fields to retrieve. Only fields added here will be available in subsequent mapping steps.

  1. Click Add value to open the field selector dropdown.

  2. Select the Dynamics fields you need. Add as many as required.

  3. Click the trash icon to remove a field; click the reset icon to restore defaults.

Always include at least one identifier field such as emailaddress1 or telephone1. Without an identifier, Insider One cannot match incoming records to existing user profiles.

Common fields to include:

Field

Description

emailaddress1

Primary email address. Required for email-based identification.

telephone1

Business phone number.

firstname / lastname

Contact name fields.

contactid

Unique GUID for the contact. Use as a UUID identifier.

Click Next when done.

Step 5: Apply Record Filters (Optional)

Filter which records are fetched using FetchXML, Microsoft's XML-based query language for Dynamics 365. Leave the field as _none_ to sync all records without filtering.

Record Filters: A FetchXML filter snippet. Set to _none_ to disable filtering and sync all records.

Accepted Formats

  • Full filter block: <filter type='and'>...</filter>

  • Single condition: <condition attribute='statecode' operator='eq' value='0' />

Common Operators

Operator

Description

eq / ne

Equal / Not equal

gt / ge / lt / le

Greater than / Greater or equal / Less than / Less or equal

like / not-like

Pattern matching (use % as wildcard)

in / not-in

Value is in / not in a list

null / not-null

Field is empty / not empty

on-or-before / on-or-after

Date comparisons

Value Formatting Rules

  • Strings must be enclosed in single quotes.

  • Numbers should not have quotes.

  • Boolean values: use 0 for false, 1 for true (or false/true where valid).

  • Date values must be in UTC format: 2026-01-01T00:00:00Z.

  • Escape XML special characters in values: &&amp; | <&lt; | >&gt; | '&apos; | "&quot;

Examples

Sync only contacts with a non-null email:

<condition attribute='emailaddress1' operator='not-null' />

Sync only active contacts (statecode = 0):

<filter type='and'>
  <condition attribute='statecode' operator='eq' value='0' />
</filter>

Contacts modified since 2026-01-01 who also have an email:

<filter type='and'>
  <condition attribute='modifiedon' operator='on-or-after' value='2026-01-01T00:00:00Z' />
  <condition attribute='emailaddress1' operator='not-null' />
</filter>

Validate your FetchXML in the Dynamics Advanced Find tool before pasting it here. Escape XML special characters in values: &&amp;, <&lt;, >&gt;, '&apos;.

Once you have entered your filter (or left it as _none_), click Next.

Step 6: Configure Identifier Mappings

Identifiers tell Insider One how to match incoming Dynamics records to existing user profiles. At least one is required.

How identifiers work: When a record arrives from Dynamics, Insider One looks up existing user profiles using the mapped identifier values. If a match is found, the profile is updated. If no match is found, a new profile is created.

Field

Description

Identifier Type

The Insider One identifier type to map to. Options include Email Address, Phone Number, UUID, and any custom identifiers configured for your account.

Source Field

The Dynamics field whose value will be used for this identifier. Must be one of the fields selected in Step 4.

Common mappings: Email Address → emailaddress1, Phone Number → telephone1, UUID → contactid.

You can add multiple identifier types. Insider One will attempt to match on all of them, improving deduplication across data sources.

Make sure to select your identifier field in Step 4 in order it to be shown here, otherwise, problems might occur when syncing your identifier and data.

Click + Add to Identifier Mappings to add rows. Click Next when done.


Step 7: Configure Field Mappings (User Attributes)

Map Dynamics fields to Insider One user profile attributes.

Field Mappings

Each row maps a Dynamics source field to an Insider One attribute.

Field

Description

Attribute Key

The Insider One user attribute to populate (e.g., Email Opt-In, Gender, First Name, Last Name). Choose from the dropdown showing all standard and custom attributes for your account.

Source Field

The Dynamics field providing the value. Must be a field selected in Step 4.

Convert code to label

When enabled, numeric option set codes from Dynamics are converted to their human-readable label. For example, a gender field that stores 1 or 2 in Dynamics will be converted to "Male" or "Female".

Invert boolean

When enabled, the boolean value is flipped before sending to Insider One. Useful for mapping opt-out fields from Dynamics (e.g., DoNotEmail = true) to opt-in fields in Insider One (e.g., Email Opt-In = false).

Example Mappings

Field

Description

Email Opt-In ← emailaddress1

With Invert boolean enabled: maps the opt-out field from Dynamics and inverts it to get the opt-in value for Insider One.

Gender ← emailaddress1

With Convert code to label enabled: the raw option set code from Dynamics is converted to its label (e.g., 1 becomes "Male").

Fixed Value Mappings

Set a constant value for an Insider One attribute on every synced record, regardless of what Dynamics contains. Useful for tagging records by data source.

Field

Description

Attribute Key

The Insider One attribute to set.

Custom Value

The static value written for every synced record. For example, setting store_name to "Microsoft_Dynamics" makes it easy to filter these contacts in Insider One Segments later.

Click Next when done.

Step 8: Configure Event Mappings (Optional)

Send a behavioral event to Insider One for each synced record. Useful when the Dynamics entity represents a transaction or activity such as a purchase or form submission.

This step is optional. To skip it, leave the Map events checkbox unchecked.

Option A: Fixed Event Name

Use this when every record should trigger the same event type.

Field

Description

Event name source

Set to "Fixed value".

Event name

The Insider One event type to fire for every record (e.g., Purchase, Page View). Choose from standard or custom events in your account.

Timestamp source

"Processing time" uses the sync execution time as the event timestamp. Alternatively, select a Dynamics field to use its value as the timestamp, which is useful for historical imports.

Option B: Dynamic Event Name

Use this when the event type varies per record and is stored in a Dynamics field.

Field

Description

Event name source

Set to "From source data".

Event name field

The Dynamics field containing the event type value (e.g., EventType).

Event Name Mappings

A translation table mapping raw Dynamics values to Insider One event types. For example, if EventType = "1" in Dynamics, map it to the "Purchase" event in Insider One.

Timestamp source

"Processing time" uses the sync execution time as the event timestamp. Alternatively, select a Dynamics field to use its value as the timestamp, which is useful for historical imports.

Event Field Mappings

Define what data is sent with each event, using the same pattern as Step 7.

Field

Description

Parameter

The Insider One event parameter to populate (e.g., Purchase, Product ID).

Source Field

The Dynamics field providing the value.

Fixed Value Mappings are also available here for static event parameters that apply to every event, regardless of the source data.

Click Finish when done.

Step 9: Schedule and Advanced Settings

Schedule

Set how often the sync runs using the cron field or the visual schedule picker. All times are in UTC. The default is 0 * * * * (every hour).

Expression

Meaning

0 * * * *

Every hour

0 0 * * *

Once daily at midnight UTC

0 6 * * *

Once daily at 06:00 UTC (09:00 Turkey time)

*/20 * * * *

Every 20 minutes

0 0 * * MON,WED

Every Monday and Wednesday at midnight UTC

Phone Settings

Field

Description

Convert phone to international format

Strips non-digit characters and adds a "+" prefix to normalize phone numbers to E.164 format. Enable this if phone values in Dynamics are not already formatted correctly.

Add country code

Prepends the country dial code if not already present. Use this if Dynamics phone numbers are stored without a country code.

Invalid Identifier Strategy

Controls what happens when an identifier value fails validation (e.g., a malformed email or phone number without a country code).

  • Skip identifier (default): the invalid identifier is dropped; the record is still upserted using any other valid identifiers.

  • Skip user: the entire record is dropped if any identifier is invalid.

Advanced Settings

These are pre-configured with sensible defaults and rarely need changing.

Dynamics Settings

Field

Default

Max

Description

Page Size

500

5000

Records fetched per API request. Lower this if you encounter timeout errors on large datasets.

Request Timeout

60,000 ms

300,000 ms

Maximum wait time for a single Dynamics API response. Increase if your Dynamics instance is slow or handles very large pages.

Request Retries

3

10

Automatic retry count for failed API requests. Uses exponential backoff between attempts.

Insider One Settings

Field

Default

Description

Skip Hook

OFF

When ON, Architect journey triggers are suppressed for all records synced in this run. Recommended for large historical backfills to prevent unintended journey enrollments.

Fast Fail on Upsert Error

OFF

When ON, the sync stops immediately on the first failed upsert batch. Leave OFF unless you need strict all-or-nothing behavior.

Unknown Code Behavior

Use Raw Code

Applies to fields with "Convert code to label" enabled. "Use Raw Code" sends the numeric code as-is when no label mapping exists. "Skip attribute" omits the attribute for that record instead.

Click Finish to save and activate the integration.

After setup: What happens next?

Once you click Finish, the integration is saved and runs automatically on the configured schedule.

  • First sync: Runs at the next scheduled time. You can also trigger it manually from the Integrated Platforms tab.

  • Profile creation: Records from Dynamics appear as user profiles in Insider One, enriched with the attributes you mapped.

  • Ongoing syncs: Each run upserts records. New contacts create profiles; existing ones are updated.

  • Event tracking: If event mapping is configured, one behavioral event per record is sent on each sync run.

To edit or pause the integration, navigate to External Integrations > Integrated Platforms, find the integration, and select it to open its settings. Use the toggle to pause without deleting.

Troubleshooting

Symptom

What to check

Yellow connection indicator

Credentials entered but not verified. Click Connect again and confirm Client ID, Client Secret, and Web API URL are all correct.

No lists in the dropdown

The Azure app may not have permission to read Marketing Lists. Verify the app has the Dynamics CRM User role or appropriate API permissions in Azure AD.

No entities in the dropdown

Same as above; confirm the app has read access to the entity type you need.

Records not appearing in Insider One

Confirm that at least one Identifier Mapping is configured. Verify the source field (e.g., emailaddress1) contains valid, non-null values. Review execution logs on the Integrated Platforms tab for upsert errors.

FetchXML filter errors

Validate your FetchXML in the Dynamics Advanced Find tool before pasting it here. Confirm XML special characters are properly escaped.

Sync runs but no events sent

Confirm the "Map events" checkbox is checked, and at least one Event Name Mapping row is configured.

Sync User and Lead Profiles not picking up new records

Check the Fetch Mode setting. "Only Updated" skips newly created records. Switch to "New and Updated Since Last Sync" if you need both.

Frequently Asked Questions

Q: Does the Dynamic Lists sync pull all contacts every time, or only changes?
A: It pulls all current members of the Marketing List on every run. There is no built-in incremental tracking for Dynamic Lists. To reduce unnecessary load on large lists, use the Record Filters step to add a modifiedon FetchXML condition so only recently changed records are fetched.

Since the Insider One upsert API is idempotent, re-sending unchanged data updates the profile without creating duplicates, but it does still count toward your API usage.

Running a Dynamic Lists sync on a very frequent schedule against a large list will generate significant Dynamics API calls on every execution. Use the Schedule and Record Filters settings to keep the load within acceptable limits.

Q: Can I sync multiple Marketing Lists at the same time?
A: Yes, but each list requires its own integration instance. Create one integration per list, give each a descriptive name (for example, "Dynamics Active Contacts" and "Dynamics VIP Segment"), and configure them independently.

Q: What happens if a contact record has no value in the identifier field?
A: The behavior depends on the Invalid Identifier Strategy setting in Step 9. With the default "Skip identifier" option, the record is still upserted using any other valid identifier mappings. If no identifier has a valid value, the record is skipped entirely, and Insider One cannot create or update a profile for it.

Always include the identifier fields (such as emailaddress1) in the Field Selection step so they are available for mapping. A field that was not selected in Step 4 cannot be used as an identifier in Step 6.

Q: What is the difference between OAuth Authorization Code and OAuth Client Credentials?
A: OAuth Authorization Code requires a real user to log in through a browser pop-up during setup. The connection is authorized on behalf of that user, and their Dynamics permissions apply. OAuth Client Credentials is server-to-server with no browser popup, and authenticates using only the Client ID and Secret. It is better suited for automated or unattended setups where no human login is practical. If the user who authorized an Authorization Code connection leaves the organization or loses access, the connection will stop working and needs to be reauthorized.

For production integrations, OAuth Client Credentials is generally preferred because it does not depend on an individual user account remaining active.

Q: Will syncing contacts trigger Architect journeys?
A: By default, yes. If a synced contact matches an Architect journey entry condition, the journey will be triggered. To suppress this, enable the Skip Hook toggle in the Advanced Settings section of Step 9. This is especially important for large historical backfills where you do not want thousands of contacts to enter journeys at once.

Q: Can I run both Dynamic Lists and Sync User and Lead Profiles integrations at the same time?
A: Yes. These are independent integrations and can run simultaneously. If both integrations may sync the same contact, make sure their identifier mappings are consistent so Insider One merges the data into the same profile rather than creating duplicates.

Q: How can I verify that a sync run completed successfully?
A: Go to External Integrations > Integrated Platforms, find your integration, and open the Executions tab. Each run is listed with its start time, status, number of records read, records successfully upserted, and any failures. Failed records include error details you can use for troubleshooting.

Q: Does re-syncing the same data create duplicate profiles or events in Insider One?
A: For user profiles and attributes, no. The Insider One upsert API is idempotent, so re-sending the same user just updates the existing profile. For behavioral events, yes. Events are not deduplicated by default, so if the same record is synced again with event mapping enabled, a second event will be sent. Avoid re-syncing event data unless you intentionally want to record those events again.

Be careful when re-running a Sync User and Lead Profiles integration with event mapping enabled. Each execution sends one event per record, so repeated runs against the same dataset will generate duplicate events in Insider One.