How it works
What this workflow does
Give the sales rep an editable follow-up after a discovery call. One authenticated webhook retrieves the Fireflies transcript, asks OpenAI for a concise recap and next step, saves a Gmail draft, and records the result in a Google Sheets call log. The rep checks the recap and commitments against the transcript before sending.
The workflow imports inactive. Run with sample data uses a fictional transcript and sample draft copy, so the preview does not call Fireflies, OpenAI, Gmail, or Google Sheets.
This is the call-level execution layer for the Meeting Lifecycle & Outcome Verification blueprint; the Conversation Intelligence & Data Capture blueprint covers broader transcript capture and analysis.
Replay and recipient checks
The workflow reads the Call Log by Meeting ID before doing anything else. A row with a recorded Draft ID is treated as complete and skipped. A draft_pending row blocks the run until the rep checks Gmail, preventing a second draft from an uncertain attempt.
The optional contactEmail is used only when it matches a participant in the Fireflies transcript. If the address is omitted or does not match, the workflow still saves the draft with a blank recipient for manual handling. It never invents a recipient.
Validate the AI draft
OpenAI returns JSON with subject, message, summary, and nextStep. The workflow rejects malformed JSON, missing fields, oversized values, and a subject with a line break. The model settings default to gpt-4.1-mini and can be changed in Setup; the replacement model must accept JSON mode.
Before the Gmail call, the workflow reserves the row with draft_pending. It then creates an addressed or unaddressed draft, verifies the returned draft ID, and records draft_ready with the draft ID and call summary. No email is sent.
Validation scope
The supplied report confirms the isolated n8n 2.47.4 import, inactive state, and sample path. It also covers unique node IDs, intact connections, Code-node syntax, matching transcript IDs, recipient removal, duplicate and pending draft handling, and malformed model JSON. Live Fireflies, OpenAI, Gmail, and Google Sheets calls require a staging test with your accounts.
How to use
Before you start
- A current n8n instance.
- A Fireflies account with API access to the transcripts you are allowed to process.
- An OpenAI API key and a model that supports JSON mode.
- A Google spreadsheet tab for the call log.
- Google Sheets and Gmail OAuth credentials.
- A trusted webhook relay or internal service that verifies Fireflies events before forwarding them to n8n.
1. Import and run the sample
Download the complete package, extract the ZIP, and read the full setup guide. Import sales-call-follow-up-drafts.n8n.json and keep it inactive.
Open Run with sample data and choose Test workflow. Draft preview should show the sample subject, recap, and next step without making any provider calls.
2. Create the call log
Create a spreadsheet tab named Call Log with these exact headers:
| Meeting ID | Contact Email | Summary | Next Step | Status | Draft ID |
|---|
Format Meeting ID as plain text. Enter the spreadsheet ID in Setup. Select the Google Sheets OAuth credential on Find existing call, Reserve call draft, and Record call draft.
3. Configure the model and credentials
In Setup, set spreadsheetId and the model name. Keep dryRun true while testing.
- Add a Header Auth credential on Receive event for the trusted inbound relay.
- Add a Header Auth credential on Read Fireflies transcript using
Authorization: Bearer <Fireflies API key>. - Add a separate Header Auth credential on Draft with OpenAI using
Authorization: Bearer <OpenAI API key>. - Select the Gmail OAuth credential on Save addressed draft and Save unaddressed draft.
4. Send a test call
Forward {"meetingId":"...","contactEmail":"..."} to the production webhook after the relay verifies the Fireflies event. The contact email can be omitted. Use the supplied test payloads for a matching recipient, no recipient, and an invalid meeting ID. The HTTP response acknowledges receipt; check the n8n execution and call log for the outcome.
The requested transcript ID must match the transcript Fireflies returns. The workflow stops if the transcript is empty or longer than 40,000 characters. The optional contact address is removed unless it is an exact transcript participant.
5. Go live
Set dryRun to false in a staging workflow. Send a recording with permission to use the transcript and confirm the saved draft before activating. 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.
Related automations
Use the Proposal Draft & Slack Approval System when the call is ready to become a proposal. Use the Client Onboarding & Project Handoff Automation after the deal is signed, and the Calendly Booking Sync System to keep the next meeting in Airtable. Read the Meeting Lifecycle & Outcome Verification blueprint for the wider meeting process.
Use the HubSpot Ghosted Proposal Follow-Up & Recovery System when the next step is a proposal that needs follow-up.