Close & Expand Deal Execution AESDR/BDRCustomer SuccessRevOps

Sales Follow-Up Email Templates, Auto-Drafted From Every Call

The sales follow-up email is the highest-return touch in the cycle and the one reps most reliably botch, written three hours late from fading memory. Steal the templates below, then let a Claude agent draft each one from the actual call transcript in the rep's voice and write clean CRM notes to HubSpot over MCP. A human still reads every send. Same-day follow-ups, and RevOps finally gets comparable deal data across the team.

StageClose & Expand
Time to buildAn hour or two
DifficultyIntermediate
Best forAE, SDR/BDR, Customer Success, RevOps
THE TEMPLATES

The sales follow-up email templates

Four sales follow-up emails that actually get replies, one for each situation you hit after a call. Copy one, fill the brackets, send it the same day. Or paste it as the format for the agent below and let it fill the brackets from what the prospect actually said. The rule that makes all four work: reference one real thing from the call, and restate the next step exactly as you agreed it. Invent a next step nobody agreed to and you spend the next email walking it back.

1. After discovery (recap + next step)
Subject: recap + next steps from today

Hi {{first name}},

Thanks for the time today. What I heard: {{their #1 priority}} is the goal, and {{the real blocker}} is what's in the way.

As promised, I'll {{the thing you committed to}} by {{date}}. Then we'll {{agreed next step}} on {{date/time}}.

Anything you'd want me to tailor for {{stakeholder}} before then?

{{sign-off}}
2. After a demo (recap + proposed next step)
Subject: {{product}} + {{their use case}}

Hi {{first name}},

Good session today. The part that mapped to {{their priority}} was {{the moment they reacted to}}, so that's where I'd start if we move forward.

Proposed next step: {{next step, owner, date}}. I'll send {{collateral}} in the meantime.

Work for you, or is there someone else who should see this first?

{{sign-off}}
3. No next step agreed (honest re-engage)
Subject: where this leaves us

Hi {{first name}},

We didn't land on a next step today, which is fair, {{reason it's not the right time}}.

Two options: I check back in {{timeframe}} when {{the trigger that changes things}}, or if I misread the fit, a one-line no is genuinely useful and I'll stop.

Which is it?

{{sign-off}}
4. The nudge (no reply, adds a new angle)
Subject: re: {{original subject}}

Hi {{first name}},

