Closed-lost deal revival: rank last year's lost deals by what changed since
This recipe uses the official Salesforce, PredictLeads and G2 MCP servers, and all of them work in Claude and ChatGPT. Every step only reads data.
Who is this for?
AEs and SDRs who want a short, ranked list of deals lost 6 to 12 months ago that are worth another try, with the original loss reason and the new trigger side by side. Salesforce can be swapped for HubSpot, Attio or Pipedrive, and PredictLeads for UserGems.
What do you get?
Ranked revival list, 12 lost deals checked. Sample output: every company and person in it is fictional.
Closed-lost opportunities, close date 6 to 12 months ago: 12. Dropped before checking signals: 2 (loss reason 'Company closed' and 'Acquired, product retired'). | Rank | Account | Lost | Original loss reason | New since the loss | Owner check | |---|---|---|---|---|---| | 1 | Quarry Lane Analytics (fictional) | Feb 2026 | No budget this year | Series C announced Aug 2026 (PredictLeads financing). G2 intent on our category in the last 30 days | No open opportunity. Last activity 7 months ago | | 2 | Larkspur Freightworks (fictional) | Dec 2025 | Champion left mid-deal | News: new VP Revenue Operations hired Jul 2026 | No open opportunity | | 3 | Mossgate Labs (fictional) | Nov 2025 | Chose a competitor | G2 intent: viewed our product and a competitor's page this month | No open opportunity | | – | Fernhill Software (fictional) | Jan 2026 | No budget | Funding round dated Dec 2025, before the loss | Not new. Skipped | | – | Tidewell Robotics (fictional) | Mar 2026 | Timing | G2 intent this month | Open opportunity owned by Priya Raman. Skipped | No new trigger found for 5 accounts. They stay off the list. Why Quarry Lane is first: the deal died on budget, and new funding is the most direct answer to that. Sam Whitlock was the contact on the lost deal. Nothing was written to Salesforce. This is a read-only list.
How long does it take, and what does it cost?
Estimate About 20–30 minutes a month, most of it reading the ranked table.
Assumptions: One monthly run over about 12 closed-lost opportunities, with 10 checked for signals after the dead-end loss reasons are dropped.
- Salesforce: Reads only: one schema read to find the loss reason field, one SOQL query for the lost deals, and one query per account for open opportunities and recent activity. Each call counts against the org's daily API 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
- PredictLeads: About two requests per account (financing and news), so roughly 20 for 10 accounts. Each request counts toward the plan's monthly limit. Every call uses credits. Each MCP request counts toward the plan's monthly request limit. Once the limit is reached, requests return HTTP 402. PredictLeads pricing: 1 API credit per API request; discovery endpoints (e.g. Similar Companies) are billed per returned company. Source: docs.predictleads.com, checked 2026-10-16
- G2: Reads only: one buyer intent browse for your product and category for the period you choose. Credit use not confirmed by G2.
Exact credit costs depend on your plan with each vendor. Check the tool pages before a large run.
Which MCP servers does it use?
Every server is confirmed in: ClaudeChatGPT
-
ClaudeChatGPTCursorRead + writeEvery call uses creditsNeeds admin or IT
https://api.salesforce.com/platform/mcp/v1/platform/sobject-all -
ClaudeChatGPTClaude CodeAccess not confirmedEvery call uses credits
-
ClaudeChatGPTRead + writeCredits not confirmed
https://mcp.g2.com/mcp
How do I set it up in a chat app?
Every server in this recipe is confirmed for Claude and ChatGPT. Connect each one, then paste the prompts below into one conversation.
- Connect Salesforce without code (Claude, ChatGPT)
- Connect PredictLeads without code (Claude, ChatGPT)
- Connect G2 without code (Claude, ChatGPT)
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. - PredictLeads: Sign in with OAuth in your client (run
/mcpin Claude Code). Do it once interactively, and the client stores and refreshes the token. - G2: 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"
},
"predictleads": {
"url": "None"
},
"g2": {
"url": "https://mcp.g2.com/mcp"
}
}
}
Step-by-step prompts
- In Salesforce, check the Opportunity schema and tell me which field holds the loss reason. Then find my closed-lost opportunities with a close date between {start_date} and {end_date}: account, account website, amount, close date, loss reason and primary contact. Show me the distinct loss reasons and how many deals have each. Don't change any records.
- Drop the deals with these loss reasons: {dead_reasons}. For each remaining account, check Salesforce for any open opportunity or activity in the last {days} days, and list the owner. Mark those accounts as skipped.
- For the accounts that are left, look up PredictLeads financing and news by the account's website domain. Keep only events dated after that deal's close date. Flag any funding, and any news about a new executive in {buyer_roles}.
- Check G2 buyer intent for my product and category over the last {intent_days} days, and match the accounts by domain. Then give me one ranked table: account, close date, original loss reason, new trigger with its date, and one line on why the trigger answers the loss reason. Put skipped accounts at the bottom with the reason.
Can I run it on a schedule? (optional)
- Run it monthly. Each month a new batch of deals crosses the 6-month line, and a trigger from last month is still fresh.
- A scheduled run can do the whole thing, since it only reads. Have it post the ranked table for you to review and decide who to contact.
- Do one manual run first so you know how many lost deals a normal month brings and how many PredictLeads requests that uses.
Where does this go wrong?
- A trigger that predates the loss. A funding round or new hire from before the close date was already true when they said no. Compare every trigger date with the opportunity's close date, and drop any trigger that isn't later.
- The account is already being worked. Someone else may have an open opportunity or recent activity on the account. Query Salesforce for open opportunities and recent activities on each account, list the owner, and skip the account instead of reaching out.
- A loss reason that makes revival pointless. Some deals can't come back: the company closed, was acquired and folded, or asked not to be contacted. Show the full list of loss reasons first, agree which ones to drop, and drop those deals before any signal lookup.
- Signals matched to the wrong company. Similar names cause bad matches (two companies called 'Larkspur', or a parent and its subsidiary). Look up PredictLeads and G2 by the website domain from the Salesforce account, not the name, and show the domain next to each trigger.
Gotchas
- Salesforce's hosted MCP servers need an admin to enable them and create an External Client App with your client's callback URL. They need Enterprise Edition or above (Developer Edition also works). In ChatGPT, Salesforce needs developer mode.
- This recipe never writes, so connect Salesforce's read-only server (platform/sobject-reads) instead of the full-access one. Then the run can't change anything.
- Using HubSpot instead? HubSpot's connector covers CRM search, so the deal and owner checks work, and setup is lighter: non-admin users need a Super Admin to approve the connector, not an External Client App. HubSpot's connector can create and edit records, so keep the read-only rule in your guardrails.
- PredictLeads doesn't publish its MCP endpoint URL. Connect it from the Claude connectors directory or the ChatGPT plugins directory. On ChatGPT Enterprise or Edu, an admin may need to enable it first. Once the monthly request limit is reached, requests fail until the next period.
- UserGems is the alternative for triggers, through its account intel and signal history. It needs the Advanced plan, your UserGems CSM has to turn on access, and every request draws AI credits.
- G2 buyer intent needs a G2 subscription with the right entitlements. Sign in to Claude with the same email you use for your G2 account.
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 closed-lost-revival.md