← All posts

The Complete Gong–Salesforce Integration Guide (2026)

What actually syncs, the fields Gong writes, why participants go unmatched, and the setup choices you can't easily undo — verified against Gong's current docs.

TL;DR: Gong’s native Salesforce integration exports calls and emails as tasks/events (no transcripts — those render via an iframe) and, with the Gong for Salesforce managed package (Enterprise Edition+), writes AI summaries to a custom Gong Conversation object. Participants match by email/domain, Gong never creates contacts, and sync runs in minutes. The setup choices below are the ones teams get wrong — and the ones you can’t easily undo.

The Gong–Salesforce integration is one of those setups everyone assumes is a checkbox and then lives with the consequences of for three years. It’s actually a set of architectural decisions. Having built integration platforms for two decades, here’s the guide I wish existed — verified against Gong’s current documentation (updated January–June 2026), with the failure modes labeled.

How it actually works: two export paths, one import path

Gong writes to Salesforce two different ways, and they’re configured separately:

1️⃣ Tasks/events export. Meeting invites, calls, and emails become standard Salesforce tasks or events. Gong recommends events for meetings and calls. Critically, the export does not include the transcript — transcripts and highlights render inside Salesforce through a Canvas app iframe served live from Gong. The text is never stored in your org. (This matters enormously later; hold that thought.)

2️⃣ The Gong for Salesforce managed package. Writes to a custom Gong Conversation object plus ~10 related objects: call briefs, AI key points, next steps, trackers, interaction stats, scorecards — and a snapshot of the opportunity’s amount/stage/close date as of call time. Requires Salesforce Enterprise Edition; Professional installs fail on Apex requirements.

3️⃣ Import (Salesforce → Gong) pulls accounts, opportunities, leads, contacts, and users into Gong for search, filtering, and deal boards. It can’t import multi-select, address, location, or encrypted fields.

Setup: the six decisions

1. Connect as a dedicated integration user. This is official Gong guidance, not folklore: the integration disconnects if the connecting user is deactivated. Don’t connect as an admin who might leave. The user’s profile needs API Enabled and Approve Uninstalled Connected Apps; grant read on Account, Opportunity, Contact, Lead, Opportunity History — and write only for what you actually export.

2. Approve the three connected apps. The Gong Integration App (data sync), the per-user Gong.io connection (deal-board edits), and the Gong SSO app. Then assign the Gong Users permission set and set the Canvas app OAuth policy to “admin approved users are pre-authorized” — skipping that last step is the documented cause of the 500/404 errors on transcript panels.

3. One activity per call, or one per participant? Choose “one per call” (requires custom fields) unless you enjoy activity-count inflation in every report. Decide before the historical backfill, not after.

4. Prefix and isolate your fields. The managed package creates Gong__ fields; anything you add manually, prefix Gong_ (documented fields include Gong_Participants_Emails__c, Gong_Call_Outcome__c, and Engage-flow fields on Contact/Lead). Never map Gong output onto standard fields — a summary overwriting Description is data you don’t get back. Add, don’t overwrite.

5. Backfill 90 days, not all-time. Gong makes ~1 Salesforce API call per recorded call, and each call creates ~25 child records. A full-history export on day one is an API-limit and storage event. Sandbox first — noting that only one instance receives conversation data at a time.

6. Set the activity update window deliberately. The “Salesforce activity update period” caps how long Gong keeps updating old tasks/events. Match it to your sales cycle length.

Matching logic — and the ways it fails

Participants match to contacts and leads by email address and domain. The conversation attaches to an open opportunity; if several are open, Gong picks by opportunity owner and last-modified date. Predictable consequences, all verified in Gong’s docs:

  • Gong never auto-creates contacts. If no external participant matches an existing contact or lead, no task/event is created at all. Your “missing calls” are almost always unmatched participants — personal Gmail addresses, contacts that were never created, typo’d emails.
  • Duplicates come from double-logging. If another app also logs calls or emails, “all imported calls/emails” export duplicates everything. And if you run the managed package’s “Create Event from Gong Conversation” flow and native event export together, you get two events per call — deactivate one.
  • Deleting a call in Gong deletes the Salesforce record — including via retention policies. Your Salesforce activity history is only as durable as your Gong retention settings.
  • Wrong-opportunity attachment happens when accounts run multiple concurrent deals. The owner + last-modified heuristic is good, not clairvoyant.

Sync timing, per Gong’s published sync-time table: Salesforce→Gong record updates within ~6 minutes; web-conference calls export within ~15 minutes of being ready; Engage emails ~10 minutes; deal-board inline edits write back immediately. New field imports and config changes can take hours — don’t debug a mapping change after ten minutes.

What to build on top (the good part)

Once the data flows, the wins are in Salesforce Flow: a stale-deal flag when an opportunity has no Gong activity for 14+ days, stage-vs-activity mismatch reports, and a rolling Gong_Next_Steps field on Opportunity — practitioners consistently call that last one the single most useful field in the whole integration. Gong also ships built-in flows (competitor detection into your Main Competitor field, participant contact-role updates) and pre-built reports.

Where this still breaks down — honestly

Configured perfectly, here’s what you have: call metadata in Salesforce, AI summaries in a custom object your reports can reach, and transcripts that live behind an iframe. What you don’t have is the conversation itself connected to everything else you know about the customer. The support escalation in Zendesk, the thread in Slack, the Jira ticket from the last QBR — none of it joins to the call record. As one head of account management put it: Salesforce is where information goes to die.

That join is the job Noded was built for. Noded connects Gong and Salesforce and the rest of the stack out of the box — no field mapping, no sync user, no managed package — and weaves them into one Customer Context Graph per account: the call, its commitments, the tickets it referenced, and the renewal it affects, in one place, queryable from Slack or Claude or wherever you work. To be fair to the native integration: if all you need is call logging and rep-activity reporting inside Salesforce, it’s free on any Gong plan and works well — use it (and this guide). The gap it can’t close is context.

FAQ

Does Gong sync transcripts into Salesforce?

No. Tasks/events exclude transcripts; transcripts render via a Canvas iframe served from Gong and are not stored in your org.

How fast is the sync?

Record updates SF→Gong in ~6 minutes; calls to Salesforce in ~15 minutes after processing; deal-board edits immediately. Config and field-mapping changes: up to hours.

Does Gong create contacts in Salesforce?

Never. Unmatched external participants mean no activity is logged — the most common cause of “missing” calls.

Can I get Gong data into a warehouse instead?

Yes — Gong Data Cloud feeds Snowflake, BigQuery, Databricks, Redshift, and S3 with daily transfers, and Gong now ships an MCP server for AI access (our verified MCP tracker has the status of the whole stack).

Get started

Grow your accounts, not your admin.

Get started ↗︎