Helpdesk migration

Migrate from OTRS to HubSpot Service Hub

Field-level mapping, validation, and rollback between OTRS and HubSpot Service Hub. We move data and schema; workflows are rebuilt natively in HubSpot Service Hub.

OTRS logo

OTRS

Source

HubSpot Service Hub

Destination

HubSpot Service Hub logo

Compatibility

58%

7 of 12

objects map 1:1 between OTRS and HubSpot Service Hub.

Complexity

BStandard

Timeline

4-6 weeks

Rollback included Accuracy guarantee Field-level validation

Overview

What this migration involves

Moving from OTRS to HubSpot Service Hub is a structural migration from a normalized relational database to a CRM-native ticketing model. OTRS stores tickets across dozens of tables including Dynamic Fields in entity-attribute-value rows, SLA definitions in separate escalation tables, and Configuration Items in a CMDB schema with no direct HubSpot equivalent. We extract directly from the MySQL or PostgreSQL backend to get a complete, consistent snapshot, then map each OTRS object to its HubSpot Service Hub counterpart. Queues map to Pipelines and Teams; SLA thresholds become custom number properties; article history migrates as conversation thread entries. Process Management workflows (multi-step ITSM processes) do not migrate as code; we deliver a written inventory of every process and its trigger conditions for the customer's admin to rebuild in HubSpot. CMDB Configuration Items require a separate pass with a custom object or linked company record depending on the customer's Service Hub tier and whether they license the Data Hub add-on.

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

HubSpot Service Hub logo

HubSpot Service Hub

What's pulling them in

  • Unified CRM context means every support ticket links directly to the Contact and Company record without a separate integration
  • Free tier provides unlimited support seat access with basic ticketing and a shared inbox for small teams to validate fit before committing
  • Omnichannel routing consolidates email, live chat, Facebook Messenger, WhatsApp, and Instagram DM into one queue
  • Built-in customer success workspace gives health scores and portfolio views that other standalone helpdesks cannot match
  • AI-powered Breeze agent automates common resolutions and surfaces knowledge base articles without agent intervention

Object mapping

How OTRS objects map to HubSpot Service Hub

Each row shows how a OTRS object lands in HubSpot Service Hub, 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

HubSpot Service Hub

Ticket

1:1
Fully supported

OTRS Tickets map directly to HubSpot Tickets. We extract Title, State (open, closed, pending), Priority, Queue assignment, Owner (agent), and CustomerID. Article history becomes conversation entries in the HubSpot timeline. OTRS ticket number is preserved in a custom property otrs_ticket_number__c for audit and cross-reference. We use the HubSpot Tickets API for upserts with ticket_id as the external key.

OTRS

Article

maps to

HubSpot Service Hub

Conversation Entry

1:many
Fully supported

OTRS Articles (ticket communications: emails, notes, external replies) map to HubSpot conversation timeline entries attached to the Ticket. Each article body, content-type, sender type (agent vs customer), and timestamp migrates. We preserve the chronological ordering by setting the conversation entry timestamp to the original article create date. Attachments referenced in articles migrate as HubSpot file attachments linked to the conversation entry.

OTRS

Customer

maps to

HubSpot Service Hub

Contact

1:1
Fully supported

OTRS Customer records (name, email, phone, user type, preferences) map to HubSpot Contact. CustomerID from the ticket record resolves to the Contact email as the dedupe key. We run a dedupe pass before import to handle cases where the same customer email appears multiple times in OTRS. Valid email format is required for Contact creation; invalid emails are flagged in a reconciliation report for the customer's admin to clean before re-import.

OTRS

Dynamic Field

maps to

HubSpot Service Hub

Custom Property

1:1
Fully supported

OTRS Dynamic Fields are enumerated during scoping (field name, type, object attachment). Text, Number, Date, Dropdown, and Checkbox types map to equivalent HubSpot custom property types. Multi-select and EAV-pattern fields with multiple rows per ticket are flattened into delimited strings or migrated as separate custom properties depending on the field structure. Data Hub subscription is required if the customer exceeds HubSpot's standard property limit (500 on Professional, 1,000 on Enterprise). We flag this requirement during scoping.

