Notion + Google Drive, meeting notes done for you
Meeting transcripts are easy to record, but the follow-up is where everything breaks. Notes end up half-finished, action items get lost in chat, and you waste time hunting for “the real version” of what was decided. Notion meeting notes shouldn’t feel like a second meeting.
This hits marketing leads who need fast next steps, but agency owners and operations managers feel it too. You want one clean Notion page per call, plus tasks that actually get assigned, with the raw transcript safely filed in Google Drive.
This workflow does that automatically. You’ll see how it captures a meeting, turns messy transcript segments into structured notes, saves the source file, and creates follow-up tasks without copy-paste.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Notion + Google Drive, meeting notes done for you
flowchart LR
subgraph sg0["Structured Output Pa Flow"]
direction LR
n5@{ icon: "mdi:brain", form: "rounded", label: "Anthropic Chat Model", pos: "b", h: 48 }
n6@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch", pos: "b", h: 48 }
n9@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser1", pos: "b", h: 48 }
n12@{ icon: "mdi:robot", form: "rounded", label: "Misc Meeting Notetaker", pos: "b", h: 48 }
n13@{ icon: "mdi:robot", form: "rounded", label: "Categorize Meeting", pos: "b", h: 48 }
n14@{ icon: "mdi:robot", form: "rounded", label: "Discovery Call Notetaker", pos: "b", h: 48 }
n15["<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/>Add Meeting Notes to Notion"]
n16@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Title + Transcript + URL", pos: "b", h: 48 }
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/notion.dark.svg' width='40' height='40' /></div><br/>Add Discovery Meeting Notes .."]
n18["<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/>New Meeting Webhook"]
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Notion Page ID", pos: "b", h: 48 }
n20@{ icon: "mdi:cog", form: "rounded", label: "Create File", pos: "b", h: 48 }
n21["<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/>Link Transcript in Notion"]
n22["<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/code.svg' width='40' height='40' /></div><br/>Split out Tasks"]
n23@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If Assigned to Me", pos: "b", h: 48 }
n24["<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/code.svg' width='40' height='40' /></div><br/>Flatten Transcript"]
n25["<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/>Add Tasks"]
n8 --> n12
n8 --> n14
n20 --> n21
n22 --> n23
n23 --> n25
n13 --> n8
n24 --> n16
n19 --> n20
n18 --> n24
n5 -.-> n14
n5 -.-> n12
n12 --> n15
n14 --> n17
n6 -.-> n14
n21 --> n22
n9 -.-> n12
n15 --> n19
n16 --> n13
n17 --> n19
end
subgraph sg1["Schedule 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/httprequest.dark.svg' width='40' height='40' /></div><br/>List Meetings"]
n1["<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"]
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Transcript Ready?", pos: "b", h: 48 }
n3@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n4["<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/code.svg' width='40' height='40' /></div><br/>Flatten"]
n7@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n10["<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/>Get Meetings from Notion"]
n11["<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/code.svg' width='40' height='40' /></div><br/>Get New Meetings"]
n7 --> n1
n0 --> n11
n1 --> n2
n11 --> n1
n3 --> n10
n2 --> n4
n2 --> n7
n10 --> n0
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 n3 trigger
class n6,n9,n12,n13,n14 ai
class n5 aiModel
class n8,n23,n2 decision
class n15,n17,n21,n25,n10 database
class n18,n0,n1 api
class n22,n24,n4,n11 code
class n0 disabled
class n1 disabled
class n2 disabled
class n3 disabled
class n4 disabled
class n7 disabled
class n10 disabled
class n11 disabled
classDef customIcon fill:none,stroke:none
class n15,n17,n18,n21,n22,n24,n25,n0,n1,n4,n10,n11 customIcon
The Challenge: Turning transcripts into usable follow-up
A transcript is not a meeting summary. It’s a wall of “speaker said this” lines, scattered timestamps, and side conversations that make sense only if you were there. Then someone has to translate that into a Notion page, pull out the decisions, and write tasks in the right database with the right assignee. Miss one step and the call might as well not have happened, because the team won’t act on it. The worst part is the mental tax: you’re rebuilding context from scratch every time you open the transcript.
It adds up fast. Here’s where it usually breaks down in real teams.
- Someone spends about 30 minutes cleaning notes after every call, and the quality still varies by person.
- Action items stay buried in the transcript, so tasks get created late (or not at all).
- Raw files live “somewhere,” which means you can’t reliably search old calls when a client asks, “What did we agree on?”
- Discovery calls and internal meetings need different templates, but most teams use one generic format anyway.
The Fix: AI-generated Notion notes with Drive archiving
This workflow listens for a new meeting event (usually a webhook from your meeting recorder) and grabs the transcript plus key metadata like the title and call URL. It then flattens the transcript into readable “Speaker: line” text, which is much easier for AI to summarize consistently. Next, it classifies what kind of meeting it was (for example, a discovery call versus a regular internal sync) and routes it to the right note-taking prompt. Once the AI returns structured JSON, the workflow writes a rich Notion page in your Meetings database, then saves the raw transcript text as a file in Google Drive and links that file back inside Notion. Finally, it extracts action items and creates tasks in your Notion Tasks database, only for the assignee you care about.
The workflow starts with an incoming meeting webhook (or an optional scheduled polling route if webhooks aren’t available). From there, AI handles classification and structured note generation, and Notion becomes the “single place” your team checks for recap plus next steps. Google Drive keeps the original transcript archived and searchable when you need to audit details.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you run 10 recorded meetings a week. If each one takes about 30 minutes to turn into a clean Notion page, plus another 10 minutes to create and assign tasks, that’s roughly 6 or 7 hours of admin work. With this workflow, the “human time” is basically just making sure the meeting gets recorded; the rest runs in the background while the transcript processes. You end the week with 10 standardized Notion pages, 10 Drive files, and tasks already queued for the right person.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Notion for meeting pages and task creation.
- Google Drive to archive raw transcript files.
- OpenAI API key (get it from the OpenAI dashboard) to classify meeting type.
Skill level: Intermediate. You’ll be mapping Notion properties and pasting database IDs, but you won’t be writing a full app.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A meeting arrives automatically. The workflow starts when your meeting tool posts a webhook payload (title, URL, transcript segments). If you can’t use webhooks, there’s also a scheduled polling route that checks for new meetings and fetches transcripts via HTTP requests.
The transcript is cleaned into a usable format. Code steps flatten the transcript into readable speaker lines and normalize fields like meeting title and meeting URL so everything downstream stays consistent.
AI classifies and writes structured notes. OpenAI classifies the meeting type, then an AI Agent generates a strict JSON output that matches your chosen note template (discovery calls get a deeper structure). A structured output parser keeps the format predictable, which honestly matters more than “creative” summaries.
Notion and Drive get updated, then tasks are created. The workflow writes a rich Notion page, saves the raw transcript text file in Google Drive, links the Drive file back into Notion, and splits action items into individual tasks. An “assigned to me” filter ensures you only create tasks for the assignee you specify.
You can easily modify the meeting categories and the task assignment logic to match your team. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
This workflow starts on a schedule and can also accept real-time meeting payloads via a webhook entry point.
- Add the Planned Run Trigger node and set the schedule to your desired cadence.
- Confirm the scheduled run connects to Fetch Notion Meetings to begin the sync cycle.
- Set up the Incoming Meeting Webhook node if you want real-time meeting ingestion alongside scheduled runs.
Step 2: Connect Meeting Sources and Identify New Transcripts
This section pulls existing meeting records and determines which new transcripts need to be processed.
- Configure Fetch Notion Meetings to retrieve existing meeting records in Notion.
- Set up Retrieve Meeting List to pull the latest meeting list from your external meeting system.
- Use Identify New Meetings to compare incoming meetings against Notion and flag new items.
- Connect Fetch Transcript Data after Identify New Meetings to fetch transcripts for new meetings.
- Route transcript availability through Transcript Available? and use Delay Execution to retry when transcripts are not ready.
- Send available transcripts to Flatten Records for normalization before downstream processing.
Step 3: Normalize Transcript Payloads and Classify Meeting Types
This stage standardizes transcript payloads, assigns labels, and classifies the meeting type for routing.
- Use Flatten Transcript Data to standardize the payload from Incoming Meeting Webhook.
- Configure Assign Title Transcript URL to map a clean title and transcript link into the record.
- Set up Classify Meeting Type to categorize the transcript before routing.
- Connect Condition Router to direct classification results into the correct notetaker path.
Step 4: Generate AI Notes for Each Meeting Type
Two AI agents create structured notes depending on meeting type and send the results to Notion.
- Connect Anthropic Conversation Model as the language model for both General Meeting Notetaker and Discovery Session Notetaker.
- Attach Structured Output Reader 2 to General Meeting Notetaker and Structured Output Reader to Discovery Session Notetaker to parse AI outputs.
- Route general meetings from Condition Router to General Meeting Notetaker, then to Append Meeting Notes.
- Route discovery meetings from Condition Router to Discovery Session Notetaker, then to Append Discovery Notes.
- Send both note paths into Assign Notion Page ID for consistent downstream attachment.
Step 5: Create Transcript Files and Sync Tasks to Notion
This final processing chain generates transcript files, attaches them to Notion, and appends action tasks.
- Use Generate Transcript File to create a file copy of the transcript, then send it to Attach Transcript in Notion.
- Parse transcript content in Extract Action Tasks to identify actionable items.
- Gate task creation with Check Assignment and then write tasks to Notion via Append Tasks to Notion.
Step 6: Test and Activate Your Workflow
Run a controlled test to confirm meeting ingestion, AI note generation, and Notion updates work as expected.
- Use Planned Run Trigger to execute a manual test run with a known meeting record.
- Verify that Append Meeting Notes or Append Discovery Notes wrote summaries to the correct Notion page.
- Confirm Generate Transcript File created a file and Attach Transcript in Notion linked it on the page.
- Check that Append Tasks to Notion created action items when Check Assignment passes.
- Activate the workflow when all steps succeed and transcripts, notes, and tasks sync properly.
Watch Out For
- Notion credentials can expire or lack database permissions. If things break, check that your internal integration is still shared with both the Meetings and Tasks databases first.
- If you’re using Wait nodes or the “transcript ready?” check, processing times vary by meeting tool. Bump up the wait duration if downstream steps run before the transcript is actually available.
- AI prompts start generic by default, and strict schemas can output empty fields. Add your preferred headings, decision style, and “what counts as an action item” early or you will be editing every recap.
Common Questions
About an hour if your Notion databases are already set up.
Yes, but you will need someone comfortable mapping fields in Notion. No coding is required if you keep the workflow structure as-is.
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 (usually pennies per meeting) and your AI note-taker model costs if you use one.
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.
Start with the classification and routing: you can change the “Classify Meeting Type” logic and add more paths in the Switch/Condition Router for different meeting templates. Many teams customize the “Discovery Session Notetaker” and “General Meeting Notetaker” prompts to match their sections, then map the output to their Notion properties in the “Append Meeting Notes” steps. If you want tasks for everyone (not just one person), remove or adjust the “Check Assignment” filter. You can also swap the trigger: keep the webhook for real-time notes, or enable the scheduled polling route when your recorder can’t post webhooks.
Usually it’s permissions. Re-check that your Notion internal integration is shared to the correct databases, then confirm the database IDs and property names match what the workflow expects. If it worked once and then stopped, refresh the credential in n8n and confirm the integration still exists in Notion.
It scales to dozens of meetings a day on most setups, and self-hosting removes execution caps entirely.
Often, yes, because this kind of workflow needs branching (different templates), waiting for transcript readiness, and strict structured outputs that don’t always fit a simple two-step zap. n8n also gives you a self-hosted option, which is useful when you’re processing lots of meetings and don’t want to pay per task. Zapier or Make can still work if your process is “transcript in, doc out” with minimal logic. The moment you want routing by meeting type plus task creation, you’ll feel the limits. Talk to an automation expert if you want a quick recommendation based on your volume and tools.
You end up with clean meeting notes, linked source transcripts, and real tasks that move work forward. Set it up once, then let your calls document themselves.
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.