CRM migration
Field-level mapping, validation, and rollback between Keap and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Keap
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
8 of 10
objects map 1:1 between Keap and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
3-5 weeks
Overview
Migrating from Keap to Microsoft Microsoft Dynamics 365 Sales is a structural migration that moves a small-business all-in-one into an enterprise sales platform with deep Microsoft 365 integration. Keap's tag-driven contact model maps to Dynamics 365's native Account-Contact hierarchy with tags stored as multi-select picklists or custom fields. Keap's Opportunities (pipeline deals) map to Dynamics 365 Opportunities with stage names migrated into Sales Processes and Record Types configured in the destination org. Automation sequences do not export from Keap and must be rebuilt in Dynamics 365 via Power Automate or Sales Copilot; we deliver a written sequence inventory for that rebuild. Keap's API rate limit of 500 calls per minute means we pace large contact exports across multiple windows, extending migration timelines for accounts with tens of thousands of records. Invoice records migrate via the Keap invoice API endpoint directly, bypassing the known pipeline activity history gap in Keap's UI. We do not migrate landing pages, forms, or automation logic as code.
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
Keap platform overview
Scorecard, SWOT, gotchas, and pricing for Keap.
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 Keap 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.
Keap
Contact
Microsoft Dynamics 365 Sales
Contact
1:1Keap Contacts map to Dynamics 365 Contacts with standard fields (name, email, phone, address) migrated directly. Custom fields require discovery via Keap's REST /retrieveContactModel endpoint to resolve field IDs before values are written. We map custom field types to equivalent Dynamics 365 field types (text, number, date, picklist) and create any missing fields in the Dynamics 365 solution before import. Keap tags applied to contacts migrate as multi-select picklist values on a custom tags__c field or as TopicAssignment records per customer preference.
Keap
Company
Microsoft Dynamics 365 Sales
Account
1:1Keap Company records map directly to Dynamics 365 Account. The company name, domain, address, and phone fields migrate as Account fields. We preserve the Company-to-Contact relationship by setting the Primary Contact lookup on Account to the associated Contact record after both objects are imported. The Account is created before Contact import so that the customerid field on Keap Contact resolves to AccountId on Dynamics 365 Contact.
Keap
Opportunity (Pipeline Deal)
Microsoft Dynamics 365 Sales
Opportunity
1:1Keap Opportunities map to Dynamics 365 Opportunities. The Keap stage name maps to a Dynamics 365 StageName value, and the pipeline assignment maps to a Sales Process or Record Type configured in Dynamics 365 before migration. Deal value, expected close date, owner, and notes transfer directly. We create new Opportunity Stage values in Dynamics 365 for any Keap stage that has no direct equivalent, preserving stage ordering and probability percentages where defined.
Keap
Opportunity Stage
Microsoft Dynamics 365 Sales
Sales Process + Stage
lossyKeap pipeline stages migrate to Microsoft Dynamics 365 Sales Process stage entries. Each Keap pipeline becomes a Microsoft Dynamics 365 Sales Process linked to a Record Type on Opportunity. We map stage probabilities from Keap to StageProbability on each stage entry. If Keap stages use custom names (Appointment Scheduled, Proposal Sent, Negotiation), we create matching stage entries in Dynamics 365 rather than remapping to out-of-box labels.
Keap
Tag
Microsoft Dynamics 365 Sales
Multi-Select Picklist or Topic
lossyKeap tags are both a segmentation tool and an automation trigger. We export all tags and apply them as multi-select picklist values on a custom field on Contact (and optionally Account). For organizations using tags primarily for marketing segmentation, we offer Topic-based mapping with TopicAssignment records linked to Contacts. The customer selects the tag strategy during scoping, as Power Automate triggers can reference either approach.
Keap
Invoice
Microsoft Dynamics 365 Sales
Invoice
1:1Keap invoices export via the invoice API endpoint, bypassing the known pipeline activity history gap in Keap's UI (knownissues.keap.com #3275175). Invoice records migrate with line items, totals, status (draft, sent, paid), associated contact, and invoice date. We link each invoice to the migrated Contact and Account records via lookup resolution. Note that Microsoft Dynamics 365 Sales includes Invoice as a standard object only if the org has the Sales Enterprise or Sales Premium license.
Keap
Product
Microsoft Dynamics 365 Sales
Product
1:1Keap product catalog items (name, SKU, price, description) map to Dynamics 365 Product2 records. We create the corresponding PricebookEntry records in the standard price book during import. Advanced product images and advanced pricing rules from Keap do not export; we document these for manual re-creation in Dynamics 365.
Keap
Order
Microsoft Dynamics 365 Sales
Order
1:1Keap order records capture completed transactions linked to a contact and product. Order headers, line items, payment status, and order dates migrate to Microsoft Dynamics 365 Sales Order. We resolve the associated Contact and Product references at migration time. Order-level notes and internal annotations migrate as Order Product annotations or as separate Note records attached to the Order.
Keap
Task
Microsoft Dynamics 365 Sales
Task
1:1Keap tasks export with subject, due date, assigned user, status, and completion date. Tasks linked to contacts or opportunities are imported as Dynamics 365 Tasks tied to the corresponding Contact or Opportunity record via the RegardingObjectId lookup. Owner resolution uses email matching against the destination User table.
Keap
Note
Microsoft Dynamics 365 Sales
Annotation
1:1Keap Notes associated with contacts or companies migrate as Dynamics 365 Annotation records (the standard notes object). Note text, author, and creation timestamp preserve. Notes attached to opportunities link via RegardingObjectId to the Opportunity record. We do not migrate note attachments stored in Keap's file system; those require separate file transfer.
| Keap | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Opportunity (Pipeline Deal) | Opportunity1:1 | Fully supported | |
| Opportunity Stage | Sales Process + Stagelossy | Fully supported | |
| Tag | Multi-Select Picklist or Topiclossy | Fully supported | |
| Invoice | Invoice1:1 | Fully supported | |
| Product | Product1:1 | Fully supported | |
| Order | Order1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Note | Annotation1: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.
Keap gotchas
API rate limit of 500 calls per minute
Automation sequences are not structurally exportable
Custom fields require in-app creation before API use
Pipeline activity history bug with invoices
V2 REST API parity gaps with XML-RPC
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 Keap API audit
We audit the Keap tenant across all objects accessible via REST and XML-RPC APIs, including Contacts, Companies, Tags, Opportunities, Invoices, Products, Orders, Tasks, and Notes. We probe both Keap API endpoints to identify parity gaps where certain fields are available only via XML-RPC. We capture the contact count, tag count, opportunity count, pipeline stage definitions, and any custom field definitions. This audit produces a written migration scope document that identifies which objects are in scope, which are excluded, and which require manual handling.
Dynamics 365 schema design
We design the destination Dynamics 365 solution schema including custom fields (matched to Keap custom field types), Sales Processes (one per Keap pipeline), Record Types on Opportunity, and multi-select picklist fields for tags. We create the solution in a Dynamics 365 Sandbox first for validation. The customer provisions the target Dynamics 365 environment and any required user accounts before we begin schema deployment. If the customer uses Business Central ERP, we also review the existing Dataverse-Business Central integration configuration to ensure the CRM migration does not conflict.
Owner reconciliation and User provisioning
We extract every distinct Keap Owner referenced on Contacts, Companies, Opportunities, Tasks, and Notes and match by email against the Dynamics 365 destination User table. Any Owner without a matching User goes to a reconciliation queue for the customer's admin to provision before record import resumes. OwnerId references on Opportunities and Tasks must be resolvable at migration time, so this step gates the record import phases.
Data extraction with rate-limit pacing
We export all in-scope Keap objects using the REST API with 500 calls/minute pacing for contact-heavy exports. For large accounts, we chunk exports across multiple minute windows to avoid 429 errors. Invoice records are queried directly from the invoice API endpoint, not from the pipeline UI, to bypass the known Keap activity history gap. All exported data is staged in a secure migration staging area for transformation before Dynamics 365 import.
Transformation and Dynamics 365 import
We transform Keap data to match Dynamics 365 field types, apply the tag mapping strategy (multi-select picklist or TopicAssignment), and resolve parent record lookups (AccountId on Contact, RegardingObjectId on Task). Import runs in dependency order: Accounts (from Companies), Contacts (with AccountId resolved), Opportunities (with OwnerId and Sales Process resolved), Products, Orders, Invoices, Tasks, and Notes. We use the Dynamics 365 Dataverse REST API for record inserts with appropriate batch sizing and error handling.
Cutover, validation, and automation rebuild handoff
We freeze Keap writes during cutover, run a delta migration of any records modified during the migration window, and validate record counts against the source export totals. We deliver a written automation sequence inventory document listing every Keap sequence with its name, step count, and trigger conditions, with a recommended Power Automate or Microsoft Dynamics 365 Sales Copilot equivalent for each. We support a one-week hypercare window for reconciliation issues. We do not rebuild Keap automation sequences as Power Automate flows within the migration scope; that is a separate engagement.
Platform deep dives
Keap
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 2 of 8 objects need a mapping; the rest are 1:1.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Keap and Microsoft Dynamics 365 Sales .
Object compatibility
2 of 8 objects need a mapping; the rest are 1:1.
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
Keap: 500 requests per minute per tenant, reset per minute.
Data volume sensitivity
Keap doesn't expose a bulk API — REST + parallelization used for high-volume runs.
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 Keap to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Keap 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 Keap
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.