Systems Library / Operations & Admin / How to Create Automated Meeting Notes to Document System
Operations & Admin document management

How to Create Automated Meeting Notes to Document System

Convert meeting transcriptions into formatted documentation automatically.

Jay Banlasan

Jay Banlasan

The AI Systems Guy

Every business runs meetings. Almost none of them turn those meetings into usable documentation automatically. I built a system to automate meeting notes documentation so that every call produces a formatted, searchable record without anyone typing a summary by hand.

This system takes raw transcription output and converts it into structured documents with action items, decisions, and owners.

What You Need Before Starting

Step 1: Capture the Raw Transcript

Most transcription tools export to text or JSON. Set up an automated export so that every meeting transcript lands in a specific folder:

mkdir -p ~/meeting-transcripts/raw
mkdir -p ~/meeting-transcripts/processed

If you use Fathom, configure the webhook to POST transcripts to your server. If you use Whisper locally:

import whisper

model = whisper.load_model("base")
result = model.transcribe("meeting_recording.mp3")
raw_text = result["text"]

Step 2: Build the Processing Script

This script takes raw text and produces structured notes:

import anthropic
import json
from pathlib import Path

client = anthropic.Anthropic()

def process_transcript(raw_text, meeting_title):
    prompt = f"""Convert this meeting transcript into structured notes.

Format:
## Summary (2-3 sentences)
## Decisions Made (bullet list)
## Action Items (bullet list with owner and deadline)
## Key Discussion Points (bullet list)
## Next Meeting Topics

Transcript:
{raw_text}"""

    message = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=2048,
        messages=[{"role": "user", "content": prompt}]
    )
    return message.content[0].text

Step 3: Format and Save the Output

Save each processed document with a consistent naming convention:

from datetime import datetime

def save_notes(processed_text, meeting_title):
    date_str = datetime.now().strftime("%Y-%m-%d")
    slug = meeting_title.lower().replace(" ", "-")
    filename = f"{date_str}-{slug}.md"

    output_path = Path("~/meeting-transcripts/processed") / filename
    output_path.write_text(processed_text)
    return output_path

Step 4: Automate the Full Pipeline

Wire it all together with a watcher that processes new files:

import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler

class TranscriptHandler(FileSystemEventHandler):
    def on_created(self, event):
        if event.src_path.endswith(".txt"):
            raw_text = Path(event.src_path).read_text()
            title = Path(event.src_path).stem
            processed = process_transcript(raw_text, title)
            save_notes(processed, title)
            print(f"Processed: {title}")

observer = Observer()
observer.schedule(TranscriptHandler(), "~/meeting-transcripts/raw")
observer.start()

Step 5: Add Search and Retrieval

Index your processed notes so you can find past decisions:

def search_notes(query, notes_dir="~/meeting-transcripts/processed"):
    results = []
    for filepath in Path(notes_dir).glob("*.md"):
        content = filepath.read_text()
        if query.lower() in content.lower():
            results.append({
                "file": filepath.name,
                "preview": content[:200]
            })
    return results

What to Build Next

Add a Slack integration that posts the action items directly to a channel after each meeting. Or connect it to your project management tool so action items become tasks automatically. The transcript is just the starting input. What you do with the structured output is where the real value lives.

Related Reading

Want this system built for your business?

Get a free assessment. We will map every system your business needs and show you the ROI.

Get Your Free Assessment

Related Systems