CRM migration

Migrate from Atomic CRM to Microsoft Dynamics 365 Sales

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

Atomic CRM logo

Atomic CRM

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

63%

5 of 8

objects map 1:1 between Atomic CRM and Microsoft Dynamics 365 Sales .

Complexity

BStandard

Timeline

2-4 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Atomic CRM ships as a MIT-licensed React developer template on Supabase with no REST or GraphQL API surface — every migration reads directly from the Postgres database via Supabase table APIs. The schema audit phase is critical because custom fields in Atomic CRM are Postgres column additions via Supabase Studio, not UI-configured properties, and deal categories and task types live in TypeScript props passed to the CRM root component rather than in any database table. We capture both during scoping. We also check for Supabase Storage buckets used for file attachments, as binary blob storage does not migrate under standard scope. On the destination side, Microsoft Microsoft Dynamics 365 Sales uses Dataverse as its data layer with a typed column model, so every migrated Postgres column requires a type-mapped Dataverse column created before any data loads. We resolve source users by email lookup against the destination User table and raise a reconciliation queue for any owner that has no matching account. Workflows, automations, and any informal business logic encoded in CRM component props do not migrate; we deliver a written specification of the props-defined enum values and any stage-transition rules for the customer's admin to rebuild in Power Automate or model-driven app business rules post-migration.

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

Atomic CRM logo

Atomic CRM

What's pushing teams away

  • Non-technical teams hit a dead end — Atomic CRM ships without a graphical UI for custom fields, user management, or pipeline configuration, requiring developer involvement for any change.
  • The platform lacks out-of-the-box automation, email sequences, and reporting dashboards that sales teams expect from mainstream CRMs, causing adoption to stall after initial setup.
  • Scaling beyond a few hundred active records surfaces the gap between a developer template and a production-grade SaaS — no SLA, no dedicated support, no built-in caching or performance tooling.
  • Teams that grow beyond one or two developers find the maintenance burden high — every upgrade to React, Supabase, or shadcn/ui risks breaking customizations without a test suite to catch regressions.
  • When a co-founder or the single developer maintaining the instance leaves, the CRM becomes orphaned code that nobody else on the team can safely modify or extend.

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 Atomic CRM objects map to Microsoft Dynamics 365 Sales

Each row shows how a Atomic CRM 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.

Atomic CRM

Contact

maps to

Microsoft Dynamics 365 Sales

Lead or Contact (split required)

1:many
Fully supported

Atomic CRM stores all person records in a single Contacts table with no distinction between prospect and customer. We split at migration time using an active-deal association heuristic: Contacts with at least one associated open Deal map to Salesforce Contact; Contacts with no Deal association and no explicit customer flag map to Salesforce Lead. We preserve the original Contact record ID in a custom field atomic_crm_id__c on both Lead and Contact for audit traceability.

Atomic CRM

Company

maps to

Microsoft Dynamics 365 Sales

Account

1:1
Fully supported

Atomic CRM Company records map directly to Dynamics 365 Account. We use the Company domain_name or website column as the dedupe key during import to prevent duplicate Account creation. Account must be inserted before Contact to satisfy the AccountId lookup reference on the Contact record.

Atomic CRM

Deal

maps to

Microsoft Dynamics 365 Sales

Opportunity

1:1
Fully supported

Atomic CRM Deals map to Microsoft Dynamics 365 Sales Opportunity. Deal value, currency, expected close date, and owner reference transfer directly. The deal category (e.g. SaaS, Consulting, eCommerce) is captured from the CRM component props file during scoping and becomes a custom picklist field dst_deal_category__c on Opportunity because Dynamics does not have an equivalent native field. We set the OwnerId by resolving the Supabase auth UUID to the destination User email lookup.

Atomic CRM

Deal Stage (props-defined)

maps to

Microsoft Dynamics 365 Sales

Stage Name + Sales Process

lossy
Fully supported

Atomic CRM defines pipeline stages as TypeScript props in App.tsx or equivalent, not in the database. We extract the full stage enumeration from the shared CRM configuration file during scoping and replicate it as a Microsoft Dynamics 365 Sales Process with corresponding StageName values. Stage probability percentages are set per the original props definition and rounded to the nearest Dynamics-allowed integer.

Atomic CRM

Task Type (props-defined)

maps to

Microsoft Dynamics 365 Sales

custom Task Type field

lossy
Fully supported

