Intercom and Zendesk Integration: One Owner for Every Handoff

Intercom and Zendesk can work together through Inbox forwarding, a ticket-creation connector or Fin's dedicated Zendesk integration. Choose the route before building a sync: decide where the customer continues the conversation, which system owns the next reply and how a failed handoff is recovered. If you only want Fin on an existing Zendesk operation, you can keep Zendesk as the helpdesk without buying a second Intercom helpdesk for every agent.

Jafrin Akter AloLast updated 18 min read
On this page

When does running Intercom and Zendesk together make sense?

Keep both when they serve distinct operating needs, such as Intercom product conversations and Zendesk specialist queues, or during a controlled migration. If the requirement is simply an AI agent for Zendesk, evaluate Fin for Zendesk before committing to two helpdesks.

When does running Intercom and Zendesk together make sense?
RequirementRoute to evaluatePrimary operating owner
An Intercom agent occasionally forwards a caseZendesk Support Inbox appExplicit receiving Zendesk queue after acceptance
A defined Intercom workflow creates an escalation ticketData connector or custom adapterIntercom until Zendesk receipt and ownership are confirmed
Zendesk remains the helpdesk and Fin answers customersFin for ZendeskZendesk ticketing and human support, with Fin controlling its configured AI stage
A temporary platform moveBounded handoff plus an archiveOne chosen system per open issue throughout cutover

The Intercom versus Zendesk comparison helps choose a primary platform. This guide addresses the operating contract when both names remain in the stack. Start with the particular handoff that fails: a refund awaiting finance, a product bug reaching specialists or an unresolved AI conversation reaching a person.

Our customer support automation work starts with that ownership contract. Intercom implementation and Zendesk implementation then need to respect the same identity, routing and reply rules.

Pink and lime zipper ribbons meet at one slider beside Support Handoff One Owner.

Which integration routes exist, and what do they actually sync?

The routes have different purposes. An app that forwards a conversation, a connector that creates a ticket and a native Fin channel integration do not provide the same ongoing behavior.

Intercom's Zendesk Support app

Intercom lists Zendesk Support among its first-party apps, and its Inbox guide describes forwarding Intercom conversations to Zendesk. Evaluate this for an agent-controlled handoff. Confirm the installed app's current entitlement and exactly which transcript parts, attachments and later replies it copies before relying on it. First-party app list, Inbox app capabilities.

Forwarding alone is not evidence of a complete two-way conversation sync. Write down where the customer's next message and the agent's next public reply will appear. If those steps need another action, include it in the operating procedure.

A Data connector or custom ticket handoff

Intercom publishes a Data connector recipe that creates a Zendesk ticket from a conversation. The recipe explicitly covers creation only; updating the Zendesk ticket requires another connector. It also describes mapping the returned Zendesk ticket ID back into Intercom. Ticket-creation recipe.

Use this route when you need a defined payload, routing conditions or a selected escalation event. Data connector creation and configuration require Can access developer hub permission. Intercom Advanced includes the Workflows builder used for automated routing; confirm the features in the actual workspace. Data connector permissions, Intercom plans.

Use current Zendesk OAuth guidance for a new implementation. Older connector examples still show password or API-token headers; Zendesk's current authentication documentation directs integrations toward OAuth. The Zendesk API authentication guide covers migration and renewal. Official authentication reference.

Fin for Zendesk

Fin has dedicated Zendesk ticket, messaging and Fin Messenger routes. Zendesk remains the system of record for the support operation. This is a different workspace/product path from an Intercom Suite workspace with its own Helpdesk and outbound features; adding an app to Intercom Suite does not automatically convert it into Fin for Zendesk. Fin integration overview, workspace and data-sync boundaries.

Avoid running a second custom ticket creator on a channel already managed by the Fin integration. Verify the native record and handoff first, then add only the behavior that is actually missing.

Which Fin channel and Zendesk edition do you need?

