Choose a support ticketing system by the work it must reliably manage: intake, case ownership, routing, conversation history, escalation, and reporting. A five-person team receiving requests by email and chat needs to know whether every case has an owner, what was promised, and what happens when no eligible agent is available. A longer feature list does not answer those questions.
Compare pricing by its billing unit, verify the exact plan’s routing and channel capabilities, then pilot real intake and failure cases before migrating. The prices and product details below were observed on October 13, 2026, and can change. Recheck official vendor pages before purchase.
This guide focuses on five products with independently checked pricing, capability, routing, and implementation documentation. It is not a ranking or a universal best-tools list.
What a support ticketing system should do
A ticket is a case record for a support issue, not a synonym for every message in a conversation. One ticket may contain customer replies, agent responses, internal notes, assignment changes, status transitions, SLA events, and automation runs. Keeping those records distinct makes ownership and reporting more dependable.
Ticketing software tracks and resolves cases. Help-desk capabilities may add service workflows, knowledge resources, and operational reporting. A CRM holds broader customer, company, and account context. These capabilities can live in one platform or be integrated, but decide which system owns each record and field. See CRM systems and customer-data workflows for the wider data-management context.
A shared mailbox can be enough for low-volume support when requests are simple and one person can manage them. As volume or complexity grows, email alone makes it harder to assign one accountable owner, see status history, escalate consistently, and measure service performance. The issue is not that email cannot support customers. A mailbox simply does not enforce a durable case workflow by itself.
HubSpot describes Service Hub as combining service tools with CRM context. That may suit a team that wants customer records and service work in one ecosystem, but the system of record and required fields should still be explicit. See HubSpot’s Service Hub overview, then confirm the exact plan and access requirements.
Choose the pricing model before comparing plan names
Vendor prices are not directly comparable when one charges by agent seat and another by ticket volume or AI outcome. The following examples were observed on October 13, 2026. They are point-in-time examples, not a market benchmark or recommendation.
| Product | Pricing basis | Observed public example | Check before buying |
|---|---|---|---|
| HubSpot Service Hub | Seats | Free at $0 for up to two users; Starter from $7 per seat/month annually or $20 monthly; Professional $90 annually or $100 monthly; Enterprise $150 per seat/month. | Plan limits, seat type, permissions, and Professional or Enterprise onboarding fees. |
| Zendesk | Agent seats | Annual prices: Support Team $19, Suite Team $55, and Suite Professional $115 per agent/month. | Plan-specific channels, workspace features, and any Enterprise or add-on quote. |
| Freshdesk | Agent seats | Annual prices: Growth $19, Pro $55, and Enterprise $89 per agent/month. | Exact Freshdesk configuration, tier entitlements, and whether Freshdesk Omni is required. |
| Gorgias | Ticket volume plus usage charges | Helpdesk pricing scales by monthly ticket volume. AI outcomes and some channels may be billed separately. | Billable-ticket definition, included volume, overages, AI outcomes, and channel charges. |
| Intercom | Seats plus outcome and possible channel charges | Annual seat prices: Essential $29, Advanced $85, and Expert $132 per seat/month. Fin starts at $0.99 per outcome. | Outcome definition, feature tier, and additional channel usage charges. |
Sources: HubSpot pricing, Zendesk pricing, Freshdesk pricing, Gorgias pricing and its billing definitions, and Intercom pricing.
A ticket, an agent seat, and an AI outcome are different billing units. Model full and collaborator seats, monthly tickets, AI outcomes, voice or SMS usage, onboarding, required routing and SLA features, overages, and integrations in both an ordinary month and a plausible high-usage month.
Gorgias defines a billable helpdesk ticket as a ticket with at least one message sent from the helpdesk, including a message sent by a human, AI Agent, or rule. Its AI outcome is a separate usage concept. Intercom also bills Fin by outcome rather than treating an outcome as another seat. Do not convert either model into a simple per-agent comparison.
Match product capabilities to the support operation
Shortlist by the work your team needs to do, not by a universal best-for label. The differences below are starting points for plan-level checks.
| Product | Pricing basis | Verified differentiator | Verify before buying |
|---|---|---|---|
| HubSpot Service Hub | Seats | Help Desk supports documented routing destinations and distribution modes alongside CRM context. | Service Seat requirements, permissions, connected channels, and plan entitlements. |
| Zendesk Suite | Agent seats | Suite documentation describes ticketing, messaging, email, voice, SMS, live chat, and a unified agent workspace. | Which channels and features are included in the selected tier. |
| Freshdesk | Agent seats | Freshworks describes routing by factors such as skill, channel, or capacity, with automation for escalation and reassignment. | Plan-specific features, API requirements, and Freshdesk versus Freshdesk Omni configuration. |
| Gorgias | Ticket volume | Helpdesk pricing is tied to ticket volume, with separate AI outcome and some channel charges. | Billable volume, overages, AI charges, and add-ons. |
| Intercom | Seats plus outcomes | Public pricing lists seat plans and separate Fin outcome pricing; routing and SLA functions vary by tier. | Routing, SLA, workflow, and channel features for the exact tier. |
Product-family pages do not establish that every feature is included in every plan. Check required channels, assignment rules, customer context, SLA handling, API access, security, usage limits, and integration maintenance against the actual offer. HubSpot documents load-balanced, round-robin, and random assignment, but eligible users need relevant access and availability settings can affect assignment. Freshworks describes routing and automation at the product level, so confirm the chosen plan and account configuration. See Zendesk’s Suite plan documentation for tier-specific channel context.
Design routing rules before adding AI classification
Use deterministic rules for information you already know: intake channel, customer tier, language, product, contractual SLA, and business hours. Consider AI only when free text is ambiguous, such as suggesting an issue category or summarizing a long message. The system should validate any suggested value before it changes a ticket or determines ownership.
HubSpot Help Desk documents assignment to users or teams, a customer agent, a contact owner, a workflow, or no one. Distribution options include load balanced, round robin, and random. Routing eligibility depends on seats, access, team membership, and availability. HubSpot also distinguishes calling, messaging, and email or other ticket sources, so test each intake path you plan to use. See the HubSpot routing procedure.
A validation gate should confirm that a suggested category belongs to an approved list, the destination accepts the proposed priority, the customer match is credible, and the source event has not already been processed. Measure routing success with a defined denominator, such as the share of eligible new cases assigned to the intended team without manual reassignment during the pilot.
Three implementation patterns and their boundaries
The following examples use verified vendor procedures and developer documentation. Field names marked as illustrative are planning fields, not claims about native schemas.
| Trigger | AI job | Validation and action | Fallback |
|---|---|---|---|
| A connected channel ticket enters HubSpot Help Desk. | None required. Optional classification is separate. | Evaluate source category, eligible users, availability, and distribution mode. Assign to the configured user, team, customer agent, contact owner, or workflow. | Support operations reviews unassigned tickets when no eligible agent is available. |
| A HubSpot workflow receives a conversation ID that needs a ticket. | Optional summary of permitted text before creation. | Validate the conversation and internal pipeline and stage IDs. Create the ticket, save its ID, retrieve threads, and associate them separately. | CRM integration owner retries association using the saved ticket ID instead of creating another ticket. |
| A call event enters a Freshworks CTI app. | None required by the documented example. A separate summary step is hypothetical. | Validate requester, status, and priority. Create a ticket with sanitized call notes and store the external call ID in an integration record. | Route API failures to a retry or dead-letter queue. An agent reviews unidentified requesters. |
| An external event needs a Zendesk ticket. | Optional category extraction into an approved value. | Submit a comment with the create request, capture returned identifiers, and use documented idempotency support where appropriate. | Handle throttling with Retry-After. A support lead handles closed-ticket continuation. |
HubSpot: route Help Desk tickets or create from a conversation
For native Help Desk routing, connect the intended channel, choose a documented routing destination, select a distribution mode, and configure availability if needed. Test each source type and the case where no agent is eligible. Preserve the source and routing decision if downstream reporting needs them.
A separate HubSpot developer example shows a custom-code workflow receiving a conversation identifier, creating a ticket through the CRM Tickets API, retrieving conversation threads, and associating them. This is an illustrative developer example, not a no-code template. Validate the conversation and internal pipeline and stage IDs first. Store the created ticket ID before attempting association so an association failure can be retried without creating another ticket. See the HubSpot ticket and conversation example and the CRM Tickets API guide. For implementation context, HubSpot systems support is relevant to configuration and CRM workflow planning.
Freshdesk: create a ticket from a call event
Freshworks’ CTI codelab demonstrates a call event supplying requester email, subject, priority, description, and status to a ticket-creation request. In production, validate the requester and account-accepted values, then save the returned ticket ID and external call ID in the integration’s mapping store. Do not assume every account has a native external-call-ID field.
Keep sensitive recordings, payment data, and unrestricted transcripts out of the description. Distinguish an API rejection from a successful create followed by a failed in-app notification. A rejected request goes to an error queue with its reason. A created ticket with a display failure should be retrieved by its saved identifier, not blindly recreated. The Freshworks CTI codelab is specific to the Freshworks app framework, not a generic external connector recipe.
Zendesk: create a ticket and make retries safe
Zendesk documents ticket creation through POST /api/v2/tickets. Its API reference identifies a comment as the required ticket property for creation; other properties are optional. A minimal illustrative request body is:
{
"ticket": {
"subject": "Illustrative service issue",
"comment": {
"body": "Sanitized customer issue summary"
},
"requester": {
"email": "[email protected]"
}
}
}
Use Zendesk’s documented idempotency capability where appropriate, capture the returned ticket and audit information, and handle HTTP 429 responses using Retry-After and applicable endpoint limits. Do not blindly repeat a create request after a timeout. If a closed ticket needs continuation, Zendesk documents follow-up-ticket behavior rather than treating it as an ordinary update. Review the ticket creation and update procedure, API idempotency documentation, and rate-limit guidance.
Prevent duplicates and keep records at the right grain
A lookup followed by create is not safe under concurrency. Two workers can both find no ticket and then create one. Prefer a database-enforced unique key, transactional upsert, vendor-supported idempotency, or a queue serialized by source object. Zendesk documents an idempotency mechanism for ticket creation. The HubSpot and Freshdesk references demonstrate creation workflows, but do not establish a comparable universal create-ticket idempotency key for those products.
For a HubSpot conversation-to-ticket integration, an integration-owned mapping could contain source_system, source_object_id, target_system, target_ticket_id, workflow_version, received_at, processed_at, status, and error_code. These are proposed integration fields, not native vendor fields. Enforce uniqueness across source_system, source_object_id, and target_system so concurrent replays cannot produce competing mappings.
- Ticket record: one support case.
- Message: one inbound or outbound communication, with its own source identifier when available.
- Event: one status, assignment, SLA, or other change, keyed by an event identifier rather than only the ticket ID.
- Workflow run: one execution, identified by the source object, workflow version, and event or revision when available.
- Reporting summary: one aggregate for a defined period, timezone, filters, and source snapshot or query definition.
Before writing a CRM field, check that the record is still eligible, the source event is current, the value changes, the integration owns that field, and the write will not trigger a loop. Also check whether a human changed the field since the workflow began. Record ticket creation, association, notification, and human handoff as separate outcomes.
Run a plan and workflow pilot before migration
Start with a controlled sample from every intended channel, not a full migration. Include ordinary requests, unmatched customers, unavailable-agent periods, API timeouts, duplicate webhook deliveries, and retries. Confirm the selected plan’s seats, permissions, custom fields, API scopes, limits, associations, and billing definitions with the vendor.
Define first-response and resolution measures before comparing systems. State the start and stop events, reporting window, timezone, and exclusions. Keep underlying ticket and event records separate from derived metrics so a dashboard total can be traced to its calculation.
- Representative source paths and the no-agent-available case have been tested.
- Duplicate delivery and retry tests do not create duplicate cases or mappings.
- Plan entitlements, permissions, API limits, and expected usage charges are confirmed.
- Privacy rules cover ticket text, call notes, and any optional AI processing.
- A named owner handles failed integrations, and a named human queue reviews uncertain cases.
- Response and resolution metrics have documented events, windows, timezone, and exclusions.
Assign an operational owner to the integration and exception queue, then migrate channels gradually. If you use an automation platform, verify that the exact connector exposes the fields and operations your workflow requires. A general automation service is not proof of a maintained ticketing template. Zapier automation support may be relevant when assessing automation requirements, without implying that a specific ticketing connector is available.
The practical selection rule is simple: choose the system and plan that fit your real intake, ownership, and reporting model. Add AI only for a bounded task with approved outputs, validation, privacy controls, and a human review path.
