CRM migration

Migrate from Firmao CRM to Microsoft Dynamics 365 Sales

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 logo

Firmao CRM

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

70%

7 of 10

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

Complexity

BStandard

Timeline

3-5 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

Firmao CRM logo

Firmao CRM

What's pushing teams away

  • Customization requires technical knowledge — configuring the system to fit unique business workflows is cited as a barrier for non-technical administrators.
  • Basic tier feels feature-limited; users report needing to upgrade to Professional or Enterprise to access custom fields, deal tracking, and Gantt/Kanban diagrams.
  • No publicly documented rate limits means migration tooling must handle undocumented throttling conservatively, which can slow large data transfers.
  • The platform's heavy ERP-adjacent feature set creates complexity for teams that only need a straightforward CRM, leading to feature-overload frustration.

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

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

maps to

Microsoft Dynamics 365 Sales

Contact or Lead (split required)

1:many
Fully supported

Firmao 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

maps to

Microsoft Dynamics 365 Sales

Account

1:1
Fully supported

Firmao 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

maps to

Microsoft Dynamics 365 Sales

Opportunity

1:1
Fully supported

Firmao 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

maps to

Microsoft Dynamics 365 Sales

Task

1:1
Fully supported

Firmao 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

maps to

Microsoft Dynamics 365 Sales

Product2

1:1
Fully supported

Firmao 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

maps to

Microsoft Dynamics 365 Sales

User

1:1
Fully supported

Firmao 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

maps to

Microsoft Dynamics 365 Sales

Custom Attribute

lossy
Fully supported

Firmao 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

maps to

Microsoft Dynamics 365 Sales

Multi-Select Picklist

lossy
Fully supported

Firmao 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

maps to

Microsoft Dynamics 365 Sales

Invoice

1:1
Fully supported

Firmao 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

maps to

Microsoft Dynamics 365 Sales

Project (Dynamics 365 Project Operations) or Custom Entity

1:1
Fully supported

Firmao 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.

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.

Firmao CRM logo

Firmao CRM gotchas

High

Tier-gated objects cause silent import failures

Medium

Custom field keys are dynamic and not self-documenting

Medium

Parent-child object import order is mandatory

Low

Warehouse stock state is subClass-embedded, not top-level

Low

API login is auto-generated and tied to company ID

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

  • Firmao Deals and custom fields are Professional-tier gated

    Deals, custom field definitions, Gantt and Kanban views, and the sales plan are available only on Firmao Professional (€29/user/month) and above. Standard-tier accounts cannot export deal data via the API — the records may not exist at the endpoint even if they appear in the UI. We confirm the customer's active plan tier during scoping, enumerate which objects are accessible, and ask the customer to upgrade before we begin migration import if deal data is in scope. Migrations that skip this step land with no Deals in the destination and require a second migration pass after upgrade.

  • Firmao has no bulk API — large migrations use single-record POST only

    Firmao's REST API exposes no bulk endpoint; all writes go through repeated single-record POST requests. Undocumented rate limits force conservative probe-and-backoff handling, extending transfer timelines for large record sets. We chunk records into batches of 50, introduce per-request delays, and monitor for 429 responses to dynamically adjust throughput. A migration of 30,000 contacts that would take hours on a documented-rate-limit API can take days on Firmao's undocumented limits. We estimate timeline with a conservative 3-5 second per-record assumption validated during discovery.

  • Parent-child import sequencing is mandatory for relationship integrity

    Firmao's API does not expose internal IDs in GET responses, so we cannot reference a Firmao-generated ID during import. Companies must be imported before Contacts, and Deals before Tasks, otherwise companyId on Contact and dealId on Task resolve to null. We use companyName matching for Contact-to-Company resolution and dealName or dealValue matching for Task-to-Deal resolution as the fallback anchor. We provide a sequencing manifest before migration begins and pause between phases for the customer to verify the relationship map.

  • Custom field dot-notation keys lack human-readable labels in the API

    Firmao's custom field names (customFields.custom5, customFields.custom12) are not self-documenting in the API response — there is no label or description attached to the key. The import documentation defines them but requires a logged-in customer account to access. We retrieve a sample record via GET first to enumerate which custom fields are populated, then cross-reference with the customer's import documentation they provide. Fields with no values in the sample export are flagged as potentially deleted and excluded from migration to avoid creating empty Dataverse attributes.

  • Warehouse stock is subClass-embedded, not a top-level object

    Product inventory per warehouse in Firmao is not a standalone object — it appears as subClass=warehouse entries in the product modification log with subId identifying each warehouse variant. A single GET on /product returns the base product, and warehouse-level netPriceInStore and currentStoreState appear as separate subId entries. We extract all subId variants per product and recreate them as individual warehouse locations in Dynamics, either as custom fields on Product2 or as related records depending on the destination's licensed modules.

Migration approach

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

Firmao CRM logo

Firmao CRM

Source

Strengths

  • Generous free trial (14 days) with full feature access lets teams validate fit before committing to a paid tier.
  • Per-seat pricing with no per-contact billing means unlimited contacts on any plan — ideal for high-contact-volume SMBs.
  • Cloud storage included in every tier (2–10GB) reduces the need for a separate document management tool.
  • Multi-language and multi-currency support makes it viable for teams operating across European markets.
  • Android and iOS mobile apps provide field access for sales teams working outside the office.

Weaknesses

  • Rate limits are not publicly documented, which forces migration tooling to probe-and-backoff cautiously and slows large data transfers.
  • ERP-adjacent complexity (production, courier integrations, warehouse stock) is overkill for teams seeking a pure CRM tool.
  • Custom fields require a Professional or higher tier, gating basic users from one of the most common CRM customization needs.
  • No bulk API endpoint means large migrations must be executed via repeated single-record POST requests, extending transfer timelines.
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. 2 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 Firmao CRM and Microsoft Dynamics 365 Sales .

  • Object compatibility

    B

    2 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

    Firmao CRM: Not publicly documented.

  • Data volume sensitivity

    B

    Firmao CRM doesn't expose a bulk API — REST + parallelization used for high-volume runs.

Estimator

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

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

Can't find your answer?

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 consultation

Most migrations land between three and five weeks for accounts with fewer than 15,000 Contacts, 3,000 Deals, and no custom objects. Migrations with large task histories, multi-stage deal pipelines, or source accounts on the Standard tier (where Deals and custom fields require a pre-migration upgrade before they can be exported) extend to seven to eleven weeks. The primary timeline variable is Firmao's undocumented rate limits, which we estimate conservatively at 3-5 seconds per record during discovery to produce a realistic schedule.

Adjacent paths

Related migrations to explore

Ready when you are

Move from Firmao 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