Should AI send your sales follow-up emails, or only draft them?

The follow-up after a sales call is the email most people send late. AI can write it a minute after the call ends. The real question is whether it should also press Send.

I keep it at draft only. A follow-up repeats what was said on the call, so if the model mishears a price, a date or a promise, auto-send puts that mistake in writing with the prospect’s name on it.

If you build this yourself, two things save you trouble:

  1. Save the email as a draft, and leave the recipient empty when the workflow is not sure who the contact is. An empty To field is easier to fix than an email sent to the wrong person.

  2. Expect duplicate webhook events. Fireflies can send the same event more than once, so log each meeting ID and skip any you have already handled. Otherwise one call gives you two drafts.

My full version writes the call notes and the follow-up, saves the draft in Gmail and logs the call in Google Sheets:

1 „Gefällt mir“

I honestly feel like n8n is overkill for a use case like this. An agent like Claude or ChatGPT with tools can do the same thing and would much simpler to update and maintain - just one POV.

Drafting the message automatically is definitely the safest baseline while you refine the prompt logic. Letting AI generate the structured recap right into your CRM queue keeps reps from delaying outreach without risking an unchecked hallucination going out to an enterprise prospect.

Once your accuracy rate crosses 95% on common edge cases, adding an approval webhook or human-in-the-loop Slack notification gives you the best balance between speed and quality control.

Fair point, and for one person handling a few calls a week I would probably agree. An agent with Fireflies and Gmail connected gets you most of the way.

Where n8n earns its place for me:

  1. It starts on its own. Fireflies fires the webhook when the transcript is ready, so nobody has to open a chat and ask.
  2. It does the same thing every time. The resend check, the empty recipient rule and the sheet log are plain logic, not something the model decides on each run.
  3. Every run is in the execution log, so when a draft looks wrong I can see the exact transcript and output that produced it.

The model still does the writing. n8n handles everything around it.

How do you start the agent in your setup: after each call, or on a schedule?

Agreed, draft only is where I would start anyone using this.

The part I find tricky is measuring that 95%. The simplest signal I can think of is comparing each draft with the email the rep actually sent. If reps send it unchanged most of the time, the prompt is ready for an approval step instead of a full review.

The Slack approval you describe is the pattern my other templates use before anything changes in Shopify or HubSpot, so it would be a small step to add here.

How do you track accuracy in your own builds: comparing drafts with what was sent, or checking a sample by hand?

I’d go draft-only too, at least for the first few weeks. In my own follow-ups the model sometimes got a date or a number slightly off, and I only caught it because I had to read the draft first. If drafting gets boring and the drafts keep coming out right, then a quick approval step is an easy middle ground before auto-send.

1 „Gefällt mir“

One edge case I’d test is Gmail creating the draft successfully, but n8n timing out before saving the draft ID

A retry could create a second draft even with the meeting ID check. I’d keep those attempts separate from confirmed drafts and reconcile them before trying again

1 „Gefällt mir“

Fair point, and it is a real gap. Two details: the template skips events Fireflies marks as reprocessed but does not keep a list of meeting IDs, and the Gmail node has Retry On Fail turned off. So the second draft only happens if someone presses Retry on the failed run.

Keeping attempts separate from confirmed drafts is the right way to close it. My question is whether it is worth it here: nothing reaches the client, and a duplicate draft costs one click to delete. The extra steps also make setup harder for a beginner.

Would you add the reconcile step for drafts, or only once the workflow sends on its own?

1 „Gefällt mir“

For a draft-only beginner template, I probably wouldn’t add full reconciliation yet. The extra complexity can cost more than the occasional duplicate draft.

I’d document the retry limitation and, if it’s easy to implement, use the meeting ID as a lightweight dedupe key.

Once the workflow starts sending emails automatically, though, I’d treat idempotency and checking the actual Gmail outcome as essential. A failed execution doesn’t always mean the action itself failed.

So I’d keep the safeguard proportional to the consequence of duplication, rather than applying the same architecture to every workflow.

Draft only here too. I let AI write my outgoing emails and still send every one myself.

On measuring accuracy: the mistakes that hurt most in a follow-up are facts, like a price, a date or something promised on the call. I’d have the workflow pull exactly those from the transcript into a short note next to the draft. Checking three lines against the email takes seconds, and after a few weeks you see whether they keep matching. That tells you more than whether the rep changed the wording.

1 „Gefällt mir“

We trigger using webhooks, then have written instructions embedded with deterministic MCP calls.

I wonder if it comes down to how much of the process is tactical execution vs detailed instructions you want the AI to follow (more like what you might delegate to a human, if you had them rigorously go through call notes and get the right information recorded in the right places – plus a killer email draft that only requires some light editing before you hit send).

That makes sense, and it sounds closer to my setup than I first thought. You have a webhook and fixed calls too, you just write the rules as instructions instead of nodes.

The way I split it: anything that has to happen the same way every time goes in the workflow. Skipping repeats, where the notes get saved, never sending. The parts that need judgement, reading the call and writing the email, go to the model.

How do you catch it when the agent skips one of the instructions or saves something in the wrong place?

Yeah, I will skip full reconciliation for this one since it only makes drafts. I will add the meeting ID check and a note in the setup telling people not to hit Retry if a run fails at the Gmail step.

I still would not call approve-then-send automatic, because I am the one deciding what goes out. But you are right that it does not help with duplicates, n8n still sends it after I approve. My quote workflow sends after approval, so that one will check the Gmail sent folder before it tries again.

Good point, and better than what I said about checking edits. Most edits are people changing the tone, they do not tell you the draft was wrong.

The template already emails me short notes with each draft, but it is a summary and the next step, not the facts on their own. Pulling out the price, dates and promises as separate lines would be an easy add.

Do you have it show the exact line from the transcript next to each fact, or just the fact?

I’d show the line. The model can get a fact wrong in the note just as easily as in the email, so a price or date on its own only moves the problem. With the sentence from the transcript next to it you can see in a second whether it was really said. Keep it to the one sentence that holds the number or the promise, plus the timestamp if Fireflies gives you one.