Choose between an asynchronous ticket and a live-agent handoff before buying the messaging capability. Fin's setup requires admin access to both the Fin workspace and Zendesk. Ticket and messaging connections are configured separately. Getting-started requirements.

Which Fin channel and Zendesk edition do you need?
RouteCustomer experienceRequired integration boundary
Fin on Zendesk email/form ticketsFin replies through the ticket's channel, then routes to peopleZendesk ticket connection, Fin agent identity and integration triggers
Fin Messenger with Create Zendesk ticketEnds the Messenger session and creates a ticket with summary and collected dataZendesk API connection; Sunshine is not required for this handoff option
Fin Messenger with Hand-off to Zendesk agentA Zendesk agent continues the live conversationZendesk API and Sunshine capability
Fin on Zendesk MessagingAI stage on supported messaging channels, then Zendesk human handlingDedicated messaging connection and Sunshine entitlement

Fin documents Sunshine access in Zendesk Suite Professional, Enterprise and Enterprise Plus, or as a separately purchased entitlement. That requirement belongs to the messaging/live-handoff route; it is not a reason to assume every ticket-only integration needs Suite Professional. Zendesk requirements, Messenger handoff options.

For Fin Messenger live-agent handoff or Determined by situation, Zendesk also requires Multiple Conversations to be enabled. Include that setting in the channel acceptance check. Messenger setup prerequisites.

The current setup starts from Connect with OAuth. Ticketing and Sunshine are distinct connections; the messaging guide also retains a Sunshine-specific App ID/key/secret section. Follow the connection method presented for that channel and workspace, and confirm any remaining Sunshine credentials with the provider rather than reusing a Support API token. Messaging setup.

For Zendesk tickets, Fin recommends a clearly identified agent account with a verified email and the Agent role so it can reply. Include that identity in the licence inventory. Limit initial assignment to the intended queue or test population. Ticket setup.

How do you stop the same customer being handled twice?

Give each logical support issue one customer-facing owner, and make the transfer conditional on receiving-system confirmation. A ticket existing somewhere is not the same as a staffed queue accepting responsibility.

Use a small handoff contract. The field names below are proposed integration fields, not native status names shared by both products.

How do you stop the same customer being handled twice?
Contract fieldPurposeWriter
Logical issue IDJoins the customer's issue across recordsHandoff service or agreed case registry
Source conversation and target ticket IDsOpens the actual records for investigationIntegration after verified readback
Reply ownerIdentifies who may send the next customer-facing answerAgreed routing controller or accepting team
Handoff stateRequested, pending confirmation, confirmed or failedIntegration, with an operational override process
Requested/accepted timestampsMeasures time waiting between systemsSource and receiving workflow respectively

For a custom Intercom-to-Zendesk escalation, keep the Intercom owner accountable until the target requester, organization, group and ticket ID have been verified and the receiving queue has an owner. Then apply the documented transfer policy. Explain the next channel to the customer when the handoff changes from chat to email.

For native Fin, preserve the vendor's ownership controls. Its assignment trigger excludes cases already tagged fin-routed-to-team, and its update notification excludes Fin's own changes. Removing these guards can send a human-handled case back to Fin or create a notification loop. Fin's trigger guide permits adding conditions to the assignment trigger and warns against changing the integration's other behavior. Fin trigger contract.

Keep private notes private. The Zendesk Comments API defines public: false as an internal note, and notes that the initial privacy value can persist for later comments unless changed. Set visibility deliberately for each automated comment. A private note also does not prove that every configured trigger will remain silent; inspect notification rules before testing writes. Comment visibility.

How should a custom handoff recover from retries?

Persist the handoff intent before sending a create request, use a stable idempotency key and retain the target ticket ID after verification. Do not treat Zendesk's external_id as a uniqueness constraint: the API explicitly allows several tickets with the same external ID. Ticket identifiers.

