This content originally appeared on DEV Community and was authored by Ale Santini
I've been automating meetings for a 236-person company for the past year.
Every week, the same problem: important decisions and tasks from meetings disappearing into chat history.
So I built Meeting Intelligence → Notion: a system that takes any meeting transcript, extracts every task and decision using AI, and saves them as structured, actionable Notion pages — automatically.
What It Does
Paste a meeting transcript (or pipe a file). The system:
- Sends the transcript to Claude Haiku via OpenRouter
- Extracts: meeting title, summary, decisions, action items (with owner + priority + due date), next meeting
- Creates a structured Notion page with the results — decisions as bullets, action items as checkboxes, priority-colored
Result: a meeting that used to produce 12 unread chat messages now produces one clean Notion page with 5 assigned tasks.
Architecture
Transcript (text/file)
↓
OpenRouter API (Claude Haiku)
↓ JSON schema extraction
{decisions, action_items, summary}
↓
Notion API (MCP-compatible)
↓
Structured page with to-dos
Notion is the core of this system — it's not just storage. By using Notion's database format, every meeting page becomes queryable. You can filter all open action items across 3 months of meetings in one view.
The Code
Extraction — the key is the schema. Claude Haiku with temperature=0 returns consistent JSON:
EXTRACTION_SCHEMA = {
"type": "object",
"properties": {
"meeting_title": {"type": "string"},
"summary": {"type": "string"},
"decisions": {"type": "array", "items": {"type": "string"}},
"action_items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"task": {"type": "string"},
"owner": {"type": "string"},
"due_date": {"type": "string"},
"priority": {"type": "string", "enum": ["high", "medium", "low"]}
}
}
}
}
}
Saving to Notion — action items become native to-do blocks:
for item in intelligence["action_items"]:
priority_emoji = {"high": "🔴", "medium": "🟡", "low": "🟢"}.get(item["priority"], "⚪")
text = f"{priority_emoji} [{item['owner']}] {item['task']} — Due: {item['due_date']}"
children.append({
"object": "block",
"type": "to_do",
"to_do": {
"rich_text": [{"type": "text", "text": {"content": text}}],
"checked": False
}
})
Real Output
Running the demo transcript through the system produces:
{
"meeting_title": "Weekly sync",
"summary": "Team reviewed AI fraud detection performance. 60% cost reduction achieved by switching to Claude Haiku. Staging deployment planned for Thursday client review.",
"decisions": [
"Switch to Claude Haiku for notification module AI humanization",
"Module-by-module migration plan approved",
"New notification module to staging before Thursday"
],
"action_items": [
{"task": "Adjust fraud detection scoring weights", "owner": "Maria", "due_date": "Friday", "priority": "high"},
{"task": "Deploy notification module to staging", "owner": "Alessandro", "due_date": "Today", "priority": "high"},
{"task": "Create migration plan for Claude Haiku rollout", "owner": "Alessandro", "due_date": "TBD", "priority": "medium"}
]
}
Setup (5 minutes)
git clone https://github.com/AlessandroTrimarco/meeting-to-notion
cd meeting-to-notion
# .env
OPENROUTER_API_KEY=your_key # openrouter.ai
NOTION_API_KEY=secret_... # notion.so/my-integrations
NOTION_DATABASE_ID=... # share DB with integration, copy ID
# Run
python meeting_to_notion.py --demo
python meeting_to_notion.py --transcript my_meeting.txt
Why This Matters
I've run this on 40+ real meetings. The difference:
Before: "What did we decide about the deadline?" → scroll through 200 chat messages
After: open Notion, filter by "decision", find it in 3 seconds
The ROI isn't about saving time in the meeting — it's about saving time in the week after, when nobody remembers what was decided.
What's Next
- Audio input: record → Whisper → extract → Notion (already have this in production for another project)
- Slack/Teams integration: post the Notion page link to the channel automatically
- Recurring action item tracking: flag items that appear in 3+ meetings without being checked off
Code
GitHub repository: https://github.com/AlessandroTrimarco/meeting-to-notion
Original: https://github.com/AlessandroTrimarco/meeting-to-notion
Built with: Python · OpenRouter (Claude Haiku) · Notion API · JSON Schema validation
I'm Alessandro Trimarco, AI Solutions Engineer. I've been building production AI systems for a 14-location restaurant chain for the past year — this project is a direct extraction of patterns that work in the real world.
This content originally appeared on DEV Community and was authored by Ale Santini
Ale Santini | Sciencx (2026-03-24T02:02:13+00:00) Meeting Intelligence Notion: Auto-extract tasks and decisions from any meeting transcript. Retrieved from https://www.scien.cx/2026/03/24/meeting-intelligence-notion-auto-extract-tasks-and-decisions-from-any-meeting-transcript/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.