Migrating Pipedrive to Salesforce requires mapping 7+ object types across different data models, handling token-based API rate limits, and preserving multi-level relationships — CSV exports alone won't cut it.
There is no native migration path that preserves multi-level relationships from Pipedrive to Salesforce. Pipedrive is pipeline-centric with a single Activity object, flat custom fields identified by 40-character hex hashes, and no custom objects. Salesforce is a deeply relational platform with Accounts, Contacts, Opportunities, Tasks, Events, Products, and Files connected by explicit lookup and master-detail relationships. The fundamental gap is structural: Pipedrive treats calls, meetings, and tasks as one entity type, while Salesforce enforces a hard split between Tasks (with ActivityDate) and Events (requiring StartDateTime and EndDateTime). A CSV export silently flattens these associations and collapses pipeline stage history. Every migration requires schema translation with strict load ordering, Activity-to-Task/Event classification, External ID-based upserts via Bulk API 2.0, and a Pipedrive ID → Salesforce ID cross-reference map to rebuild the Account → Contact → Opportunity → Activity chain.
Read this first
Pair-specific gotchas that catch teams out. Each one has cost somebody a weekend.
Pipedrive exports are visibility-aware
If the exporting user cannot see a record, it will not appear in the file. Activities, notes, and files export separately from core entity exports. Google Drive files are excluded from the global export entirely. Use a top-level admin account for extraction. (support.pipedrive.com)
The Activity split is the most common source of migration errors
Pipedrive treats a "meeting" and a "call" as the same object with a different type field. Salesforce enforces a structural separation: Events require StartDateTime and EndDateTime, while Tasks use ActivityDate and Status. If your migration script treats them identically, every meeting will fail Salesforce validation.
Use External IDs to simplify relationship linking
Create a custom External ID field on each Salesforce object (e.g., Pipedrive_Org_ID__c). Populate it with the Pipedrive record ID during import. This lets you reference parent records by External ID instead of needing to know the Salesforce ID first, enables upsert operations for idempotent reruns, and makes rollback straightforward — query all records where the External ID is populated and delete them. (developer.salesforce.com)
Use Pipedrive API v2 for extraction
Pipedrive deprecated selected v1 endpoints for deals, persons, organizations, activities, products, pipelines, stages, and search effective January 1, 2026. The v2 replacements are more performant and consume fewer tokens per request. For any entity with a stable v2 endpoint, prefer it over v1. (developers.pipedrive.com)
Governor limits beyond API call counts
Salesforce enforces per-transaction limits that matter during migration loads: 150 DML statements per transaction, 100 SOQL queries per synchronous transaction, and 50,000 records returned per SOQL query. If your target org has Apex triggers, Flows, or Process Builder automations on the objects you're loading, each inserted record consumes governor limit budget within that transaction. A trigger that runs a SOQL query per record will hit the 100-query limit at 100 records. This is another reason to disable non-critical automations during migration loads — not just for speed, but to avoid governor limit failures that silently reject batches.
Loading Opportunities before Accounts and Contacts are stable is how teams create
Loading Opportunities before Accounts and Contacts are stable is how teams create orphaned history and spend a week on cleanup. Load parent objects first, validate, then child objects, then relationship tables, then files.
The runbook
Work top to bottom. Tick steps as you go — your progress is saved in this browser.
01 Discovery Agree scope, pipeline design and success criteria before touching data.
Objective A scope covering every object in the revenue model, with sales leadership signed up to the pipeline design.
Keep these open
-
Inventory every object in Pipedrive
Count accounts, contacts, leads, deals or opportunities, activities, notes, emails, files, products and quotes. Activity and email history is usually the largest object by an order of magnitude and the one people forget to size.
Data Profiler Get real record counts instead of estimating from memory -
Map the current pipeline and agree the target model
Document every pipeline, stage, probability and required field, then agree the Salesforce model with sales leadership. Migrating a broken pipeline faithfully is a wasted opportunity; redesigning it mid-migration is a wasted migration.
Stage changes alter historical conversion rates. Agree how you will restate reporting before you change the model.
-
Catalogue integrations and automation
List every system touching Pipedrive: marketing automation, quoting, billing, ERP, data enrichment, dialler, BI. Each is a separate cutover task with its own owner, and each can silently write bad data into your new CRM.
-
Capture the reporting that must survive
Interview the people who actually live in the dashboards — forecast, pipeline coverage, rep activity, cohort conversion. Every one of these needs the underlying fields to migrate, which frequently expands the scope.
-
Build the business case and pick the go-live date
Model licence delta, implementation effort and productivity dip. Then choose the date deliberately: mid-quarter is disruptive, quarter-end is worse. Most teams land on the first week of a new quarter.
COI & ROI Calculator Build the 36-month business case you will need for sign-off
Pipedrive → Salesforce specifics
- Custom objects and relational modeling
- Pipedrive does not support custom objects. You get custom fields across standard entities (deals, people, organizations, products, projects), but you cannot create entirely new data categories. When your business needs to model subscriptions, partner programs, or multi-entity deal structures, Pipedrive forces workarounds. Salesforce lets you define custom objects with lookup and master-detail relationships to any standard or custom object.
- Enterprise reporting and analytics
- Salesforce's report builder, dashboards, and Einstein Analytics support cross-object reporting, historical trending, and forecasting that Pipedrive's reporting layer cannot match at scale.
- Marketing and revenue operations integration
- Salesforce natively connects to Marketing Cloud, Pardot, and a deep ecosystem of AppExchange integrations. Teams consolidating their tech stack around Salesforce often find that Pipedrive becomes a bottleneck.
- Token cost varies by endpoint
- Lightweight GETs (single entity fetch) are cheap. Complex searches and list endpoints with filters cost more.
Don't move on until
- Object counts confirmed for accounts, contacts, deals and activities
- Target pipeline and stage model agreed with sales leadership
- Reporting requirements captured from the people who use the reports
02 Data Audit CRM data is usually dirtier than anyone expects. Find out how dirty.
Objective A profiled export with duplicates, ownership gaps and relationship integrity all quantified and triaged.
Keep these open
-
Export and profile every object
Profile null rates, distinct values and type consistency across all objects. Pay attention to fields sales reps were supposed to fill in: an 80% null rate on a field your forecast depends on is a business finding, not a data one.
Data Profiler Profile the Pipedrive export for nulls, outliers and type drift -
Quantify duplicates and agree the merge policy
Measure duplicate accounts (same company, different spellings and suffixes) and contacts (same email, or same person at a renamed company). Agree survivorship rules before merging: which record wins, which fields, and what happens to the activity history on the loser.
Merging before you have agreed survivorship rules destroys history irreversibly. Decide first, merge second.
Data Cleaner Strip empty rows, stray whitespace and dead columns -
Verify relationship integrity
Check every deal has a valid account, every contact a valid account, every activity a valid parent. Referential breaks are the defect that turns a clean-looking load into a CRM where the pipeline report does not tie to the account list.
-
Resolve ownership and the user map
Build the Pipedrive user → Salesforce user map, including leavers. Every record needs a valid owner: records assigned to deactivated users either fail to load or land unassigned, and unassigned pipeline is pipeline nobody works.
Records owned by deactivated users are a top cause of load failures. Decide the reassignment target before you start.
-
Scan for PII and regional compliance
CRMs hold marketing consent, lawful basis and unsubscribe state. Confirm these fields migrate intact and that consent provenance survives — losing consent records is a regulatory problem, not a data-quality one.
PII & Compliance Scanner Find regulated fields before they land in a new system -
Clean, normalise and archive the pre-state
Normalise country and state values, phone formats, currencies and casing, and standardise all timestamps to UTC. Keep an untouched copy of the raw export — it is your only reference if a mapping decision turns out wrong.
Pipedrive → Salesforce specifics
- Compliance and audit requirements
- Salesforce's field-level security, sharing rules, and audit trail capabilities are significantly more granular than Pipedrive's permission model.
- Daily budget
- 30,000 base tokens × plan multiplier × seats (plus purchased top-ups).
- Burst limits
- Rolling 2-second window per individual token. Even with daily budget remaining, hammering the API in a tight loop triggers 429 errors.
- Escalation
- Repeated 429 violations can escalate to a 403 from Cloudflare, returning an HTML error page instead of JSON. Your script must detect this and back off aggressively.
- API v2 endpoints
- consume fewer tokens than v1 equivalents. Selected v1 endpoints were deprecated effective January 1, 2026. New migration code should use v2. (developers.pipedrive.com)
Don't move on until
- Duplicate rate quantified per object with a merge policy agreed
- Every record has a valid owner mapped to a target user
- Relationship integrity verified — no orphaned deals or contacts
03 Field Mapping Map objects, relationships and picklists — in that order.
Objective A signed mapping spec that covers objects, relationships, picklist values and currency handling.
Keep these open
-
Map objects and their relationships first
Establish how Pipedrive objects correspond to Salesforce objects before any field work. Leads-versus-contacts, accounts-versus-organisations and deal hierarchies differ structurally between CRMs, and a field map built on the wrong object model has to be redone.
Schema Mapper Opens pre-loaded with the Pipedrive → Salesforce field pair -
Generate and then hand-review the field map
Auto-match both schemas, then review every row. Look hardest at anything named "type", "source", "stage" or "status", where names match and meanings do not.
-
Map every picklist value, including retired ones
Enumerate all values on both sides — deal stages, lead sources, industries, statuses — and map each explicitly, including values no longer offered but still present on old records. Unmapped values either fail the row or land as blanks that quietly break segmentation.
Historical records often carry picklist values that were retired years ago and no longer appear in the UI.
-
Decide currency, amount and date handling
If you sell in multiple currencies, confirm how Salesforce stores amounts, exchange rates and dated conversion rates. Recalculating historical deal values at today's rate silently rewrites your revenue history.
Multi-currency deals re-converted at current rates will not tie to your historical reporting or your finance system.
-
Determine the load order
Sequence the load so parents exist before children: users, then accounts, then contacts, then deals, then activities and notes. Keep source IDs in custom fields so relationships can be rebuilt by lookup rather than guesswork.
-
Freeze the spec and sign off
Version-control the mapping, walk RevOps and sales leadership through the decisions that change reporting, and get written sign-off before the pilot.
Pipedrive → Salesforce specifics
- "Person" type custom fields
- (linking to another Person) → must become a Lookup field on the Salesforce side.
- "Time Range" fields
- → no native equivalent. Store as two DateTime fields or a text field.
Don't move on until
- Object and relationship model mapped and reviewed
- Every picklist value explicitly mapped, including dead values
- Load order determined so parents always exist before children
04 Test Migration Pilot with related records, not a flat sample.
Objective A pilot load whose relationships, ownership and roll-up reporting all verify against source.
Keep these open
-
Configure the Salesforce sandbox to match the agreed model
Build the pipelines, stages, custom fields, record types and user roles first. Load into a default configuration and you will only discover the configuration defects at full scale.
-
Select a connected pilot slice
Take complete account trees — 50-100 accounts with all their contacts, deals, activities and files — rather than a flat random sample. Relationship defects are the whole point of a CRM pilot and a flat sample cannot expose them.
-
Run the load in dependency order with full logging
Load users, accounts, contacts, deals, then activities, logging every request against its source ID. Note which failures are transient (rate limits, timeouts) and which are structural (validation, missing parent).
-
Verify relationships and roll-ups
Confirm every deal sits on the right account with the right owner and stage, and that pipeline totals per account and per rep match Pipedrive exactly. Roll-up mismatches almost always mean a relationship or currency defect upstream.
Migration Validation Tool Diff the pilot batch against source before scaling up -
Measure throughput and project the full load
Record actual records-per-hour under Salesforce's API limits and extrapolate, remembering activity history usually dominates volume. If the projection exceeds your window, split the load or trim activity scope now.
-
Let reps work the pilot data
Put two or three reps in the sandbox against their own accounts. They spot missing context, wrong owners and unusable notes far faster than any reconciliation script, and their buy-in is what makes adoption work.
Pipedrive → Salesforce specifics
- Developer Sandbox
- 200 MB data storage. Adequate for testing field mappings and load scripts against a handful of records. Free with most editions.
- Developer Pro Sandbox
- 1 GB data storage. Enough for a representative sample migration (a few thousand records per object) to validate relationship chains end-to-end.
- Partial Copy Sandbox
- 5 GB data storage. Uses a sandbox template to pull a defined subset of production data. Useful when you need to test migration loads against existing production records and automations.
- Full Sandbox
- Mirrors production data and metadata entirely. Required for realistic load testing at production volume, but only available with certain Salesforce editions and has a 29-day refresh cycle.
Don't move on until
- Relationships intact across the whole pilot slice
- Pipeline roll-ups match source for the pilot accounts
- Reps have worked pilot records and confirmed they are usable
05 Cutover Switch the revenue system with the pipeline intact.
Objective All in-scope CRM data live in Salesforce, integrations repointed, and reps selling on day one.
Keep these open
-
Pre-load history ahead of the freeze
Load closed deals, historical activities and inactive accounts while Pipedrive stays live. Only open pipeline and the final delta need to move inside the window.
-
Publish the cutover runbook
A timed sequence with owners and abort criteria: freeze, final export, delta load, integration switch, smoke test, go/no-go, rep enablement. Pick a window that avoids quarter-end and month-end close.
-
Freeze Pipedrive and take the final delta
Set Pipedrive read-only and export everything changed since the pre-load. Reps updating deals during an unenforced freeze is the classic way to lose the most recent — and most valuable — pipeline changes.
A rep who updates a deal in the old CRM during the freeze will lose that update permanently.
-
Load the delta and reconcile the pipeline
Run the delta, then verify open pipeline value and count per rep against Pipedrive before anything else. If the pipeline number is wrong on day one, reps stop trusting the system and never fully come back.
Migration Validation Tool Confirm the final delta landed before you reopen -
Repoint every integration and verify with real records
Switch marketing automation, quoting, billing, enrichment, dialler and BI connections, then push a live record through each path. An unrepointed integration writing into the old CRM causes divergence that gets harder to reconcile every day.
Two-way integrations left pointing at the old CRM will keep writing there. Disable them before you switch, not after.
Cron Expression Builder Schedule the delta syncs that run through the freeze -
Go/no-go, then enable the reps
Call the decision explicitly against the exit criteria. Run enablement on real data with their own accounts on screen, and keep Pipedrive read-only rather than cancelled until validation closes.
Don't move on until
- Historical load complete and reconciled before the freeze
- All integrations repointed and verified end to end
- Reps logged in with pipeline visible and correct
06 Validation Prove the revenue numbers tie out, then close the project.
Objective Reconciled data, forecast parity with pre-migration reporting, and signed acceptance.
Keep these open
-
Reconcile every object
Compare counts and values across accounts, contacts, deals, activities and files, plus field-level spot checks on a random sample. Produce a single report suitable for audit and for finance.
Migration Validation Tool Reconcile Pipedrive and Salesforce record-for-record -
Tie the pipeline and forecast to baseline
Rebuild forecast, pipeline coverage and win-rate reporting and compare to pre-migration figures. Every variance needs an explanation — most trace back to stage or currency mapping decisions made in Field Mapping.
Stage-model changes will legitimately shift historical conversion rates. Restate the baseline rather than chasing the difference as a defect.
-
Verify ownership, visibility and permissions
Confirm every record has the right owner and that sharing rules, territories and role hierarchy give each rep exactly the visibility intended. Over-broad visibility in a CRM is a data-protection issue as much as a config one.
-
Re-profile for field completeness
Compare loaded null rates against the source profile per field. A field that arrived empty while counts matched is the failure counts alone cannot detect.
Data Profiler Prove field completeness held up through the load -
Test automation and integration write-back
Fire every workflow, assignment rule, sequence and notification, and confirm each integration writes correctly in both directions. Automation is rebuilt rather than migrated, so it is unproven until observed.
-
Sign off and schedule decommission
Get written acceptance against the Discovery criteria, keep Pipedrive read-only for 30-90 days with a final archive export taken, then diarise cancellation so the contract does not auto-renew.
-
Rebuild automations
Pipedrive automations do not transfer. Recreate equivalent logic using Salesforce Flows or Apex triggers.
-
Monitor for 30 days
Run weekly validation reports for the first month. Watch for broken automations, duplicate records from parallel data entry, sync drift, and activity logging problems.
Pipedrive → Salesforce specifics
- Pipeline and stage configuration
- Salesforce Opportunity stages live in the Stage picklist, mapped to a Sales Process. Configure these before migration, not after.
- Retire old integrations
- Re-point or shut down integrations that still write to Pipedrive so stale data doesn't flow back into the new system.
- User training
- Salesforce's UI and workflow are fundamentally different from Pipedrive's. Budget time for hands-on training. Users especially need to understand Accounts vs. Contacts vs. Opportunities.
Don't move on until
- Full reconciliation report complete across all objects
- Forecast and pipeline reports tie to pre-migration baselines
- Acceptance signed and Pipedrive decommission scheduled
Field mapping reference
The field-by-field mapping for each object. Use this as the starting point for your mapping spec.
Pipedrive Object.
| Pipedrive field | Salesforce field | Notes |
|---|---|---|
| org_name | Account.Name | Direct |
| org_address | Account.BillingStreet, BillingCity, etc. | Split sub-fields |
| person_name | Contact.FirstName + Contact.LastName | Split on space |
| person_email [] | Contact.Email | First value; overflow to custom field |
| person_phone [] | Contact.Phone, Contact.MobilePhone | Map by label; overflow to custom field |
| deal_title | Opportunity.Name | Direct |
| deal_value | Opportunity.Amount | Convert currency if needed |
| deal_expected_close_date | Opportunity.CloseDate | Direct (ISO 8601 → YYYY-MM-DD) |
| deal_pipeline_id + stage_id | RecordType + Opportunity.StageName | Requires a transformation table, not a direct map |
| deal_status | Opportunity.StageName / IsClosed + IsWon | Map won → Closed Won, lost → Closed Lost |
| activity_type | Task or Event (object routing) | "meeting" → Event; "call","task","deadline" → Task |
| activity_due_date | Task.ActivityDate / Event.StartDateTime | Split by target object |
| activity_note | Task.Description / Event.Description | Direct |
| note_content | ContentNote.Content | Strip unsupported HTML tags |
| Custom field (hash) | Custom field (API name) | Create corresponding SF field first; resolve hash from field metadata |
Risk matrix
Per-object risk for this pair. Plan extra validation around anything marked high.
| Object | Risk | Notes |
|---|---|---|
| Organizations → Accounts | low | 1:1 mapping with address sub-field restructuring to Billing/Shipping fields |
| Persons → Contacts | medium | Multi-value phone/email arrays must map to fixed Salesforce fields with overflow to custom fields |
| Deals → Opportunities | medium | Pipeline stages require picklist value pre-creation and a stage-ID-to-StageName mapping table |
| Leads → Leads/Contacts | medium | Routing decision needed; Pipedrive leads inherit deal schema and may already reference persons/orgs |
| Activities → Tasks/Events | high | Structural split required; Events need StartDateTime/EndDateTime; unscheduled meetings need defaults or rerouting |
| Notes → ContentNote | medium | HTML to rich text conversion required; legacy Note object is read-only in Salesforce Lightning |
| Products → Product/PricebookEntry/LineItem | high | Three-object chain with no direct single-step equivalent; price variations and currency handling needed |
| Files → ContentVersion | high | Individual download/upload per file; Google Drive files excluded; can take as long as the rest of the migration |
| Deal Participants → OpportunityContactRole | medium | Separate extraction required; role-based mapping to Salesforce's first-class Contact Role model |
| Custom Fields | medium | Hash resolution required; person-type and time-range fields have no direct Salesforce equivalent |
The hard parts
What makes this specific migration difficult, beyond the mechanics.
Activity Split
Pipedrive's single Activity object must be classified and routed to Salesforce Tasks or Events, which have different required fields. Unscheduled meetings need defaults or must be rerouted to Tasks.
Multi-Level Relationships
The Account → Contact → Opportunity → OpportunityContactRole → Activity chain requires strict load ordering and a cross-reference map. Any broken link creates orphaned records.
Lead Routing Decision
Pipedrive Leads inherit deal custom fields and often reference persons/orgs, requiring a decision between Salesforce Leads vs. directly creating Contact + Opportunity.
Product Chain Complexity
Pipedrive products attached to deals must be rebuilt as a three-object chain in Salesforce — Product → PricebookEntry → OpportunityLineItem.
File Migration Scale
Files must be individually downloaded via Pipedrive's API and re-uploaded as Salesforce ContentVersion records, then linked via ContentDocumentLink. Google Drive files are excluded from export.
Tools used in this playbook
All free, all run entirely in your browser — nothing is uploaded.
FAQ
How do Pipedrive Activities map to Salesforce?
Pipedrive Activities are a single object covering calls, meetings, tasks, and deadlines. Salesforce splits these into two separate objects: Tasks (to-dos, calls, deadlines with ActivityDate) and Events (meetings with required StartDateTime and EndDateTime). Your migration must classify each Activity by type and route it to the correct Salesforce object. Unscheduled Pipedrive meetings need defaults or must be routed to Tasks.
What are Pipedrive's API rate limits for data migration?
Pipedrive uses token-based rate limiting with a daily budget of 30,000 base tokens × plan multiplier × number of seats. Each endpoint consumes a different number of tokens based on complexity. Burst limits apply on a rolling 2-second window. API v2 endpoints are more token-efficient than v1. The rollout completed for all accounts by May 31, 2025.
Can I use the Salesforce Data Import Wizard for a Pipedrive migration?
Only partially. The Data Import Wizard handles Accounts, Contacts, Leads, and custom objects up to 50,000 records per import, but it does not support Opportunity or Task objects. For those, use Salesforce Data Loader (up to 5M records) or the Bulk API. It also cannot preserve cross-object relationships automatically — you must reconstruct links manually.
Should Pipedrive Leads become Salesforce Leads?
Not always. Pipedrive leads inherit deal custom fields and often already reference a person or organization. Many teams keep only true pre-qualification records as Salesforce Leads and map later-stage source leads directly to Contact + Opportunity, which is usually cleaner than running Lead conversion flows post-migration.
How long does a Pipedrive to Salesforce migration take?
For small datasets (<10K records) with simple structures, a CSV-based migration can be done in 1–3 days. For mid-market (10K–100K records) with relationships, expect 1–2 weeks including testing. Enterprise migrations (100K+) with custom fields, products, and multi-level relationships typically take 2–4 weeks with a custom approach, or days with a managed service.