Zendesk's ticket-creation API supports the Idempotency-Key header. Repeating the same body with the same key returns the cached response; changing the body with that key produces an error. The key expires after two hours. A replay after expiry can create another ticket, so an external-ID field and a retry loop are insufficient by themselves. Ticket-create idempotency.

The following local planner illustrates the decision boundary for a custom adapter. It sends no requests and is not code to paste into a Fin-managed channel. Save it as handoff.py. The 7,000-second retry cutoff, three-attempt budget and 2,500-character summary limit are conservative example policies, not Zendesk limits.

Python
import hashlib
import json
import re

RETRY_WINDOW_SECONDS = 7000  # Local margin inside Zendesk's two-hour cache.
MAX_ATTEMPTS = 3            # Local policy, not a Zendesk limit.


def prepare_handoff(event, receipt=None, elapsed_seconds=None):
    """Plan a custom handoff. No HTTP call, database write or customer reply."""
    if not isinstance(event, dict):
        raise ValueError("Event must be an object")
    if event.get("origin") == "zendesk":
        return {"action": "ignore_reflected_event"}
    if event.get("origin") != "intercom":
        raise ValueError("Unsupported trusted source")
    if event.get("membership_verified") is not True:
        raise ValueError("Verify requester membership before preparing a handoff")
    for field in ("workspace_id", "conversation_id"):
        if not isinstance(event.get(field), str) or not re.fullmatch(r"[A-Za-z0-9_-]{1,64}", event[field]):
            raise ValueError("Invalid source ID")
    for field in ("generation", "requester_id", "organization_id", "group_id"):
        if type(event.get(field)) is not int or event[field] < 1:
            raise ValueError("IDs and generation must be positive integers")
    summary = event.get("summary")
    if not isinstance(summary, str) or not summary.strip() or len(summary) > 2500:
        raise ValueError("Provide a minimized summary of 1–2500 characters")
    if elapsed_seconds is not None and (type(elapsed_seconds) is not int or elapsed_seconds < 0):
        raise ValueError("Invalid elapsed time")
    key = "ic:{}:{}:{}".format(event["workspace_id"], event["conversation_id"], event["generation"])
    body = {"ticket": {
        "subject": "Intercom handoff " + event["conversation_id"],
        "requester_id": event["requester_id"],
        "organization_id": event["organization_id"],
        "group_id": event["group_id"],
        "external_id": key,
        "status": "open",
        "tags": ["intercom_handoff"],
        "comment": {"body": summary, "public": False}
    }}
    encoded = json.dumps(body, sort_keys=True, separators=(",", ":"), ensure_ascii=False)
    digest = hashlib.sha256(encoded.encode("utf-8")).hexdigest()
    request = {"method": "POST", "path": "/api/v2/tickets.json",
               "headers": {"Content-Type": "application/json", "Idempotency-Key": key},
               "body": body, "body_sha256": digest}
    if receipt is None:
        return {"action": "create_after_durable_reservation", "request": request}
    if not isinstance(receipt, dict) or receipt.get("key") != key:
        raise ValueError("Receipt belongs to another handoff")
    if receipt.get("body_sha256") != digest:
        return {"action": "hold_changed_body"}
    state = receipt.get("state")
    if state == "confirmed":
        ticket_id = receipt.get("ticket_id")
        if type(ticket_id) is not int or ticket_id < 1:
            raise ValueError("Confirmed receipt needs the verified ticket ID")
        return {"action": "link_existing", "ticket_id": ticket_id}
    if state == "rejected":
        return {"action": "repair_rejected_request"}
    if state == "pending":
        return {"action": "reconcile_inflight_attempt"}
    if state != "unknown":
        raise ValueError("Unsupported receipt state")
    if elapsed_seconds is None:
        raise ValueError("Unknown outcome needs elapsed time from the first attempt")
    attempts = receipt.get("attempts")
    if type(attempts) is not int or attempts < 1:
        raise ValueError("Unknown outcome needs an attempt count")
    if elapsed_seconds >= RETRY_WINDOW_SECONDS or attempts >= MAX_ATTEMPTS:
        return {"action": "reconcile_before_any_new_create"}
    return {"action": "retry_same_request", "request": request}

