Google Meet to Notion, meeting notes everyone reads
You leave a Google Meet, and the real work starts. Someone has to dig up the transcript, turn it into something readable, post an update in Slack, and chase action items that somehow never make it into a system people trust.
Marketing leads feel it when campaign decisions get “lost in chat.” Ops managers deal with the follow-ups. Client-facing consultants get the awkward “can you recap?” email. This Meet Notion notes automation turns messy transcripts into a clean Notion page plus Slack and email recaps, consistently.
Below you’ll see exactly what the workflow does, what you need to connect, and how the pieces fit together so your team gets the same update every time.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Google Meet to Notion, meeting notes everyone reads
flowchart LR
subgraph sg0["Structured Output Pa Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook"]
n1@{ icon: "mdi:cog", form: "rounded", label: "Aggregate", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Create file from text", pos: "b", h: 48 }
n3@{ icon: "mdi:cog", form: "rounded", label: "Share file", pos: "b", h: 48 }
n4@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model", pos: "b", h: 48 }
n5@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Agent", pos: "b", h: 48 }
n7@{ icon: "mdi:swap-vertical", form: "rounded", label: "Drive Link", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/notion.dark.svg' width='40' height='40' /></div><br/>Notion Page"]
n9@{ icon: "mdi:robot", form: "rounded", label: "Generate Slack Message", pos: "b", h: 48 }
n10@{ icon: "mdi:robot", form: "rounded", label: "Auto-fixing Output Parser", pos: "b", h: 48 }
n11@{ icon: "mdi:location-exit", form: "rounded", label: "Get many events", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out", pos: "b", h: 48 }
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Send a message #meeting"]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>DMs to Attendees"]
n15@{ icon: "mdi:message-outline", form: "rounded", label: "Email to Attendees", pos: "b", h: 48 }
n16["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Transcript"]
n17["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Slack Username"]
n18@{ icon: "mdi:swap-vertical", form: "rounded", label: "Split Out2", pos: "b", h: 48 }
n19@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model2", pos: "b", h: 48 }
n6 --> n2
n0 --> n16
n1 --> n6
n12 --> n15
n7 --> n8
n3 --> n7
n18 --> n1
n8 --> n9
n16 --> n18
n11 --> n12
n4 -.-> n6
n15 --> n17
n17 --> n14
n19 -.-> n10
n2 --> n3
n9 --> n13
n13 --> n11
n5 -.-> n10
n10 -.-> n6
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n5,n6,n9,n10 ai
class n4,n19 aiModel
class n8 database
class n0,n16,n17 api
classDef customIcon fill:none,stroke:none
class n0,n8,n13,n14,n16,n17 customIcon
Why This Matters: Post‑meeting follow-through breaks fast
Meeting notes don’t fail because people don’t care. They fail because the process is annoying. You have a transcript in one place (or nowhere), decisions in someone’s head, action items scattered across Slack threads, and a Notion page that might get created… eventually. Then there’s the worst part: the “what did we decide?” question two days later, right when you’re trying to ship work. It creates rework, duplicate conversations, and a low-grade sense that meetings are a tax you keep paying.
The friction compounds. Here’s where it usually breaks down.
- Transcripts arrive unformatted, so turning them into readable notes becomes a 30–60 minute cleanup job after every important call.
- Slack updates vary by who wrote them, which means stakeholders stop trusting the recap and ask for “one more quick summary.”
- Action items don’t get assigned in a consistent place, so owners change mid-week and follow-through gets fuzzy.
- Client or leadership recaps get delayed because they require copy-pasting, checking names, and rewriting sensitive parts carefully.
What You’ll Build: Google Meet transcript → Notion notes + Slack + email
This workflow turns your post-meeting admin into a repeatable pipeline. It starts when Fireflies.ai sends a webhook to n8n with the meeting ID, right after your Google Meet ends and the transcript is ready. n8n pulls the full transcript via an HTTP request, then OpenAI (GPT‑4.1‑mini) summarizes it into structured sections like a real meeting doc: a title, a short summary, decisions, action items, risks, and open questions. Next, the automation saves the raw transcript as a text file in Google Drive, creates a shareable Drive link, and publishes a Notion page that includes both the polished summary and the source transcript link. Finally, it posts a recap to your #meeting channel in Slack, then DMs each attendee their personalized notes and sends an email recap through Gmail.
The workflow begins with transcript capture (Fireflies.ai → n8n), then AI structuring (OpenAI → JSON parsing), then distribution (Notion + Slack + Gmail). You end up with one canonical Notion record and three lightweight ways for people to actually read it.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you run 5 internal meetings a week with 8 attendees. Manually, it’s easy to spend about 45 minutes per meeting: pulling the transcript, writing notes, posting in Slack, and sending a recap email, which is roughly 4 hours weekly. With this workflow, you spend about 2 minutes to confirm Fireflies captured the call, then wait for processing while n8n creates the Notion page, Slack recap, DMs, and emails automatically. You get your week back without sacrificing clarity.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Fireflies.ai for Google Meet transcripts via webhook
- Notion to store structured meeting notes
- OpenAI API key (get it from your OpenAI dashboard)
Skill level: Intermediate. You’ll connect a few OAuth accounts, paste API keys, and map fields, but you won’t write code.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
Fireflies.ai triggers the workflow after the meeting. A webhook hits n8n with the meeting identifier, so you’re not uploading files or starting anything manually.
The transcript is pulled and prepared. n8n fetches transcript data over HTTP, then splits and recombines it so the AI receives clean, complete context instead of chopped-up fragments.
OpenAI turns raw text into structured notes. The Meeting Summary Agent generates a predictable format (title, summary, decisions, action items, risks, questions), and parsers help keep the output valid even when the model gets a little creative.
Notion, Drive, Slack, and Gmail get updated automatically. The transcript is saved to Google Drive and shared, the Notion page is created with the Drive link, a channel recap is posted to Slack, attendees are messaged individually, and an email recap goes out to everyone.
You can easily modify the Slack channel, the Notion database/page location, or the note format based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Webhook Trigger
Set up the webhook that receives the meeting ID and starts the workflow.
- Add the Incoming Webhook Trigger node and set HTTP Method to
POST. - Set Path to
b9bbfae5-c81e-4897-8abe-5b4dd7c629df. - Copy the webhook URL from Incoming Webhook Trigger and configure your meeting system to send a JSON body with
meetingId.
Step 2: Connect and Parse the Transcript Data
Fetch the transcript from Fireflies and convert sentences into a single combined transcript.
- In Fetch Transcript Data, set URL to
https://api.fireflies.ai/graphql, Method toPOST, and Authentication togenericCredentialTypewith Generic Auth Type set tohttpBearerAuth. - Set JSON Body to the provided GraphQL payload and keep the transcript ID reference as
{{ $json.body.meetingId }}. - Credential Required: Connect your
httpBearerAuthcredentials in Fetch Transcript Data. - Credential Required: Connect your
httpHeaderAuthcredentials in Fetch Transcript Data if your API requires header-based auth. - In Split Sentences, set Field to Split Out to
data.transcript.sentences. - In Combine Transcript Text, aggregate Field to Aggregate as
raw_textto combine all sentences.
data.transcript.sentences is missing, verify the Fireflies response and the meeting ID posted to Incoming Webhook Trigger.Step 3: Set Up AI Summarization and Parsing
Generate a structured meeting summary and ensure it follows a strict JSON schema.
- Open Primary Chat Model and select the model
gpt-4.1-mini. Credential Required: Connect youropenAiApicredentials. - Configure Structured JSON Parser with the provided JSON Schema Example to enforce the output format.
- Configure Auto-Correct Parser as the output fixer linked to the structured parser.
- In Meeting Summary Agent, paste the full prompt and keep the input reference to
{{ $('Combine Transcript Text').item.json.raw_text }}. - Open Secondary Chat Model and select the model
gpt-4.1-mini. Credential Required: Connect youropenAiApicredentials.
Step 4: Configure Drive Storage and Notion Output
Create a transcript file, share it, build a Drive link, and save the summary to Notion.
- In Generate Text File, set Operation to
createFromText, Name to{{$now}}.txt, and Content to{{ $('Combine Transcript Text').item.json.raw_text }}. - Select your Drive and folder in Generate Text File (replace
[YOUR_ID]in the folder selector). Credential Required: Connect yourgoogleDriveOAuth2Apicredentials. - In Share Drive File, set Operation to
shareand keep the file ID expression{{ $json.id }}. Credential Required: Connect yourgoogleDriveOAuth2Apicredentials. - In Build Drive Link, set drive_link to
https://drive.google.com/file/d/{{ $('Generate Text File').item.json.id }}/viewand keep Include Other Fields enabled. - In Create Notion Note, set Title to
{{ $('Meeting Summary Agent').item.json.output.title }}and map the body blocks to summary, decisions, action items, risks, questions, andTranscript Link: {{ $json.drive_link }}. Credential Required: Connect yournotionApicredentials.
Step 5: Configure Slack and Email Distribution
Create a Slack-ready update, post it to a channel, then notify attendees via email and direct message.
- In Compose Slack Update, select model
gpt-4o-miniand keep the prompt with references to{{ $('Meeting Summary Agent').item.json.output.title }},{{ $json.url }}, and{{ $('Build Drive Link').item.json.drive_link }}. Credential Required: Connect youropenAiApicredentials. - In Post to Meeting Channel, set Text to
{{ $json.message.content }}and choose your Slack channel. Credential Required: Connect yourslackApicredentials. - In Retrieve Recent Events, set Operation to
getAll, Limit to1, Time Max to{{ $now }}, and Time Min to{{ $now.minus(20, 'minute') }}. Credential Required: Connect yourgoogleCalendarOAuth2Apicredentials. - In Split Attendee List, set Field to Split Out to
attendees. - In Email Attendee Recap, set Send To to
{{ $json.email }}, Subject toMeeting Recap: {{ $('Meeting Summary Agent').item.json.output.title }}, and Message to{{ $('Compose Slack Update').item.json.message.content }}. Credential Required: Connect yourgmailOAuth2credentials. - In Lookup Slack User, set URL to
https://slack.com/api/users.lookupByEmail?email={{ $('Split Attendee List').item.json.email }}. Credential Required: Connect yourhttpHeaderAuthcredentials. - In DM Each Attendee, set Text to
{{ $('Compose Slack Update').item.json.message.content }}and User to{{ $json.user.id }}. Credential Required: Connect yourslackApicredentials.
Step 6: Test and Activate Your Workflow
Run an end-to-end test to verify transcript ingestion, summarization, and multi-channel distribution.
- Click Test Workflow in n8n and send a sample POST request to Incoming Webhook Trigger with a valid
meetingId. - Confirm that Generate Text File creates a Drive file and Share Drive File returns a public link.
- Verify Create Notion Note contains the summary sections and the transcript link.
- Check that Post to Meeting Channel posts the formatted Slack update and that Email Attendee Recap and DM Each Attendee deliver to recipients.
- When successful, switch the workflow to Active to enable production runs.
Troubleshooting Tips
- Slack credentials can expire or need specific permissions. If things break, check your Slack app scopes (chat:write and users:read) and the token used by the “Post to Meeting Channel” node first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Quick Answers
About an hour if you already have Fireflies, Notion, Slack, and Gmail access.
No. You’ll connect accounts, paste API keys, and map a few fields inside n8n.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API costs (often a few cents per meeting) and your Fireflies.ai plan.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s usually just a few node tweaks. You can change the “Post to Meeting Channel” Slack node to target a different channel per team, adjust the “Create Notion Note” node to write into a database instead of a page, or update the Meeting Summary Agent prompt to match your template. Common customizations include adding “Attendees” and “Next meeting date,” inserting a client-safe version for external recaps, or saving action items to a table (Notion or Google Sheets) so they’re assignable.
Usually it’s expired OAuth credentials or missing scopes. Reconnect the Slack credential in n8n, confirm the bot is installed to the right workspace, and verify it has permission to post in the target channel and DM users. If only DMs fail, the “Lookup Slack User” HTTP request may be returning the wrong ID (often email mismatch), so check the attendee emails coming from the calendar step.
A typical setup handles dozens of meetings a day, and self-hosted n8n has no execution cap (your server is the limit). On n8n Cloud, the practical limit is your plan’s monthly executions. The heavier constraint is usually API rate limits from Slack, Fireflies.ai, or OpenAI if you run large batches at once.
Often, yes, because the workflow needs structured AI output, parsing, loops for attendee DMs, and conditional logic that gets expensive in simpler tools. n8n also gives you a real self-host option, which is useful when you’re sending a lot of recaps. Zapier or Make can still work if you only want “transcript in, one summary out” with minimal formatting. The moment you want Notion + Slack channel + Slack DMs + Gmail in one run, the complexity adds up. Talk to an automation expert if you want help choosing the simplest path for your stack.
Once this is live, your meetings stop creating busywork. The workflow handles the recap and distribution, so your team can focus on the decisions they just made.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.