CRM migration
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
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
7 of 10
objects map 1:1 between Iterable and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
3-5 weeks
Overview
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.
Every standard and custom field arrives verified.
AI proposes the map; you confirm before any record moves.
Parent–child, lookups, and ownership stay linked.
Calls, emails, meetings — with original timestamps.
Documents, uploads, and inline notes move with the record.
Source platform
Iterable platform overview
Scorecard, SWOT, gotchas, and pricing for Iterable.
Destination platform
Microsoft Dynamics 365 Sales platform overview
Scorecard, SWOT, gotchas, and pricing for Microsoft Dynamics 365 Sales .
Data migration guide
The complete Microsoft Dynamics 365 Sales migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Microsoft Dynamics 365 Sales migration checklist
Pre- and post-cutover tasks for moving onto Microsoft Dynamics 365 Sales .
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
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
Microsoft Dynamics 365 Sales
Lead and Contact (split required)
1:manyIterable 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)
Microsoft Dynamics 365 Sales
Account
1:1Iterable 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
Microsoft Dynamics 365 Sales
Marketing List (Campaign)
1:1Iterable 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
Microsoft Dynamics 365 Sales
Task (custom record type)
1:1Iterable 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
Microsoft Dynamics 365 Sales
Campaign
1:1Iterable 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)
Microsoft Dynamics 365 Sales
Sales Sequence or Power Automate (rebuild reference)
lossyIterable 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)
Microsoft Dynamics 365 Sales
Dynamics Email Templates (rebuild reference)
lossyIterable 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
Microsoft Dynamics 365 Sales
Product2
1:1Iterable 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
Microsoft Dynamics 365 Sales
Opportunity or Order
1:1Iterable 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
Microsoft Dynamics 365 Sales
Contact Preference Fields
1:1Iterable 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.
| Iterable | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| User Profile | Lead and Contact (split required)1:many | Fully supported | |
| Company (List membership) | Account1:1 | Fully supported | |
| List | Marketing List (Campaign)1:1 | Fully supported | |
| Custom Event | Task (custom record type)1:1 | Fully supported | |
| Campaign | Campaign1:1 | Fully supported | |
| Journey (metadata only) | Sales Sequence or Power Automate (rebuild reference)lossy | Fully supported | |
| Template (metadata only) | Dynamics Email Templates (rebuild reference)lossy | Fully supported | |
| Catalog Item | Product21:1 | Fully supported | |
| Purchase Event | Opportunity or Order1:1 | Fully supported | |
| Subscription | Contact Preference Fields1:1 | Fully supported |
Gotchas + challenges
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 gotchas
Iterable does not allow field deletion
Separate API endpoints for US and EU data centers
Soft limit of 8,000 unique fields per project
Enterprise pricing is opaque and contract-based
Usage metrics lag by one calendar day
Microsoft Dynamics 365 Sales gotchas
Professional tier 15-table custom table limit blocks migrations
October 2024 pricing increase applies at renewal for all customers
Custom fields must be created in the UI before API writes
Power Platform request limits apply to bulk migrations
Activity records orphaned to inactive owners fail silently
Pair-specific challenges
Migration approach
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.
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.
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.
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.
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.
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
Iterable
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Iterable and Microsoft Dynamics 365 Sales .
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Iterable and Microsoft Dynamics 365 Sales .
Object compatibility
All 8 core objects map 1:1 between Iterable and Microsoft Dynamics 365 Sales .
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
8-object category — typical timelines run 2–7 days end-to-end.
API constraints
Iterable: Not publicly documented; returns RateLimitExceeded code on limit.
Data volume sensitivity
Iterable exposes a bulk API — large-volume migrations stream efficiently.
Estimator
Rule-based pricing — no per-record fees, no manual quotes. Migrations over 2M records are scoped individually.
Step 1
Pick a category, then your source and destination platforms.
Category
FAQ
Answers to the questions buyers ask most during Iterable to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
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 consultationAdjacent paths
Other ways to leave Iterable
Other ways to arrive at Microsoft Dynamics 365 Sales
Ready when you are
Tell us record counts and timeline. We'll come back with a written quote inside 1 business day — no commitment, no sales pitch.