Reads each new sales call transcript in your sheet and emails a deal breakdown, next steps and a follow-up draft to one address.

UsesClaudeGmailGoogle Sheets

Email a deal breakdown after every sales call

ScheduleRun every hour.Run every hour.
ValuesSet spreadsheetUrl to blank.Set spreadsheetUrl to blank.
ValuesSet sheetName to Transcripts.Set sheetName to Transcripts.
ValuesSet recipientEmail to blank.Set recipientEmail to blank.
ValuesSet maxPerRun to 5.Set maxPerRun to 5.
ValuesSet minTranscriptChars to 300.Set minTranscriptChars to 300.
Google SheetsGoogle SheetsRead the rows of spreadsheetUrl. Save it as sheet.Read the rows of spreadsheetUrl. Save it as sheet.
ValuesSet headers to sheet.headers.Set headers to sheet.headers.
Decisions & LoopsIf headers doesn't contain StatusIf headers doesn't contain Status
Yes
Decisions & LoopsStop and report a problem: This sheet has no 'Status' column. The tab needs these column headers in row 1, in any order: Status, Call Date, Prospect, Transcript.Stop and report a problem: This sheet has no 'Status' column. The tab needs these column headers in row 1, in any order: Status, Call Date, Prospect, Transcript.
No
No steps
Decisions & LoopsIf headers doesn't contain Call DateIf headers doesn't contain Call Date
Yes
Decisions & LoopsStop and report a problem: This sheet has no 'Call Date' column. The tab needs these column headers in row 1, in any order: Status, Call Date, Prospect, Transcript.Stop and report a problem: This sheet has no 'Call Date' column. The tab needs these column headers in row 1, in any order: Status, Call Date, Prospect, Transcript.
No
No steps
Decisions & LoopsIf headers doesn't contain ProspectIf headers doesn't contain Prospect
Yes
Decisions & LoopsStop and report a problem: This sheet has no 'Prospect' column. The tab needs these column headers in row 1, in any order: Status, Call Date, Prospect, Transcript.Stop and report a problem: This sheet has no 'Prospect' column. The tab needs these column headers in row 1, in any order: Status, Call Date, Prospect, Transcript.
No
No steps
Decisions & LoopsIf headers doesn't contain TranscriptIf headers doesn't contain Transcript
Yes
Decisions & LoopsStop and report a problem: This sheet has no 'Transcript' column. The tab needs these column headers in row 1, in any order: Status, Call Date, Prospect, Transcript.Stop and report a problem: This sheet has no 'Transcript' column. The tab needs these column headers in row 1, in any order: Status, Call Date, Prospect, Transcript.
No
No steps
ValuesSet rows to sheet.rows.Set rows to sheet.rows.
ValuesSet analyzedCount to 0.Set analyzedCount to 0.
ValuesSet tooShortCount to 0.Set tooShortCount to 0.
ValuesSet waitingCount to 0.Set waitingCount to 0.
Decisions & LoopsFor each row in rows:For each row in rows:
TextTrim row.Status and save it as rowStatus.Trim row.Status and save it as rowStatus.
Decisions & LoopsIf rowStatus isn't empty and rowStatus doesn't start with Too short to analyse…If rowStatus isn't empty and rowStatus doesn't start with Too short to analyse…
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
TextTrim row.Transcript and save it as transcript.Trim row.Transcript and save it as transcript.
Decisions & LoopsIf transcript is emptyIf transcript is empty
Yes
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf the length of transcript is less than minTranscriptCharsIf the length of transcript is less than minTranscriptChars
Yes
Decisions & LoopsIf rowStatus is emptyIf rowStatus is empty
Yes
Google SheetsGoogle SheetsSet Status: Too short to analyse on row row of sheetName in spreadsheetUrl.Set Status: Too short to analyse on row row of sheetName in spreadsheetUrl.
ValuesAdd 1 to tooShortCount.Add 1 to tooShortCount.
No
No steps
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
Decisions & LoopsIf analyzedCount is greater than or equal to maxPerRunIf analyzedCount is greater than or equal to maxPerRun
Yes
ValuesAdd 1 to waitingCount.Add 1 to waitingCount.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
TextTrim row.Prospect and save it as prospect.Trim row.Prospect and save it as prospect.
Decisions & LoopsIf prospect is emptyIf prospect is empty
Yes
ValuesChange prospect to Unnamed prospect.Change prospect to Unnamed prospect.
No
No steps
TextTrim row["Call Date"] and save it as callDate.Trim row["Call Date"] and save it as callDate.
Decisions & LoopsIf callDate is emptyIf callDate is empty
Yes
ValuesChange callDate to Not recorded.Change callDate to Not recorded.
No
No steps
ClaudeClaudeAsk Claude: 'You are a sales operations analyst. You are given the transcript of one sales call. Analyze it and write the breakdown and action plan the team works from afterwards.Ask Claude: 'You are a sales operations analyst. You are given the transcript of one sales call. Analyze it and write the breakdown and action plan the team works from afterwards. Prospect: prospect Call date: callDate Transcript: <<< transcript >>> Write the analysis as plain text for an email, using exactly these seven sections in this order and nothing outside them. Put each section title on its own line in capital letters, leave a blank line between sections, and start each bullet with - . Do not use Markdown: no asterisks, no # signs, no tables. CALL SUMMARY Three or four sentences: who was on the call, what the prospect is trying to do, what was discussed, and how it ended. DEAL TEMPERATURE One of Hot, Warm, Cold or At risk, then one sentence explaining the choice using something the prospect actually said. WHAT THE PROSPECT TOLD US One bullet each, in this order, quoting the prospect's own words where you can: - Pain: the problem they want solved and what it costs them today. - Desired outcome: what changes for them if it is solved, in their numbers if they gave any. - Budget: any figure, range or budget-cycle detail stated. - Decision process: who signs, what steps come before that, and any procurement, security or legal review named. - Timeline: the dates or events they tied a decision to. - Stakeholders: everyone named or referred to, with their role and where they stand. - Objections and alternatives: what they pushed back on, and any other vendor, tool or in-house option mentioned. BUYING SIGNALS AND RED FLAGS Up to three buying signals and up to three red flags, each a bullet that quotes or closely paraphrases the moment in the transcript it comes from. If there were none of one kind, say so in one line. ACTION PLAN A numbered list. Each item on one line, formatted as: action - owner - due date - why it matters. The owner is a named person from the call. Include only actions that were agreed on the call or that follow directly from an explicit commitment. If no date was given, write no date agreed rather than inventing one. If no next step was agreed at all, make that the first item, because it is the most important thing this analysis can say. BEFORE THE NEXT CALL Two or three questions the prospect has not yet answered that the deal cannot progress without, and one thing to handle differently on the next call, each tied to a moment in this transcript. SUGGESTED FOLLOW-UP EMAIL A short draft to the main contact: a subject line, then a body of six sentences at most that recaps what was agreed, confirms the next step and its date, and asks for anything still needed from them. This is a draft for a person to review and send; it is not sent by this workflow. Rules: - Use only what is in the transcript. Never invent a name, number, date, company or commitment. - Where the transcript does not cover a field, write Not stated on this call for that field. Do not fill a gap with an inference and do not drop the bullet. - Do not open with a preamble, close with a summary, or restate these instructions.'. Save it as analysis. Maximum response length: 4000
TextTrim analysis.response_text and save it as analysisText.Trim analysis.response_text and save it as analysisText.
Decisions & LoopsIf the length of analysisText is less than 200If the length of analysisText is less than 200
Yes
Google SheetsGoogle SheetsSet Status: Needs review - no analysis came back from the AI on row row of sheetName in spreadsheetUrl.Set Status: Needs review - no analysis came back from the AI on row row of sheetName in spreadsheetUrl.
ValuesAdd 1 to analyzedCount.Add 1 to analyzedCount.
Decisions & LoopsWait for 2 seconds.Wait for 2 seconds.
Decisions & LoopsSkip to the next item.Skip to the next item.
No
No steps
TextReplace ** with in analysisText and save it as analysisUnbolded.Replace ** with in analysisText and save it as analysisUnbolded.
TextReplace ## with in analysisUnbolded and save it as analysisUnheaded.Replace ## with in analysisUnbolded and save it as analysisUnheaded.
TextReplace # with in analysisUnheaded and save it as analysisPlain.Replace # with in analysisUnheaded and save it as analysisPlain.
TextJoin [Call analysis for , prospect, , call on , callDate, ".Join [Call analysis for , prospect, , call on , callDate, . , analysisPlain, ────────────────────────────── , Written by Claude from the transcript in row , row.row_number as text, of the ', sheetName, ' tab. Check anything that commits you to a date, a price or a promise against the recording before you act on it.] with nothing and save it as emailBody.
GmailGmailSend an email to recipientEmail.Send an email to recipientEmail. Subject: Call analysis: prospect - callDateemailBody
Decisions & LoopsIf a step below fails, save the error as markErrorIf a step below fails, save the error as markError
Try
Google SheetsGoogle SheetsSet Status: [Analyzed , today's date, - sent to , recipientEmail] joined by nothing on row row of sheetName in spreadsheetUrl.Set Status: [Analyzed , today's date, - sent to , recipientEmail] joined by nothing on row row of sheetName in spreadsheetUrl.
On error
Decisions & LoopsStop and report a problem: [The analysis for row , row.row_number as text, (, prospect, ) was emailed to , recipientEmail, , but the row could not be marked as analyzed: , markError.message, . Type anything into that row's Status cell (for example Analyzed), or the same analysis will be sent again next hour.] joined by nothing.Stop and report a problem: [The analysis for row , row.row_number as text, (, prospect, ) was emailed to , recipientEmail, , but the row could not be marked as analyzed: , markError.message, . Type anything into that row's Status cell (for example Analyzed), or the same analysis will be sent again next hour.] joined by nothing.
ValuesAdd 1 to analyzedCount.Add 1 to analyzedCount.
Decisions & LoopsWait for 2 seconds.Wait for 2 seconds.
ValuesShow in the output: [Calls analysed this run: , analyzedCount as text, . Still waiting for a later run: , waitingCount as text, . Newly marked too short to analyse: , tooShortCount as text, .] joined by nothing.Show in the output: [Calls analysed this run: , analyzedCount as text, . Still waiting for a later run: , waitingCount as text, . Newly marked too short to analyse: , tooShortCount as text, .] joined by nothing.