CRM migration

Migrate from Iterable to Microsoft Dynamics 365 Sales

Field-level mapping, validation, and rollback between Iterable and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .

Iterable logo

Iterable

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

70%

7 of 10

objects map 1:1 between Iterable and Microsoft Dynamics 365 Sales .

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from Iterable to Microsoft Microsoft Dynamics 365 Sales is a cross-category migration from marketing automation into sales CRM, not a platform-to-platform record copy. Iterable organizes data around User Profiles, Campaigns, Journeys, Lists, and Custom Events; Microsoft Dynamics 365 Sales organizes data around Leads, Contacts, Accounts, and Opportunities. There is no native Journey or Journey-builder equivalent in Dynamics Sales, so we preserve Journey metadata in a written handoff document for the customer's admin to rebuild using Sales Sequences, Sales Playbooks, or Power Automate. User Profiles split into Salesforce-style Lead and Contact records based on the customer's Lifecycle Stage values. Custom Events migrate as typed Activity records. Campaign metadata migrates as Dynamics Campaign records. We do not migrate Journeys, Templates, or Catalog items as code; we deliver a structured inventory of these objects with rebuild recommendations for each.

Field-level fidelity

Every standard and custom field arrives verified.

Schema-aware mapping

AI proposes the map; you confirm before any record moves.

Relationships preserved

Parent–child, lookups, and ownership stay linked.

Full activity history

Calls, emails, meetings — with original timestamps.

Attachments & notes

Documents, uploads, and inline notes move with the record.

Why teams make this switch

Two sides of the same decision

Leaving

Iterable logo

Iterable

What's pushing teams away

  • Steep learning curve with unclear documentation forces teams to rely heavily on support for tasks that should be self-service.
  • SMS deliverability issues with accounts blocked without clear accountability or transparent root-cause communication from Iterable.
  • Contract pricing increases when usage is reduced, creating a billing model that punishes customers who downscale usage.
  • Cluttered UI requiring multiple clicks through nested menus to access common functions, slowing down campaign creation and editing.
  • Inconsistent conversion tracking and reporting makes it difficult to reliably measure campaign performance and optimize spend.

Choosing

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

What's pulling them in

  • Deep Microsoft 365, Teams, and Outlook integration makes Microsoft Dynamics 365 Sales a natural fit for Microsoft-first organizations already invested in that ecosystem
  • Sales Enterprise and Premium tiers offer unlimited custom tables and advanced AI-driven forecasting and predictive analytics not available in lower tiers
  • Professional tier pricing at $65 per user per month offers a lower entry cost than Salesforce for SMB teams with straightforward CRM needs
  • Flexible customization options allow businesses to build bespoke apps, tailor forms and views, and integrate with other Dynamics 365 modules
  • Microsoft Copilot AI tools are embedded directly into the sales workflow on Enterprise and Premium, automating routine tasks and providing deal intelligence

Object mapping

How Iterable objects map to Microsoft Dynamics 365 Sales

Each row shows how a Iterable object lands in Microsoft Dynamics 365 Sales , including any object-level transformations, lookup resolution, or schema-design dependencies.

Typical mapping — final map is confirmed during the sample migration step.

Iterable

User Profile

maps to

Microsoft Dynamics 365 Sales

Lead and Contact (split required)

1:many
Fully supported

Iterable User Profiles have no single Dynamics CRM equivalent. We split at migration time using the Iterable Lifecycle Stage property: profiles with Stage = subscriber, lead, or MQL map to Salesforce Lead; profiles with Stage = SQL, customer, or evangelist map to Salesforce Contact attached to an Account. The original Lifecycle Stage value preserves in a custom field hs_original_lifecycle__c on both Lead and Contact. Email address is the dedupe key. Phone, address, and any custom profile fields typed accordingly on the destination object.

Iterable

Company (List membership)

maps to

Microsoft Dynamics 365 Sales

Account

1:1
Fully supported

