CRM migration
Field-level mapping, validation, and rollback between Bright and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Bright
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
13 of 14
objects map 1:1 between Bright and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
48–72 hours
Overview
Bright stores contacts, companies, and deals in a flat object model with custom properties and owner assignments. Dynamics 365 Sales uses Microsoft Dataverse as its underlying platform, organizing contacts under accounts, splitting leads and opportunities into separate entities, and requiring AccountId lookups for most contact operations. The migration carries everything Bright stores natively — contacts, companies, deals, activities, notes, attachments, and custom fields — into Dynamics 365's table-based model. The harder problems are mapping Bright's owner-by-email model to Dynamics 365 users (resolved by email match against Azure AD-synced accounts), preserving Bright custom properties as Dataverse custom columns with the new_ prefix, and handling Bright's activity log format (calls, emails, meetings) into the Dataverse activity tables. Workflows, automations, and Bright-specific integrations do not migrate and must be rebuilt using Power Automate flows or Dynamics 365 business rules post-migration. FlitStack sequences the load so foreign keys resolve correctly: accounts first, then contacts, then opportunities, with field-level validation before the full run commits.
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
Bright platform overview
Scorecard, SWOT, gotchas, and pricing for Bright.
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 Bright 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.
Bright
Contact
Microsoft Dynamics 365 Sales
Contact
1:1Bright contacts migrate as Dynamics 365 Contacts. Each contact requires a primary AccountId lookup; if a Bright contact has no company association, FlitStack links it to a default placeholder account, or your admin can define a fallback rule assigning unbound contacts to a designated holding account. The migration preserves the original created date, owner email, and custom fields, while enforcing referential integrity for downstream opportunities and activities.
Bright
Contact (early-stage)
Microsoft Dynamics 365 Sales
Lead
1:manyBright contacts that represent early-stage prospects with no closed deal history can be routed to Dynamics 365 Lead. Your team decides the split threshold — for example, contacts with zero associated deals become Leads; those with deal history become Contacts.
Bright
Company
Microsoft Dynamics 365 Sales
Account
1:1Bright companies map directly to Dynamics 365 Accounts. Parent‑company hierarchies are preserved using the Parent AccountId field, keeping the top‑level and subsidiary structure after migration. Bright's many‑to‑many contact‑company associations collapse to a single primary AccountId per contact, with relationships stored in Account Contact Relationships; FlitStack creates these records automatically. All custom fields on the company become Dataverse columns with the new_ prefix, and original created date and owner are retained.
Bright
Deal
Microsoft Dynamics 365 Sales
Opportunity
1:1Bright deals map to Dynamics 365 Opportunities. The deal name becomes Opportunity Name, the amount maps to EstimatedValue, the close date to CloseDate, and the pipeline stage to StageName via value mapping. Owner resolves to OwnerId through email matching against Azure AD‑synced users, and custom fields on the deal become Dataverse new_* columns. Probability values are reapplied based on the target stage, while original created and modified timestamps are retained.
Bright
Pipeline
Microsoft Dynamics 365 Sales
Business Process Flow + Stage
1:1Bright deal pipelines translate to Dynamics 365 Business Process Flows. Each Bright pipeline stage becomes a stage step in the BPF. If Bright uses multiple pipelines, FlitStack can create BPFs for each pipeline or collapse them into a single BPF with conditional branching that routes opportunities by pipeline type. The BPF is linked to opportunities at creation, and any pipeline‑specific custom fields map to Dataverse new_* columns on the opportunity.
Bright
Owner
Microsoft Dynamics 365 Sales
SystemUser (OwnerId)
1:1Bright owner records are matched by email address against Dynamics 365 system users synced from Azure Active Directory. Unmatched owners are flagged before migration — your team either invites them to Dynamics 365 or assigns records to a designated fallback owner.
Bright
Activity (Call)
Microsoft Dynamics 365 Sales
PhoneCall
1:1Bright call logs migrate as Dataverse PhoneCall activities. Subject, description, duration (in minutes), direction (mapped to DirectionCode), and timestamp transfer directly. Owner resolves via email to a system user, and the RegardingId links the call to the associated contact or account. Any Bright custom fields on the call become Dataverse new_* columns on the PhoneCall table, preserving additional metadata such as outcome or phone number.
Bright
Activity (Email)
Microsoft Dynamics 365 Sales
Bright email records map to Dataverse Email activities. Subject, body text, from/to addresses, and timestamp transfer, while direction (inbound/outbound) is stored in DirectionCode. Owner resolves via email to a system user, and RegardingId links the email to the contact or account. Email attachments migrate as annotation records attached to the email, and Bright custom fields on the email become Dataverse new_* columns on the Email table, preserving thread ID.
Bright
Activity (Meeting)
Microsoft Dynamics 365 Sales
Appointment
1:1Bright meeting records become Dataverse Appointments with start time, end time, location, subject, and attendees. Required attendees are linked as ActivityParty records, and the meeting body maps to Description. Owner resolves via email to a system user, and RegardingId links the appointment to the contact or account. Bright custom fields on the meeting become Dataverse new_* columns on the Appointment table, preserving conference ID or meeting type.
Bright
Note
Microsoft Dynamics 365 Sales
Annotation
1:1Bright notes migrate as Dataverse Annotations (note entity). The notetext, subject, and owner are preserved, and the created date is retained. Rich-text formatting in Bright notes converts to HTML so the appearance carries over to Dynamics 365. If a note contains file attachments, FlitStack extracts them as file annotations linked to the same parent record, and any Bright custom fields on notes become Dataverse new_* columns on the Annotation table.
Bright
Attachment / File
Microsoft Dynamics 365 Sales
Annotation (fileattachment)
1:1Bright file attachments on contacts, companies, or deals re‑upload as Dataverse file annotations. The filename, mime type, and creation date are preserved, and the annotation is linked to the parent record via RegardingId. Dynamics 365 storage quotas limit file size; FlitStack flags any attachments exceeding the limit before migration and can split or compress them. Any Bright custom fields on the attachment become Dataverse new_* columns on the annotation table.
Bright
Custom Object
Microsoft Dynamics 365 Sales
Custom Table (new_*entity*)
1:1Bright custom objects map 1:1 to Dataverse custom tables. Table names receive the new_ prefix. Custom object relationships using N:N associations may need junction tables in Dataverse — FlitStack identifies these during discovery and includes junction table creation in the migration plan.
Bright
Custom Field (on Contact)
Microsoft Dynamics 365 Sales
Custom Column (new_*field*) on Contact
1:1Bright custom properties on contacts create new_* columns in the Dataverse Contact table. Data types map: text fields to nvarchar, number fields to integer or decimal, pick-lists to choice, dates to datetime. Your Dynamics admin publishes the solution before the data load.
Bright
Bright User
Microsoft Dynamics 365 Sales
SystemUser
1:1Bright user records don't directly map to Dynamics 365 system users because Dynamics users must exist in Azure AD first. FlitStack resolves Bright owner emails against existing Dynamics system users; for Bright users not yet in Dynamics, the migration plan flags each one for your admin to provision or reassign.
| Bright | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Contact (early-stage) | Lead1:many | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline | Business Process Flow + Stage1:1 | Fully supported | |
| Owner | SystemUser (OwnerId)1:1 | Fully supported | |
| Activity (Call) | PhoneCall1:1 | Fully supported | |
| Activity (Email) | Email1:1 | Fully supported | |
| Activity (Meeting) | Appointment1:1 | Fully supported | |
| Note | Annotation1:1 | Fully supported | |
| Attachment / File | Annotation (fileattachment)1:1 | Fully supported | |
| Custom Object | Custom Table (new_*entity*)1:1 | Fully supported | |
| Custom Field (on Contact) | Custom Column (new_*field*) on Contact1:1 | Fully supported | |
| Bright User | SystemUser1: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.
Bright gotchas
CIS deduction rates are employee-specific and must transfer as discrete fields
No bulk document export API forces manual file downloads
Leave entitlement balances require separate export alongside the request history
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
Discover Bright schema and Dynamics 365 environment
FlitStack connects to Bright via API to export the full object inventory: contacts, companies, deals, activities, custom objects, and custom fields. Simultaneously, we assess the Dynamics 365 target environment: license tier (Professional or Enterprise), existing table schema, Azure AD user directory, and any custom solutions already deployed. The discovery output is a pre-migration report listing record counts, custom field data types, owner resolution status, and a recommended Dynamics solution manifest for any required new_* columns.
Deploy Dynamics 365 solution manifest and resolve owners
Your Dynamics admin imports the FlitStack-generated solution file to create all required custom columns in Dataverse before data loads begin. Simultaneously, FlitStack runs the owner resolution pass — Bright owner emails are matched against the Azure AD-synced user list in Dynamics. Unmatched owners are exported to a resolution spreadsheet with recommended actions (invite user, reassign to fallback, or exclude from migration). No records load until all dependencies are confirmed.
Migrate accounts and contacts before opportunities
Dynamics 365 enforces referential integrity: AccountId on contacts, and for opportunities the customer (account or contact) and then the opportunity contact roles. FlitStack sequences the load in dependency order: Companies → Accounts first, then Contacts (splitting early-stage contacts to Lead where specified), then Opportunities with stage mapping, then Activities with RegardingId linking back to the parent records. Each phase runs field-level validation comparing source values against destination values before the next phase starts.
Run sample migration with field-level diff
A representative slice — typically 100–500 records spanning all object types and including edge cases like contacts with no company, deals with custom fields, and activities with attachments — migrates first. FlitStack generates a field-level diff report showing every mapped field, the source value, the destination value, and pass/fail status. You review the diff to confirm custom field mapping, stage value mapping, owner resolution, and activity linkage before the full run commits.
Execute full migration with delta pickup window
The full Bright dataset migrates to Dynamics 365 using bulk API operations against Dataverse. A delta pickup window — typically 24–48 hours — runs in parallel, capturing any Bright records created or modified during the migration window. FlitStack generates an audit log for every record operation (create, update, skip, error). If reconciliation identifies gaps, one-click rollback reverts the Dynamics environment to its pre-migration state so corrections can be made and the run restarts.
Platform deep dives
Bright
Source
Strengths
Weaknesses
Microsoft Dynamics 365 Sales
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. All 8 core objects map 1:1 between Bright and Microsoft Dynamics 365 Sales .
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across Bright and Microsoft Dynamics 365 Sales .
Object compatibility
All 8 core objects map 1:1 between Bright 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
Bright: Not publicly documented.
Data volume sensitivity
Bright 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 Bright to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Bright 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 Bright
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.