n8n Automation in Practice: Turn Meeting Notes into Action Items in One Click

Use a five-node n8n workflow to turn meeting notes into a task table with owners and due dates.
This article presents a lightweight n8n-based automation that solves the problem of meeting commitments getting buried in notes with no follow-up. The workflow uses just five nodes: a manual trigger, a Google Sheets read of meeting notes, an OpenAI call to extract action items, a Split Out to break the task list apart, and an append to an Action Items sheet. The core technique is requiring the model to return a fixed JSON structure that Split Out then converts into individual rows, bridging the gap between paragraph-style answers and table rows. The article also highlights common pitfalls: the prompt box must be switched to Expression, Output Format must be JSON Object, use Append rather than Upsert, and run each set of notes only once. The author also reminds readers that AI output still needs a quick human review — clear notes in, clear tasks out.
Every time a team meeting wraps up, the same scene plays out: someone takes notes, someone else is assumed to turn the promises buried in those notes into to-dos — and usually nobody actually does. Two weeks later, the team is chasing the same question: who was supposed to send that revised quote?
This scenario is especially common in small firms or consultancy teams. A few meetings a week, each producing a handful of commitments: Priya sends the revised quote by Friday, Marcus books the venue, someone follows up on the signed contract. Once those commitments get buried inside paragraphs of notes, three things happen in sequence: work slips through the cracks because a sentence in the notes has no clear owner; the first ten minutes of the next meeting get eaten up by rehashing "whatever happened with that thing last time"; and manually sorting tasks takes 10 to 20 minutes — which is exactly why it always gets skipped.

