Turn Meeting Recordings into Action Items

You'll end up with: A clean action-item list (owner, due date, priority) plus optional meeting summary — extracted from a recording transcript or long notes

Overview
20-30 min
Intermediate
Free
2 tools
Cost breakdown
Claude (extract, normalize, disambiguate)Free
Google Sheets (paste + sanity-check)Free
TotalFree
Common mistake

Asking the model to "list action items" without a participant roster and without forcing evidence quotes from the transcript. You get confident-but-wrong owners and invented deadlines. Fix: Step 2 ties each candidate task to a verbatim snippet; Step 4 forces explicit guesses labeled "assumption" when the transcript is silent.

Before you start
  • Full transcript or recording provider export pasted into text
  • Meeting purpose (1 sentence)
  • Participant list with roles (even if partial — e.g. Alex — client PM)
  • Today's date and your timezone
  • Where tasks will live (Google Sheets recommended, or Notion/Asana/Notes)
  • Open Claude and your destination in two tabs
1

Ingest transcript and lock meeting context

Confirm roster, meeting type, and a factual recap — explicitly no tasks yet.

ClaudeFreeOpen Claude
Exact action

1. Open https://claude.ai and start a **new chat** (keep everything in this single thread through Order 4). 2. Paste a structured prompt with: - **Participant roster** (Name — Role — Org), one per line - **Meeting title** - **Date** and **timezone** - **Meeting goal** (1 sentence) - **Full transcript** (if over ~15k words, paste **Part 1** first and note that **Part 2** follows in your next message) 3. Instruct Claude to output **only**: (a) **Confirmed attendees** vs **unknown speakers** (b) **Meeting type** — pick exactly one: internal / client / sales / interview / board (c) A **3–5 sentence factual recap** of what was discussed (**no tasks**) (d) **Gaps**: unclear speakers (e.g. "Speaker 2"), illegible chunks, missing context 4. End your prompt with an explicit ban: **"Do not list action items or next steps in this step."** 5. If Claude still outputs tasks, reply: "Step 1 is context only — delete all tasks and next steps; keep only recap and gaps."

The recap matches your memory; the gaps list is honest (e.g. missing dates, unnamed speakers) — and Claude did **not** sneak in a task list.
Claude listed tasks or "next steps" anyway — restart Step 1 and lead with: "Do not write action items. Context-only pass: attendees, meeting type, factual recap, gaps."
2

Extract commitments and decisions with evidence

Pull decisions and candidate tasks from the transcript — every task needs a verbatim quote.

ClaudeFreeOpen Claude
Exact action

1. In the **same chat**, ask Claude for **two sections**: **A) Decisions** — bullet list; each bullet ends with **Evidence:** plus **one short verbatim quote** (≤25 words) from the transcript. **B) Candidate action items** — each row must include: - **Task** (short label) - **Quoted snippet** (verbatim from transcript) - **Speaker** who made the commitment — use their first name from the roster, or write **"group — unclear"** 2. Rules for Claude: - Ban vague tasks like "follow up" unless the quote implies **who / what / when**. - If someone implies a deadline in loose language ("end of week"), **quote it** and label **Due: inferred** next to that row. - Only use transcript material from messages **above** in this chat (your pasted transcript parts). 3. Ask Claude to merge obvious duplicates and keep the clearest quote.

Every candidate task has a **verbatim quote**; decisions are separate from tasks; duplicates are merged.
You see bullet tasks with **no quotes** — re-prompt: "Every task must include a transcript quote or be dropped." Repeat until every surviving task is quote-backed.
3

Normalize into an action-item grid

Turn quotes into a markdown table with owners, due dates, priorities, and explicit ambiguity flags.

ClaudeFreeOpen Claude
Exact action

1. In the **same chat**, ask Claude to output a **markdown table** with these columns: **Task** (imperative, ≤120 chars) | **Owner** | **Due** | **Priority (P0–P2)** | **Depends_on** | **Evidence_quote** | **Flag** 2. Rules for Claude: - **Owner** must be a **first name** from your roster **or** `TBD`. If `TBD`, set **Flag** to `owner_unclear`. - **Due** must be an ISO-style date **or** `TBD`. If `TBD`, set **Flag** to `due_unclear`. If the transcript only has loose timing ("EO Fri"), copy that text into **Due** and set **Flag** to `due_unclear`. - **Priority**: if unclear, use **P2** and set **Flag** to `scope_unclear`. - **Flag** is empty **only** when Owner and Due are fully specified without guesswork. - **No invented calendar dates** unless that exact date appears in the transcript. 3. Ask Claude to carry forward the **Evidence_quote** column from the prior step (shorten if needed, but don't invent new wording).

No row has both Owner=`TBD` and Due=`TBD` with an empty Flag; you're not seeing "calendar surprise" dates that aren't grounded in the transcript.
You see specific calendar dates with **no** transcript support — reply: "Strip invented dates; use `TBD` + the right flag (`due_unclear` / `scope_unclear`)."
4

Disambiguate, lock owners/dates, optional recap

Answer Claude's targeted questions, lock the final table, optional exec summary — no new mystery tasks.

ClaudeFreeOpen Claude
Exact action

1. Ask Claude to read the table and list **up to 7** questions — **only** for rows that still have flags — each question yes/no or multiple choice (e.g. "Who owns 'send the revised wireframes' — Alex or Jamie?"). 2. Answer **all** questions in **one** message with crisp facts. 3. Ask Claude for the **Final action table**: - Clear flags where resolved - Keep `TBD` only when you're **deliberately** accepting ambiguity — add a **one-line rationale** in a final column **Notes** (optional) for those rows. 4. Optional: ask for **Exec summary — max 6 bullets** for Slack/email: - Decisions, risks, and the next milestone - **No new tasks** that aren't already rows in the table 5. If the recap invents work, reply: "Remove bullets that aren't supported by the Final action table."

Every row has a best-effort **Owner** (or deliberate `TBD` + rationale); **Due** is either resolved or explicitly `TBD`; recap bullets map to the table — no ghost tasks.
New tasks appear only in the recap — delete them or add them as new rows in the table before you export.
5

Paste into Google Sheets and sanity-check

Move the locked table into Sheets, freeze headers, and scan for invented dates or orphan verbs.

Google SheetsFreeOpen Google Sheets
Exact action

1. Open https://sheets.google.com and create a new spreadsheet named `YYYY-MM-DD — [Meeting title] — Actions`. 2. Paste the **Final action table** from Claude starting at **A1**. 3. **Freeze** the header row. 4. Optional: add **Data validation** on **Priority** (allow only P0, P1, P2). 5. **Sanity-check scan**: - Delete duplicate rows. - If **Owner** and **Due** are both empty/`TBD` without explanation, either fix from the transcript quotes or add a **Notes** cell explaining why it's still open. 6. Sort by **Due** if dates exist; otherwise sort by **Priority** (P0 first). 7. If a suspicious calendar date slipped through, fix it in Sheets **or** bounce that single row back to Claude with the supporting quote.

The sheet is shareable; sorting works; you'd be comfortable sending it to a client or internal team without embarrassment.
You spot an invented deadline — fix the cell or re-open that row in Claude with the evidence quote until the Due column is honest.

All done!

You now have: A clean action-item list (owner, due date, priority) plus optional meeting summary — extracted from a recording transcript or long notes

Explore more guides

Want this workflow built for your business?

Book a free audit