Case studies
CASE STUDY — AI

Meeting notes bot — drop the recording in Drive, Whisper transcribes, GPT summarizes, Slack gets the notes

Deployed at Cross-team4 days to build
Google DriveOpenAI WhisperOpenAI GPTSlack

After every meeting, someone had to replay the recording and write up the notes. Whenever the write-up slipped, decisions blurred and ownership became memory-dependent.

Drop the recording into a designated Google Drive folder and the workflow starts on its own. Whisper transcribes the Korean audio to text; GPT produces a one-line title, a 2–3 sentence summary of what was decided, and a list of action items with owner and due date, then posts everything to the team's Slack channel. The team has the notes one minute after the meeting ends.

meeting-notes.workflowLIVE
WSWhisper (audio → text)AIGPT summary + action itemsSLPost to Slack

How it works

  1. Google Drive Trigger polls a specific folder (e.g. meeting-recordings) and fires when a new file appears.
  2. Google Drive Download pulls the file as a binary.
  3. HTTP Request POSTs a multipart/form-data request to https://api.openai.com/v1/audio/transcriptions — Whisper API transcribes (model: whisper-1, language: ko).
  4. HTTP Request sends the transcript to GPT-4o-mini and asks for {title, summary, action_items[]} JSON (response_format: json_object enforced).
  5. Code node parses the JSON and formats a Slack-friendly markdown message (title · summary · action items list).
  6. Slack Send Message posts to the target channel.

What you need

  • n8n 2.29.9+ (self-hosted or Cloud). Verified against a self-hosted Docker instance.
  • Google Drive OAuth2 credential — scope https://www.googleapis.com/auth/drive. Shared by the Drive Trigger + Download nodes.
  • Google Drive folder — create one for meeting recordings. Copy the folder ID from its URL (the segment after folders/).
  • OpenAI API key — one credential covers Whisper API + Chat API. Billing must be enabled at platform.openai.com.
  • Slack Bot User OAuth Tokenchat:write scope. /invite @your-bot in the target channel.
  • Cost — Whisper $0.006 / minute + a few cents of GPT-4o-mini per summary. A 45-second standup costs about $0.01 end-to-end.

AI output schema — the JSON GPT returns

{
  "title":   "one line describing what kind of meeting this was",
  "summary": "2–3 sentences on the core decisions and discussion",
  "action_items": [
    { "owner": "person or team name mentioned", "task": "what to do", "due": "deadline mentioned, or null" },
    ...
  ]
}

Actual verification run — 45-second standup recording

Title:  Product Standup Meeting
Summary: Billing refactor is done. This week the focus is wrapping the refund flow with a Thursday release target.
         The marketing A/B test results will be shared by Friday. The Q3 roadmap draft will be reviewed in Thursday's meeting.

Action items:
  1. [CS team]     Reprioritize billing-related CS tickets       — by next week
  2. [Team]        Review the Q3 roadmap draft                   — Thursday
  3. [Marketing]   Share A/B test results                        — Friday
⬇︎ Download the workflow (meeting-notes.json)
Set up three credentials (Google Drive · OpenAI · Slack), one Drive folder ID, and a Slack channel name — the workflow runs immediately. The top-of-canvas sticky note walks through the exact steps.
This workflow was verified on n8n 2.29.9 with a real 45-second Korean standup recording (generated via OpenAI TTS) — uploaded to Google Drive, transcribed by Whisper, summarized by GPT, and posted to Slack. All round-trip. Last verified: 2026-07-15.

Why Whisper over other STT providers

  • Korean accuracy — Whisper's medium/large quality via a single API. No tuning required for most standups, 1-on-1s, or customer calls.
  • Predictable pricing — $0.006 per minute, flat. No pricing table that shifts with request volume, language, or real-time flag.
  • Downside — no real-time. Live streaming needs different tooling. Perfect fit for post-meeting notes, wrong fit for live captions.
  • Downside — 25 MB upload cap. Meetings longer than about an hour need to be split with ffmpeg or a chunking preprocessor before transcription.

Technical notes — Whisper takes multipart, summarization enforces JSON

  • The Whisper endpoint (/v1/audio/transcriptions) expects multipart/form-data. In n8n's HTTP Request node: Body Content Type: Form-Data (Multipart), one parameter with Parameter Type: n8n Binary File, Input Data Field: data.
  • The GPT summarization call must enable response_format: { type: 'json_object' }. Without it, valid JSON output isn't guaranteed and the parser can fail.
  • We use HTTP Request rather than n8n's native OpenAI node for the same reason as sales-report and cs-triage — the native node's chat requests hit an OpenAI onboarding response instead of real completions in some configurations.

Edge cases

  • Whisper can't hear anything — silence or noise-only files return a tiny transcript (sometimes just the word 'music'). GPT will still try to summarize it — for production, add an IF node like if transcript.length < 30 then skip before the summarization call.
  • Whisper mis-transcription — e.g. A/B test sometimes lands as ADB test. GPT can often smooth these over from context, but domain-specific terms (product names, personal names) are the biggest risk.
  • Files over 25 MB — Whisper returns a 400. Pre-split with ffmpeg -i input.mp3 -f segment -segment_time 900 -c copy chunk_%03d.mp3 for 15-minute chunks, then process sequentially.
  • Drive polling latency — Drive Trigger polls at ~1-minute intervals. For true real-time, switch to a webhook trigger (needs an external upload notification path).
  • Same file re-detected — the Trigger dedupes on file ID, but a safety net is to add a step that moves processed files into a processed/ subfolder.
40 min → 2 min
meeting notes writeup time
1 min after end
summary lands in Slack
$0.01
per 45-second meeting
owner + due date
auto-extracted
By the time the meeting ends, the notes are already in Slack. Back-of-mind panic about missing what was said — that's over.Product Manager

Your operation belongs
in here, too.

Tell us the most repetitive task you have. We'll map an automation scenario for it.