CRM migration

Migrate from PHP CRM to Microsoft Dynamics 365 Sales

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

PHP CRM logo

PHP CRM

Source

Microsoft Dynamics 365 Sales

Destination

Microsoft Dynamics 365 Sales  logo

Compatibility

75%

6 of 8

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

Complexity

BStandard

Timeline

4-8 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from PHP CRM to Microsoft Microsoft Dynamics 365 Sales is a structural migration that requires careful schema enumeration on the PHP CRM side because the platform exposes no standardized field taxonomy. PHP CRM allows user-defined custom fields on every standard object, so no two deployments share the same schema. We begin every engagement with a mandatory discovery phase that enumerates every custom field, its data type, and its current usage before writing any field mapping. We resolve parent-record dependencies by importing Accounts (from PHP CRM Companies) before Contacts, and Opportunities (from PHP CRM Deals) after Accounts, so that every foreign-key relationship is satisfied at insert time. PHP CRM does not publish API rate limits or endpoint schemas publicly; we pace conservatively and fall back to CSV export when API access is unavailable or unreliable. File attachments stored on the PHP CRM filesystem are not accessible via any documented API endpoint; we extract them to a local directory and provide a re-upload guide using Dynamics 365's native bulk file tools. Automated workflows in PHP CRM live in application code and are not exposed via API; we deliver a written workflow inventory with Microsoft Dynamics 365 Sales equivalents for your admin to rebuild 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

PHP CRM logo

PHP CRM

What's pushing teams away

  • Extremely limited online presence with very few user reviews makes it difficult to assess long-term reliability and support quality.
  • Advanced feature setup complexity frustrates less technical users despite the interface being described as user-friendly for basic navigation.
  • Performance issues reported in G2 reviews suggest the platform may struggle under heavier data volumes or concurrent user loads.
  • Lack of transparent API documentation and community resources makes integrations and custom development high-effort for internal teams.

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

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

PHP CRM

Contact

maps to

Microsoft Dynamics 365 Sales

Lead or Contact (split required)

1:many
Fully supported

PHP CRM Contacts map to either Salesforce-style Leads or Contacts in Microsoft Dynamics 365 Sales . We use the presence of an Account (Company) association and lifecycle stage flag to determine the split: Contacts with an associated Company record map to Dynamics 365 Contact linked to the corresponding Account; Contacts without a Company association map to Lead. The original PHP CRM contact_id is preserved in a custom field php_crm_contact_id__c on both Lead and Contact for audit and reconciliation.

PHP CRM

Company

maps to

Microsoft Dynamics 365 Sales

Account

1:1
Fully supported

PHP CRM Company records map 1:1 to Dynamics 365 Account. The Company name becomes Account Name, domain becomes Website, and industry custom fields map to the standard Industry picklist where values align. Account is the first object migrated because Contacts, Deals (Opportunities), and Tasks reference it. We extract the full company taxonomy during discovery since PHP CRM allows user-defined fields on Company with no standardized schema.

PHP CRM

Deal

maps to

Microsoft Dynamics 365 Sales

Opportunity

1:1
Fully supported

PHP CRM Deals map to Microsoft Dynamics 365 Sales Opportunities. Deal value maps to EstimatedRevenue, expected close date maps to CloseDate, and deal stage maps to a Microsoft Dynamics 365 Sales Process stage. We resolve the parent Account (Company) reference before Opportunity insert so that the AccountId lookup is satisfied. PHP CRM pipeline and stage names are extracted from the source instance and mapped to a pre-configured Sales Process in Dynamics 365 during the schema design phase.

PHP CRM

Task

maps to

Microsoft Dynamics 365 Sales

Task

1:1
Fully supported

PHP CRM Tasks map directly to Dynamics 365 Task records. We preserve due date, status, priority, and description fields. Entity linkage (Contact, Company, Deal) migrates by resolving the PHP CRM record IDs to their computed Dynamics 365 IDs during the migration run. The original PHP CRM task_id is stored in a custom field php_crm_task_id__c for audit traceability.

PHP CRM

Note

maps to

Microsoft Dynamics 365 Sales

Annotation (Note)

1:1
Fully supported

PHP CRM Notes attached to any entity migrate as Dynamics 365 Annotation records (the standard Note object). Note body and title transfer as-is. We resolve the objecttypecode and objectid references to the migrated Dynamics 365 record IDs after parent record creation. Rich-text formatting in PHP CRM notes is preserved as HTML in the Annotation textbody field.

PHP CRM

Activity

maps to

