Unified Customer View
Contacts sync across Freshsales, Freshdesk, and Freshchat through the Freshworks Neo platform’s unified contact graph. The agent sees sales history, support tickets, and chat transcripts in one timeline without switching apps. The sync uses email and external ID as primary keys; phone is a secondary key for mobile-first channels like WhatsApp. Configure under Admin -> Connect Apps in the Freshworks Organization Admin. Once connected, contact updates in any app propagate within seconds, and the merged view becomes the source of truth.
Freshsales <-> Freshdesk
Deal records show the support ticket history for the related account, so a renewal conversation starts with full awareness of recent service quality. Support agents see open deals on the contact card so they understand the commercial context (a P2 ticket from a $2M ACV account at the renewal stage gets different handling than the same ticket from a churned trial). The link is configured at Admin -> Apps -> Freshdesk Integration; field mapping is bidirectional with conflict resolution rules you set per field.
// Pull tickets associated with a Freshsales account
fetch(`https://${domain}.freshdesk.com/api/v2/companies/${companyId}/tickets?filter="status:2 OR status:3"`, {
headers: { Authorization: auth }
});
Freshservice <-> Freshsales
Internal IT requests from sales reps flow back to sales management visibility for high-impact issues — a laptop down before a quarterly business review is no longer invisible to the sales VP because the Freshservice incident posts to the rep’s Freshsales activity timeline. Configure the Workflow Automator to fire a webhook on incident create-with-priority-Urgent that calls the Freshsales API and creates an Activity record on the rep’s contact.
Freshchat <-> Everything
Freshchat conversations attach to contacts across all Freshworks apps. Chatbots route to the right team queue based on intent (sales bot routes to Freshsales, support bot routes to Freshdesk, IT bot routes to Freshservice). The cross-app routing is configured in the Freshchat Bot Builder under Actions -> Route to Team and the team selector lists groups from every connected product.
Setup Discipline
Integration is configured per-workspace, not per-tenant. Plan the data sharing model before flipping the switch — once two products are connected with bidirectional contact sync, decoupling them requires a migration that breaks running automations. Document which app is the “source of truth” per object: Freshsales owns Account, Freshdesk owns Ticket, Freshservice owns CI, Freshchat owns Conversation. Conflicts go to the source of truth’s value.
Common Failure Modes
Three. First, mismatched contact identifiers — Freshsales contacts keyed by email but Freshdesk has the same human listed twice with different email aliases; run a dedupe pass before connecting. Second, infinite update loops between apps when a workflow in app A updates a field, the sync writes to app B, app B’s workflow updates the same field, and the loop runs until rate limits stop it; design workflows with one-way authoritative ownership per field. Third, integration disabled during maintenance and not re-enabled — silent data drift for days or weeks before someone notices a stale contact card.
Implementation Sequence
Connect two apps first (typically Freshsales and Freshdesk), run for 30 days, validate the sync. Then add Freshchat. Then add Freshservice if relevant. Don’t connect all four in a single weekend — diagnosing which integration broke takes longer than the staged rollout would have taken.
Cost Considerations
Cross-product integrations are included in the Freshworks Customer Service Suite and Customer-for-Life Cloud bundles. Standalone product subscriptions can be connected but require the Freshworks Neo platform fee, which scales with contact count. For a tenant under 50K contacts, the standalone-with-Neo path is cheaper than the bundle; above 50K, the bundle wins.
What to do this week
Audit your contact deduplication state. Pull contacts with duplicate emails or duplicate phone numbers from each app and resolve them before enabling a new cross-app integration. Cleanup before connection beats cleanup after every time.