Since we spoke, {{new relevant thing: a resource, a similar customer's result, a change on their side}}. Thought it was worth a second here.

Still worth {{the next step}}, or has this dropped down the list for now?

{{sign-off}}

The subject line and the first sentence carry the whole email; everything after the real detail is filler the reader skims. Keep each one under 120 words, make the ask a question, and send it the same day. Momentum dies overnight.

The stack

The stack

How the tools connect
What a run costs
Recorder
a Gong seat, or Fathom's free tier
Per call
the agent runs itself off the transcript, cents of usage
CRM writes
free over MCP, no Zapier task plan
Rep time
about 2 minutes to review and send
The problem

The problem

The sales follow-up email is one of the highest-return touches in the whole cycle, and one of the most reliably botched. A rep finishes back-to-back calls, writes the follow-up three hours later from fading memory, forgets a commitment they made live, and never logs the deal because they are already on the next call. The email goes out vague, the next step is fuzzy, the deal loses a week of momentum. Meanwhile the CRM rots into pipeline fiction, and the manager's Monday review is built on it.

Here is what makes it fixable: everything needed to write a perfect follow-up is already in the transcript. What the prospect actually cares about, the objections they raised, who else is in the room, the exact next steps both sides agreed, all of it, verbatim. Gong, Fathom, Fireflies transcribe every call automatically. The hard part was never the recording. It was turning that transcript into a sent email and clean CRM data without burning an hour of rep time per call.

One Claude agent closes that gap. Triggered when the transcript lands, it drafts a follow-up in the rep's own voice that references real discussion points and restates the agreed next steps, extracts a clean block of structured fields (next step, pain points, stakeholders, objections, sentiment), and writes them to HubSpot over MCP. No Zapier stitching the recorder to a model to the CRM: the agent reads the transcript and does all of it. The rep reviews and sends in two minutes instead of writing for twenty, and the CRM updates itself with consistent data across the team.

The human stays on the send, permanently and non-negotiably. The agent removes the blank page, not the judgment. The two ways this play goes wrong are auto-sending an unreviewed email and letting the model invent a next step nobody agreed to. Engineer against both, and this is one of the safest, highest-return automations in GTM.

How it works

How it works

The workflow, end to end
  1. 01 Record the call Gong / Fathomtranscript ready on call end
  2. 02 Trigger the agent Webhookgrab transcript, participants, deal
  3. 03 Draft + extract Claude Codeemail plus CRM fields as JSON
  4. 04 Route to rep Claude (MCP)draft in their real inbox
  5. 05 Write the fields HubSpot (MCP)summary, next step, sentiment, risk
  6. 06 Fire the task HubSpot (MCP)next step becomes a dated task
  • Record and transcribe every call with one standardized recorder (Gong, Fathom, or Fireflies)
  • When the transcript lands, a trigger hands it to the Claude agent with a fixed brief
  • The agent drafts the follow-up and extracts the CRM fields as JSON, using only what was said
  • The draft lands in the rep's real inbox for review; the fields write to HubSpot over MCP
  • The rep edits and sends in minutes; the next-step field fires a dated task so nothing is dropped
  • Optionally, a weekly Claude Routine rolls the fields up into pipeline intelligence for leadership
The playbook

The playbook

Confirm every call is recorded and transcribed

Make sure every relevant call is captured by one recorder, because the transcript is the raw material for everything downstream, and a missed recording is a missed follow-up. Gong joins calls automatically for teams on the platform. Fathom is a strong free option that records, transcribes, and summarizes Zoom, Meet, and Teams. Fireflies is another solid pick. Confirm the transcript is reachable via the tool's integration or API, because that is what the agent reads.

Standardize on a single recorder across the team. Half the reps on Fathom and half on Gong means two integrations and data in two shapes, which defeats the consistency that makes this worth building.

Handle recording consent and law properly from day one. Two-party-consent jurisdictions require disclosure and agreement before recording, and the rules vary by region and by who is on the call. Use the recorder's built-in consent prompt, disclose verbally, and respect anyone who declines.

💡

TipRespect consent and recording laws as a first-class requirement, not an afterthought. Two-party-consent states and many countries require explicit disclosure. Use the recorder's consent prompt, disclose verbally, and have a documented policy your team follows on every call.

Hand the transcript to the agent on call end

When a new transcript becomes available, fire the Claude agent. Fathom, Fireflies, and Gong all expose triggers or webhooks for completed calls; that trigger is the only glue in the whole flow. The agent then pulls the full transcript, the participant list, and the linked HubSpot deal or contact so it has what it needs to write in the rep's voice and to the right record.

Make sure the agent gets the participant names and the linked HubSpot deal or contact, not just the transcript text. The email needs to know who the prospect is, and the CRM write needs to know which record to update; missing either turns a clean automation into a manual reconciliation chore.

There is no orchestration platform in the middle here. The old build ran the recorder into Zapier, Zapier into a model, the model into the CRM. The agent collapses that: it reads the transcript and writes to HubSpot itself over MCP. One brief, one agent, fewer seams to break.

Run the extraction-and-drafting brief

Give the agent one brief that does two jobs at once: draft the follow-up in the rep's first-person voice, and extract the structured CRM fields as JSON. Demanding JSON for the CRM portion makes the field mapping clean and unambiguous. The most important line in the brief is that the agent uses only what was actually said and never invents a commitment, date, or fact the rep did not make.

Have it restate the agreed next steps as close to verbatim as possible. A misremembered next step ('as discussed, you'll loop in legal by Friday' when they said no such thing) is worse than no follow-up, because it creates a false expectation the rep then has to awkwardly walk back. Build the brief to handle 'no next step agreed' by saying so, not by papering over the gap.

Test the brief on three or four real past transcripts before wiring it live. You are checking that the email sounds human and accurate, and that the JSON is clean and never fabricates a commitment.

Claude post-call prompt
You are assisting a sales rep right after a call. Below is the transcript. Use ONLY what was actually said. Never invent commitments, dates, names, or facts. If something was not discussed, leave it out or mark it explicitly.

TRANSCRIPT:
{{TRANSCRIPT}}

Rep name: {{REP_NAME}}. Prospect: {{PROSPECT_NAME}} at {{COMPANY}}.

Produce TWO things.

1) A follow-up email (under 150 words, the rep's first-person voice, warm and specific):
- Reference 1-2 real things the prospect actually said.
- Restate the agreed next steps EXACTLY as agreed, with owner and date if stated.
- Confirm any commitment the rep made on the call.
- End with the proposed next step.
- If NO next step was agreed, the CTA should propose one, and do not pretend one was agreed.

2) CRM fields as JSON (this exact shape):
{"summary": "<2 sentences>", "pain_points": [..], "next_step": "<what + owner + date, or 'none agreed - propose'>", "stakeholders_mentioned": [..], "objections": [..], "sentiment": "positive|neutral|at_risk", "missing_to_advance": "<the one thing the deal needs next>"}
💡

TipPin the JSON shape exactly and validate it in the Zap before mapping to CRM fields. If Claude occasionally wraps the JSON in prose, add 'output the email, then a line with only ---, then the JSON' so your automation can split reliably on the delimiter.

Route the draft to the rep, never auto-send

The draft goes to the rep for review, not out the door. Cleanest options: create it as a draft in the rep's Gmail or Outlook (over the mail MCP connector) so editing and sending is one click in their real client, or drop it in a Slack DM with a copy button, or save it as a draft on the HubSpot record. The rep always reads and lightly edits before sending. The agent removed the blank page; it did not remove the rep's judgment about tone, timing, and what to emphasize for this specific buyer.

Keep this human-in-the-loop step permanent. Auto-sending is exactly where this play goes wrong: the one time the model misstates a commitment or strikes the wrong tone, it goes out under the rep's name to a live deal, and the rep finds out when the prospect replies confused. Two minutes of review is cheap insurance against that, and it is not a phase you graduate out of.

Put the draft in the rep's actual email client wherever you can. A draft they have to copy out of Slack and paste into Gmail adds friction that, over a busy day, means it does not get sent at all.

💡

TipCreate the draft in the rep's real email client so sending is genuinely one click. The whole time-saving collapses if the rep has to copy the text out of one tool and paste it into another; convenience is what makes the habit stick.

Write the structured fields into HubSpot

The agent maps the JSON to HubSpot properties over MCP: next step and date, sentiment, pain points, stakeholders mentioned, objections, and 'missing to advance.' This is where the payoff compounds past convenience, because reps almost never log this by hand, and now RevOps has clean, comparable, structured deal data across the whole team for the first time.

Use the next-step field to fire an actual task in HubSpot, assigned to the rep with the stated date. The whole point of capturing the next step is that nothing agreed on a call gets dropped; a next step sitting in a notes field with no task attached gets forgotten just as easily as a hand-written one.

Map 'sentiment' and 'missing_to_advance' to reportable fields. These two turn into pipeline intelligence: a board of deals flagged at_risk by sentiment, or every deal stuck on the same blocker, is a manager's most useful Monday view, generated without anyone filling out a report.

Add a weekly manager rollup with a Routine (optional)

Once the structured fields exist across many calls, add a Claude Routine that rolls them up weekly: deals trending at_risk by sentiment, deals with no agreed next step, the objections recurring most across the team's calls, the common blockers in 'missing_to_advance.' It posts to a leadership Slack channel on a schedule, no one running it.

This turns individual call notes into real pipeline intelligence without anyone writing a report. 'Six deals stalled this week on the same security-review blocker' is exactly the signal that is invisible in individual notes and obvious in aggregate, and it tells leadership where to step in.

Keep the rollup read-only and clearly framed as AI-summarized, so managers click into the actual deals before acting. The rollup surfaces patterns; the deal records and the reps hold the truth.

Inside the prompt

Inside the prompt

The scoring prompt is short, but every line is there for a reason. Here is what each one is doing and why.

Why each line is in the extraction prompt
Use ONLY what was said"Use ONLY what was actually said. Never invent commitments, dates, names, or facts"
The whole play breaks if the model fabricates a next step. This line is the guardrail.
Restate exactly"Restate the agreed next steps EXACTLY as agreed, with owner and date if stated"
A misremembered next step in a follow-up is worse than none; the rep has to walk it back.
Handle no next step"If NO next step was agreed, the CTA should propose one, and do not pretend one was agreed"
Forces honest 'none agreed' handling instead of papering a commitment over a gap.
next_step field""
Pinned shape so the task automation always knows what to create and who to assign.
missing_to_advance""
Pulls the single blocker out of the transcript. This is the field that becomes pipeline intelligence.
JSON, exact shape{summary, pain_points, next_step, stakeholders_mentioned, objections, sentiment, missing_to_advance}
Strict shape so the agent maps to HubSpot fields over MCP without parsing prose. Free text is unmappable.
What you get

What you get

A ready-to-send follow-up draft routed to the rep, plus the structured CRM fields extracted from the same transcript.

Example output
EMAIL DRAFT (created in Marcus's Gmail, awaiting his review):
Subject: recap + next steps from today

Hi Dana, thanks for the time today. To recap what I heard: the priority is cutting new-region ramp time, and the real blocker is getting your VP of Finance comfortable with the budget. As I promised, I'll send the logistics case study and a one-page ROI outline by Thursday, and we'll reconnect Tuesday at 2pm with Sam from your finance team on the call. Is there anything you'd want me to tailor for Sam ahead of that conversation?

Talk Tuesday,
Marcus

---
CRM JSON (written to the deal record):
{
  "summary": "Strong fit on ramp-time pain; Dana is bought in. Finance buy-in is the gate to advancing.",
  "pain_points": ["slow new-region ramp", "manual regional planning"],
  "next_step": "Send case study + ROI by Thu (Marcus); reconvene Tue 2pm with Sam/VP Finance",
  "stakeholders_mentioned": ["Sam (VP Finance)"],
  "objections": ["budget approval / finance sign-off"],
  "sentiment": "positive",
  "missing_to_advance": "finance sign-off on budget"
}

TASK auto-created: 'Send case study + ROI outline to Meridian' due Thursday, owner Marcus.
Anatomy of the CRM JSON written to the deal
Meridian Freight ยท Dana Ruiz (VP Operations)
summaryStrong fit on ramp-time pain; Dana bought in. Finance buy-in is the gate.
Two sentences a manager can read in a pipeline review without opening the call.
pain_points["slow new-region ramp", "manual regional planning"]
Pulled verbatim from what Dana actually said, not the rep's later paraphrase.
next_stepSend case study + ROI by Thu; reconvene Tue 2pm with Sam (VP Finance)
What plus owner plus date. This is the field that fires the task, so it has to be specific.
stakeholders_mentioned["Sam (VP Finance)"]
Surfaces the buying committee from the transcript. Names you would otherwise lose by next week.
sentiment"positive"
An enum, not a paragraph, so a board of at_risk deals filters cleanly for the manager.
missing_to_advance"finance sign-off on budget"
The one blocker. When six deals show the same value here, that is the pattern leadership needs.
Pitfalls to avoid

Pitfalls to avoid

⚠️

Auto-sending without reviewThe model occasionally misstates a commitment or strikes the wrong tone, and once sent under the rep's name to a live deal it cannot be unsent. Always route the draft to the rep to approve; the human-in-the-loop step is permanent, not optional.

⚠️

Inventing next stepsIf the model fills in a plausible next step nobody agreed to, the follow-up creates a false expectation the rep has to awkwardly retract. Force explicit 'none agreed - propose' handling so the model never fabricates a commitment.

⚠️

Ignoring recording consentRecording calls carries legal requirements that vary by region, and two-party-consent jurisdictions require explicit disclosure. Use the recorder's built-in consent prompt, disclose verbally, and respect anyone who declines to be recorded.

⚠️

Garbage transcript inPoor audio yields a poor transcript and therefore a wrong summary and email. For important calls, check transcript quality before trusting the extraction, and do not let a misheard number become a logged 'fact.'

⚠️

Trusting the rollup as truthThe weekly Routine surfaces patterns but can misread an aggregate. Managers should click into the actual deal records before acting on a flagged trend, treating the rollup as a pointer, not a verdict.

FAQ

Questions people ask

What should a sales follow-up email include?
Four things, in order: one real detail from the call so it reads like it was written by a human who was actually there, the agreed next step restated exactly with an owner and a date, confirmation of anything you committed to, and a single question as the close. Keep it under 120 words and send it the same day. The templates above are built around that shape, and the Claude agent fills them from the transcript so the one real detail is real, not a generic 'great chatting.'
Why not just auto-send the follow-up if the draft is good?
Because the one time the model misstates a commitment or strikes the wrong tone, it goes out under the rep's name to a live deal and cannot be unsent. The rep finds out when the prospect replies confused. Two minutes of review is cheap insurance, and the human-in-the-loop step is permanent, not a phase you graduate out of.
How do I stop Claude from inventing a next step that was never agreed?
The brief forces it to restate next steps exactly as agreed and to output 'none agreed - propose' when none was. That explicit handling is the fix; without it the model fills the gap with a plausible-sounding commitment. Test it on three or four real past transcripts before going live, specifically checking that it never fabricates a date or a hand-off.
What actually makes this worth building if reps already write follow-ups?
The structured CRM fields, not the email. Reps almost never log sentiment, stakeholders, objections, and the real blocker by hand, so the deal data is thin and inconsistent. The agent writes all of it automatically and identically across the team, which is the first time RevOps gets comparable data. The next_step field also fires a dated task, so nothing agreed on a call quietly gets dropped.
Do I need Gong, or is Fathom enough?
Either works; the agent only cares that there is a transcript and an API to read it from. Gong joins calls automatically for teams already on it, and Fathom's free tier records, transcribes, and exposes triggers, which is plenty to start. The one rule: standardize on a single recorder, or you are back to two integrations and data in two shapes that defeat the consistency you built this for.
Related

Related plays

Want playbooks like this in your inbox?

A new AI use case, prompt, or teardown every couple of weeks.

Subscribe →