Gong
Use Gong for sales-call evidence. Call metadata alone is not enough for a deep
dive that asks what happened in customer conversations.
Actions
gong-native-insights — one provider-native qualitative synthesis operation
(ask_account, ask_deal, or generate_brief) through Gong's connected MCP.
Use it for themes, risks, summaries, and deck narrative when the native tools
are connected. One action invocation makes at most one Gong AI request; omit
operation to inspect its schemas without spending a credit request, and set
allowCreditRequest=true only for the one consolidated request you intend to
send. Paid calls also require a workspace owner to enable them once with
configure-gong-native-insights; the policy defaults off and disabling it
never blocks the raw evidence path.
account-deep-dive — first choice for named account/deal deep dives that
need HubSpot plus Gong. It searches by account/deal/company/contact domain,
loads Gong call details, and returns compact transcript excerpts for synthesis.
gong-calls — bounded convenience reads: list recent calls, search by
company/domain/person/email, fetch a single transcript by call ID, or return
transcript excerpts for a small matching cohort. Its transcriptQuery is a
local scan after batched transcript retrieval, not Gong's server-side
keyword search.
For broad or absence-sensitive Gong work, prefer the raw provider API surface:
use provider-api-catalog / provider-api-docs, then stage /calls/extensive
or another raw endpoint with provider-api-request. Reduce staged tracker or
call data with query-staged-dataset or a Data Program. Use
provider-corpus-job only when raw transcript bodies are required and no
native/indexed search can answer the question.
Route Synthesis and Evidence Separately
- Use
gong-native-insights for qualitative synthesis where Gong may retrieve
and analyze evidence internally. Its result is provider synthesis: coverage
is unknown and raw transcript evidence is unavailable.
- Use
gong-calls or provider-corpus-job for quotes, exact counts, transcript
records, coverage-sensitive claims, and proof that something was absent.
- Consolidate related native questions into one narrowly scoped request. Each
native operation independently consumes Gong credits, so do not make one call
per slide, bullet, or sub-question.
- From a sibling app, ask Analytics a natural-language question by default.
Analytics owns Gong/HubSpot routing, source coverage, credentials, transcript
strategy, joins, and synthesis. Use
call-agent's direct action + input
mode only when a trusted integration explicitly names one stable semantic
read contract and supplies its complete bounded input. Never use direct
actions as a workaround for a slow or failed delegated run.
Account Search Algorithm
Gong search pages POST /v2/calls/extensive directly with the requested date
window and party data (not GET /v2/calls, which returns no parties). Each call
is matched against both:
- Title variants: the call title contains a generated search variant.
- External parties: an external participant's name, email, or domain
matches a generated search variant.
This catches calls titled "Builder <> Acme" when you search
"Acme Corp" by matching the "acme" name variant or "@acme.com" domain variant.
The lib generates variants by stripping deal suffixes (- New Deal, - Fusion),
corporate suffixes (Group, Inc, Corp, LLC), and deriving first word and
email domain — always including the raw original. Variants shorter than 3 chars
are filtered. This is why a broad company search can find more calls than an
exact-title search.
Customer-Voice Extraction (externalMonologues)
When analyzing customer sentiment, objections, or voice of the customer:
- Use
getEnrichedTranscript / request enriched transcripts — it maps each
monologue to speaker identity and affiliation.
- Only use
externalMonologues for customer/prospect statements. Monologues
with affiliation === "Internal" are your own team's speech — never surface
these as "what the customer said."
- The
externalMonologues field on an enriched transcript is the pre-filtered
customer-voice signal; use it directly.
Patterns
For account or deal deep dives:
- Call
account-deep-dive first when the request also needs CRM context,
contacts, stages, amount, close date, or an overall opportunity narrative.
- Use
gong-calls for targeted follow-up searches by account name, domain,
person, or email.
- Set
includeTranscripts=true when the user asks for context, risks,
objections, next steps, decision process, sentiment, or a "deep dive".
- Use
transcriptLimit around 3-5 for a first pass. For broad coverage of a
named account, increase to 10-20 — the action supports up to 50. Increase
when the returned calls don't cover the time window or key people you need.
For a bounded "review all calls" request with at most 50 matches, make one
call with exhaustive=true, after, before, and
includeTranscripts=true; do not split discovery and transcripts into
separate agent tool calls.
- Use the compact transcript excerpts returned by
includeTranscripts=true.
Do not fetch raw individual transcripts unless the user asks for exhaustive
quoting, debugging, or export.
- Ground qualitative findings in the transcript excerpts and state how many
calls were inspected.
- For bounded account coverage, use
cursor/offset only when the cohort is
intentionally bounded. If the action reports truncation, treat coverage as
incomplete and switch to tracker staging with provider-api-request plus
query-staged-dataset or a Data Program, or to provider-corpus-job when
raw transcript bodies are required. Do not increase the limit or keep
paging gong-calls for broad scans. Do not use
gong-calls(exhaustive=true) or one blocking provider-api-request call as
the analysis. Stage the raw response and reduce it with a Data Program or
query-staged-dataset; use provider-corpus-job for checkpointed transcript
batches when raw bodies are necessary.
Quota and Coverage Rules
- Every Gong list or transcript page consumes provider quota. Budget pages and
transcript batches before starting a broad scan; do not spend quota retrying
the same bounded action after it reports incomplete coverage.
- A terminal HTTP 429 is terminal for that attempt. The shared provider
transport may perform bounded cooldown/retry handling from
Retry-After, but
the agent must not add another retry loop. Report the rate-limit failure and
switch to the staged tracker or checkpointed provider-corpus-job path only
if that route is still appropriate.
- Exhaustive, count, and absence claims require complete coverage of the stated
cohort. If any page, transcript batch, or provider request fails or is
truncated, report the gap and do not make the claim.
Example:
gong-calls(company: "The Knot", days: 180, limit: 20, includeTranscripts: true, transcriptLimit: 10)
Gong search is best-effort: it matches title plus external participant names,
emails, and domains through /calls/extensive. Treat call details and transcript
excerpts as evidence; treat missing coverage as a gap, not proof that the topic
never came up.
Title/party matching is discovery only. Never use a title pre-filter as proof
that a phrase is absent from transcripts.
If transcript loading fails for a call, report that gap instead of inferring the
conversation content from title, date, or participants.
When a single transcript is needed, gong-calls(transcript: "...") returns
compact extracted text by default. Set rawTranscript=true only for
debugging/export, and never pass raw transcript payloads into save-analysis.
Complete-Coverage Transcript Scan
When the question is "do ANY of these calls mention X?" or "how many calls across
this cohort mention X?" — where missing a single call makes the answer wrong — do
NOT conclude absence from a sampled includeTranscripts result. Exhaustive
claims require complete coverage of every call in the stated cohort. Choose the
smallest complete path for the bounded cohort:
Configured keyword tracker. If the requested term is already a Gong
keyword tracker exposed in API results, use provider-api-request against
/calls/extensive with contentSelector.exposedFields.content.trackers.
Stage the paginated calls, then flatten and filter tracker ids, names, or
phrases with query-staged-dataset or a Data Program. This is the preferred
broad keyword path because Gong has already indexed the tracker. It does not
answer arbitrary terms that are not configured as trackers.
Named account, up to 50 calls, qualitative review. Make one gong-calls
call with exhaustive=true, a bounded after/before window, and
includeTranscripts=true. The action discovers every matching call and
fetches transcript excerpts in batches, returning transcriptCoverage. Do
not fetch the same call IDs one at a time afterward.
Bounded arbitrary mention/absence search, up to 200 calls. Make one
gong-calls
call with exhaustive=true, the date window, transcriptQuery, and an
adequate transcriptScanLimit. This is a bounded local scan after batched
transcript retrieval. Report its coverage fields and only make an absence
claim when coverage is complete.
Larger or multi-account arbitrary corpus. Use
provider-api-catalog(provider: "gong") and its corpusRecipes if you need
the exact shape. Stage call ids with the raw API, then use
provider-corpus-job with mode: "batch-search" and 20-call transcript
batches. The canonical request is POST /calls/transcript with
batch.itemBodyPath: "filter.callIds", batch.responseItemsPath: "callTranscripts", batch.batchSize: 20, search.textPaths: ["transcript"], and search.idPaths: ["callId"]. Feed the staged/discovered
call ids through batch.inputDatasetId + batch.inputValuePath or through
batch.items. This is a durable full scan, not a server-side keyword query;
do not implement it as a per-call loop in run-code or a delegated agent.
When delegating a corpus chunk to an Agent Teams sub-agent, include the exact
staged dataset id or scratch/... path and the output/checkpoint path in the
task brief. The child starts with a clean context and must read the staged
input before making any provider request. If that input is unavailable, it
must report the missing input rather than re-fetching the entire Gong corpus.
- Use
run-code only for joins/reductions around the corpus path. After
the transcript job exists, use run-code, query-staged-dataset, or job
results to join hits back to deals/accounts, compute variants, dedupe, and
format evidence. A run-code loop over gong-calls(transcript: id) is a
fallback for small or awkward sets, not the default for broad scans.
Report coverage explicitly: deals in cohort, calls discovered, calls scanned, and
matches found. Never turn "I inspected a sample" into "no call mentions X".
Limits (Current)
| Parameter |
Default |
Max |
limit (calls returned) |
8 |
200 |
transcriptLimit |
3 |
50 |
transcriptMaxChars |
8 000 |
100 000 |
For large account deep-dives or competitive analyses spanning many calls, use
limit: 50-200 and transcriptLimit: 20-50. For very large datasets, use the
checkpointed provider-corpus-job path rather than paging the full Gong call
list inside one agent action.
1---2name: gong3description: Search Gong call metadata and transcript excerpts for sales-call analysis, customer conversations, objections, risks, and next steps.4---56# Gong78Use Gong for sales-call evidence. Call metadata alone is not enough for a deep9dive that asks what happened in customer conversations.1011## Actions1213- `gong-native-insights` — one provider-native qualitative synthesis operation14 (`ask_account`, `ask_deal`, or `generate_brief`) through Gong's connected MCP.15 Use it for themes, risks, summaries, and deck narrative when the native tools16 are connected. One action invocation makes at most one Gong AI request; omit17 `operation` to inspect its schemas without spending a credit request, and set18 `allowCreditRequest=true` only for the one consolidated request you intend to19 send. Paid calls also require a workspace owner to enable them once with20 `configure-gong-native-insights`; the policy defaults off and disabling it21 never blocks the raw evidence path.22- `account-deep-dive` — first choice for named account/deal deep dives that23 need HubSpot plus Gong. It searches by account/deal/company/contact domain,24 loads Gong call details, and returns compact transcript excerpts for synthesis.25- `gong-calls` — bounded convenience reads: list recent calls, search by26 company/domain/person/email, fetch a single transcript by call ID, or return27 transcript excerpts for a small matching cohort. Its `transcriptQuery` is a28 local scan after batched transcript retrieval, not Gong's server-side29 keyword search.3031For broad or absence-sensitive Gong work, prefer the raw provider API surface:32use `provider-api-catalog` / `provider-api-docs`, then stage `/calls/extensive`33or another raw endpoint with `provider-api-request`. Reduce staged tracker or34call data with `query-staged-dataset` or a Data Program. Use35`provider-corpus-job` only when raw transcript bodies are required and no36native/indexed search can answer the question.3738## Route Synthesis and Evidence Separately3940- Use `gong-native-insights` for qualitative synthesis where Gong may retrieve41 and analyze evidence internally. Its result is provider synthesis: coverage42 is unknown and raw transcript evidence is unavailable.43- Use `gong-calls` or `provider-corpus-job` for quotes, exact counts, transcript44 records, coverage-sensitive claims, and proof that something was absent.45- Consolidate related native questions into one narrowly scoped request. Each46 native operation independently consumes Gong credits, so do not make one call47 per slide, bullet, or sub-question.48- From a sibling app, ask Analytics a natural-language question by default.49 Analytics owns Gong/HubSpot routing, source coverage, credentials, transcript50 strategy, joins, and synthesis. Use `call-agent`'s direct `action` + `input`51 mode only when a trusted integration explicitly names one stable semantic52 read contract and supplies its complete bounded input. Never use direct53 actions as a workaround for a slow or failed delegated run.5455## Account Search Algorithm5657Gong search pages `POST /v2/calls/extensive` directly with the requested date58window and party data (not `GET /v2/calls`, which returns no parties). Each call59is matched against both:60611. **Title variants**: the call title contains a generated search variant.622. **External parties**: an external participant's name, email, or domain63 matches a generated search variant.6465This catches calls titled "Builder <> Acme" when you search66"Acme Corp" by matching the "acme" name variant or "@acme.com" domain variant.67The lib generates variants by stripping deal suffixes (`- New Deal`, `- Fusion`),68corporate suffixes (`Group`, `Inc`, `Corp`, `LLC`), and deriving first word and69email domain — always including the raw original. Variants shorter than 3 chars70are filtered. This is why a broad company search can find more calls than an71exact-title search.7273## Customer-Voice Extraction (externalMonologues)7475When analyzing customer sentiment, objections, or voice of the customer:7677- Use `getEnrichedTranscript` / request enriched transcripts — it maps each78 monologue to speaker identity and affiliation.79- **Only use `externalMonologues`** for customer/prospect statements. Monologues80 with `affiliation === "Internal"` are your own team's speech — never surface81 these as "what the customer said."82- The `externalMonologues` field on an enriched transcript is the pre-filtered83 customer-voice signal; use it directly.8485## Patterns8687For account or deal deep dives:88891. Call `account-deep-dive` first when the request also needs CRM context,90 contacts, stages, amount, close date, or an overall opportunity narrative.912. Use `gong-calls` for targeted follow-up searches by account name, domain,92 person, or email.933. Set `includeTranscripts=true` when the user asks for context, risks,94 objections, next steps, decision process, sentiment, or a "deep dive".954. Use `transcriptLimit` around 3-5 for a first pass. For broad coverage of a96 named account, increase to 10-20 — the action supports up to 50. Increase97 when the returned calls don't cover the time window or key people you need.98 For a bounded "review all calls" request with at most 50 matches, make one99 call with `exhaustive=true`, `after`, `before`, and100 `includeTranscripts=true`; do not split discovery and transcripts into101 separate agent tool calls.1025. Use the compact transcript excerpts returned by `includeTranscripts=true`.103 Do not fetch raw individual transcripts unless the user asks for exhaustive104 quoting, debugging, or export.1056. Ground qualitative findings in the transcript excerpts and state how many106 calls were inspected.1077. For bounded account coverage, use `cursor`/offset only when the cohort is108 intentionally bounded. If the action reports truncation, treat coverage as109 incomplete and switch to tracker staging with `provider-api-request` plus110 `query-staged-dataset` or a Data Program, or to `provider-corpus-job` when111 raw transcript bodies are required. Do not increase the limit or keep112 paging `gong-calls` for broad scans. Do not use113 `gong-calls(exhaustive=true)` or one blocking `provider-api-request` call as114 the analysis. Stage the raw response and reduce it with a Data Program or115 `query-staged-dataset`; use `provider-corpus-job` for checkpointed transcript116 batches when raw bodies are necessary.117118## Quota and Coverage Rules119120- Every Gong list or transcript page consumes provider quota. Budget pages and121 transcript batches before starting a broad scan; do not spend quota retrying122 the same bounded action after it reports incomplete coverage.123- A terminal HTTP 429 is terminal for that attempt. The shared provider124 transport may perform bounded cooldown/retry handling from `Retry-After`, but125 the agent must not add another retry loop. Report the rate-limit failure and126 switch to the staged tracker or checkpointed `provider-corpus-job` path only127 if that route is still appropriate.128- Exhaustive, count, and absence claims require complete coverage of the stated129 cohort. If any page, transcript batch, or provider request fails or is130 truncated, report the gap and do not make the claim.131132Example:133134```txt135gong-calls(company: "The Knot", days: 180, limit: 20, includeTranscripts: true, transcriptLimit: 10)136```137138Gong search is best-effort: it matches title plus external participant names,139emails, and domains through `/calls/extensive`. Treat call details and transcript140excerpts as evidence; treat missing coverage as a gap, not proof that the topic141never came up.142143Title/party matching is discovery only. Never use a title pre-filter as proof144that a phrase is absent from transcripts.145146If transcript loading fails for a call, report that gap instead of inferring the147conversation content from title, date, or participants.148149When a single transcript is needed, `gong-calls(transcript: "...")` returns150compact extracted text by default. Set `rawTranscript=true` only for151debugging/export, and never pass raw transcript payloads into `save-analysis`.152153## Complete-Coverage Transcript Scan154155When the question is "do ANY of these calls mention X?" or "how many calls across156this cohort mention X?" — where missing a single call makes the answer wrong — do157NOT conclude absence from a sampled `includeTranscripts` result. Exhaustive158claims require complete coverage of every call in the stated cohort. Choose the159smallest complete path for the bounded cohort:1601611. **Configured keyword tracker.** If the requested term is already a Gong162 keyword tracker exposed in API results, use `provider-api-request` against163 `/calls/extensive` with `contentSelector.exposedFields.content.trackers`.164 Stage the paginated calls, then flatten and filter tracker ids, names, or165 phrases with `query-staged-dataset` or a Data Program. This is the preferred166 broad keyword path because Gong has already indexed the tracker. It does not167 answer arbitrary terms that are not configured as trackers.1681692. **Named account, up to 50 calls, qualitative review.** Make one `gong-calls`170 call with `exhaustive=true`, a bounded `after`/`before` window, and171 `includeTranscripts=true`. The action discovers every matching call and172 fetches transcript excerpts in batches, returning `transcriptCoverage`. Do173 not fetch the same call IDs one at a time afterward.1741753. **Bounded arbitrary mention/absence search, up to 200 calls.** Make one176 `gong-calls`177 call with `exhaustive=true`, the date window, `transcriptQuery`, and an178 adequate `transcriptScanLimit`. This is a bounded local scan after batched179 transcript retrieval. Report its coverage fields and only make an absence180 claim when coverage is complete.1811824. **Larger or multi-account arbitrary corpus.** Use183 `provider-api-catalog(provider: "gong")` and its `corpusRecipes` if you need184 the exact shape. Stage call ids with the raw API, then use185 `provider-corpus-job` with `mode: "batch-search"` and 20-call transcript186 batches. The canonical request is `POST /calls/transcript` with187 `batch.itemBodyPath: "filter.callIds"`, `batch.responseItemsPath:188"callTranscripts"`, `batch.batchSize: 20`, `search.textPaths:189["transcript"]`, and `search.idPaths: ["callId"]`. Feed the staged/discovered190 call ids through `batch.inputDatasetId` + `batch.inputValuePath` or through191 `batch.items`. This is a durable full scan, not a server-side keyword query;192 do not implement it as a per-call loop in `run-code` or a delegated agent.193194When delegating a corpus chunk to an Agent Teams sub-agent, include the exact195staged dataset id or `scratch/...` path and the output/checkpoint path in the196task brief. The child starts with a clean context and must read the staged197input before making any provider request. If that input is unavailable, it198must report the missing input rather than re-fetching the entire Gong corpus.1992005. **Use `run-code` only for joins/reductions around the corpus path.** After201 the transcript job exists, use `run-code`, `query-staged-dataset`, or job202 results to join hits back to deals/accounts, compute variants, dedupe, and203 format evidence. A `run-code` loop over `gong-calls(transcript: id)` is a204 fallback for small or awkward sets, not the default for broad scans.205206Report coverage explicitly: deals in cohort, calls discovered, calls scanned, and207matches found. Never turn "I inspected a sample" into "no call mentions X".208209## Limits (Current)210211| Parameter | Default | Max |212| ------------------------ | ------- | ------- |213| `limit` (calls returned) | 8 | 200 |214| `transcriptLimit` | 3 | 50 |215| `transcriptMaxChars` | 8 000 | 100 000 |216217For large account deep-dives or competitive analyses spanning many calls, use218`limit: 50-200` and `transcriptLimit: 20-50`. For very large datasets, use the219checkpointed `provider-corpus-job` path rather than paging the full Gong call220list inside one agent action.