CRM migration
Field-level mapping, validation, and rollback between PHP CRM and Salesforce Sales Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Sales Cloud.
PHP CRM
Source
Salesforce Sales Cloud
Destination
Compatibility
9 of 12
objects map 1:1 between PHP CRM and Salesforce Sales Cloud.
Complexity
BStandard
Timeline
3-5 weeks
Overview
Moving from PHP CRM to Salesforce requires translating a flat or loosely structured PHP CRM export into Salesforce's relational schema with its separate Lead and Contact objects, Account-Contact hierarchy, and Opportunity pipeline stages. PHP CRM provides no publicly documented API rate limits and does not expose attachments, email templates, or workflows via API, so we extract data through admin CSV exports or the REST endpoint where available, sequence parent records (Accounts, Contacts) before child records (Opportunities, Tasks), and enumerate every custom field present in the source instance during a mandatory discovery phase. Salesforce validation rules and field-level security are pre-coordinated with the customer's admin to prevent record rejection during Bulk API ingestion. We do not migrate workflows or automations as code; we deliver a written inventory of every active rule for the customer's admin to rebuild in Salesforce Flow.
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.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a PHP CRM object lands in Salesforce Sales Cloud, 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
Salesforce Sales Cloud
Contact
1:1PHP CRM Contact records map directly to Salesforce Contact. We use the contact's email address as the external ID and dedupe key during import. The contact's linked Company in PHP CRM must resolve to a Salesforce AccountId before Contact insert, which requires Company migration to precede Contact migration. Any source contact without a company link is inserted as a Contact with no AccountId and flagged in the reconciliation report.
PHP CRM
Company
Salesforce Sales Cloud
Account
1:1PHP CRM Company records map to Salesforce Account. Company name becomes Account Name, domain fields map to Website, and industry data maps to Industry picklist. Account is the first object imported because every Contact has an AccountId foreign key. We handle Companies without contacts as standalone Account records.
PHP CRM
Deal
Salesforce Sales Cloud
Opportunity
1:1PHP CRM Deals map to Salesforce Opportunity. Deal value maps to Amount, expected close date to CloseDate, deal owner to OwnerId via email matching against the User table, and deal stage to StageName via a stage-mapping table we build during scoping. Deals linked to a source Company map to an AccountId we resolved from the Account import phase.
PHP CRM
Pipeline
Salesforce Sales Cloud
Record Type + Sales Process
lossyPHP CRM's pipeline definitions map to Salesforce Record Types on Opportunity, each paired with a corresponding Sales Process that restricts available StageName values. We extract the pipeline names and stage sets from the source instance and configure equivalent Salesforce Record Types before Opportunity import begins.
PHP CRM
Pipeline Stage
Salesforce Sales Cloud
Opportunity Stage
lossyPHP CRM stage names and probabilities migrate to Salesforce Opportunity Stage values with matching probability percentages rounded to Salesforce-allowed integers. Stages with no direct Salesforce equivalent are mapped to the nearest available StageName and flagged in the mapping document for customer review.
PHP CRM
Task
Salesforce Sales Cloud
Task
1:1PHP CRM Task records map to Salesforce Task with Status, Priority, ActivityDate, and Description preserved. Task assignment migrates by resolving the PHP CRM owner ID to Salesforce OwnerId via email matching. Task linked entities (Contact, Company, Deal) resolve via the Salesforce IDs computed during the parent record import phase.
PHP CRM
Note
Salesforce Sales Cloud
Note
1:1PHP CRM Notes migrate to Salesforce Note records linked via ContentDocumentLink to the parent Contact, Account, or Opportunity. Note body transfers as plain text or rich text depending on what the source export contains. If the customer used HTML-formatted notes, we preserve the HTML and let Salesforce render it in its note editor.
PHP CRM
Activity
Salesforce Sales Cloud
Task + Event
1:1PHP CRM Activity records (calls, emails, meetings) map to Salesforce Task (for calls and emails) and Event (for meetings) based on the activity type field. Each activity type in PHP CRM is enumerated during discovery and mapped individually because PHP CRM activity schemas vary by deployment. Activity timestamps preserve ordering in the Salesforce activity timeline.
PHP CRM
Custom Field
Salesforce Sales Cloud
Custom Field (__c)
1:1PHP CRM custom fields on any standard object are enumerated during discovery and mapped to Salesforce custom fields of equivalent type. Text fields map to Text, numeric fields to Number, dates to Date, and picklists to Picklist. We prepend the source object name to the custom field name to avoid naming collisions (e.g., Industry__c from the Account object). Custom field types are validated against the source export before Salesforce field creation begins.
PHP CRM
User/Owner
Salesforce Sales Cloud
User
1:1PHP CRM Users referenced as Deal and Task owners map to Salesforce User records by email address matching. We extract the complete owner list from source records and reconcile against the Salesforce destination org's User table. Owners with no matching Salesforce User are held in a provisioning queue for the customer's admin to create before record import resumes.
PHP CRM
Tag/Label
Salesforce Sales Cloud
Custom Text Field or Picklist
lossyPHP CRM tags are per-instance vocabulary labels applied to any record. We extract the full tag taxonomy from the source and map tags to a Salesforce custom text field (for high-cardinality vocabularies) or a picklist (for controlled vocabularies under 300 values). The customer selects the strategy during scoping.
PHP CRM
Attachment
Salesforce Sales Cloud
ContentDocument
1:1PHP CRM stores file attachments on the local server filesystem or configured cloud storage path, not through a documented API endpoint. We cannot programmatically extract attachments. We export attachment filenames and storage paths to a CSV for the customer's IT team to re-upload manually using Salesforce Files Connect or the native Salesforce file upload interface post-migration.
| PHP CRM | Salesforce Sales Cloud | Compatibility | |
|---|---|---|---|
| Contact | Contact1:1 | Fully supported | |
| Company | Account1:1 | Fully supported | |
| Deal | Opportunity1:1 | Fully supported | |
| Pipeline | Record Type + Sales Processlossy | Fully supported | |
| Pipeline Stage | Opportunity Stagelossy | Fully supported | |
| Task | Task1:1 | Fully supported | |
| Note | Note1:1 | Fully supported | |
| Activity | Task + Event1:1 | Fully supported | |
| Custom Field | Custom Field (__c)1:1 | Fully supported | |
| User/Owner | User1:1 | Fully supported | |
| Tag/Label | Custom Text Field or Picklistlossy | Fully supported | |
| Attachment | ContentDocument1: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.
PHP CRM gotchas
No publicly documented API rate limits or endpoints
Attachment and file storage not accessible via API
Custom field taxonomy varies per deployment
Workflows and automations are not portable
Limited review corpus for accurate benchmarking
Salesforce Sales Cloud gotchas
Workflow Rules and Process Builder are retired
Bulk API batch quota exhaustion during large imports
Storage overage billing is non-obvious
Account-Contact many-to-many relationship mapping
Territory and team member import ordering dependencies
Pair-specific challenges
Migration approach
Discovery and PHP CRM environment assessment
We assess the source PHP CRM deployment across hosting model (self-hosted or managed cloud), API availability (developer tools access, test credentials), admin panel CSV export capability, and active record volume for each object. We enumerate all custom fields, pipeline definitions, and stage sets. We identify attachment storage paths and any custom PHP code modifications that affect workflow behavior. The discovery output is a written scope document listing every object to migrate, the extraction method per object (API or CSV), and the custom field inventory with types.
Schema design and Salesforce destination setup
We design the Salesforce destination schema in a Sandbox. This includes provisioning custom fields (with __c API names and matching Salesforce field types), Record Types per source pipeline, Sales Processes per Record Type, and page layouts per Record Type. We coordinate with the customer's Salesforce admin on validation rule bypass during migration and confirm the migration user's permission set. Schema is validated in Sandbox before production deployment.
Parent-child dependency ordering and export sequencing
PHP CRM provides no bulk export tool and limited API, so we sequence extraction carefully: Accounts (Companies) first, then Contacts, then Opportunities, then Tasks and Activities, then custom object records last. Custom fields are enumerated from the source export before any mapping begins. For each object, we extract with parent-record IDs present so that foreign key resolution (AccountId, ContactId, WhatId, WhoId) can be computed before insert.
Sandbox migration and reconciliation
We run a full test migration into a Salesforce Sandbox using production data volume (or the most recent available snapshot). The customer's admin reviews record counts for every object, spot-checks 25-50 records for field-level accuracy against the source, and signs off the mapping before production migration begins. Any field-level corrections, validation rule adjustments, or missing custom fields are resolved at this stage. Sandbox migration typically takes 3-5 business days.
Owner reconciliation and User provisioning
We extract every distinct PHP CRM user referenced as a record owner and match by email against the Salesforce destination org's User table. Any PHP CRM owner without a matching Salesforce User is held in a provisioning queue. The customer's Salesforce admin creates the missing Users and assigns appropriate profiles and roles. Migration cannot proceed past this step because Opportunity and Task OwnerId references must be valid at insert time.
Production migration in dependency order
We run production migration in this sequence: Accounts (from Companies), Contacts (with AccountId resolved), Opportunities (with AccountId, OwnerId, and RecordTypeId resolved), Tasks and Activities (with parent WhoId and WhatId resolved via Bulk API 2.0), and custom object records last. Each phase emits a row-count reconciliation report before the next begins. We use Bulk API 2.0 with batch chunking and exponential backoff on rate limit responses for all activity records.
Cutover, validation, and automation rebuild handoff
We freeze PHP CRM writes during cutover, run a final delta migration of records modified during the migration window, then mark Salesforce as the system of record. We deliver the automation inventory document listing every observed workflow and its estimated Salesforce Flow rebuild scope in hours. We support a five-business-day hypercare window for reconciliation issues. We do not rebuild PHP CRM workflows as Salesforce Flow inside the migration scope; that is a separate engagement.
Platform deep dives
PHP CRM
Source
Strengths
Weaknesses
Salesforce Sales Cloud
Destination
Strengths
Weaknesses
Complexity grading
Standard CRM migration. 3 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 PHP CRM and Salesforce Sales Cloud.
Object compatibility
3 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
PHP CRM: Not publicly documented.
Data volume sensitivity
PHP 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 PHP CRM to Salesforce Sales Cloud migration scoping. Not seeing yours? Book a call.
Walk through your PHP CRM to Salesforce Sales Cloud migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave PHP CRM
Other ways to arrive at Salesforce Sales Cloud
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.