CRM migration
Field-level mapping, validation, and rollback between Firmao CRM and Microsoft Dynamics 365 Sales . We move data and schema; workflows are rebuilt natively in Microsoft Dynamics 365 Sales .
Firmao CRM
Source
Microsoft Dynamics 365 Sales
Destination
Compatibility
7 of 10
objects map 1:1 between Firmao CRM and Microsoft Dynamics 365 Sales .
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from Firmao CRM to Microsoft Microsoft Dynamics 365 Sales is a cross-platform structural migration that requires resolving several non-obvious schema differences. Firmao uses a flat JSON API with undocumented rate limits and no bulk endpoint, while Microsoft Dynamics 365 Sales exposes the Dataverse REST and Bulk APIs with published limits and batch operations. Deals and custom fields are gated behind Firmao's Professional tier, which we verify during scoping to prevent silent import failures where records land but the pipeline UI does not display them. The custom field naming convention (customFields.customN) requires translation to typed Dataverse attributes. We sequence Companies before Contacts and Deals before Tasks to satisfy the parent reference resolution that Firmao requires, using companyName matching as a fallback where internal IDs are not exposed. Workflows, automations, and ERP-adjacent features (production, warehouse stock as subClass envelopes) do not migrate; we deliver a written inventory of these for the customer to rebuild in Dynamics or via Power Automate.
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
Firmao CRM platform overview
Scorecard, SWOT, gotchas, and pricing for Firmao CRM.
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 Firmao 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.
Firmao CRM
Contact
Microsoft Dynamics 365 Sales
Contact or Lead (split required)
1:manyFirmao Contacts map to either Dynamics 365 Lead or Contact. We apply a split rule based on the customer's lifecycle definition in Firmao: contacts with an assigned owner and active deal association map to Contact attached to an Account; contacts without deal associations and with an unqualified status map to Lead. We preserve Firmao's custom field values (customFields.customN) in custom Dataverse attributes typed to match (string, number, date, or picklist). The WhoId on any related Activity records is resolved after the split.
Firmao CRM
Company
Microsoft Dynamics 365 Sales
Account
1:1Firmao Companies map directly to Dynamics 365 Accounts. The company domain or website field from Firmao becomes the Account Website attribute and serves as the deduplication key during import. Firmao does not expose internal IDs in GET responses, so we use companyName as the matching anchor. Account must be created before any Contact import so the AccountId lookup is satisfied at Contact insert time. Multi-address companies from Firmao map to the primary address fields on Account with additional addresses preserved in custom address fields.
Firmao CRM
Deal
Microsoft Dynamics 365 Sales
Opportunity
1:1Firmao Deals map to Dynamics 365 Opportunities. This object is gated behind Firmao Professional tier — we confirm the active plan during scoping and flag any Standard-tier accounts that contain deal records as tier-unavailable rather than migrating. The dealstage property maps to Opportunity StageName, and pipeline assignment maps to a Sales Process or Record Type that we configure before migration. Closed-won and closed-lost outcomes from Firmao become Dynamics Stage values with probability percentages preserved.
Firmao CRM
Task
Microsoft Dynamics 365 Sales
Task
1:1Firmao Tasks map to Dynamics 365 Tasks with Subject, Status, Priority, and ActivityDate preserved. Task assignment migrates by resolving Firmao owner references to Dynamics User records via email match. Firmao's subClass/subId envelope for object relationships (which Task is associated to a Contact or Deal) translates to the WhatId (regarding) reference on the Dynamics Task, resolved after Contact and Opportunity import completes.
Firmao CRM
Product
Microsoft Dynamics 365 Sales
Product2
1:1Firmao Products map to Dynamics Product2 records. The productCode field maps to Product Number. Where Firmao products have per-warehouse stock state stored as subClass=warehouse entries (netPriceInStore, currentStoreState), we extract each subId variant as a separate warehouse location and recreate them as custom fields or related records in Dynamics depending on whether the destination org includes the Inventory and Warehouse Management module. Base product pricing migrates to the Standard Price Book.
Firmao CRM
User
Microsoft Dynamics 365 Sales
User
1:1Firmao Users (name, email, role) map to Dynamics 365 User records resolved by email match. We export the complete user list and map owner assignments on Deals and Tasks. Users without a matching Dynamics User go to a reconciliation queue for the customer's admin to provision before record import resumes. Inactive or archived Firmao users map to inactive Dynamics users to preserve historical assignment without granting active seat licenses.
Firmao CRM
Custom Field
Microsoft Dynamics 365 Sales
Custom Attribute
lossyFirmao custom fields use dot-notation keys (customFields.custom5) without human-readable labels in the API response. We retrieve a sample record via GET to enumerate which custom fields are populated, cross-reference with the customer's import documentation, and exclude fields with no values in the sample (potentially deleted fields). Each populated custom field is created as a typed custom attribute in the Dynamics solution before migration begins. Custom fields are gated behind Firmao Professional tier, so we confirm the active plan during scoping.
Firmao CRM
Tag
Microsoft Dynamics 365 Sales
Multi-Select Picklist
lossyFirmao tags are stored as a comma-separated property on the Contact or Company record (no dedicated /tags endpoint exists). We extract the tag values, parse them, and create a multi-select picklist attribute in Dynamics for the relevant entity. The customer chooses whether to use a single global tag field or separate tag fields per entity (Contact Tags, Account Tags) during scoping.
Firmao CRM
Invoice
Microsoft Dynamics 365 Sales
Invoice
1:1Firmao Invoice records (headers and line items with VAT tax codes and payment status) map to Dynamics 365 Invoice. Invoice is a standard object in Sales Professional and above. We map line item quantity, unit price, tax code, and payment terms. Firmao invoice PDFs stored in the cloud vault are not accessible via REST API and do not migrate as blobs; we flag them for manual retrieval and re-upload to Dynamics Notes or SharePoint post-migration.
Firmao CRM
Project
Microsoft Dynamics 365 Sales
Project (Dynamics 365 Project Operations) or Custom Entity
1:1Firmao Projects (Professional+ with Gantt and Kanban) map to Dynamics 365 Project Operations if the destination license includes it, or to a custom Project entity if not. We migrate project name, description, start and end dates, and task associations. Gantt bar positions, Kanban column configuration, and visual layout data do not transfer — these are layout metadata not stored as data records. We flag these for manual rebuild or reconfiguration in the destination.
| Firmao CRM | Microsoft Dynamics 365 Sales | Compatibility | |
|---|---|---|---|
| Contact | Contact or Lead (split required)1:many | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Product | Product21:1 | Fully supported | |
| User | User1:1 | Fully supported | |
| Custom Field | Custom Attributelossy | Fully supported | |
| Tag | Multi-Select Picklistlossy | Fully supported | |
| Invoice | Invoice1:1 | Fully supported | |
| Project | Project (Dynamics 365 Project Operations) or Custom Entity1: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.
Firmao CRM gotchas
Tier-gated objects cause silent import failures
Custom field keys are dynamic and not self-documenting
Parent-child object import order is mandatory
Warehouse stock state is subClass-embedded, not top-level
API login is auto-generated and tied to company ID
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 plan verification
We audit the source Firmao account across plan tier (Standard/Professional/Enterprise/Supreme), record counts per object (Contacts, Companies, Deals, Tasks, Products, Users), populated custom fields, and active pipeline stages. We verify the plan tier by querying the API and confirming which objects are accessible. We ask the customer to provide the Firmao import documentation for custom field label cross-referencing. The discovery output is a written scope with record counts per object, a confirmation of which objects are tier-gated, and a migration timeline estimate based on conservative per-record rate-limit assumptions.
Destination schema preparation
We create the Microsoft Dynamics 365 Sales solution in a Sandbox environment. This includes provisioning custom attributes for every active Firmao custom field (customFields.customN translated to typed Dataverse attributes), creating Account and Contact Record Types if multiple sales processes are in scope, configuring Opportunity Stage values to match the Firmao pipeline stages, and setting up the multi-select picklist attributes for Tags. We also create a custom attribute hs_original_lifecycle__c on Contact to preserve any Firmao lifecycle stage value for audit. Schema is deployed via Dataverse API into Sandbox for customer validation before production.
Owner and user reconciliation
We extract every distinct Firmao User referenced on Company, Contact, Deal, and Task records and match by email against the Dynamics 365 destination User table. Owners without a matching Dynamics User go to a reconciliation queue. The customer's Dynamics admin provisions any missing Users (active or inactive based on whether the original Firmao user is still active). Migration cannot proceed past this step because OwnerId references are required on most standard objects in Dynamics.
Sandbox migration and validation
We run a full migration into the Dynamics Sandbox using production-like data volume. The customer's RevOps lead reconciles record counts (Accounts in, Contacts in, Opportunities in, Tasks in), spot-checks 20-40 random records against the Firmao source, and validates that parent-child relationships (Account-to-Contact, Opportunity-to-Task) are intact. We also verify that custom field values landed in the correct Dataverse attributes. Any mapping corrections happen here, not in production.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from Firmao Companies), Contacts and Leads (with the split rule applied and AccountId or Lead resolved), Opportunities (with AccountId, OwnerId, and RecordTypeId resolved — Deals are skipped entirely if the source account is on Standard tier), Products and Pricebook entries, Tasks (with WhatId resolved to Opportunity or Account), Invoices, and Custom Fields. We use conservative per-record delays and monitor for throttling responses. Each phase emits a row-count reconciliation report before the next phase begins.
Cutover, delta sync, and handoff
We freeze Firmao writes during the cutover window, run a final delta migration of any records modified during the migration run, then enable Microsoft Dynamics 365 Sales as the system of record. We deliver a written inventory of Firmao workflows, automations, and Gantt/Kanban layout data that requires manual rebuild in Dynamics (via Dynamics workflow or Power Automate) or Project Operations. We support a five-day hypercare window where we resolve reconciliation issues raised by the customer's sales team. We do not rebuild automations, sequences, or ERP modules as part of the migration scope.
Platform deep dives
Firmao CRM
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 Firmao CRM 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
Firmao CRM: Not publicly documented.
Data volume sensitivity
Firmao CRM 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 Firmao CRM to Microsoft Dynamics 365 Sales migration scoping. Not seeing yours? Book a call.
Walk through your Firmao CRM 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 Firmao CRM
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.