Iterable does not have a native Company object but List membership associates profiles with named organizations. We extract these organization names from List membership records and create Account records in Dynamics. Domain extraction from profile email addresses supplements the Account name when organization attribution is ambiguous. Accounts are inserted before any Contact or Lead import so that the AccountId lookup resolves at record creation.

Iterable

List

maps to

Microsoft Dynamics 365 Sales

Marketing List (Campaign)

1:1
Fully supported

Iterable Lists are collections of user profiles used for audience segmentation. We create a Dynamics Campaign for each Iterable List and populate CampaignMember records by resolving the Iterable user profile IDs to the corresponding Lead or Contact IDs created during the profile migration. The Iterable List name and description map to Campaign name and Description. Active/inactive List status does not have a direct Dynamics analog, so we capture it in a custom Campaign field list_status__c.

Iterable

Custom Event

maps to

Microsoft Dynamics 365 Sales

Task (custom record type)

1:1
Fully supported

Iterable Custom Events track behavioral data beyond profile updates. Each event has a name, userId reference, and arbitrary metadata payload. We migrate Custom Event history as Task records with a custom Task record type (e.g., IterableEvent) and custom fields for event_name__c, event_payload__c (JSON blob), and original_timestamp__c. WhoId on the Task resolves to the migrated Lead or Contact by the original Iterable userId. We flag events with payload structures that cannot be flattened into Dynamics field types for case-by-case resolution during scoping.

Iterable

Campaign

maps to

Microsoft Dynamics 365 Sales

Campaign

1:1
Fully supported

Iterable Campaigns (the sendable units with channel, template, and schedule configuration) map to Dynamics 365 Campaign. We export campaign name, channel type, status, start and end dates, and sending schedule as Campaign metadata. Campaign-level metrics (send count, open rate, click rate) from Iterable export as custom numeric fields on the Dynamics Campaign. Note that template content and Journey associations do not migrate as code; we document them separately.

Iterable

Journey (metadata only)

maps to

Microsoft Dynamics 365 Sales

Sales Sequence or Power Automate (rebuild reference)

lossy
Fully supported

Iterable Journeys are multi-step, multi-channel automation workflows with branching logic and AI decisioning nodes. Microsoft Dynamics 365 Sales has no equivalent Journey builder. We do not migrate Journey definitions as code. We export Journey metadata including name, trigger conditions, step count, channel per step, branching rules, and Catalog item references into a structured JSON inventory document. The customer's admin uses this document to rebuild the equivalent logic in Sales Sequences (available with Sales Engagement license) or Power Automate flows. Journey re-trigger behavior is explicitly called out because Dynamics Sequences are cadence-based, not event-triggered.

Iterable

Template (metadata only)

maps to

Microsoft Dynamics 365 Sales

Dynamics Email Templates (rebuild reference)

lossy
Fully supported

Iterable Templates define message content with HTML and Handlebars personalization syntax. We export template name, channel type, subject line, and content structure as a written template inventory. Dynamic Handlebars expressions are documented with their field reference equivalents for translation to Dynamics email template tokens. Template content does not migrate as deployable code; the admin rebuilds in Dynamics Email Templates or Power Automate approval flows.

Iterable

Catalog Item

maps to

Microsoft Dynamics 365 Sales

Product2

1:1
Fully supported

Iterable Catalog stores product data for dynamic content insertion in messages. We export Catalog schemas and item records to migrate as Dynamics Product2 records. The Iterable Catalog item ID maps to a custom Product2 field catalog_id__c for cross-reference. If the customer uses Dynamics Business Central as an ERP, we coordinate the Product2 sync strategy with the ERP's item schema to avoid duplication. Catalog-to-Journey step associations do not migrate; these are documented in the Journey rebuild inventory.

Iterable

Purchase Event

maps to

Microsoft Dynamics 365 Sales

Opportunity or Order

1:1
Fully supported

