Helpdesk migration
Field-level mapping, validation, and rollback between OTRS and Salesforce Service Cloud. We move data and schema; workflows are rebuilt natively in Salesforce Service Cloud.
OTRS
Source
Salesforce Service Cloud
Destination
Compatibility
5 of 11
objects map 1:1 between OTRS and Salesforce Service Cloud.
Complexity
BStandard
Timeline
6-10 weeks
Overview
Moving from OTRS to Salesforce Service Cloud is a structural migration from a normalized self-hosted schema to a cloud-native CRM platform. OTRS stores tickets across ticket, article, dynamic_field, and configuration_item tables in a relational schema that requires field-by-field enumeration during scoping. We extract from the MySQL or PostgreSQL backend directly, map OTRS queues to Salesforce Queues or Omni-Channel routing configurations, transform Dynamic Fields into typed Salesforce custom fields, and resolve OTRS customer IDs against the Contact and Account model in Service Cloud. SLA definitions and escalation thresholds migrate as Entitlement records with milestone timers. Process Management workflows, CMDB entries, and SLA configurations transfer as written inventories for the customer's admin to rebuild. We do not migrate OTRS workflows as Salesforce Flow, and we do not rebuild CMDB Process Activities as Flow triggers as standard scope.
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.
Source platform
OTRS platform overview
Scorecard, SWOT, gotchas, and pricing for OTRS.
Destination platform
Salesforce Service Cloud platform overview
Scorecard, SWOT, gotchas, and pricing for Salesforce Service Cloud.
Data migration guide
The complete Salesforce Service Cloud migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
Salesforce Service Cloud migration checklist
Pre- and post-cutover tasks for moving onto Salesforce Service Cloud.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a OTRS object lands in Salesforce Service Cloud, including any object-level transformations, lookup resolution, or schema-design dependencies.
Typical mapping — final map is confirmed during the sample migration step.
OTRS
Ticket
Salesforce Service Cloud
Case
1:1OTRS Tickets map directly to Salesforce Cases. We extract ticket_id, title, ticket_number, state_id, priority_id, queue_id, customer_id, owner_id, create_time, change_time, and escalate_time from the ticket table during direct database read. The OTRS State (open, closed, pending, merged) maps to Salesforce Status using a state-type mapping table we build during scoping. Article history from the article table migrates as CaseComments and EmailMessages on the Case. We set CaseOrigin to 'Phone' for OTRS phone-channel tickets and 'Web' for portal tickets to preserve channel attribution.
OTRS
Article
Salesforce Service Cloud
CaseComment + EmailMessage
1:manyOTRS Articles represent individual communication entries (emails, notes, external replies) linked to a Ticket. Each article has a content_type, sender_type (agent/customer/system), subject, body, and create_time. We split articles by sender_type: agent and system notes migrate as internal CaseComments (IsPublished=false); customer-facing emails and portal replies migrate as EmailMessage records linked to the Case with FromAddress and ToAddress preserved. Email bodies in HTML format are stored with ContentType set accordingly. We enumerate all content_types during scoping to ensure attachments and inline images are correctly parsed.
OTRS
Customer
Salesforce Service Cloud
Contact + Account
many:1OTRS Customer records contain contact fields (firstname, lastname, email, phone, company) and user preferences. Customers with an email domain that maps to a known organization merge into a Salesforce Account with the Contact as a child record. Customers without an organization link import as individual Contacts without an Account. We preserve the OTRS customer_id as a custom field otrs_customer_id__c for cross-reference. The OTRS CustomerUser login mapping is noted for identity reconstruction if Experience Cloud portals are in scope.
OTRS
Dynamic Fields
Salesforce Service Cloud
Custom Fields
lossyOTRS Dynamic Fields are entity-attribute-value rows stored in dfv tables, each with a field name, type (Text, Date, Dropdown, Multiselect, Checkbox, DateTime), and value storage. We enumerate all defined Dynamic Fields during scoping, map each to a typed Salesforce custom field on Case (or on Contact/Account if the field scope is broader), and handle EAV value storage by pivoting rows into column values at migration time. Dropdown Dynamic Fields map to Salesforce picklists with the OTRS PossibleValues list as the picklist value set. Multiselect maps to multi-select picklist.
OTRS
Queue
Salesforce Service Cloud
Queue + Omni-Channel Routing
lossyOTRS Queues define ticket routing, access boundaries, and SLA assignments. We export queue names, the assigned SLA, and the queue-to-agent group mapping. Each OTRS Queue maps to a Salesforce Queue of the Case object type, and queues with complex SLA routing map to Omni-Channel Routing configurations with Skills-Based Routing if the customer licenses that feature. Queue-to-Group email addresses map to Salesforce Case Origin and Email-to-Case routing configurations.
OTRS
Users and Agents
Salesforce Service Cloud
User
1:1OTRS Agents are tied to roles, groups, and queues via separate permission tables. We export agent records (firstname, lastname, email, valid_until) and reconstruct ownership and assignment relationships by resolving the OTRS user_id to Salesforce OwnerId via email match. Agents without a matching Salesforce User go to a reconciliation queue for admin provisioning before record import resumes. Role and group memberships that have no Salesforce equivalent (such as OTRS role-based restrictions) are documented as a permission matrix for the admin to rebuild.
OTRS
SLA
Salesforce Service Cloud
Entitlement + Milestone
lossyOTRS SLA definitions link response_time and solution_time thresholds to queues and ticket types. We export SLA names, calendar definitions, and escalation thresholds as Entitlement records in Salesforce tied to the Account or Contact. FirstResponse and Resolution milestones are created from the SLA thresholds with the OTRS escalate_time values as the target completion timestamps. OTRS escalation history (escalation events, warning triggers) migrates as EntitlementHistory records for audit completeness.
OTRS
Configuration Item (CMDB)
Salesforce Service Cloud
Asset + Product
1:1OTRS Configuration Items are CMDB entries with a class-based schema (Hardware, Software, Network, Document) and custom properties. We export CI data and the ci_ticket_link table. Large-scale CMDB migrations (over 5,000 CIs) we handle as a separate import pass: each CI class maps to Salesforce Asset with Class mapped to Asset Type, and CI-to-Ticket linking table reconstructs as AssetId on Case. For smaller CMDBs we deliver a CI inventory spreadsheet for manual Asset creation post-migration. This decision is made during scoping based on CI volume and customer admin capacity.
OTRS
Process Management
Salesforce Service Cloud
Written Inventory (Flow rebuild separate)
1:1OTRS Process Management stores workflow definitions as XML with activity nodes, transition rules, and conditional branching across multiple tables (process, activity, transition). We export the complete workflow structure, activity sequence, and conditional logic as a written Process Inventory document. This document is delivered to the customer's Salesforce admin or implementation partner to rebuild using Salesforce Flow. We do not migrate OTRS workflows as Salesforce Flow as standard scope because the XML structure and trigger model differ fundamentally.
OTRS
Service Catalog
Salesforce Service Cloud
Custom Object or Knowledge Article
lossyOTRS Services define available offerings linked to SLAs and queues. Services with a defined service catalog interface map to Salesforce Custom Objects with a Knowledge-driven service catalog if the customer licenses Salesforce Knowledge. Services without catalog intent migrate as data records linked to Entitlements. The OTRS service-to-SLA association is preserved as a custom lookup field on the service record.
OTRS
Attachment
Salesforce Service Cloud
ContentDocument + ContentVersion
1:1OTRS attachments are stored as binary blobs in the article_attachment table with filename, content_type, and content_size. We extract each blob, create a ContentVersion record with VersionData set to the blob binary and FileType inferred from MIME type, then link it via ContentDocumentLink to the parent Case and CaseComment. Inline images embedded in HTML article bodies are extracted as separate ContentDocument records with the article body rewritten to reference the ContentDocument URLs post-migration.
| OTRS | Salesforce Service Cloud | Compatibility | |
|---|---|---|---|
| Ticket | Case1:1 | Fully supported | |
| Article | CaseComment + EmailMessage1:many | Fully supported | |
| Customer | Contact + Accountmany:1 | Fully supported | |
| Dynamic Fields | Custom Fieldslossy | Mapping required | |
| Queue | Queue + Omni-Channel Routinglossy | Fully supported | |
| Users and Agents | User1:1 | Mapping required | |
| SLA | Entitlement + Milestonelossy | Fully supported | |
| Configuration Item (CMDB) | Asset + Product1:1 | Fully supported | |
| Process Management | Written Inventory (Flow rebuild separate)1:1 | Fully supported | |
| Service Catalog | Custom Object or Knowledge Articlelossy | Mapping required | |
| Attachment | ContentDocument + ContentVersion1: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.
OTRS gotchas
Community Edition security freeze forces migration
Direct database export preferred over SOAP API
Major version upgrades can leave login broken
Salesforce Service Cloud gotchas
Data Export 512MB file size cap breaks large org exports
API Daily Request Limits vary by license edition
No automatic data backup in base Salesforce
Picklist dependencies silently break records when unmapped
Workflow rules fire unexpectedly during data load
Pair-specific challenges
Migration approach
Discovery and OTRS database audit
We connect to the OTRS MySQL or PostgreSQL database read-only to enumerate the full schema: ticket table columns, article table columns, dynamic_field definitions (names, types, possible values), queue list, SLA definitions, customer table, configuration_item classes, and process management XML definitions. We pull record counts per table and identify the OTRS version to flag any Community Edition EOL exposure. The discovery output is a written migration scope, a schema inventory, and a field-mapping spreadsheet listing every OTRS field and its Salesforce destination with transformation notes. We also confirm whether the customer will use Sandbox or Full Copy sandbox for validation.
Schema design and Salesforce configuration
We design the destination schema in Salesforce Service Cloud: custom fields on Case (mapped from OTRS Dynamic Fields), custom fields on Contact and Account (mapped from OTRS Customer fields), Salesforce Queues or Omni-Channel Routing configurations (mapped from OTRS Queues), Entitlement Processes and milestones (mapped from OTRS SLAs), and Asset records (mapped from OTRS Configuration Items if in scope). Schema is deployed into a Sandbox via the Salesforce Metadata API for validation. We configure Email-to-Case routing with the customer domain addresses before any test migration begins.
Sandbox migration and reconciliation
We run a full migration into a Salesforce Sandbox using production-like data volume extracted from the OTRS database. The customer's support operations lead reconciles record counts (Cases in, Contacts in, Accounts in, Entitlements in, Assets in), spot-checks 25-50 random Cases against the OTRS source for field accuracy, validates article thread completeness, and confirms SLA timer firing. Any field-mapping corrections, picklist value gaps, or article parsing issues are documented and fixed before production migration begins.
Owner and user reconciliation
We extract every distinct OTRS agent referenced on Tickets and Articles and match by email against the Salesforce destination org's User table. Agents without a matching Salesforce User go to a reconciliation queue for the customer's admin to provision. We also map OTRS Customer IDs to Salesforce Contact and Account IDs during this phase to satisfy the parent-record Lookups required on Case import. Migration cannot proceed past Case import without resolved OwnerId references.
Production migration in dependency order
We run production migration in record-dependency order: Accounts (from OTRS organization-level customers), Contacts (with AccountId resolved), Entitlements (tied to Account), Queues (Salesforce Queue configurations), Assets (from OTRS CIs if in scope), Cases (with OwnerId, AccountId, ContactId, EntitlementId, and QueueId resolved), CaseComments and EmailMessages (with parent CaseId resolved), Attachments (as ContentDocument linked to parent Case), and Dynamic Field values (pivoted into Salesforce custom field updates on each Case). Each phase emits a row-count reconciliation report before the next phase begins. We use the Salesforce Bulk API with batch chunking and exponential backoff for Case and attachment import to handle large volumes.
Cutover, delta sync, and Process Inventory handoff
We freeze OTRS writes during cutover, run a final delta migration of any Cases modified or created during the migration window, then enable Salesforce Service Cloud as the system of record. We validate Email-to-Case routing with a test email from a known customer address. We deliver the OTRS Process Management written inventory, the SLA-to-Entitlement mapping documentation, and the CMDB Asset inventory if applicable. We support a one-week hypercare window where we resolve any data quality issues raised by the support team. We do not rebuild OTRS Process Management workflows as Salesforce Flow as standard scope; that is a separate engagement or an internal admin task.
Platform deep dives
OTRS
Source
Strengths
Weaknesses
Salesforce Service Cloud
Destination
Strengths
Weaknesses
Complexity grading
Standard Helpdesk migration. 1 of 7 objects need a manual workaround.
Overall complexity
Standard migration
Derived from compatibility, mapping clarity, API constraints, and data volume across OTRS and Salesforce Service Cloud.
Object compatibility
1 of 7 objects need a manual workaround.
Field mapping clarity
Field mapping is derived from defaults — final spec confirmed during the sample migration.
Timeline complexity
7-object category — typical timelines run 2–7 days end-to-end.
API constraints
OTRS: Not publicly documented; no published rate limit values.
Data volume sensitivity
OTRS 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 OTRS to Salesforce Service Cloud migration scoping. Not seeing yours? Book a call.
Walk through your OTRS to Salesforce Service 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 OTRS
Other ways to arrive at Salesforce Service Cloud
Same-Helpdesk migrations
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.