OTRS

Queue

maps to

HubSpot Service Hub

Pipeline + Team

lossy
Fully supported

OTRS Queues define routing and access boundaries. We map each OTRS Queue to a HubSpot Pipeline with a corresponding Team. Queue-based routing rules (e.g., priority assignment by queue) become HubSpot workflow rules triggered on ticket creation or property change. If the customer uses queue-based SLA targets, we preserve those as custom number properties on tickets.

OTRS

User and Agent

maps to

HubSpot Service Hub

User

1:1
Fully supported

OTRS Agents are matched to HubSpot Users by email. Role, Group, and Queue permissions do not have direct HubSpot equivalents; we map the OTRS role to a HubSpot role (Admin, Agent, Viewer) and assign the user to the corresponding Team. Any OTRS agent without a matching HubSpot user goes to a reconciliation queue for the customer's admin to provision before record import resumes.

OTRS

SLA and Escalation

maps to

HubSpot Service Hub

Custom Properties

lossy
Fully supported

OTRS SLA definitions (response time, resolution time, calendar) attach to queues and ticket types. We export SLA names and thresholds as custom number and date properties on each ticket (sla_response_minutes__c, sla_resolution_minutes__c). Escalation events (first response breach, resolution breach) are not native to HubSpot; we store the escalation state as a text property for the customer's admin to design a HubSpot workflow that recreates urgency alerting.

OTRS

Configuration Item

maps to

HubSpot Service Hub

Custom Object or Company

1:1
Fully supported

OTRS Configuration Items (CMDB entries) have a class-based schema (Server, Network Device, Software, Contract) with custom attributes. We export CI data and the CI-to-Ticket link table. If the customer has a Data Hub subscription, we migrate CIs as a HubSpot Custom Object (ci_ticket_link__c lookup to Ticket). Without Data Hub, we store CI identifiers as a text property on the related Contact or Company record. CI-to-Ticket associations are preserved as a separate import pass with the link table resolved after both objects exist in HubSpot.

OTRS

Attachment

maps to

HubSpot Service Hub

File

1:1
Fully supported

OTRS attachments are binary blobs stored in the database linked to articles. We extract each blob with its filename and MIME type, upload to HubSpot Files via the Files API, and attach to the corresponding conversation entry. PDF, image, and document attachments preserve their original filename. We flag any attachment exceeding HubSpot's file size limit (256 MB per file) and provide a download link in the migration report.

OTRS

Service Catalog

maps to

HubSpot Service Hub

Knowledge Base Article

lossy
Mapping required

OTRS Services define available offerings linked to SLAs and queues. We export service names, descriptions, and SLA associations as HubSpot Knowledge Base articles with internal tags for service category. The service-to-SLA mapping migrates as article metadata. Service catalog ordering and customer-visible service links require manual recreation in HubSpot's Knowledge Base settings.

OTRS

Process Management

maps to

HubSpot Service Hub

Workflow Inventory (no code migration)

lossy
Fully supported

OTRS Process Management stores multi-step workflows as XML with activity nodes and transition rules. We export the process structure and deliver it as a written inventory: process name, steps, conditions, responsible agents, and ticket state transitions. This document serves as the specification for rebuilding in HubSpot Workflows. We do not migrate Process Management XML as executable code because the workflow models are incompatible.

OTRS

Stats and Reports

maps to

HubSpot Service Hub

None

1:1
Not supported

OTRS reporting stores report definitions and rendered output in the database. These are proprietary to OTRS and cannot be directly imported into HubSpot. We note this gap in the migration scope and advise rebuilding key reports in HubSpot's analytics tools post-migration. Historical ticket volume data can be extracted as a CSV for manual upload to HubSpot's reporting tools.

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

HubSpot Service Hub logo

HubSpot Service Hub gotchas

High

Rate limits throttle large migration API calls

High