Save this complete fictional exercise as example.py beside it. The event is a normalized adapter input, not Intercom's webhook schema. The numeric requester, organization and group IDs are synthetic placeholders. generation identifies an intentionally new handoff; keep it fixed on retries rather than incrementing it when a response is missing.

Python
from handoff import prepare_handoff

# Fictional, normalized adapter event; not a native Intercom webhook schema.
event = {
    "origin": "intercom",
    "workspace_id": "workspace_demo",
    "conversation_id": "conversation_demo_17",
    "generation": 1,
    "membership_verified": True,
    "requester_id": 9001,
    "organization_id": 8001,
    "group_id": 7001,
    "summary": "Synthetic case: export failed. Workspace membership checked; support must inspect the failed job."
}
first = prepare_handoff(event)
receipt = {
    "key": first["request"]["headers"]["Idempotency-Key"],
    "body_sha256": first["request"]["body_sha256"],
    "state": "unknown",
    "attempts": 1
}
print(first["action"])
print(prepare_handoff(event, receipt, elapsed_seconds=60)["action"])
print(prepare_handoff(event, receipt, elapsed_seconds=7200)["action"])
receipt.update(state="confirmed", ticket_id=6001)
print(prepare_handoff(event, receipt)["action"])

Run python3 example.py. It prints:

Plain text
create_after_durable_reservation
retry_same_request
reconcile_before_any_new_create
link_existing

The planner prepares a POST /api/v2/tickets.json body with an internal summary and explicit identity/group IDs. A production executor must bind the source workspace to the intended Zendesk account, supply protected OAuth authentication, verify the real identity and membership, reserve the key atomically and persist the exact request before sending it. Populate origin from trusted integration provenance, not a customer-supplied field. A Boolean in a fixture does not perform authorization.

Persist the first-attempt time and attempts without resetting them on retries. The 7,000-second policy leaves 200 seconds inside the documented 7,200-second cache window. A confirmed receipt means the executor already checked the actual Zendesk record; the local function does not perform that readback or prove durable delivery.

When the outcome is uncertain beyond the retry window, reconcile before any new create. Query the saved ticket ID when available, or inspect all relevant external-ID matches with sufficient permissions and pagination. Zero visible matches under a restricted account is not proof that nothing was created. Multiple matches need an operator's decision. A changed payload is a new review problem, not permission to reuse the old key with different data.

How do you preserve the right customer and account context?

Map the person, the affected account and the support issue separately. The same email can belong to several workspaces, and a person's default organization may not be the account discussed in this conversation.

How do you preserve the right customer and account context?
Identity or contextPreserveCheck before handoff
RequesterProduct identity and mapped Zendesk user IDThe requester is verified; email matching alone did not choose the account
Affected accountProduct workspace and Zendesk organizationCurrent membership permits this context
IssueSource conversation, logical issue and target ticket IDsA retry or reply uses the existing relationship
Diagnostic evidenceRelevant facts, observation time and source referenceThe summary contains the needed context without unnecessary private data

For Fin Messenger, the documented setup compares its user_id with the Zendesk user's external_id. It can also select the Zendesk organization through a signed JWT company ID matching the organization's external ID, subject to user membership. That company mechanism applies to supported authenticated Messenger channels, not email. Requester and organization validation.

Fin maps Zendesk users to People data, tickets to Conversation data and organizations to Company data. Zendesk-sourced attributes are read-only in Fin and normally sync hourly. Organization multi-select and lookup fields are not supported by this sync. Set the workflow's collected/mapped attributes before the handoff step; do not assume every tag created in Fin will appear on the Zendesk ticket. Attribute synchronization.

Knowledge content is another boundary. Enable the Zendesk articles, documents and snippets Fin should use, with the intended audience. Historical tickets and private notes do not automatically become answer knowledge just because Zendesk is connected; distinguish the active ticket's context from the approved knowledge corpus. Zendesk knowledge sync.