The fix doesn't require a full project management suite — just a single table with three columns: task, owner, due date, populated automatically from meeting notes.
The Idea: Turn Decisions in Notes into Tasks with Owners
I built a workflow in n8n: read meeting notes from a Google Sheet, call OpenAI to list all action items, then append each one to an Action Items sheet. In testing, two meetings produced seven tasks, each with an owner and a due date. One unexpected bonus: it automatically excluded the decision to "skip a certain status call," because nobody needed to act on it. Decisions aren't tasks, and a good prompt helps the model tell the two apart.
This workflow has only five nodes, and the core logic isn't complicated — but there are a few pitfalls worth walking through.
Five Steps: From Manual Trigger to Automatic Write
The workflow is structured like this:
- Manual trigger kicks off the run manually during testing; later it can be swapped for a form, scheduler, or new-row trigger.
- Google Sheets, Get row(s) in sheet reads the meeting notes sheet, where each record includes the meeting name, date, and note content — long text passes through intact.
- OpenAI, Message a model sends each meeting's notes to the model and asks for action items returned in JSON format.
- Split Out breaks the task list from each entry into individual task items.
- Google Sheets, Append row in sheet appends each task to the Action Items sheet.
The whole build takes about 15 minutes and 50 small steps, with no code required.
n8n is an open-source automation workflow tool — think of it as "programming, visualized": you drag nodes and connect them to chain different services (like Google Sheets and OpenAI) into automated tasks. Each node represents one operation, and data flows between nodes. Compared to similar tools like Zapier and Make, n8n supports self-hosting so data never leaves your own server, and it offers stronger support for complex logic and custom expressions. The "Manual trigger" mentioned in this article is the most basic starting node, used to run the entire flow with one click during testing; later it can be replaced with a "form trigger," "schedule trigger," or "new row trigger" to run unattended.
Key Technique: Ask for JSON, Then Split It
If you take away just one idea from this workflow, make it this: AI answers come as paragraphs, but tables need rows. The bridge between them is asking the model for a fixed-structure JSON, then splitting the list apart.
The prompt instructs the model to return only JSON, structured as a list called tasks, where each task has three fields: task, owner, and due. It also lays out the rules: use names for owners, use the days or dates mentioned in the notes for due dates, and write "No date" if none is mentioned. The meeting name and note content are injected into the prompt via n8n's double-curly-brace expressions.
Two settings determine whether this flow is reliable:
Switch the prompt box to Expression. Hover over the box and click Expression. Skip this step and the AI receives literal curly braces instead of the actual note content.
Set Output Format to JSON Object. Add Output Format under Options and select JSON Object. n8n will then automatically expand the return value, and tasks arrive as a real list rather than a big blob of text.
After that, Split Out takes the list path (output[0].content[0].text.tasks) and returns one task per item. Two meetings in, seven items out. The final Append step uses Map Automatically as its mapping mode, matching field names to column headers automatically. That's also why the first row of the Action Items sheet needs the three lowercase headers: task, owner, and due.
JSON (JavaScript Object Notation) is a universal data interchange format that expresses structured information using key-value pairs and lists. In this workflow, the model returns a structure like {"tasks": [{"task": "...", "owner": "...", "due": "..."}]}, where tasks is a list, and each element in the list contains three fields. This fixed structure makes downstream splitting controllable — if the model returned a natural-language paragraph instead, the program couldn't reliably tell "which sentence is the task and which is the owner." That's exactly why the prompt must explicitly require "return JSON only." The Split Out node leverages this structure: it reads each item in the list, breaking "one entry containing multiple tasks" into "multiple independent tasks," so that each task maps to a row in the sheet.
Credentials, Models, and the Traps of Re-Running
A few details that, without a heads-up, can easily waste your time:
Credential issues. Choose the Google account that owns the sheet, and an OpenAI credential with a working key. n8n sometimes pre-fills a credential with an expired key, and the model list will throw a 401 Authorization failed error.
Model choice. GPT-4.1-mini is fast and cheap, with more than enough capability to extract facts from text for this task.
Choose Append, not Append or update. Append row adds a new row every time; the update variant requires a matching column.
Don't run the same notes twice. Append adds rows on every run, and the AI's wording for the same task may differ slightly, producing near-duplicates. Run each set of notes only once.
Append vs. Upsert are two typical modes for writing to a table. Append simply adds a new row at the end — simple logic, fast execution. Upsert requires a "matching column" to determine whether a record already exists: if it does, update it; if not, insert it. Upsert suits scenarios where "the same entity gets modified repeatedly," like order status. Meeting action items, however, are essentially "one-off new records" — each task is naturally independent, with no stable unique identifier for matching — so Append is the better fit. This also explains why the article stresses "don't run the same notes twice": Append doesn't deduplicate, the AI's wording for the same task may differ slightly, and two runs will produce two near-duplicate tasks, adding cleanup overhead instead.
AI Output Needs a Human Once-Over
The model may miss tasks or get an owner wrong. This is a time-saving tool, not a replacement for a human glance. After each meeting, quickly scan the Action Items sheet — and when taking notes, be explicit about who agreed to do what. Clear notes in, clear tasks out. A two-minute scan is far cheaper than twenty minutes of typing.
Getting Started
If you want to give it a try, this workflow has been turned into a free interactive course that runs in a practice copy of the n8n editor, using fictional data and touching no real accounts. You perform every step yourself, and the system checks whether you got it right.
If your team is still losing tasks somewhere between "the meeting went great" and "who's handling that," this is a small-investment, big-return build.
Related articles

MCP Protocol in 60 Seconds: A Real Session, Message by Message
Dissecting a real MCP session message by message: how an Agent dynamically discovers tools, forwards call requests, and has an MCP server execute them — all in just 9 JSON messages, with the model and reasoning loop untouched.

n8n 40-Minute Masterclass: Build Your First AI Automation Workflow from Scratch
Distilled from a 40-minute n8n masterclass: the core differences between automation, AI, and AI Agents, a comparison of n8n's four deployment methods, and a complete guide from dashboard to your first workflow.

Why Does a 35GB Quantized Model Blow Up an 80GB GPU? The Truth About KV Cache VRAM
Why does a 35GB 4-bit quantized LLM still blow up an 80GB GPU? This article breaks down the four components of inference VRAM, provides precise KV Cache formulas, compares GQA vs DeepSeek MLA memory, and offers production-grade OOM prevention like FP8 KV Cache.