A meeting notes summariser that takes raw transcript text and outputs key decisions, action items with owners, and an executive summary using Gemini.
A structured prompt tells Gemini exactly what format to produce.
import google.generativeai as genai, os
genai.configure(api_key=os.environ.get('GEMINI_API_KEY') or 'your-key-here')
model = genai.GenerativeModel('gemini-1.5-flash')
TRANSCRIPT = """
Sarah: OK let us get started. We need to decide on the website redesign timeline.
John: I think we can have the designs done by September 15th.
Sarah: That works. Maria, can your team handle the dev side by October 30th?
Maria: Yes, but we will need the final designs a week before — so October 7th.
John: Agreed. I will send you everything by October 7th.
Sarah: Perfect. Also we need to discuss the marketing launch. Tom?
Tom: We are planning a social media push starting November 1st. I need the live link by October 28th.
Maria: October 28th is tight but doable if we get the content by October 20th.
Sarah: Tom, can you get all copy to Maria by October 20th?
Tom: Yes, I will do that.
Sarah: Great. Let us aim for a full launch on November 1st.
"""
def summarise_meeting(transcript):
prompt = f"""Analyse this meeting transcript and produce a structured summary.
Format your response EXACTLY as follows:
## Executive Summary
[2-3 sentences describing the main outcome of the meeting]
## Key Decisions
- [Decision 1]
- [Decision 2]
## Action Items
| Owner | Task | Deadline |
|-------|------|----------|
| Name | What to do | Date |
## Next Meeting
[Any next steps or follow-up meeting mentioned, or "Not discussed"]
Transcript:
{transcript}"""
return model.generate_content(prompt).text
print(summarise_meeting(TRANSCRIPT))
## Executive Summary The team aligned on a website redesign timeline leading to a November 1st launch. Key milestones were agreed between the design, development, and marketing teams, with clear handoffs and deadlines assigned to each owner. ## Key Decisions - Website redesign designs to be completed by September 15th - Development to be completed by October 30th - Full website launch targeted for November 1st ## Action Items | Owner | Task | Deadline | |-------|-------------------------------|-------------| | John | Send final designs to Maria | October 7 | | Tom | Send all marketing copy | October 20 | | Maria | Deliver live link | October 28 | ## Next Meeting Not discussed
Add file input so any .txt transcript can be summarised in one command.
import sys
def main():
if len(sys.argv) > 1:
# Usage: python summarise.py meeting.txt
with open(sys.argv[1], encoding='utf-8') as f:
transcript = f.read()
else:
print("Paste your transcript below. Type DONE on a new line when finished.\n")
lines = []
while True:
line = input()
if line.strip() == 'DONE': break
lines.append(line)
transcript = '\n'.join(lines)
print("\nSummarising...\n")
summary = summarise_meeting(transcript)
print(summary)
# Save to file
out_file = 'meeting_summary.md'
with open(out_file, 'w', encoding='utf-8') as f:
f.write(summary)
print(f"\nSaved to {out_file}")
main()
One prompt replaced 20 minutes of manual note-writing. The structured output format (Markdown table for action items) is deliberate — it makes the summary easy to paste into Notion, Confluence, or a Slack message.
Spotted a bug, broken code, or something that doesn't look right? Tell us what's off and we'll fix it.