CRM migration
Field-level mapping, validation, and rollback between Perfect Portal and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Perfect Portal
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
11 of 12
objects map 1:1 between Perfect Portal and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
3–5 business days
Overview
Perfect Portal organises data around Matters, client Parties, Milestones, and document Attachments — a model built for law firms tracking case progress through defined stages. Dynamics 365 Sales (built on Microsoft Dataverse) uses Accounts, Contacts, Leads, Opportunities, and custom tables as its core objects. These models do not align natively: there is no Matter or Milestone equivalent in Dynamics 365, no built-in stage-transition audit field, and no N-party client relationship model. FlitStack AI maps your Matter records to custom Opportunity tables, client Parties to Account or Contact entities based on party type, and preserves Milestone stage histories as custom fields with stage-entered timestamps. Document attachments are re-hosted into SharePoint or Dynamics 365 native file storage since Perfect Portal stores them as URL references. A scoped read-access connection runs during the migration — your team continues working in Perfect Portal throughout. A delta-pickup window (24–48 hours) captures any Matter updates made during cutover. We surface Milestone automation logic as a rebuild reference so your Dynamics admin can recreate Matter-update flows in Power Automate or Dynamics workflows. All records land in Dynamics 365 with original create dates preserved as custom datetime fields for continuity in reporting.
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
Perfect Portal platform overview
Scorecard, SWOT, gotchas, and pricing for Perfect Portal.
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 Perfect Portal 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.
Perfect Portal
Matter
Microsoft Dynamics 365 Sales
Opportunity (custom table on Dataverse)
1:1Perfect Portal Matters contain the case name, client reference, status, and all nested parties and milestones. Dynamics 365 has no native Matter equivalent — we map Matters to a custom Opportunity table, creating custom fields for MatterType, CaseReference, BillingArrangement, and priority. The Opportunity Name maps from Matter.MatterName or Matter.CaseReference.
Perfect Portal
Matter.MatterName
Microsoft Dynamics 365 Sales
Opportunity.Name
1:1Direct map. MatterName populates Opportunity.Name as the primary display label. Where MatterName is empty, we use Matter.CaseReference as a fallback Name value. The display label appears in Dynamics 365 pipeline views, related lists, and reporting charts, so selecting the most descriptive field ensures your team immediately recognises each record without opening it.
Perfect Portal
Matter.Amount
Microsoft Dynamics 365 Sales
Opportunity.EstimatedValue
1:1Perfect Portal fee amounts map to EstimatedValue on the Opportunity record. Where Perfect Portal stores fee ranges rather than a single amount, we populate EstimatedValue with the midpoint and flag it in EstimatedValue_Source__c. This preserves transparency — your pipeline totals use a consistent numeric value, while the source flag lets finance teams filter or exclude estimated ranges in custom reports.
Perfect Portal
Matter.Status
Microsoft Dynamics 365 Sales
Opportunity.StateCode / custom Status__c
1:1Perfect Portal Matter statuses (Active, On Hold, Closed Won, Closed Lost) map to Dynamics 365 StateCode (Open/Won/Lost) plus a custom pick-list field (PP_Status__c) preserving the exact source label. Value-by-value mapping ensures no status label is lost in translation. The PP_Status__c field displays the original Perfect Portal status in Dynamics 365 views, so your team instantly sees the legacy status without cross-referencing the source system.
Perfect Portal
Matter.OpenedDate
Microsoft Dynamics 365 Sales
Opportunity.CreatedOn (custom preservation field)
1:1Dynamics 365 sets CreatedOn at record-creation time during migration. We preserve the original Matter.OpenedDate as PP_OpenedDate__c (Date field) so reports reflect when the matter actually began in Perfect Portal. This custom field appears in Dynamics 365 advanced find, pipeline reports, and Power BI dashboards, giving your team the true case origin date for compliance tracking and historical analysis.
Perfect Portal
Matter.AssignedFeeEarner
Microsoft Dynamics 365 Sales
Opportunity.OwnerId
1:1Owner resolved by email match against Dynamics 365 users. Unmatched fee earners are flagged before migration — your team either creates the user in Dynamics first or assigns to a fallback owner. No record lands without a valid OwnerId. The exception report lists each unresolved email with a proposed fallback owner, so your admin resolves all gaps before the migration run begins.
Perfect Portal
Party (client type)
Microsoft Dynamics 365 Sales
Account / Contact
1:manyOrganisational parties map to Account records. Individual parties map to Contact records. Where a Matter has multiple parties of mixed types, the primary party becomes the Account/Contact and additional parties are added via Account Contact Roles with a PP_PartyRole__c custom pick-list label.
Perfect Portal
Party (contact type)
Microsoft Dynamics 365 Sales
Contact
1:1Party records with contact details (email, phone, address) map 1:1 to Dynamics 365 Contact. Contact.FullName maps from Party.FullName; Contact.EmailAddress1 maps from Party.Email. OwnerId on Contact resolved by email match to Dynamics users. Where a contact already exists in Dynamics, we match on EmailAddress1 to avoid duplicating records, merging in any additional fields present in the Perfect Portal Party record.
Perfect Portal
Milestone
Microsoft Dynamics 365 Sales
Custom datetime fields on Opportunity
1:1Dynamics 365 has no native milestone construct. We map each Perfect Portal Milestone to a pair of custom fields: PP_Milestone_[Name]_Date__c (Date) and PP_Milestone_[Name]_Completed__c (Boolean). Stage-transition timestamps from Perfect Portal are preserved as separate custom datetime fields for audit continuity. These fields display in the Opportunity timeline view, giving your team a chronological record of every stage entry and exit without querying custom reports.
Perfect Portal
Attachment / Document
Microsoft Dynamics 365 Sales
SharePoint / Dynamics 365 Files
1:1Perfect Portal stores document references as URLs pointing to internal storage. We download each document and re-upload to the relevant Account or Contact SharePoint document location, then write the file URL into a PP_DocumentURL__c custom field on the parent Opportunity record.
Perfect Portal
MatterNote / Activity Log
Microsoft Dynamics 365 Sales
Annotation (Notes)
1:1Matter notes and activity log entries migrate as Dynamics 365 Annotations on the parent Opportunity. Original timestamps and author information are preserved in the Annotation.CreatedOn and Annotation.OwnerId fields. Each Annotation record is linked to the Opportunity, so your team sees the full activity history in the Dynamics 365 timeline without switching between screens or exporting data to audit logs.
Perfect Portal
MatterUpdate
Microsoft Dynamics 365 Sales
Task
1:1Matter status updates and system-logged changes migrate as closed Tasks on the Opportunity. Task.Subject is set to 'Matter Update: [status change description]' and Task.ActualEnd reflects the original update timestamp. These closed Tasks appear in the Opportunity activity history, giving your team a chronological audit trail of every status change without relying on external log exports or manual spreadsheets.
| Perfect Portal | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Matter | Opportunity (custom table on Dataverse)1:1 | Fully supported | |
| Matter.MatterName | Opportunity.Name1:1 | Fully supported | |
| Matter.Amount | Opportunity.EstimatedValue1:1 | Fully supported | |
| Matter.Status | Opportunity.StateCode / custom Status__c1:1 | Fully supported | |
| Matter.OpenedDate | Opportunity.CreatedOn (custom preservation field)1:1 | Fully supported | |
| Matter.AssignedFeeEarner | Opportunity.OwnerId1:1 | Fully supported | |
| Party (client type) | Account / Contact1:many | Fully supported | |
| Party (contact type) | Contact1:1 | Fully supported | |
| Milestone | Custom datetime fields on Opportunity1:1 | Fully supported | |
| Attachment / Document | SharePoint / Dynamics 365 Files1:1 | Fully supported | |
| MatterNote / Activity Log | Annotation (Notes)1:1 | Fully supported | |
| MatterUpdate | Task1: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.
Perfect Portal gotchas
No public API or documented export endpoint
Third-party access complicates data residency and privilege
Matter stages are defined per-firm and non-standardised
SMS notification logs are not independent records
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
Coordinate Perfect Portal data export and audit source schema
FlitStack initiates contact with Perfect Portal to request a structured data export covering all Matters, Parties, Milestones, Attachments, and notes. We audit the export schema against your reported record counts to confirm completeness before committing to the migration plan. Any fields missing from the export are flagged immediately so you can request a supplemental extract. This step also identifies custom fields and milestone types that will require custom field creation in Dynamics 365 before the data load begins.
Stand up Dynamics 365 schema: custom fields, tables, and SharePoint libraries
Before any data moves, your Dynamics 365 admin (or our team) creates the custom Opportunity fields for MatterType, Priority, BillingArrangement, milestone dates, and all milestone-specific completion fields. We also provision the SharePoint document library for re-hosted attachments. The schema setup plan is delivered as a checklist so your admin can pre-create the fields during the discovery phase, reducing validation friction when the migration run starts. If your record counts require Sales Enterprise over Sales Professional, this step includes the license upgrade planning.
Resolve owners and primary accounts before bulk data load
We match every Perfect Portal fee earner (AssignedFeeEarner) against Dynamics 365 users by email. Unmatched fee earners are listed in a pre-migration exception report — your team either creates the corresponding Dynamics user or assigns the records to a fallback owner before the migration run commits. Accounts and Contacts are loaded first so their record IDs are available for the Opportunity.OwnerId and Contact.AccountId lookups that follow. This sequencing ensures no foreign-key orphaning in the target system.
Run sample migration with field-level diff across Matter, Party, and Milestone records
A representative slice — typically 100–500 records spanning Matters with multiple Parties, milestone histories, and a range of statuses — migrates first. We generate a field-level diff report showing the source value, the mapped destination field, and the post-migration value in Dynamics 365. You verify milestone-date field naming, party-to-account collapse, status value mapping, and owner resolution before the full run commits. Any mapping corrections are applied before the bulk load.
Execute full migration with scoped read access and delta-pickup window
The full migration runs against Dynamics 365 using Bulk API for high-volume record insertion. Scoped read access on Perfect Portal means your team keeps working in Perfect Portal throughout — no account lock, no downtime. A 24–48 hour delta-pickup window after the bulk load captures any Matter updates or new Parties created during the cutover. Every operation is logged in an audit table (PP_MigrationBatchID__c, PP_MigratedAt__c) so you can trace any record back to its source. One-click rollback is available if reconciliation reveals unexpected data divergence.
Platform deep dives
Perfect Portal
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Perfect Portal and Microsoft Dynamics 365 Sales .
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Perfect Portal and Microsoft Dynamics 365 Sales .
Object compatibility
All 8 core objects map 1:1 between Perfect Portal 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
Perfect Portal: Not publicly documented.
Data volume sensitivity
Perfect Portal 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 Perfect Portal to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Perfect Portal 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 Perfect Portal
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.