Helpdesk migration

Migrate from OTRS to Salesforce Service Cloud

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 logo

OTRS

Source

Salesforce Service Cloud

Destination

Salesforce Service Cloud logo

Compatibility

45%

5 of 11

objects map 1:1 between OTRS and Salesforce Service Cloud.

Complexity

BStandard

Timeline

6-10 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

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.

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

OTRS logo

OTRS

What's pushing teams away

  • Annual licensing and support contract costs scale steeply, prompting teams to evaluate lower-cost SaaS alternatives with similar capabilities.
  • The 300-page admin manual and $2,000+ per-person training requirement means teams cannot self-onboard, creating friction for smaller organizations.
  • Performance degrades noticeably on large ticket volumes without tuning, and slow loading pages frustrate agents handling high-throughput queues.
  • The Community Edition received no security patches after OTRS 6, forcing organizations onto paid tiers or unsupported forks to maintain compliance posture.

Choosing

Salesforce Service Cloud logo

Salesforce Service Cloud

What's pulling them in

  • Deep Salesforce ecosystem integration with Sales Cloud, Marketing Cloud, and custom Apex apps creates a single pane of glass for enterprise customer data and cross-functional workflows.
  • Omnichannel case routing — email, chat, phone, social, and messaging — unified under one case object means agents do not lose context when customers switch channels mid-interaction.
  • AI for customer service (Einstein AI / Agentforce) offers automated case classification, suggested replies, and chatbot routing that reduces Tier-1 ticket volume without manual rule authoring.
  • Entitlement and milestone tracking enforces SLA compliance natively, automatically calculating breach windows and surfacing violations to supervisors in dashboards.
  • Salesforce's massive AppExchange ecosystem provides pre-built connectors, industry-specific managed packages, and third-party tools that extend Service Cloud beyond its out-of-box capabilities.

Object mapping

How OTRS objects map to Salesforce Service Cloud

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

maps to

Salesforce Service Cloud

Case

1:1
Fully supported

OTRS 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

maps to

Salesforce Service Cloud

CaseComment + EmailMessage

1:many
Fully supported

OTRS 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

maps to

Salesforce Service Cloud

Contact + Account

many:1
Fully supported

OTRS 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

maps to

Salesforce Service Cloud

Custom Fields

lossy
Mapping required

OTRS 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

maps to

Salesforce Service Cloud

Queue + Omni-Channel Routing

lossy
Fully supported

OTRS 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

maps to

Salesforce Service Cloud

User

1:1
Mapping required

OTRS 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

maps to

Salesforce Service Cloud

Entitlement + Milestone

lossy
Fully supported

OTRS 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)

maps to

Salesforce Service Cloud

Asset + Product

1:1
Fully supported

OTRS 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

maps to

Salesforce Service Cloud

Written Inventory (Flow rebuild separate)

1:1
Fully supported

OTRS 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

maps to

Salesforce Service Cloud

Custom Object or Knowledge Article

lossy
Mapping required

OTRS 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

maps to

Salesforce Service Cloud

ContentDocument + ContentVersion

1:1
Fully supported

OTRS 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.

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.

OTRS logo

OTRS gotchas

High

Community Edition security freeze forces migration

Medium

Direct database export preferred over SOAP API

Medium

Major version upgrades can leave login broken

Salesforce Service Cloud logo

Salesforce Service Cloud gotchas

High

Data Export 512MB file size cap breaks large org exports

High

API Daily Request Limits vary by license edition

High

No automatic data backup in base Salesforce

Medium

Picklist dependencies silently break records when unmapped

Medium

Workflow rules fire unexpectedly during data load

Pair-specific challenges

  • OTRS normalized schema requires field-by-field enumeration

    OTRS stores ticket properties across ticket, article, dynamic_field_value, ticket_priority, and ticket_state tables with foreign-key relationships that are not trivially expressed as a flat export. Direct database reads for bulk export require schema knowledge and DBA coordination. We schedule read-only database access during a maintenance window with the customer's DBA, enumerate all Dynamic Field names and types before migration, and resolve the EAV pivot for multi-value Dynamic Fields. Without this preparation, tickets import with missing custom properties or orphaned article threads.

  • OTRS Community Edition SOAP API is operation-oriented, not migration-oriented

    The OTRS Generic Interface SOAP API exposes ticket operations one record at a time with no publicly documented bulk endpoint, pagination cursor, or rate-limit profile. Bulk exports via the SOAP API require looping across ticket ID ranges, making large-volume migration slow and unreliable. We default to direct MySQL or PostgreSQL reads for complete dataset snapshots. We coordinate with the customer's DBA to schedule read-only database access, and we flag any OTRS 6 or below Community Edition instances as urgent because the database itself may not receive further security patches.

  • OTRS Dynamic Fields use EAV storage that must pivot at migration time

    OTRS Dynamic Fields are stored as entity-attribute-value rows in separate dfv tables keyed to the ticket ID. Each Dynamic Field is a separate table with field_id, ticket_id, value rows. At migration time we must enumerate all defined Dynamic Fields, pivot the EAV rows into column values for each ticket, and map the resulting values to typed Salesforce custom fields. Dropdown Dynamic Fields need the OTRS PossibleValues list added to the Salesforce picklist definition before the field accepts values. Multiselect fields need the Salesforce multi-select picklist type. Skipping this pivot results in empty custom fields for every Dynamic Field on every ticket.

  • SLA-to-Entitlement milestone mapping requires pre-migration design

    OTRS SLA definitions are queue-scoped with calendar-based escalation timers (first response, update, resolution) linked to the ticket's create_time. Salesforce Entitlements use milestone definitions tied to the Account or Contact with elapsed-time or calendar-based business hours. We must map the OTRS SLA calendar and escalation thresholds to Salesforce business hours and milestone names before migration so that the entitlement process is active at cutover. If the Entitlement process is not configured before Cases import, SLA timers will not fire in Salesforce and the compliance reporting gap will appear immediately.

  • Case Origin and Email-to-Case routing must be configured before ticket import

    Salesforce Service Cloud requires Email-to-Case routing to be configured in Setup before inbound email from OTRS-tracked customer domains creates new Cases. The OTRS queue-to-email-address mappings must translate to Salesforce Email-to-Case address assignments. If Email-to-Case is not configured before cutover, customer replies to migrated Cases will create duplicate tickets instead of threading onto existing Cases. We document the required Email-to-Case configuration steps in the pre-migration checklist and validate routing during the sandbox migration phase.