Microsoft Dynamics 365 Sales

Task or EmailMessage

1:1
Fully supported

PHP CRM Activity records (calls, emails, meetings) vary by deployment since activity schemas are not standardized. We enumerate the actual activity fields present in the source instance during discovery. Call activities map to Task with TaskSubtype=Call and call duration preserved in a custom field; email activities map to EmailMessage linked to the parent Contact or Lead; meeting activities map to Event with start/end times preserved.

PHP CRM

Pipeline

maps to

Microsoft Dynamics 365 Sales

Sales Process + Record Type

lossy
Fully supported

PHP CRM Pipelines map to Microsoft Dynamics 365 Sales Process definitions. Each pipeline in PHP CRM becomes a Record Type on Opportunity in Microsoft Dynamics 365 Sales , with a corresponding Sales Process that scopes the available stage values to that pipeline. Pipeline stage names are extracted from the source instance and mapped to Dynamics 365 stage names, with any stages that have no clear Dynamics equivalent flagged for the customer's admin to review.

PHP CRM

User

maps to

Microsoft Dynamics 365 Sales

User

1:1
Fully supported

PHP CRM User records (owner assignments on Deals, Tasks) map to Dynamics 365 User by email matching. We extract all owner references during discovery and match against the destination User table. Any PHP CRM owner without a corresponding Dynamics 365 User is held in a reconciliation queue for the customer's admin to provision before record import resumes. Inactive PHP CRM users map to inactive Dynamics users with their records reassigned to a designated admin owner.

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.

PHP CRM logo

PHP CRM gotchas

High

No publicly documented API rate limits or endpoints

High

Attachment and file storage not accessible via API

Medium

Custom field taxonomy varies per deployment

Medium

Workflows and automations are not portable

Low

Limited review corpus for accurate benchmarking

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

  • PHP CRM has no publicly documented API rate limits or endpoint schema

    PHP CRM exposes a developer tools page but publishes no rate limits, endpoint documentation, or authentication schema publicly. We request direct API credentials and test throttling behavior during scoping. If API access is unavailable or unreliable, we fall back to CSV export via the PHP CRM admin panel. Without published limits, we pace imports conservatively and chunk requests to avoid triggering undocumented throttling rules that could interrupt a live migration. The lack of a documented API also means any custom PHP code modifications to the CRM can alter API behavior unpredictably, requiring a separate code audit if the source deployment has been customized.

  • File attachments are stored on the filesystem, not accessible via API

    PHP CRM stores file attachments on the local server filesystem (or configured cloud storage path) rather than through any documented API endpoint. We cannot programmatically extract attachments for automated import into Dynamics 365. We export all identified attachment paths to a local directory mapped by PHP CRM record ID and parent entity, then provide a re-upload guide using Dynamics 365's native SharePoint document management and Dataverse file import tools for post-migration manual re-attachment. This is a manual step that must be planned into the cutover timeline.

  • Custom field schemas vary per PHP CRM deployment

    PHP CRM allows user-defined custom fields on all standard objects without enforcing any standardized field naming or type taxonomy. Every PHP CRM deployment has a unique custom field inventory. We run a mandatory discovery phase enumerating every custom field in the source instance, recording its name, data type, and current non-null record count, before writing any field mapping to Dynamics 365. Custom fields that map to Dynamics 365 picklist types require pre-creation of the picklist values in the destination org before import begins.

  • Workflows and automations are application code, not portable data

    PHP CRM automated workflows and business logic live in PHP application code or admin-configured rules that are not exposed via API. We do not migrate automations. Every migration plan includes a written inventory of every identified workflow, its trigger conditions, configured actions, and a recommended Dynamics 365 Power Automate or classic workflow equivalent, delivered to the customer's admin for manual recreation post-migration. This inventory is generated from a combination of PHP CRM admin panel review and, where available, source code inspection of the PHP CRM installation.

  • Dynamics 365 validation rules and field security can block record import

    Microsoft Dynamics 365 Sales enforces validation rules, required field constraints, and field-level security that can cause record rejection during import even when source data appears valid. Common blocking scenarios include missing required lookups, invalid picklist values from non-standard PHP CRM enumerations, and date formats that do not match the org's regional settings. We coordinate with the customer's Dynamics 365 admin to temporarily bypass validation rules during migration load using a migration-mode flag, or extend validation rules with a migration-context check, then restore full validation after cutover.