Task types in Atomic CRM — Call, Email, Meeting — are passed as props to the CRM component rather than stored in the database. We extract the task type enumeration from the CRM configuration file and create a custom picklist field task_type__c on the Task entity in Dataverse. All migrated Tasks receive the correct type value from this enumeration. Any task type not present in the original props is flagged during scoping so the customer can confirm the correct classification.

Atomic CRM

Note

maps to

Microsoft Dynamics 365 Sales

Annotation

1:1
Fully supported

Atomic CRM Notes are stored as Postgres records with a polymorphic or foreign-key relationship to Contact or Deal. We map them to Microsoft Dynamics 365 Sales Annotation records with IsDocument=false and the original note body preserved as the notetext column. The Regarding (objectid) lookup is resolved to the migrated Contact or Opportunity GUID at migration time.

Atomic CRM

Custom Fields

maps to

Microsoft Dynamics 365 Sales

Custom Columns

1:1
Mapping required

Custom fields in Atomic CRM are Postgres columns added via Supabase Studio, not UI-configured properties. We run a pre-migration schema diff against a reference Atomic CRM export to discover every column on every table that is not part of the standard schema. Each discovered column is created as a Dataverse column of the equivalent type (text, number, boolean, date) before data migration begins. Any column with a Postgres type that has no direct Dataverse equivalent is flagged for customer decision during scoping.

Atomic CRM

User (Supabase Auth)

maps to

Microsoft Dynamics 365 Sales

User (Dataverse)

1:1
Fully supported

Owner assignment on Deals and Tasks references Supabase auth UUIDs, not email addresses. We resolve source owners by email match against the destination Dynamics 365 User table. Any Supabase owner without a matching User record is held in a reconciliation queue for the customer's admin to provision before record import proceeds. Owner-less records are held with ownerid=null and flagged in the reconciliation report rather than silently skipped.

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.

Atomic CRM logo

Atomic CRM gotchas

High

No hosted SaaS version — migration target is a Postgres database

High

Custom fields are schema changes, not UI-configured properties

Medium

CRM component props define business logic that lives in code, not data

Medium

No native file attachment export — storage backend varies by deployment

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

  • No API surface — migration reads directly from Supabase Postgres

    Atomic CRM has no REST, GraphQL, or bulk API. We connect directly to the Supabase Postgres database and read from the auto-generated table APIs. Supabase Row Level Security (RLS) policies on any table can block bulk reads and writes if the migration service account lacks the required policy exemptions. We request the Supabase service role key during scoping and test connectivity against each table before data extraction begins. If the customer uses Supabase's anon key approach with RLS enabled, we coordinate with their developer to temporarily relax RLS on the migration tables.

  • Deal categories and task types live in TypeScript props, not data

    Atomic CRM defines Deal categories and Task types as TypeScript enum props passed to the CRM root component in App.tsx. These values do not exist in any database table and cannot be discovered by reading Postgres. If we do not receive the configuration file during scoping, we will miss the full set of valid enumeration values and may drop or misclassify records that use a custom category not present in the reference schema. We explicitly request the CRM configuration file before migration begins and confirm the enumerations in writing.

  • Custom fields require pre-migration schema diff against reference export

    Custom fields in Atomic CRM are Postgres columns added through Supabase Studio. Without a schema diff against a known-good reference export, custom fields added post-deployment without documentation are silently dropped during migration. We run a structured schema comparison during scoping and produce a delta of every non-standard column before any mapping decisions are made. This step adds one to three days to the discovery phase but prevents data loss that would otherwise require a re-migration.

  • File attachments in Supabase Storage do not migrate under standard scope

    If the Atomic CRM instance uses Supabase Storage buckets for file attachments, those files live in object storage separate from the Postgres database and are not captured by a standard database export. We check for Supabase Storage usage during scoping. If files are present, we request the Storage configuration and export the bucket contents as a separate file transfer. Files stored outside Supabase (e.g. on a custom S3 bucket or local filesystem) require coordination beyond the standard migration scope and are scoped as a separate deliverable.

  • Microsoft Dynamics 365 Sales lookup limits and validation rules can block import

    Microsoft Dynamics 365 Sales enforces field-level validation rules, required field constraints, and lookup cardinality limits that the Supabase data may violate. We run an initial load test against a Sandbox or non-production Dynamics environment to identify rejected records and the specific rule causing each rejection. We either adjust the source data to satisfy the constraint or coordinate with the customer's Dynamics admin to temporarily relax the rule during migration and re-enable it post-cutover.