Migration approach

Six steps for a successful OTRS to Salesforce Service Cloud data migration

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

Context on both ends of the pair

OTRS logo

OTRS

Source

Strengths

  • Per-ticket Dynamic Fields allow unlimited custom properties without code changes.
  • Multi-channel inbound (email, portal, chat, phone) unified into a single ticket thread.
  • Role-based access control with granular queue, group, and permission scoping.
  • Built-in asset management (CMDB) with ticket-to-CI relationship tracking.
  • Process Management supports multi-step ITSM workflows with conditional branching.

Weaknesses

  • Community Edition receives no security updates, creating compliance risk on unsupported versions.
  • Database is normalized across many tables, making direct exports complex without schema knowledge.
  • No publicly documented API rate limits; direct database access is the reliable bulk export path.
  • Complex permission model (roles, groups, queues, users) is difficult to replicate exactly in simpler SaaS tools.
  • Self-hosted deployment requires dedicated server administration and Perl runtime maintenance.
Salesforce Service Cloud logo

Salesforce Service Cloud

Destination

Strengths

  • Enterprise-grade security, compliance certifications, and audit logging available across all paid editions with Shield offering enhanced event monitoring.
  • Scalable multi-tenant cloud architecture supporting orgs from 5 users to 150,000+ seat enterprises without infrastructure management overhead.
  • Omnichannel contact center unifying email, live chat, phone, messaging, and social into a single Case timeline per customer interaction.
  • Rich workflow automation via Salesforce Flow, Process Builder, and Apex triggers enabling complex case escalation, routing, and field updates.
  • Native AI capabilities (Agentforce / Einstein) for case auto-routing, classification, suggested responses, and chatbot escalation without third-party add-ons.

Weaknesses

  • Per-seat pricing model with no contact limits creates unpredictable cost scaling for large organizations adding many agents over time.
  • No automatic data backup — organizations must purchase a third-party backup solution or build manual Data Loader exports to protect against data loss from human error, failed deployments, or integrations overwriting records.
  • Steep learning curve for non-technical users requiring dedicated admin resources and formal training investment before teams reach productive velocity.
  • Annual contract requirements and limited pro-ration on exit create significant switching cost friction, especially for organizations evaluating alternatives mid-cycle.
  • Add-on licensing (CPQ, Einstein Activity Capture, Shield, Data Cloud) can double effective per-seat cost without clear documentation of which features are included in base tiers.

Complexity grading

How hard is this migration?

Standard Helpdesk migration. 1 of 7 objects need a manual workaround.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across OTRS and Salesforce Service Cloud.

  • Object compatibility

    B

    1 of 7 objects need a manual workaround.

  • Field mapping clarity

    C

    Field mapping is derived from defaults — final spec confirmed during the sample migration.

  • Timeline complexity

    B

    7-object category — typical timelines run 2–7 days end-to-end.

  • API constraints

    B

    OTRS: Not publicly documented; no published rate limit values.

  • Data volume sensitivity

    B

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

Estimator

Estimate your OTRS to Salesforce Service Cloud 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 OTRS to Salesforce Service Cloud data migrations

Answers to the questions buyers ask most during OTRS to Salesforce Service Cloud migration scoping. Not seeing yours? Book a call.

Can't find your answer?

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 consultation

Small OTRS instances with fewer than 30,000 tickets, under 50 Dynamic Fields, and no CMDB layer land between six and ten weeks and cost $8,500-$12,000. Large OTRS databases with high article volume, complex multi-queue routing needing Omni-Channel configuration, or CMDB-to-Asset mapping move to fourteen to twenty weeks and $18,000-$28,000 because of bulk database extraction coordination, EAV-to-field pivoting for Dynamic Fields, Entitlement process design, and bulk API batch management.

Adjacent paths

Related migrations to explore

Ready when you are

Move from OTRS.
Land in Salesforce Service Cloud, 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