Migration approach

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

  1. Discovery and custom field enumeration

    We audit the PHP CRM instance via admin panel and, where available, direct API access. We enumerate every active object (Contacts, Companies, Deals, Tasks, Notes, Activities), count records per object, identify all user-defined custom fields and their data types, and extract the pipeline and stage definitions. If API access is unavailable, we request CSV exports from the PHP CRM admin panel for each object. The discovery output is a written schema inventory and a migration feasibility assessment identifying any objects that cannot be extracted automatically.

  2. Schema design and Microsoft Dynamics 365 Sales configuration

    We design the destination Microsoft Dynamics 365 Sales schema based on the discovered PHP CRM field inventory. This includes creating custom fields in the target org (mapped by data type to Dynamics 365 field types), configuring Sales Processes and Record Types to match PHP CRM pipeline definitions, setting up the Lead and Contact split logic based on the customer's Company association patterns, and coordinating with the customer's Dynamics 365 admin to grant the migration user the necessary Dataverse roles. Schema is validated in a Dynamics 365 Sandbox before production migration begins.

  3. Sandbox migration and reconciliation

    We run a full migration into a Dynamics 365 Sandbox using production-like data volumes extracted from PHP CRM. The customer's CRM lead reviews record counts (Accounts, Contacts, Opportunities, Tasks, Notes), spot-checks 25-50 records against the PHP CRM source for field-level accuracy, and validates the pipeline stage mapping. Any field mapping corrections, missing picklist values, or schema gaps are resolved in the Sandbox before production migration begins. This step also confirms the attachment file inventory and flags any records with attachments that require post-migration re-attachment.

  4. Owner reconciliation and User provisioning

    We extract every distinct PHP CRM owner referenced on Deals, Tasks, and Activity records and match by email against the destination Dynamics 365 User table. Any PHP CRM owner without a matching Dynamics 365 User is added to a reconciliation queue. The customer's Dynamics 365 admin provisions missing Users (and deactivates any former employees) before record import resumes. This step is a prerequisite for all subsequent phases because OwnerId references are required on Opportunity and Task records.

  5. Production migration in dependency order

    We run production migration in record-dependency order: Accounts (from PHP CRM Companies), then Contacts and Leads (with AccountId resolved for Contacts), then Opportunities (with AccountId, OwnerId, and Sales Process resolved), then Tasks and Activities (with parent record IDs resolved via lookup), then Notes (with parent record references resolved). Each phase emits a row-count reconciliation report showing source count, destination count, and error count before the next phase begins. We use the Dynamics 365 Dataverse REST API with batch chunking and exponential backoff on throttle responses.

  6. Cutover, validation, and workflow handoff

    We freeze PHP CRM writes during cutover, run a final delta migration of records modified during the migration window, then enable Microsoft Dynamics 365 Sales as the system of record. We deliver the written workflow and automation inventory to the customer's admin team for Power Automate rebuild. We provide a 72-hour hypercare window for reconciliation issues raised by the sales team. We do not rebuild PHP CRM workflows as Power Automate flows inside the standard migration scope; that is a separate engagement.

Platform deep dives

Context on both ends of the pair

PHP CRM logo

PHP CRM

Source

Strengths

  • Free open-source self-hosted option with full source code access for modification and audit.
  • Managed cloud hosting from $120/year is low cost compared to per-seat SaaS alternatives.
  • REST API available for lead capture from websites and external integrations.
  • Fully customizable codebase allows adding or modifying modules without vendor constraints.
  • Self-hosted data on customer server provides complete data sovereignty and compliance flexibility.

Weaknesses

  • Very limited online reviews and community presence makes due diligence difficult.
  • API documentation is not publicly detailed, requiring direct access to the developer tools page for integration planning.
  • Small team or niche market positioning raises concerns about long-term product support and development roadmap.
  • Advanced customization requires PHP development expertise, limiting adoption to teams with technical resources.
  • Performance issues reported in reviews suggest potential scaling limitations under heavier workloads.
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 PHP 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

    PHP CRM: Not publicly documented.

  • Data volume sensitivity

    B

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

Estimator

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

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

Can't find your answer?

Walk through your PHP 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

Typical migrations land between four and eight weeks for straightforward cases under 10,000 Contacts, 2,000 Deals, and under 50 custom fields with API access available. Migrations exceeding these thresholds, requiring CSV-first extraction due to unavailable PHP CRM API, or involving complex multi-stage pipeline mappings with many custom fields move to ten to sixteen weeks. PHP CRM's lack of publicly documented API increases discovery and extraction time relative to platforms with full API access, which we account for in the scoping estimate.

Adjacent paths

Related migrations to explore

Ready when you are

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