Use the support customer-context guide for field freshness and account authorization. If CRM enrichment is also involved, keep the Zendesk–HubSpot mapping or Intercom–Salesforce mapping aligned with the same account identifiers and field ownership.

How do you report on support across both systems?

Report customer issues, handling work and vendor charges as separate measures. An Intercom conversation and its Zendesk ticket can represent one issue. A Fin outcome can still leave human work, while a ticket count can include AI-only visibility records.

Zendesk creates AI agent tickets for supported messaging conversations, including third-party bots. Messaging AI-only tickets have restricted behavior; most ordinary triggers and automations apply after human escalation, when the ticket becomes regular. Do not add another ticket creator merely because an agent-facing queue has not yet processed the AI record. AI agent ticket behavior.

For API reporting, the Tickets API's support_type_scope defaults to agent; use the intended all, agent or ai_agent scope deliberately. Keep the types distinguishable when reconciling totals. Ticket reporting scope.

In a fictional month of 1,000 Fin-involved support conversations, assume the outcomes are mutually exclusive and already classified under the applicable billing rules:

This workload uses service conversations over chat/email. It excludes voice and sales qualifications; Intercom's own outcome guide prices those scopes separately. Intercom channel outcome rules.

How do you report on support across both systems?
Recorded outcomeConversationsBillable Fin outcomesHuman work remains
Fin resolution400400None assumed for this example
Successful configured Procedure handoff100100Yes
Ordinary escalation to a human5000Yes
Total1,000500600 conversations

The example has a 40% resolution share and a 50% billable-outcome share. Calling all 500 billed conversations “resolved without a human” would hide 100 handoffs. Fin's platform outcome guide distinguishes configured Procedure handoffs from ordinary customer-requested or workspace-rule escalations and caps charges per conversation. Use invoice-adjusted outcomes, including relevant later reversals, rather than deriving a bill from a routing tag. Fin platform outcome definitions.

Keep the original customer-contact timestamp, handoff request, receiving acceptance and first receiving reply. Measure handoff waiting time separately from each platform's SLA clock. Choose a business-hours and timezone convention before comparing response times, and track reopened issues and duplicate public replies alongside throughput.

What would the same workload cost in each architecture?

Price the required seats and the same billable workload, then add channel usage, optional products and implementation separately. Fin's platform help describes a USD 49 monthly bundle including 50 outcomes, then USD 0.99 for additional outcomes. Its public pricing page also presents USD 0.99 per outcome with a 50-outcome minimum. Use the bundle calculation below only when that is the formula in your order; do not assume the two published formulations produce the same charge. Fin on an existing helpdesk does not require additional Intercom Helpdesk seats. Fin platform billing terms, Fin pricing.

Intercom Advanced lists USD 85 per full seat per month on annual billing; Zendesk Suite Professional lists USD 115 per agent on annual billing. Intercom billing terms, Zendesk USD pricing.

For this hypothetical comparison, five humans need Zendesk. The two-helpdesk option additionally licenses all five in Intercom Advanced for its workflow capabilities. Both columns reserve one extra full Zendesk agent seat for the integration identity, so six Zendesk seats are budgeted. This is a conservative staffing assumption, not a claim that Fin always forces an incremental sixth licence; confirm the usable identity and seat entitlement in the contract.

USD monthly equivalents before tax. Seat prices use annual commitments. Fin-on-Zendesk uses the published USD 49 bundle and overage formula; Fin with Intercom Helpdesk uses the chat/email USD 0.99 outcome rate.

What would the same workload cost in each architecture?
Cost componentFin with Zendesk, $49 bundleIntercom Helpdesk plus Zendesk handoffs
Six Zendesk Suite Professional seats × $115$690$690
Five Intercom Advanced seats × $85$0$425
500 billable Fin outcomes under each stated formula$494.50$495
Software planning subtotal$1,184.50$1,610
Twelve-month projection at unchanged usage/rates$14,214$19,320

