Helpdesk migration
Field-level mapping, validation, and rollback between osTicket and HubSpot Service Hub. We move data and schema; workflows are rebuilt natively in HubSpot Service Hub.
osTicket
Source
HubSpot Service Hub
Destination
Compatibility
10 of 14
objects map 1:1 between osTicket and HubSpot Service Hub.
Complexity
CModerate
Timeline
3-5 weeks
Overview
Moving from osTicket to HubSpot Service Hub is a migration from a narrow open-source API to a CRM-native service desk. osTicket's HTTP API supports ticket creation only and holds the full conversation history as a single rich-text thread blob per ticket, so we connect to the MySQL database directly using a read-only user to extract all records at scale. We split thread blobs into discrete message records during import so that each agent reply and customer response appears as a separate timeline entry in HubSpot's Conversations inbox. Organisations, Users, Agents, SLA Plans, Help Topics, and Custom Fields map to their HubSpot equivalents, with Departments resolved to Teams and SLA plan time windows stored as custom properties for the admin to activate post-migration. Workflows, automations, and canned-response templates do not migrate as code; we deliver a written inventory for the customer's admin to rebuild in HubSpot's workflow builder. The HubSpot Starter plan at $15 per seat per month is the entry tier for Service Hub, while osTicket's open-source edition carries no licensing cost but requires self-hosted infrastructure maintenance.
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
osTicket platform overview
Scorecard, SWOT, gotchas, and pricing for osTicket.
Destination platform
HubSpot Service Hub platform overview
Scorecard, SWOT, gotchas, and pricing for HubSpot Service Hub.
Data migration guide
The complete HubSpot Service Hub migration guide
Data model, import mechanisms, field mapping strategy, pitfalls, and cutover — by the engineers running it.
Destination checklist
HubSpot Service Hub migration checklist
Pre- and post-cutover tasks for moving onto HubSpot Service Hub.
Why teams make this switch
Leaving
What's pushing teams away
Choosing
What's pulling them in
Object mapping
Each row shows how a osTicket 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.
osTicket
Ticket
HubSpot Service Hub
Ticket
1:1osTicket Ticket records migrate to HubSpot Tickets 1:1. The osTicket ticket ID is preserved in a custom property osticket_id__c for reconciliation. Status, Priority, Source channel, and created/updated timestamps map to HubSpot's standard Ticket properties. Ticket number in osTicket (formatted e.g., #0001234) is stored in a custom property for reference. We extract all ticket custom fields and map them to HubSpot Ticket custom properties, creating the HubSpot property schema during the scoping phase.
osTicket
Ticket Thread
HubSpot Service Hub
Conversation (Ticket Conversation)
1:manyosTicket stores the entire ticket conversation history — user replies, agent responses, and internal notes — as a single merged Thread record per ticket. We split this blob into discrete message records at migration time using osTicket's rendered-thread HTML structure, which is version-sensitive across osTicket releases. Each resulting message record receives the author name, timestamp, and internal vs. public flag preserved from the source thread. The split logic is applied during the MySQL read phase before records are written to HubSpot, ensuring that the conversation timeline in HubSpot's Tickets inbox mirrors the chronological order visible in osTicket.
osTicket
User (End User / Customer)
HubSpot Service Hub
Contact
1:1osTicket Users (end users who submit tickets) map to HubSpot Contacts. We use email address as the dedupe key. Name, email, phone, and organisation linkage migrate. osTicket allows Users with no Organisation assignment; these map to standalone HubSpot Contacts without a Company association, and we flag them in the reconciliation report for the admin to link post-migration. Custom fields on osTicket user forms migrate to HubSpot Contact properties.
osTicket
Agent (Staff / Operator)
HubSpot Service Hub
User
1:1osTicket Agents map to HubSpot Users (service desk agents). We resolve agents by email address. Any osTicket Agent without a matching HubSpot User email is placed in a reconciliation queue for the customer's admin to provision before production migration begins. osTicket per-department permissions do not have a direct HubSpot equivalent; we document the permission matrix in a written report for the admin to configure HubSpot Teams and access levels post-migration.
osTicket
Organisation (Company)
HubSpot Service Hub
Company
1:1osTicket Organisations map to HubSpot Companies. The organisation name becomes the Company name field. We preserve organisation-level data including domain, phone, address, and any custom fields. The loosely-enforced User-to-Organisation relationship in osTicket is resolved by matching Users to their assigned Organisation by org_id at migration time, linking each Contact to the correct HubSpot Company via the HubSpot associations API.
osTicket
Department
HubSpot Service Hub
Team
1:1osTicket Departments control ticket routing and agent permissions and carry an associated SLA plan and email routing address. We map Departments to HubSpot Teams (the inbox assignment unit in Service Hub). Each Department name and its associated SLA plan are recorded; the customer configures Team inboxes and routing rules in HubSpot post-migration based on the department inventory we deliver.
osTicket
SLA Plan
HubSpot Service Hub
Custom Property (First Response Due / Next SLADue)
lossyosTicket SLA Plans define response and resolution deadlines tied to ticket priority. We extract SLA plan names, first-response hour windows, and resolution hour windows as typed HubSpot Ticket custom properties (e.g., sla_first_response_hours__c, sla_resolution_hours__c). These are not native HubSpot SLA objects (which are a separate premium add-on at Enterprise); the customer's admin activates HubSpot's native SLA feature or configures workflow-based SLA enforcement based on the migrated SLA data.
osTicket
Help Topic
HubSpot Service Hub
Ticket Subject Prefix or Tag
lossyosTicket Help Topics are ticket categories that drive routing and SLA assignment. They are a first-class object in osTicket but have no direct HubSpot equivalent. We map Help Topics to a HubSpot Ticket custom property (e.g., help_topic__c as a single-select picklist) and optionally to HubSpot Tags on Tickets for reporting segmentation. The customer chooses the strategy during scoping.
osTicket
Attachment
HubSpot Service Hub
File (attached to Ticket)
1:1osTicket stores attachments separately from the ticket thread record and links them by attachment ID. We extract attachment records alongside ticket threads, re-link them to the corresponding HubSpot Ticket using HubSpot's Files API, and preserve filename, MIME type, and file size. Attachments stored on the osTicket server filesystem (not in the database) require the customer to expose the attachment directory over a reachable URL or share it with us during scoping.
osTicket
Custom Fields (Ticket and User)
HubSpot Service Hub
Custom Properties
1:1osTicket Custom Fields are configurable per ticket and user forms with types including text, boolean, date, list, and checkbox. We map each field to a corresponding HubSpot Ticket or Contact custom property with the appropriate field type. osTicket custom fields that are marked as required for end-user-facing forms silently block ticket creation via the osTicket API — this is handled at migration scoping time by temporarily setting them to optional, and restored post-migration if requested.
osTicket
Email Thread History
HubSpot Service Hub
Ticket Conversation
1:1For tickets created via email (osTicket's email piping feature), the email thread history stored in the Thread blob migrates alongside the ticket. Each email in the thread is split into a discrete HubSpot Conversation message with author attribution, timestamp, and direction (inbound/outbound) preserved. Email addresses without a matching HubSpot Contact are created as stub Contact records during migration to preserve the sender attribution.
osTicket
Ticket Status
HubSpot Service Hub
Ticket Status
lossyosTicket ticket statuses (Open, Closed, Archived, etc.) map to HubSpot Ticket Pipeline stage values. We map each osTicket status to a corresponding HubSpot pipeline stage, with Closed status triggering the completion timestamp. Custom osTicket ticket statuses are created as HubSpot Ticket pipeline stages during the schema preparation phase. The customer reviews and approves the status map before migration begins.
osTicket
Ticket Priority
HubSpot Service Hub
Ticket Priority
1:1osTicket Priority levels (Low, Normal, High, Emergency) map directly to HubSpot Ticket Priority values. The mapping is 1:1 with no transformation required. Priority drives SLA plan assignment on the HubSpot side if native SLA enforcement is activated.
osTicket
Agent Stats / Department Stats
HubSpot Service Hub
No direct equivalent (reported separately)
1:1osTicket tracks agent and department-level ticket statistics (tickets opened, closed, average response time) as derived data stored in the database. These are not individual records with a creation timestamp — they are computed rollup counters. We do not migrate rollup counters. The customer can recreate agent performance reporting in HubSpot's Service Hub analytics from the migrated ticket history once the agent is assigned as the ticket owner in HubSpot.
| osTicket | HubSpot Service Hub | Compatibility | |
|---|---|---|---|
| Ticket | Ticket1:1 | Fully supported | |
| Ticket Thread | Conversation (Ticket Conversation)1:many | Fully supported | |
| User (End User / Customer) | Contact1:1 | Fully supported | |
| Agent (Staff / Operator) | User1:1 | Fully supported | |
| Organisation (Company) | Company1:1 | Fully supported | |
| Department | Team1:1 | Fully supported | |
| SLA Plan | Custom Property (First Response Due / Next SLADue)lossy | Fully supported | |
| Help Topic | Ticket Subject Prefix or Taglossy | Fully supported | |
| Attachment | File (attached to Ticket)1:1 | Fully supported | |
| Custom Fields (Ticket and User) | Custom Properties1:1 | Fully supported | |
| Email Thread History | Ticket Conversation1:1 | Fully supported | |
| Ticket Status | Ticket Statuslossy | Fully supported | |
| Ticket Priority | Ticket Priority1:1 | Fully supported | |
| Agent Stats / Department Stats | No direct equivalent (reported separately)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.
osTicket gotchas
API supports ticket creation only
Ticket threads are a single rich-text blob
Custom fields require optional setting for API
IP-restricted API keys block automated migration tooling
HubSpot Service Hub gotchas
Rate limits throttle large migration API calls
Side conversations and Zendesk macros have no HubSpot equivalent
HubSpot stores ticket history as fragmented engagement objects
Custom Objects require Enterprise tier in HubSpot
Ticket pipeline stage probability values do not export cleanly
Pair-specific challenges
Migration approach
Source environment audit and edition selection
We inspect the osTicket installation to identify the MySQL database version, schema variant (osTicket version determines the ERD shape), attachment storage method (database BLOB vs. filesystem), custom field definitions, SLA plan configuration, department structure, and user-to-organisation linkage覆盖率. We also identify the HubSpot Service Hub tier in use or required: Starter for individual inboxes, Professional for shared team inboxes and workflow automation, or Enterprise for native SLA management and advanced reporting. The audit output is a written data inventory and a tier recommendation.
Database extraction and thread splitting preparation
We connect to the osTicket MySQL database using a read-only database user scoped to the osTicket schema. We extract all Tickets, Users, Agents, Organisations, Custom Fields, Departments, SLA Plans, and Help Topics in structured form. We identify the osTicket release version to configure the thread-splitting parser — the HTML structure of osTicket thread rendering changes across releases. Attachments stored on the filesystem require the customer to either expose the attachment directory over HTTPS or provide a file share during extraction. We produce a record-count reconciliation report against the source database counts before proceeding.
HubSpot schema preparation and property creation
We create the HubSpot Ticket and Contact custom property schema in the destination portal before any data is written. This includes custom properties for SLA plan names and time windows, the original osTicket ticket ID (osticket_id__c) for reconciliation, Help Topic mapping fields, and any custom field equivalents from osTicket. We also configure the Ticket pipeline stages to match the osTicket ticket status map approved during scoping. If the customer is on Professional or above, we set up Teams to match the osTicket Department structure. Schema is validated in HubSpot's test environment before the migration run begins.
Sandbox migration and reconciliation
We run a full migration into the HubSpot sandbox or a parallel test portal using the same extraction and transformation logic planned for production. The customer's support operations lead reviews a sample of migrated tickets — checking conversation thread accuracy after splitting, contact-company linkage, SLA plan data presence, and agent assignment. We reconcile record counts (tickets in, contacts in, companies in, attachments in, SLA records in) against the source database counts. Any mapping corrections are applied to the production migration configuration before the next phase. Sign-off from the customer's admin is required before cutover.
Production migration in dependency order
We execute the production migration in record-dependency order. First, Companies (from osTicket Organisations) are created to establish the HubSpot Company records. Second, Contacts (from osTicket Users) are imported with Company association resolved by the osTicket org_id link. Third, Users (from osTicket Agents) are validated against the HubSpot User list. Fourth, Tickets are imported with thread history split into discrete conversation messages and linked to the correct Contact and Company. Fifth, Attachments are uploaded and linked to their parent tickets. Sixth, SLA plan data and Help Topic values are written to the custom properties on each ticket. Each phase emits a reconciliation report and the customer reviews before the next phase begins.
Cutover, validation, and automation rebuild handoff
We freeze osTicket write access during the cutover window and run a final delta migration of any tickets created or modified during the migration run. We enable HubSpot Service Hub as the system of record and deprecate osTicket access. We deliver the written automation and SLA rebuild inventory — documenting each osTicket SLA Plan with its response and resolution window, each department routing rule, and each help topic assignment — so the customer's admin can configure HubSpot workflows, team inboxes, and SLA enforcement in the new system. We offer a one-week hypercare window for reconciliation issues raised during the first support-team review.
Platform deep dives
osTicket
Source
Strengths
Weaknesses
HubSpot Service Hub
Destination
Strengths
Weaknesses
Complexity grading
Moderate Helpdesk migration. 3 of 7 objects need a mapping; the rest are 1:1.
Overall complexity
Moderate migration
Derived from compatibility, mapping clarity, API constraints, and data volume across osTicket and HubSpot Service Hub.
Object compatibility
3 of 7 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
7-object category — typical timelines run 2–7 days end-to-end.
API constraints
osTicket: Not publicly documented.
Data volume sensitivity
osTicket 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 osTicket to HubSpot Service Hub migration scoping. Not seeing yours? Book a call.
Walk through your osTicket to HubSpot Service Hub migration with a real engineer — 30 minutes, free, written quote within 24 hours.
Book a free 30 minute consultationAdjacent paths
Other ways to leave osTicket
Other ways to arrive at HubSpot Service Hub
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.