Iterable Purchase events record transaction data (orderId, total, items, userId). We map Purchase events to Dynamics Opportunities with the Iterable orderId stored in a custom Opportunity field purchase_order_id__c, total amount as Amount, and item details in OpportunityLineItems resolved from the Product2 catalog mapping. Closed-Won Opportunities with a purchase event source are flagged with a custom Opportunity field purchase_event_source__c = true.

Iterable

Subscription

maps to

Microsoft Dynamics 365 Sales

Contact Preference Fields

1:1
Fully supported

Iterable tracks channel-level opt-in/opt-out status per user for email, SMS, push, and in-app. We migrate these to Dynamics Contact fields: EmailOptOut for email, and custom fields sms_opt_out__c, push_opt_out__c, and inapp_opt_out__c for the respective channels. Subscription event history (timestamp of opt-in and opt-out events) migrates as Task records with the IterableEvent record type to preserve the compliance audit trail.

Gotchas + challenges

What specifically takes care here

Platform-specific issues from each side, plus the pair-specific challenges that don't show up on either platform's page on its own.

Iterable logo

Iterable gotchas

Medium

Iterable does not allow field deletion

High

Separate API endpoints for US and EU data centers

Medium

Soft limit of 8,000 unique fields per project

High

Enterprise pricing is opaque and contract-based

Low

Usage metrics lag by one calendar day

Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales gotchas

High

Professional tier 15-table custom table limit blocks migrations

High

October 2024 pricing increase applies at renewal for all customers

Medium

Custom fields must be created in the UI before API writes

Medium

Power Platform request limits apply to bulk migrations

Medium

Activity records orphaned to inactive owners fail silently

Pair-specific challenges

  • Journeys and Templates have no migration path

    Iterable Journeys and Templates are automation-as-code objects that have no native equivalent in Microsoft Microsoft Dynamics 365 Sales . Dynamics Sales has Sales Sequences (cadence-based email steps) and Sales Playbooks (checklist-based guidance) but neither provides the event-triggered, multi-channel, AI-branching workflow that Iterables Journey builder delivers. We do not migrate Journey definitions or Template content as code. We export a written inventory of every active Journey (name, trigger, step count, channel, branching logic, Catalog references) and every Template (name, channel, subject, dynamic field usage) so the customer's admin has a structured rebuild reference. The rebuild itself is outside the migration scope.

  • Iterable Custom Events cannot represent typed CRM Activities without transformation

    Iterable Custom Events carry arbitrary JSON payloads that vary by event type. Microsoft Dynamics 365 Sales Task and Event objects have fixed schemas. When the Iterable Custom Event payload includes nested objects, arrays, or dynamic key names, flattening the payload into a typed Dynamics field requires a transformation layer that we implement in the staging phase. Events with deeply nested payloads or non-string types (dates, booleans) may require custom field creation on the Task object or a custom entity. We audit the top 20 most frequent Custom Event types during scoping and confirm the flattening strategy before extraction begins.

  • Iterable US and EU data centers require correct base URL selection

    Iterable operates two separate data centers with distinct API base URLs: api.iterable.com for USDC and api.eu.iterable.com for EDC. API keys are scoped to a single data center and cannot authenticate cross-region. We confirm the customers data center during scoping by checking the Iterable project settings and the API key prefix. Using the wrong base URL produces 401 authentication failures that are difficult to diagnose mid-migration. The correct base URL is locked into the extraction script before any data is pulled.

  • Profile-to-Lead-Contact split requires Lifecycle Stage matrix upfront

    Iterables User Profile object contains a Lifecycle Stage property that determines whether a record should migrate to a Salesforce-style Lead or Contact in Dynamics. If the customer uses non-standard Lifecycle Stage values or has business rules that override the default stage assignment, we need the full stage matrix documented before migration begins. Without this, we default to a conservative split (subscriber/lead/MQL -> Lead, SQL/customer/evangelist -> Contact) that may not match the customers real-world segmentation. Late changes to the split rule require a full re-migration of the affected records.

  • Dynamics field typing rejects Iterable string values without validation

    Microsoft Dynamics 365 Sales enforces field types at the platform level: date fields require ISO format, numeric fields reject alphabetic characters, and picklist fields reject values not in the active picklist. Iterable custom profile fields are schema-on-read (flexible) and often contain dirty data from historical imports. We run a pre-migration data quality audit against every custom field being mapped, flag type mismatches, and either clean the data in staging or create a custom text field in Dynamics to receive the raw value. Skipping this audit produces import failures that appear as silent record rejections in the Dynamics data load UI.