The committed annual seat amounts are USD 8,280 and USD 13,380 respectively. Fin contributes USD 5,934 and USD 5,940 over twelve unchanged months under these formulas. Of the USD 425.50 monthly difference, USD 425 buys the additional Intercom helpdesk workflow and USD 0.50 comes from the stated Fin billing formulas. Neither is automatically an achievable operating saving when the second workflow or proactive engagement is still required.

Confirm the minimum and included quantity in the order. Under the platform-help bundle, the Fin-on-Zendesk calculation is 49 + (500 - 50) × 0.99 = USD 494.50. Do not add a USD 49 base fee to all 500 outcomes when the first 50 are included. If your agreement instead uses a straight USD 0.99 rate with a 50-outcome minimum, 500 outcomes would cost USD 495. Keep those formulas separate. Published platform billing terms.

For an outcome-volume sensitivity check, 1,000 billable outcomes would raise the monthly software subtotals to USD 1,679.50 and USD 2,105 under these formulas and unchanged seats. Reassess the human queue and staffing separately; the price calculation does not establish that the same team can handle a peak.

The example excludes voice, SMS/WhatsApp consumption, Copilot, other add-ons, migration and ongoing integration work. It uses Suite Professional for the selected Zendesk capabilities, not as a minimum for every ticket-only handoff. The detailed Intercom pricing, Zendesk pricing and support AI billing guide explain the wider budget. Never run two AI responders on the same path merely to compare their prices in production.

What should you check when a handoff fails?

Keep the source owner accountable, identify the first unconfirmed state and repair that boundary. Reconnecting everything or replaying every event can create a second problem before the first is understood.

What should you check when a handoff fails?
SymptomFirst evidence to inspectRecovery direction
No Zendesk ticket after a create timeoutDurable intent, same-key attempt history and target readbackReconcile or replay within the supported window; never blindly create after expiry
Fin stops replying to an assigned ticketActual assignment, notify-Fin trigger and applicable public customer commentRestore the expected routing/update path without broadening every trigger
Both AI and human replyCurrent owner, handoff guard tags and competing assignmentsRemove the conflicting responder path and retest one controlled case
Field value is missingSource mapping and whether collection happened before handoffFix the specific mapping/order, then verify the target value
Integration was disconnected/reconnectedExpected versus actual Fin triggers and OAuth connectionReview recreated triggers, duplicates and overwritten customizations before resuming
API responds 429Endpoint limit and Retry-AfterRespect the stated delay, preserve queue visibility and keep retries bounded

Fin's ticket FAQ warns that reconnecting can recreate triggers and affect customizations. Its current Connect/OAuth guidance supersedes older FAQ steps that still say to create a new API token. Use the trigger comparison view and the documented channel setup, not a repeated disconnect as a default fix. Fin troubleshooting, current ticket connection, API rate-limit behavior.

Also separate closure meanings. Fin's inactivity closure can leave the Zendesk ticket in its existing status; it is not the same transition as Zendesk Closed. A reply can reopen a solved Zendesk ticket, while a reply to a closed ticket creates a follow-up. Preserve the relationship and choose the new issue owner rather than trying to reopen the closed record through a status mirror. Fin inactivity behavior, Zendesk solved versus closed.

How do you verify one bounded support workflow?

Use a dedicated test population and one issue family before expanding routing. For Fin, start with the channel's Test before going live path or a separate restricted test workflow. For a custom adapter, use synthetic identities and a controlled destination with notifications reviewed before any approved write. Do not substitute an agent's email for a customer when testing public customer-reply behavior.