Side conversations and Zendesk macros have no HubSpot equivalent

High

HubSpot stores ticket history as fragmented engagement objects

Medium

Custom Objects require Enterprise tier in HubSpot

Medium

Ticket pipeline stage probability values do not export cleanly

Pair-specific challenges

  • Community Edition security freeze is an urgent migration trigger

    OTRS stopped releasing security patches for the Community Edition after version 6, creating compliance and risk exposure for organizations on unsupported versions. Organizations on OTRS versions below 9 should treat this migration as urgent rather than optional. We export all data before any OTRS upgrade attempt to preserve a clean state, and we flag the Community Edition exposure in the discovery report. Business Solution licensing costs ($4,995/year for 10 agents) often make a switch to a managed SaaS platform more economical than staying on OTRS with an unsupported version.

  • OTRS Dynamic Fields require enumeration before mapping

    OTRS Dynamic Fields are stored as entity-attribute-value rows across separate tables, and each field must be enumerated by name, type, and object attachment during scoping. Fields attached to both Ticket and Article require separate mapping passes. Multi-value Dynamic Fields (checkbox lists, multi-select) need flattening or separate property creation depending on HubSpot's custom property type support. Data Hub subscription is required if the customer exceeds the standard property count (500 on Professional, 1,000 on Enterprise). Skipping this enumeration step leads to silent field loss during migration.

  • HubSpot API burst limits constrain batch ticket imports

    HubSpot enforces a burst limit of 100-200 requests per 10 seconds depending on tier, and a daily limit of 250,000-1,000,000 requests. Search endpoints have a stricter shared limit of 4 requests per second across all object types. We use the HubSpot batch endpoints (up to 100 records per call) and implement exponential backoff with jitter on 429 responses. Without batch handling, large ticket imports (50,000+ records) will hit rate limits and time out, resulting in partial migration.

  • Configuration Items have no native HubSpot CMDB equivalent

    OTRS CMDB Configuration Items have a class-based schema (Server, Network Device, Software, Contract) with custom attributes and a CI-to-Ticket link table. HubSpot has no native CMDB object. Without a Data Hub subscription, we store CI identifiers as text properties on Contact or Company records, which loses the class-based schema and attribute depth. With Data Hub, we create a custom object but the customer's admin must manually define the schema and field types. We recommend evaluating whether a full CMDB migration is required or whether a simplified asset reference meets the business need.

  • HubSpot forms cannot populate custom Ticket properties

    HubSpot forms submitted by customers cannot write to custom Ticket properties; they only populate standard Contact fields and trigger workflows. Reviewers on Software Advice note that this limitation renders HubSpot forms almost useless for collecting structured customer problem data on custom tickets. We advise customers to use HubSpot's native portal (Customer Portal or Service Hub inbox routing) instead of forms for ticket submission if custom property population is required, or to design workflows that extract form data from standard Contact fields into ticket custom properties.

Migration approach

