CRM migration
Field-level mapping, validation, and rollback between PHP CRM and Pipedrive. We move data and schema; workflows are rebuilt natively in Pipedrive.
PHP CRM
Source
Pipedrive
Destination
Compatibility
9 of 12
objects map 1:1 between PHP CRM and Pipedrive.
Complexity
BStandard
Timeline
2-3 weeks
Overview
Moving from PHP CRM to Pipedrive is a schema translation from a flat, loosely structured CRM to a pipeline-centric sales CRM with a documented REST API. PHP CRM stores Contacts, Companies, Deals, Tasks, and Notes through a developer-facing API with no publicly documented rate limits or endpoint schemas; we pace conservatively during extraction and fall back to CSV export when API access is unavailable. Pipedrive organizes deal records into Pipelines and Stages that must be created in the destination before any Deal records import, which means we extract the existing stage labels from PHP CRM, map them to Pipedrive Stage names, and create the corresponding pipeline structure during the configuration phase. We migrate Activities by enumerating the actual activity fields present in the PHP CRM deployment since the platform's activity schema varies per instance. We do not migrate PHP CRM automations or workflows because they live in application code not exposed via API. We export file attachments to a local directory for the customer to re-upload through Pipedrive's bulk file import. Custom fields on every object require mandatory field-by-field enumeration before any mapping is written, preventing silent field drops during import.
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 Pipedrive, 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
Pipedrive
Person
1:1PHP CRM Contact records map directly to Pipedrive Person objects. We map standard fields (name, email, phone, address) using Pipedrive's name, email, phone, and address fields. PHP CRM custom fields on Contact require mandatory enumeration during discovery before any field-level mapping is written, as PHP CRM allows user-defined field names with no standardized taxonomy per deployment. The Person object in Pipedrive supports multiple email addresses and phone numbers; we map the primary contact field to the first value in Pipedrive's primary field and secondary values to additional data fields if present in the source.
PHP CRM
Company
Pipedrive
Organization
1:1PHP CRM Company records map to Pipedrive Organization. We map company name, domain, address, and industry fields directly. Organization is migrated first as a parent entity before Person records import so that the organization_id field can be resolved on each Person record during migration. PHP CRM custom fields on Company are enumerated during discovery and mapped to Pipedrive Organization custom fields created before import.
PHP CRM
Deal
Pipedrive
Deal
1:1PHP CRM Deal records map to Pipedrive Deal. The deal title, value, expected close date, owner, and stage fields migrate directly. PHP CRM stores deal stage as a field value (standard or custom); we extract the distinct stage labels present in the source data, create the corresponding Pipedrive Pipeline and Stage structure before Deal import, and map each source stage label to the matching Pipedrive Stage ID during record import.
PHP CRM
Pipeline
Pipedrive
Pipeline
lossyPHP CRM has no native pipeline object; pipeline structure is implied by deal stage field values. We extract all distinct stage labels used across Deals in the source instance and create a Pipedrive Pipeline with Stage entries matching the source labels. If the source has multiple distinct stage label sets (e.g., one set for direct sales and another for partner deals), we create multiple Pipedrive Pipelines and map each source record to the correct Pipeline ID during import.
PHP CRM
Pipeline Stages
Pipedrive
Stage
lossyStage names and ordering are extracted from PHP CRM Deal records at migration scoping. We create matching Pipedrive Stage entries under the corresponding Pipeline, preserve stage order from source, and assign probability percentages based on the source stage values if numeric probabilities exist, or use standard deal-to-close probability curves if they do not.
PHP CRM
Task
Pipedrive
Activity (Task subtype)
1:1PHP CRM Task records migrate to Pipedrive Activity records with type=Task. We map due date, assignee (resolved via Owner/User email matching), status, and linked entity (Person, Organization, Deal) via Pipedrive's deal_id and person_id fields. PHP CRM task content migrates as the activity note body. Task status (pending, completed) maps to Pipedrive's done flag.
PHP CRM
Note
Pipedrive
Activity (Note subtype)
1:1PHP CRM Notes attach free-text content to any entity (Person, Organization, Deal). We map Notes to Pipedrive Activity records with type=Note, preserving the content as the activity body and linking to the target entity via the appropriate Pipedrive foreign key (person_id, org_id, deal_id) resolved after parent record migration.
PHP CRM
Activity (generic)
Pipedrive
Activity (Call, Email, Meeting)
1:1PHP CRM Activity records use a variable schema per deployment. We enumerate every activity field present in the source instance during discovery, identify which represent calls (disposition, duration), emails (subject, body, direction), and meetings (start time, end time, location), and map them to the corresponding Pipedrive Activity subtypes. Any activity field that does not match a Pipedrive native field becomes a Pipedrive Activity custom field. This per-deployment enumeration step is mandatory; skipping it results in silent field drops for non-standard activity attributes.
PHP CRM
User / Owner
Pipedrive
User
1:1PHP CRM User records map to Pipedrive Users. We resolve owners by email matching. Any PHP CRM Owner without a matching Pipedrive User goes to a reconciliation queue for the customer's admin to provision before Deal import resumes. Inactive or deleted PHP CRM users are flagged for decision: map to an inactive Pipedrive User (preserving historical assignment) or reassign to an active owner.
PHP CRM
Tag / Label
Pipedrive
Label
1:1Tags in PHP CRM label records for segmentation. We extract the full tag vocabulary from the source instance, create corresponding Pipedrive Labels, and map each tagged record to the matching Pipedrive Label ID. Tag vocabulary is per-instance and non-standardized, so the full taxonomy is enumerated during discovery rather than assumed.
PHP CRM
Custom Field (all objects)
Pipedrive
Custom Field
lossyPHP CRM custom fields on all standard objects require mandatory discovery enumeration before any mapping is written. We enumerate every custom field name, data type, and object association in the source instance, then pre-create matching Pipedrive custom fields (text, number, date, picklist, checkbox) on the corresponding Pipedrive object before data import. PHP CRM stores field data in its own schema without standardized field naming; we match by semantic content (e.g., source field 'industry_type' on Company maps to Pipedrive Organization custom field 'industry_type') rather than by field name coincidence.
PHP CRM
Attachment / File
Pipedrive
(Not migrated via API)
1:1PHP CRM stores file attachments on the local filesystem (self-hosted) or configured cloud storage path. No documented API endpoint exists for attachment extraction. We export the attachment directory to local storage for customer review and advise re-uploading through Pipedrive's bulk file import tools post-migration. This is explicitly flagged as a manual post-migration step in the scope document.
| PHP CRM | Pipedrive | Compatibility | |
|---|---|---|---|
| Contact | Person1:1 | Fully supported | |
| Company | Organization1:1 | Fully supported | |
| Deal | Deal1:1 | Fully supported | |
| Pipeline | Pipelinelossy | Fully supported | |
| Pipeline Stages | Stagelossy | Mapping required | |
| Task | Activity (Task subtype)1:1 | Fully supported | |
| Note | Activity (Note subtype)1:1 | Fully supported | |
| Activity (generic) | Activity (Call, Email, Meeting)1:1 | Fully supported | |
| User / Owner | User1:1 | Fully supported | |
| Tag / Label | Label1:1 | Fully supported | |
| Custom Field (all objects) | Custom Fieldlossy | Fully supported | |
| Attachment / File | (Not migrated via API)1: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
Pipedrive gotchas
Custom field hash keys differ per account
Export access gated by visibility groups
Token-based API rate limits since December 2024
Sequences and Automations not exposed via REST API
Cost escalates via workflow caps and add-ons
Pair-specific challenges
Migration approach
Discovery and credentials access
We audit the source PHP CRM instance via direct API connection where credentials are provided, or via CSV export from the admin panel if API access is unavailable. We enumerate every standard and custom field on Contact, Company, Deal, Task, Note, and Activity objects; extract the full tag vocabulary; inventory file attachment locations; and identify all active workflow or automation configurations. We also extract all distinct Deal stage label values to inform pipeline structure design. The discovery output is a written migration scope document listing every source object, every field (with data type), and the estimated record counts per object.
Pipedrive setup and pipeline structure
Before any data migration, we create the Pipedrive Pipeline and Stage structure based on the stage labels extracted from PHP CRM Deal records. We create one Pipeline per distinct stage label set in the source, add Stage entries with matching names and ordering, and assign probability percentages. We also create all custom fields on Person, Organization, Deal, and Activity objects, matching the PHP CRM field inventory. Pipedrive admin credentials are required at this step. Schema configuration is validated in the destination Pipedrive account before record migration begins.
Owner reconciliation and User provisioning
We extract every distinct PHP CRM Owner referenced on Deal, Task, Note, and Activity records and match by email against the Pipedrive destination account's User table. Any PHP CRM Owner without a matching Pipedrive User is added to a reconciliation queue. The customer's Pipedrive admin provisions any missing Users before record import resumes. Owner resolution must complete before Deal import because Deal.owner maps to Pipedrive User.id.
Organization and Person migration
We migrate Organization records first (from PHP CRM Company), then Person records (from PHP CRM Contact) with org_id resolved by company name or domain matching. PHP CRM custom fields on both objects are mapped to the pre-created Pipedrive custom fields. Each Person record gets its org_id set at insert time so that the Organization-Person relationship is preserved from day one in Pipedrive. We run a reconciliation check on Person count and a spot-check of 20-30 records against source data before proceeding to Deal migration.
Deal and Activity migration
We migrate Deal records with deal.value, deal.title, expected close date, owner_id (resolved via User mapping), and stage_id (resolved via Stage mapping) against the pre-created Pipeline and Stages. After Deal migration, we migrate Activities by type: Tasks and Notes map to Pipedrive Activity type=Task and type=Note respectively, with person_id, org_id, and deal_id resolved via the lookup tables built during prior phases. Any PHP CRM Activity fields not matching a Pipedrive native field are written to pre-created custom fields on the Activity record. Each activity subtype emits a separate reconciliation report.
Attachment export and handoff
We export PHP CRM file attachments to a local directory organized by record type and record ID. The export manifest (file path, associated Person/Organization/Deal, file type, and original upload date) is delivered as a CSV alongside the files. The customer re-uploads attachments to Pipedrive manually or via Pipedrive's bulk file import. We do not execute the re-upload because PHP CRM's file storage path is not accessible via API. This step is explicitly scoped as a manual post-migration activity.
Cutover, validation, and workflow handoff
We freeze PHP CRM writes during cutover, run a delta migration of any records modified during the migration window, then set Pipedrive as the system of record. We deliver the automation inventory document (workflows and automations identified during discovery) to the customer's admin with Pipedrive workflow rebuild guidance. We support a five-business-day hypercare window for reconciliation issues raised by the sales team. We do not rebuild PHP CRM workflows as Pipedrive automations; that work is a separate engagement.
Platform deep dives
PHP CRM
Source
Strengths
Weaknesses
Pipedrive
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 Pipedrive.
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 Pipedrive migration scoping. Not seeing yours? Book a call.
Walk through your PHP CRM to Pipedrive 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 Pipedrive
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.