Automated transformation of meeting audio into actionable insights using Generative AI and AWS services.
Note: For security reasons, API access is restricted. Please contact me on LinkedIn for a live demonstration or temporary API access.
In today's remote-first business environment, countless hours of virtual meetings are recorded daily, yet the valuable insights contained within these recordings are frequently lost because no one has time to review them. Manual extraction of key decisions, assigned tasks, and next steps is a tedious and error-prone process that scales poorly across organizations.
A fully serverless system that automates the complete meeting analysis pipeline:
- Upload an audio file (MP3/WAV)
- Receive within seconds:
- Executive Summary: Key discussion points
- Action Items: Tasks with assigned owners
- Key Decisions: Agreements and resolutions
graph LR
A[🎵 Audio File] -->|Upload| B[S3 Bucket]
B --> C[Lambda Function]
C --> D[Amazon Transcribe]
D -->|Transcript| C
C --> E[Amazon Bedrock<br/>Claude 3 Sonnet]
E -->|Analysis| C
C --> F[API Gateway]
F -->|JSON| G[Web Client]
| Service | Purpose | Configuration |
|---|---|---|
| S3 | Audio storage | Private bucket for file uploads |
| Lambda | Pipeline orchestration | Python 3.12, 512MB RAM, 90s timeout |
| API Gateway | REST endpoint | API Key authentication, rate limiting |
| Transcribe | Audio → Text | English (en-GB), MP3 format |
| Bedrock | AI analysis | Claude 3 Sonnet v1 |
- Fast Processing: ~15 seconds to analyze a complete meeting
- Secure: API Key authentication and rate limiting
- Cost-Effective: < $0.01 per invocation
- Scalable: 100% elastic serverless architecture
- Accurate: >95% transcription accuracy
- EU-Compliant: Deployed in eu-central-1 region
- AWS Account with admin permissions
- Python 3.12+
- AWS CLI configured
- Git
git clone https://github.com/AndresFMC/ai-meeting-summarizer.git
cd ai-meeting-summarizerpython3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt# Clean previous builds
rm -rf package deployment_package.zip
# Install Lambda-compatible dependencies
mkdir package
pip install --platform manylinux2014_x86_64 \
--target=package \
--implementation cp \
--python-version 3.12 \
--only-binary=:all: \
-r requirements.txt
# Package code
cp src/lambda_function.py package/
cd package && zip -r ../deployment_package.zip . && cd ..- Name:
your-audio-bucket - Region:
eu-central-1(Frankfurt) - Keep private
- Name:
SummarizerLambdaRole - Required policies:
AWSLambdaBasicExecutionRoleAmazonTranscribeFullAccessAmazonBedrockFullAccess- Custom S3 policy:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-audio-bucket/*"
}]
}- Runtime: Python 3.12
- Handler:
lambda_function.lambda_handler - Memory: 512 MB
- Timeout: 90 seconds
- Upload
deployment_package.zip
- Create REST API
- Create
/summarizeresource - POST method with Lambda proxy integration
- Enable CORS
- Create usage plan and API Key
POST https://your-api-id.execute-api.eu-central-1.amazonaws.com/v1/summarize
Content-Type: application/json
x-api-key: YOUR_API_KEY
{
"bucket_name": "your-audio-bucket",
"object_name": "audio/meeting.mp3"
}{
"summary": "Executive Summary:\n...\n\nAction Items:\n...\n\nKey Decisions:\n...",
"transcript": "Complete meeting transcription..."
}curl -X POST \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_API_KEY" \
-d @test_payload.json \
https://your-api-url/v1/summarizeTo test the pipeline locally:
python src/main.pyUpdate variables in main.py:
BUCKET_NAME: Your S3 bucketAUDIO_FILE_PATH: Local path to audio file
ai-meeting-summarizer/
├── frontend/
│ ├── index.html # Web interface
│ └── bucket-policy.json # S3 hosting policy
├── src/
│ ├── lambda_function.py # Main Lambda function
│ └── main.py # Local testing script
├── .venv/ # Python virtual environment
├── package/ # Lambda dependencies
├── deployment_package.zip # Lambda deployment package
├── requirements.txt # Python dependencies
├── test_payload.json # Test payload
├── LICENSE # MIT License
└── README.md # This file
No environment variables required. All configuration is code-based.
- Max audio file size: 100 MB
- Max audio duration: 30 minutes
- API rate limit: 100 requests/day per API Key
- Lambda timeout: 90 seconds
- Verify file exists in bucket
- Confirm Lambda role has read permissions
- Check CloudWatch logs
- Verify CORS configuration in API Gateway
- Confirm API Key is valid
- Verify audio format (must be MP3 or WAV)
- Confirm language is configured correctly
| Metric | Value | Monitoring |
|---|---|---|
| Average processing time | 13-15 seconds | CloudWatch |
| Transcription accuracy | >95% | Manual validation |
| Cost per minute of audio | $0.025-0.035 | Real-time tracking |
| Availability | 99.9% | AWS CloudWatch |
| Concurrent executions | 1000 simultaneous | AWS Lambda |
| Token efficiency | Variable by content length | LangSmith |
- Base cost: $0.025-0.035/minute
- Breakdown:
- Transcription: $0.024/minute (85%)
- AI Analysis: $0.002-0.006/minute (15%)
- Infrastructure: <$0.001/minute
Examples:
- 1-minute meeting: ~$0.03
- 5-minute discussion: ~$0.15
- 30-minute conference: ~$0.90
This solution addresses real enterprise pain points:
- Time Savings: Reduces manual meeting review from hours to seconds
- Compliance: Automated documentation for regulatory requirements
- Knowledge Management: Searchable meeting insights for teams
- Productivity: Immediate action item extraction and assignment
- Multi-language support (German, French, Italian)
- Google Drive/Dropbox integration
- PDF export functionality
- Webhook notifications
- Analytics dashboard
- Video file support
- Speaker identification
- GDPR compliance features
Why Serverless?
- Zero infrastructure management
- Pay-per-use cost model
- Automatic scaling
- EU data residency compliance
Why Claude 3 Sonnet?
- Superior understanding of business context
- Excellent structured output generation
- Multi-language support
- High reasoning capabilities
Why AWS?
- Mature AI/ML services ecosystem
- Strong EU presence (Frankfurt region)
- Enterprise-grade security
- Comprehensive monitoring tools
Contributions welcome! Please:
- Fork the project
- Create feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open Pull Request
⭐ If you find this project useful, please consider giving it a star on GitHub!