Six steps for a successful OTRS to HubSpot Service Hub data migration

  1. Discovery and OTRS version audit

    We audit the source OTRS instance: version (Community vs Business Solution), database type (MySQL or PostgreSQL), schema version, Dynamic Field count and types, Queue count and routing rules, SLA configuration, Process Management workflow count and complexity, and Configuration Item volume and class schema. We request read-only database access and enumerate every Dynamic Field name and type field-by-field. We also identify the Community Edition security exposure status and advise urgency if the OTRS version is below 9. The discovery output is a written migration scope document with the object map and any tier or Data Hub subscription requirements.

  2. Schema design and custom property provisioning

    We design the HubSpot destination schema before any data moves. This includes provisioning all custom properties on the Tickets object (matching OTRS Dynamic Field names and types), creating Pipelines for each OTRS Queue, setting up Teams for agent routing, and pre-creating any custom objects for Configuration Items if the customer has a Data Hub subscription. We deploy custom properties via HubSpot API before migration begins. OTRS SLA thresholds are mapped to custom number and date properties on tickets.

  3. Sample migration and reconciliation

    We run a sample migration of up to 100 random tickets with their associated Customers, Articles, and Dynamic Fields into a HubSpot test account. The customer's service desk lead reviews the ticket structure, article timeline, custom property values, and queue routing, and signs off before full migration. Any mapping corrections (field name mismatches, missing custom properties, article ordering issues) are resolved here. We also validate agent email matching and flag any OTRS agents without HubSpot user accounts.

  4. Full database extraction and transform

    We extract the full OTRS dataset from MySQL or PostgreSQL during a maintenance window coordinated with the customer's DBA. We read ticket records, article records, customer records, Dynamic Field values (EAV rows pivoted per ticket), SLA associations, CI records, and CI-to-ticket links in dependency order. The transform step flattens EAV Dynamic Field rows into HubSpot custom properties, resolves CustomerID to Contact email for dedupe, and builds the article timeline array per ticket. We run a row-count reconciliation against the OTRS database before proceeding to HubSpot import.

  5. Production migration in dependency order

    We run production migration in record-dependency order: HubSpot Users (validated from step 3), Contacts (with dedupe pass), Tickets (with article history, custom properties, and SLA metadata), Files (attachments linked to conversation entries), CI records (as custom object or Company property depending on Data Hub availability), and CI-to-ticket links (last, after both objects exist). Each phase emits a reconciliation report. We use HubSpot batch endpoints with exponential backoff on rate-limit responses.

  6. Cutover, validation, and Process Inventory handoff

    We freeze OTRS writes during cutover, run a final delta migration of any records modified during the window, then enable HubSpot Service Hub as the system of record. We validate ticket count, article timeline integrity, custom property fill rates, and agent assignment. We deliver the Process Management inventory document to the customer's admin team for HubSpot Workflow rebuild. We support a one-week hypercare window for reconciliation issues. We do not rebuild OTRS workflows as HubSpot workflows inside the migration scope.

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.
HubSpot Service Hub logo

HubSpot Service Hub

Destination

Strengths

  • Unified CRM object model means support context is always linked to sales and marketing data
  • Generous free tier with unlimited tickets and a shared inbox for small teams
  • Omnichannel inbox consolidates email, live chat, and major messaging platforms natively
  • Customer Success Workspace provides portfolio-level health scores without a separate tool
  • AI agent (Breeze) handles Tier-1 resolutions and knowledge base deflection automatically

Weaknesses

  • Per-seat pricing with mandatory onboarding fees inflates year-one cost significantly
  • Ticket history stored as fragmented engagement objects across APIs complicates export and migration
  • Custom Objects locked behind Enterprise tier limits portability for mid-market teams
  • Help desk depth—routing rules, SLA management, advanced reporting—trails dedicated tools like Zendesk
  • Setup and configuration requires real time investment; out-of-box defaults rarely fit existing workflows

Complexity grading

How hard is this migration?

Standard Helpdesk migration. 2 of 7 objects need a mapping; the rest are 1:1.

B

Overall complexity

Standard migration

Derived from compatibility, mapping clarity, API constraints, and data volume across OTRS and HubSpot Service Hub.

  • Object compatibility

    B

    2 of 7 objects need a mapping; the rest are 1:1.

  • 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 HubSpot Service Hub 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 HubSpot Service Hub data migrations

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

Can't find your answer?

Walk through your OTRS to HubSpot Service Hub migration with a real engineer — 30 minutes, free, written quote within 24 hours.

Book a free 30 minute consultation

Straightforward migrations under 50,000 tickets with fewer than 20 Dynamic Fields and no CMDB scope land between four and six weeks. Migrations with large article histories (over 200,000 communications), Configuration Item CMDB exports, multi-queue routing logic, or OTRS versions below 9 requiring urgent migration move to ten to fourteen weeks because of EAV extraction complexity, SLA metadata mapping, and CI relationship reconstruction. OTRS versions below 9 on Community Edition require faster timelines due to security exposure.

Adjacent paths

Related migrations to explore

Ready when you are

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