Migration approach

Six steps for a successful Iterable to Microsoft Dynamics 365 Sales data migration

  1. Discovery and Lifecycle Stage matrix confirmation

    We audit the Iterable project across data center (USDC or EDC), user profile count, custom field inventory, Custom Event type frequencies, active List count and membership size, active Campaign count, active Journey count, Template count, and Catalog item volume. We pair this with a review of the target Microsoft Dynamics 365 Sales environment (edition, existing entity schemas, active validation rules, and field security settings). The discovery output is a written migration scope document that includes the Lifecycle Stage split matrix, the Custom Event flattening strategy, and the Catalog-to-Product2 mapping plan. The customer signs off on the split matrix before extraction begins.

  2. Schema design and custom field provisioning in Dynamics

    We design the destination schema in Microsoft Dynamics 365 Sales before any data extraction. This includes creating custom fields on Lead, Contact, Account, Opportunity, Task, and Campaign entities to receive Iterable data that has no native Dynamics equivalent (hs_original_lifecycle__c, catalog_id__c, list_status__c, purchase_order_id__c, event_name__c, event_payload__c, original_timestamp__c, and the channel-specific opt-out fields). We also configure Marketing Lists and Campaign record types. Schema is deployed to a Dynamics Sandbox first; production deployment follows sandbox sign-off. We coordinate with the Dynamics admin to ensure the migration user has the necessary field-level create/edit permissions.

  3. Data extraction from Iterable

    We extract Iterable data using the Iterable API with the correct data-center base URL confirmed in Step 1. User Profiles export with full field maps including custom fields. List memberships export as separate records with userId and listId references. Campaign metadata exports from the campaigns endpoint. Custom Events export by event type in paginated batches to avoid API timeout. Catalog items export as a complete product catalog export. Purchase events export with full line-item detail. We log the extraction timestamp to establish the migration window boundary for any delta runs.

  4. Staging, transformation, and data quality remediation

    Extracted Iterable data lands in a staging environment where we apply the Lifecycle Stage split logic, flatten Custom Event payloads into typed fields, resolve email-domain-to-Account mappings, deduplicate profiles by email address (using the most recent record by dataUpdatedAt), and apply any type coercion needed for Dynamics field validation. We generate a data quality report per entity before loading, flagging records that will fail Dynamics validation rules so the customer can decide whether to clean them or accept the custom text field fallback. Owner and userId references are held in a reconciliation queue for admin confirmation.

  5. Production migration in dependency order

    We load data into the Microsoft Dynamics 365 Sales production environment in dependency order: Accounts (from List organization names and domain extraction), then Leads and Contacts (with Lifecycle Stage split applied and AccountId resolved), then Campaign records (with metrics), then Task records for Custom Events and Subscription history (with WhoId resolved to Lead or Contact), then Product2 records (from Catalog), then Opportunity records (from Purchase events with line items resolved from Product2), then CampaignMember records (linking Lists to the migrated Leads and Contacts). Each phase emits a row-count reconciliation report. We use Dynamics Bulk API for high-volume Task and Activity imports.

  6. Cutover, validation, and automation rebuild handoff

    We freeze Iterable writes during cutover, run a final delta migration for any records modified during the migration window, then enable Microsoft Dynamics 365 Sales as the system of record. We deliver the Journey and Template inventory document to the customer's admin team along with a Catalog-to-Product2 cross-reference CSV. We support a five-business-day hypercare window for reconciliation issues. We do not rebuild Iterable Journeys, Templates, or Catalog item associations inside the migration scope; those are documented for the customer's admin or a Dynamics partner to handle as a separate engagement.