Migration approach

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

  1. Supabase schema audit and config extraction

    We connect to the source Supabase Postgres instance using the service role key and export the full schema — every table, column, type, and constraint — alongside the Supabase Storage configuration. We run a schema diff against the reference Atomic CRM export to surface all non-standard columns added post-deployment. In parallel, we request the CRM configuration file (App.tsx or equivalent) to capture TypeScript enum values for deal categories and task types. The output is a written schema audit report listing every object, column, data type, and enum value that must map to Dataverse.

  2. Destination Dynamics 365 schema setup

    We create the destination Dataverse columns for every source field identified in the schema audit. Custom picklist fields are created for deal categories and task types with the exact enumeration values from the CRM configuration file. We verify the Dynamics environment (Sandbox or non-production) is reachable via the Dataverse Web API and test authentication before any data load. Validation rules are reviewed and, where needed, temporarily deactivated or extended with a migration-context condition.

  3. Owner reconciliation

    We extract every distinct owner UUID from Deals and Tasks and map them to the destination Dynamics 365 User table by email. Any owner without a matching User is added to a reconciliation queue with the owner name, email, and record count. The customer's Dynamics admin provisions the missing Users before production migration begins. Migration cannot proceed with unresolved OwnerId references because Dynamics requires a valid User or Team for assignment.

  4. Supabase data export and transform

    We export all records from each Supabase table in dependency order: Companies first, then Contacts with AccountId resolved, then Deals with OwnerId and category values mapped, then Tasks with task type from the props enum, then Notes. We transform data types at export time (UUIDs to string, Postgres booleans to 1/0, custom JSON columns to text or split across multiple fields) to match Dataverse column types before loading.

  5. Dataverse API load with reconciliation

    We load data into Microsoft Dynamics 365 Sales via the Dataverse Web API (or Bulk API for large datasets over 50,000 records) in record-dependency order. Each phase — Accounts, Contacts, Opportunities, Tasks, Notes — emits a row-count reconciliation report comparing source record count to destination inserted count and listing any rejected records with the rejection reason. We resolve rejects before proceeding to the next phase.

  6. Cutover and post-migration handoff

    We freeze writes to the Supabase instance at cutover, run a final delta export for any records modified during the migration window, and complete the last Dataverse load. We deliver a written specification document for any deal-category or task-type logic that was defined in TypeScript props and must be rebuilt as Power Automate flows or Dataverse business rules by the customer's admin. We provide a one-week hypercare window to resolve any data issues reported by the sales team in the new Dynamics 365 environment.

Platform deep dives

Context on both ends of the pair

Atomic CRM logo

Atomic CRM

Source

Strengths

  • MIT-licensed full source code with no vendor lock-in or per-seat fees
  • Built on Supabase — Postgres backend with real-time subscriptions, auth, and storage in one stack
  • Configurable via CRM component props and Supabase Studio without forking the codebase
  • Includes PWA support, TypeScript throughout, and shadcn/ui design system out of the box
  • Integrates with GitHub, Google Workspace, Auth0, and Azure Active Directory

Weaknesses

  • No graphical admin UI for custom fields, pipeline configuration, or user management — developer required for any change
  • No built-in email sequences, marketing automation, or out-of-the-box reporting dashboards
  • No SLA, no dedicated support tier, and no official hosted option — self-managed entirely
  • Small community and limited third-party integrations compared to mainstream CRMs
  • Requires ongoing developer maintenance to keep React and Supabase dependencies current
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. 1 of 8 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

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

  • Object compatibility

    B

    1 of 8 objects need a mapping; the rest are 1:1.

  • 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

    Atomic CRM: Per Supabase rate limits applicable to your project tier.

  • Data volume sensitivity

    A

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

Estimator

Estimate your Atomic CRM 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 Atomic CRM to Microsoft Dynamics 365 Sales data migrations

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

Can't find your answer?

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

Book a free 30 minute consultation

Small migrations under 2,000 total records with no custom objects complete in two to four weeks. Migrations with custom objects, multiple deal categories, task type classification, or engagement history over 5,000 records move to six to ten weeks because of the schema audit, props-based enum capture, and multi-phase reconciliation. Atomic CRM instances tend to be smaller than enterprise CRM installs, so most fall into the shorter range.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Atomic CRM.
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