# Draft sales-call follow-ups for review

Give the sales rep an editable follow-up after a discovery call. The workflow retrieves the transcript, prepares a recap and next step, saves a Gmail draft, and records the draft ID in a call log.

**Category** Revenue Operations  
**Tools** n8n, Fireflies, OpenAI, Gmail, Google Sheets  
**Trigger** Authenticated POST after a Fireflies transcript is available  
**Package** [Workflow JSON](sales-call-follow-up-drafts.n8n.json) · [Test payloads](test-payloads.json) · [Validation report](validation-report.txt)

## How it works

1. Look up the Fireflies meeting ID in the call log. A completed call skips draft creation on replay.
2. Fetch the transcript from Fireflies. An optional contact email is used only when it matches a transcript participant. Otherwise the workflow creates an unaddressed draft.
3. Ask OpenAI for a subject, body, summary, and next step. Check the response format and save the draft in Gmail. The rep checks the recap and commitments against the transcript before sending.

## How to use

1. Import the workflow and run **Run with sample data**. **Draft preview** uses example copy in place of a model call.
2. Create a spreadsheet tab called `Call Log` with headers **Meeting ID, Contact Email, Summary, Next Step, Status, Draft ID**. Format Meeting ID as plain text and enter the spreadsheet ID in **Setup**. Connect the Sheets and Gmail OAuth accounts to their nodes.
3. Add separate HTTP **Header Auth** credentials to **Read Fireflies transcript** and **Draft with OpenAI**. Each credential uses the `Authorization` header with its own `Bearer <API key>` value. The OpenAI model defaults to `gpt-4.1-mini`. Choose a model that accepts JSON mode if you change it.
4. Add a separate inbound **Header Auth** credential on **Receive event**. A trusted webhook relay or internal service should verify the Fireflies event and forward `{"meetingId":"…","contactEmail":"…"}` to n8n. The contact email can be omitted. The HTTP response acknowledges receipt. Check the n8n execution and call log for the outcome.
5. Set `dryRun` to `false` in a staging workflow. Send a recording with permission to use the transcript and confirm the saved draft before activating.

## Test and operate

| Scenario | Expected result |
| --- | --- |
| One call with a matching attendee | The contact is on the draft. The log contains the summary, next step, and draft ID. |
| Contact email omitted or absent from the transcript | The draft is saved with the recipient blank. |
| Same meeting ID arrives again | A recorded draft ID causes the event to stop. |
| A draft attempt leaves `draft_pending` | Check Gmail for the draft first. Record its ID or clear the pending state after confirming there is no draft. |

Serialize deliveries for the same meeting ID. Limit workflow and spreadsheet access to people authorized to see call notes, and configure execution retention for transcripts. The model checks shape and length. The rep verifies what the participants actually said.

[Community source by Kingsley Ken](https://n8n.io/workflows/20963-draft-sales-call-follow-up-emails-from-fireflies-with-openai-and-gmail/) · [Fireflies transcript API](https://docs.fireflies.ai/graphql-api/query/transcript)