How do you verify one bounded support workflow?
Test caseRequired resultEvidence to retain
One valid handoffCorrect requester, organization, group and one active reply ownerSource IDs, target ID, visibility and acceptance record
Same create retried within policySame target ticket and same request identityRequest fingerprint, key, responses and readback
Unknown outcome after the cache windowReconciliation, not a new blind createHeld attempt and reviewed target matches
Changed body under the old keyHold for reviewBefore/after payload fingerprints
One requester in two accountsOnly the selected authorized account is attachedMembership and organization evidence
Internal handoff noteInternal content stays internal; no unintended notificationComment privacy and triggered actions
Failed auth, mapping or handoffOriginal owner remains responsible and alert is visibleError class, queue state and recovery owner
Solved/closed follow-upCorrect reopen or new follow-up path with linked historyLifecycle transitions and next owner

The local code exercise checks its planning rules and payload shape. These acceptance cases still need the real channel, integration identity, routing rules and notification configuration before rollout; a local function cannot establish those vendor behaviors.

How the workflow fits together
Verify the requester and account

The prior-handoff decision is shared with the next view. No creation is approved by an unverified identity.

Choose the route and reply owner, then verify requester and account identity. Keep the source owner during an identity repair and repeat verification before continuing.
Choose recovery or a new handoff

The receiving-confirmation decision continues into the final view. An uncertain earlier request does not authorize a second blind create.

Reconcile an earlier or uncertain handoff, or use the approved native handoff or reserved create when none exists. Both paths must confirm the receiving owner and record.
Confirm ownership before transfer

The read-back-to-confirmation connection is repeated for repair context; it is the same edge as in the preceding view.

Keep source ownership and alert recovery when the receiving record or owner is unconfirmed. Read back and reconcile again; transfer reply ownership and check outcomes only after confirmation.
Read diagram as text
  • Choose route and customer reply owner to Requester and account verified?.
  • Requester and account verified? to Keep source owner and repair identity: No.
  • Keep source owner and repair identity to Requester and account verified?.
  • Requester and account verified? to Prior handoff or uncertain result?: Yes.
  • Prior handoff or uncertain result? to Read back and reconcile existing records: Yes.
  • Prior handoff or uncertain result? to Use approved native handoff or reserved create: No.
  • Read back and reconcile existing records to Receiving owner and record confirmed?.
  • Use approved native handoff or reserved create to Receiving owner and record confirmed?.
  • Receiving owner and record confirmed? to Keep source owner and alert recovery team: No.
  • Keep source owner and alert recovery team to Read back and reconcile existing records.
  • Receiving owner and record confirmed? to Transfer customer reply ownership: Yes.
  • Transfer customer reply ownership to Join records and check customer and billing outcomes
Open full diagram

When should you consolidate on one helpdesk?

Consolidate when the second inbox no longer serves a distinct customer or operational requirement, or when reconciliation and ownership work exceed its value. Keep it when a tested requirement still depends on it, and document that requirement explicitly.

Fin for Zendesk does not include the complete Intercom Helpdesk or outbound suite. Its Messenger setup also excludes using that same Fin Messenger for proactive support content such as tours and outbound messages. If those are why you retain Intercom, confirm the supported workspace and channel design before removing licences. Workspace scope, Fin Messenger limits.

For a migration, separate open issues from historical reporting. Choose where each open case continues, preserve old-thread reply handling and test the exit path. A complete-looking archive is not a working handoff for a customer who is still waiting.

What should pass before you expand the integration?

  • The selected app, custom or Fin route matches the required customer channel.
  • Required editions, agent identities, OAuth access and messaging entitlements are confirmed.
  • Requester, account membership and field ownership survive the transfer.
  • One customer-facing owner is active before and after the handoff.
  • Duplicate, uncertain and expired-window attempts have a durable recovery path.
  • Private notes, public replies and notifications follow the intended visibility rules.
  • Reporting joins logical issues without conflating vendor records or billable outcomes.
  • Expected and peak software budgets use the actual contract formula and seat count.

Bring one failed handoff, its source and target records, and the current routing rules when you request a detailed support automation scope. Those details make it possible to fix a concrete operating gap without adding another uncontrolled sync.

Keep reading

Browse all CRM & Lifecycle guides

