Forecast reality check: flag Commit and Best Case deals with no recent activity
Salesforce + Gong + Slack
Who it's for
Sales leaders and RevOps who want to know which Commit and Best Case deals have gone quiet before the forecast call, without editing anyone's records. Salesforce can be swapped for HubSpot, Attio or Pipedrive, and Gong for Outreach or Fireflies.
What you get
Slack message to the leader, drafted for your approval. Sample output: every company and person in it is fictional.
To: @dana (Dana Okafor, fictional) Forecast reality check for Thursday. 5 of 23 Commit and Best Case deals have no meeting, email or call in 21 days. Commit (2 deals, $118K) - Fernhill Software (fictional), $72K, closes Oct 31, owner Alex Rivera. Last touch: email, 26 days ago. Ask: is the signer still engaged? - Larkspur Freightworks (fictional), $46K, closes Nov 14, owner Sam Whitlock. Last touch: meeting, 34 days ago. Ask: what is the next scheduled step? Best Case (3 deals, $91K) - Mossgate Labs (fictional), $40K, closes Nov 28, owner Priya Raman. No activity found in Salesforce or Gong. - Quarry Lane Analytics (fictional), $33K, closes Dec 5, owner Alex Rivera. Last touch: call, 23 days ago. - Brightwater Dental Group (fictional), $18K, closes Dec 12, owner Sam Whitlock. Last touch: email, 29 days ago. Not flagged: 2 deals with no Salesforce activity, but Gong shows a call in the last 21 days. Gong couldn't match 1 deal (Mossgate Labs). No Salesforce records were changed. --- Reply 'send' to post this to Dana, or tell me what to change.
Time and cost
Estimate About 15–20 minutes, most of it checking the flagged deals.
Assumptions: One run before a weekly forecast call, over about 25 Commit and Best Case opportunities, with about 7 flagged.
- Salesforce: Reads only: one schema lookup, one SOQL query for the opportunities and one or two for their tasks and events. Each call counts against the org's daily API request quota. Every call uses credits. No paid credits; every tool call counts against the org's daily Salesforce API request quota (one or more API calls per tool). Source: github.com, checked 2026-10-16
- Gong: One ask_deal call per flagged opportunity, so about seven. Each call uses Gong credits. Every call uses credits. All three tools (ask_account, ask_deal, generate_brief) consume Gong credits based on the volume of calls and emails analyzed; briefs cost more per open-ended section. Same consumption as the equivalent API requests. Source: help.gong.io, checked 2026-10-16
- Slack: One user lookup for the leader, then one direct message after you approve it. Credit use not confirmed by Slack.
Exact credit costs depend on your plan with each vendor. Check the tool pages before a large run.
MCP servers
Every server is confirmed in: Claude
-
ClaudeChatGPTCursorRead + writeEvery call uses creditsNeeds admin or IT
https://api.salesforce.com/platform/mcp/v1/platform/sobject-all -
ClaudeChatGPTRead onlyEvery call uses creditsNeeds admin or IT
https://mcp.gong.io/mcp -
ClaudeClaude CodeCursorRead + writeCredits not confirmedNeeds admin or IT
https://mcp.slack.com/mcp
Set up in a chat app
Every server in this recipe is confirmed for Claude. Connect each one, then paste the prompts below into one conversation.
- Connect Salesforce without code (Claude, ChatGPT)
- Connect Gong without code (Claude, ChatGPT)
- Connect Slack without code (Claude)
Developer setup
Auth setup and mcp.json for Claude Code and Cursor
- Salesforce: Sign in with OAuth in your client (run
/mcpin Claude Code). Do it once interactively, and the client stores and refreshes the token. - Gong: Sign in with OAuth in your client (run
/mcpin Claude Code). Do it once interactively, and the client stores and refreshes the token. - Slack: Sign in with OAuth in your client (run
/mcpin Claude Code). Do it once interactively, and the client stores and refreshes the token.
Put this in .mcp.json (Claude Code, project root) or ~/.cursor/mcp.json (Cursor). Swap the example keys for your own, and don't commit real ones. Remove the // comment lines if your client requires strict JSON.
{
"mcpServers": {
"salesforce": {
"url": "https://api.salesforce.com/platform/mcp/v1/platform/sobject-all"
},
"gong": {
"url": "https://mcp.gong.io/mcp"
},
"slack": {
"url": "https://mcp.slack.com/mcp"
}
}
}
Step-by-step prompts
- Look at the Opportunity schema in Salesforce and tell me which field holds the forecast category and which fields show the last activity. Then use SOQL to find open opportunities closing by {period_end} where {forecast_category_field} is Commit or Best Case. Show me name, account, owner, amount, close date, stage and category. Don't change any records.
- Query the tasks and events from the last 21 days linked to each of those opportunities or their accounts, including logged calls, emails and meetings. Show me a table with the last activity date, type and subject for each opportunity, and flag every one with none.
- For each flagged opportunity, use Gong ask_deal once to ask when the last call or email with the buyer happened. Move any deal where Gong shows contact in the last 21 days to a separate list. Say when Gong can't find the deal.
- Draft one Slack direct message to {leader} with the flagged deals grouped by forecast category: account, amount, close date, owner, days since last touch, and one question to ask on the forecast call. Add the totals at risk. Show me the draft.
- Look up {leader} in Slack by email, and send the message only after I approve it. Don't change anything in Salesforce.
Run it on a schedule (optional)
- Run it the day before the forecast call, so owners have time to get a real answer from the buyer.
- In a scheduled run, stop at the draft: send it to yourself first and approve it before it reaches the leader.
- Salesforce, Gong and Slack each need an admin to set something up first. Test one manual run before you schedule it.
Where this goes wrong
- Deals flagged that did have activity. Activity is often logged on the account or a contact, not the opportunity. Check tasks and events on the account too, and let Gong move deals with a recent call or email off the list.
- Automated emails counted as real contact. Sequence or marketing emails logged as tasks can make a dead deal look active. Show the subject and type of each last activity, and ignore anything the buyer didn't reply to or attend.
- The wrong forecast field. Some orgs have both a rep category and a manager override. Ask which field your forecast call uses, then check the deal count against your forecast view once.
- Gong silence read as no contact. Gong excludes private calls, and it can't always match the deal. List deals Gong couldn't match separately instead of treating them as quiet.
Gotchas
- Salesforce's MCP server needs Enterprise Edition or above, and an admin must create an External Client App for each client. In ChatGPT it also needs developer mode. Ask your admin to point you at the read-only platform/sobject-reads server for this recipe.
- Every Salesforce tool call counts against the org's daily API request quota, so run the queries in bulk, not one opportunity at a time.
- A Gong tech admin must first create an MCP server integration. Gong is read-only, excludes private calls, and charges credits per call based on how many calls and emails it analyzes.
- Slack's MCP server needs a workspace admin to approve it before anyone can connect.
- Using HubSpot instead? HubSpot's connector covers CRM search and activities, so the same steps work on deals and their logged calls, emails and meetings. Use your forecast category property in place of the Salesforce field, and note that non-admin users need a Super Admin to approve the HubSpot connector first.
Download
Get the prompts, guardrails and expected output as one Markdown file. Paste it into a Claude Project or ChatGPT project's instructions, or save it as CLAUDE.md for Claude Code.
Download forecast-reality-check.md
New recipe and breakage notes every week
Vendor sites: Slack. If we join an affiliate program, these links will be labeled as affiliate links.