Platform deep dives

Context on both ends of the pair

Iterable logo

Iterable

Source

Strengths

  • Cross-channel execution across email, SMS, push, and in-app from one unified platform interface.
  • Real-time AI decisioning using behavioral, contextual, and performance signals to optimize message delivery.
  • Enterprise-grade infrastructure with contracts supporting billions of messages and high deliverability standards.
  • Comprehensive API with documented endpoints for users, events, campaigns, and catalogs, plus an interactive API reference.
  • Helpful customer support with strong onboarding assistance cited across review sites.

Weaknesses

  • High total cost of ownership with opaque enterprise pricing starting at $20K+ annually.
  • Significant learning curve requiring extensive support and time investment to build competent workflows.
  • SMS deliverability reliability issues with account suspensions applied without clear explanation.
  • Cluttered UI requiring multiple navigation steps to complete common campaign management tasks.
  • Limited reporting consistency that complicates performance measurement and campaign optimization.
Microsoft Dynamics 365 Sales  logo

Microsoft Dynamics 365 Sales

Destination

Strengths

  • Native integration with Microsoft 365, Teams, Outlook, and SharePoint for unified productivity workflow
  • Unlimited custom tables and complex workflows on Enterprise tier enable deep customization for complex sales processes
  • AI-driven predictive analytics and deal intelligence on Enterprise and Premium tiers help sales teams prioritize pipeline
  • Dataverse unified data layer provides a consistent API and data model across all Dynamics 365 and Power Platform apps
  • Strong security model with Field-Level Security and Record Ownership rules for governance-conscious enterprises

Weaknesses

  • Sales Professional tier caps custom tables at 15, creating a migration ceiling for highly customized SMB environments
  • October 2024 pricing increases of $15 per user across all tiers apply to existing customers upon renewal
  • Implementation typically requires costly certified partners, adding 30–50% to total project cost
  • Updates and platform releases can disrupt customizations and plugins, requiring regression testing after each wave
  • Non-Microsoft integrations require additional configuration or middleware, limiting flexibility for heterogeneous tech stacks

Complexity grading

How hard is this migration?

Standard CRM migration. All 8 core objects map 1:1 between Iterable and Microsoft Dynamics 365 Sales .

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across Iterable and Microsoft Dynamics 365 Sales .

  • Object compatibility

    A

    All 8 core objects map 1:1 between Iterable and Microsoft Dynamics 365 Sales .

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    8-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    Iterable: Not publicly documented; returns RateLimitExceeded code on limit.

  • Data volume sensitivity

    A

    Iterable exposes a bulk API — large-volume migrations stream efficiently.

Estimator

Estimate your Iterable to Microsoft Dynamics 365 Sales migration cost

Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.

Step 1

What are you migrating?

Pick a category, then your source and destination platforms.

Category

FAQ

Frequently asked questions about Iterable to Microsoft Dynamics 365 Sales data migrations

Answers to the questions buyers ask most during Iterable to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.

Can't find your answer?

Walk through your Iterable to Microsoft Dynamics 365 Sales migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Most migrations land between three and five weeks for accounts under 50,000 user profiles with straightforward Lifecycle Stage splits and no complex Custom Event payloads. Migrations with high event volumes (over 200,000 Custom Event records), multiple active Journeys requiring full metadata documentation, large Catalog item sets, or an existing Dynamics 365 environment that requires coordination with the admin on schema and validation rules move to eight to fourteen weeks because of the Journey inventory work, Catalog reauthoring, and the data quality remediation needed before Dynamics field validation passes.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Iterable.
Land in Microsoft Dynamics 365 Sales , intact.

Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.

Accuracy guarantee Rollback included Quote in 1 business day