Questions people ask

Can Intercom integrate with Zendesk?

Yes. Intercom documents a Zendesk Support Inbox app for forwarding conversations, a Data connector recipe for ticket creation and dedicated Fin-for-Zendesk routes. They differ in ownership and ongoing synchronization. Choose the customer channel and receiving owner first, then verify which messages, fields, attachments and status changes the selected route actually transfers. Ticket creation alone does not establish a full two-way sync.

Can we use Fin with Zendesk without buying Intercom Helpdesk seats?

Yes. Fin is sold for an existing Zendesk helpdesk without additional Intercom helpdesk seats, with outcome-based pricing and minimum commitments. Zendesk licensing still applies, including the identity and messaging capabilities your setup requires. Fin for Zendesk is a different workspace path from Intercom Suite, so confirm the right product before purchasing. Its availability does not include every Intercom outbound or helpdesk feature.

Does a Zendesk handoff keep the customer in live chat?

It depends on the selected route. Fin's Create Zendesk ticket action ends the messaging session and creates a ticket with summary and collected data. Hand-off to Zendesk agent supports a live conversation and requires Sunshine capability as well as the Zendesk connection. A custom ticket-creation API call provides neither chat continuity nor reply synchronization automatically. Test the next customer message and agent reply explicitly.

Will using external_id stop duplicate Zendesk tickets?

No. Zendesk allows multiple tickets with the same external_id. Ticket creation supports an Idempotency-Key header, but its cache expires after two hours. Keep a durable handoff record, stable request body and verified target ID, and reconcile uncertain attempts before creating again outside the retry window. A timeout does not prove that the first ticket was never created.

Is every Fin handoff a billable resolution?

No. Fin distinguishes resolutions, successful configured Procedure handoffs and ordinary escalations. A Procedure handoff can be billable while a person still has work to do; default or workspace-rule escalations are treated differently. Record the vendor outcome and the customer's actual completion separately. Confirm the billing formula in the order, and use invoice-adjusted outcomes rather than treating every routing tag as a charge.

Sources

  1. Intercom: first-party apps
  2. Intercom: Inbox apps
  3. Intercom: create Zendesk tickets with Data connectors
  4. Intercom: Data connector permissions and setup
  5. Intercom pricing
  6. Zendesk: API authentication
  7. Fin: Zendesk integration overview
  8. Fin: Zendesk data synchronization
  9. Fin: Zendesk getting started
  10. Fin Messenger: Zendesk setup
  11. Fin: Zendesk Messaging setup
  12. Fin: Zendesk Tickets setup
  13. Fin: Zendesk triggers
  14. Zendesk: comment visibility
  15. Zendesk: Tickets API
  16. Zendesk: ticket-create idempotency
  17. Fin: Zendesk knowledge sync
  18. Zendesk: AI agent tickets
  19. Fin: platform outcome definitions and billing
  20. Fin pricing
  21. Zendesk USD pricing
  22. Fin: Zendesk Tickets troubleshooting
  23. Zendesk: rate limits
  24. Zendesk: solved versus closed tickets
  25. Intercom: chat and email outcome pricing
  26. Intercom: plan prices and annual billing
Portrait of Jafrin Akter Alo

Written by

Jafrin Akter Alo

Data Engineer and Co-founder at Martechdevs and Growth and Analytics Partners

Jafrin writes practical guides to marketing technology, customer data, analytics and AI workflows. Martechdevs is a Growth and Analytics Partners company.

View LinkedIn profile

Book a Free Call

Thirty minutes on your stack and what it needs. Free, and no pitch.

Thirty minutes, and you leave with a plan

We look at what you have, what it is costing you and what to do about it first.

  • 30 minutes
  • Video call, link on booking
  • No obligation

What we'll cover

  • Your current stack and where it hurts
  • Quick wins we can ship first
  • An integration roadmap
  • Timeline, scope and next steps

Calendar not loading? Open it in a new tab or email hello@martechdevs.com.