Zoom Integration
Transform your Zoom meetings into searchable knowledge. Get AI-generated summaries, action items, and full transcripts automatically indexed.
Features
| Feature | Description |
|---|---|
| Auto-Transcription | Real-time or post-meeting transcripts |
| AI Summaries | Automatic meeting summaries |
| Action Items | Extract tasks and decisions |
| Speaker Diarization | Identify who said what |
| Topic Detection | Automatic topic tagging |
| Searchable Archive | Full-text search across all meetings |
Prerequisites
- Zoom Pro, Business, or Enterprise account
- Zoom Marketplace app or OAuth app
- Cloud recording enabled (recommended)
Setup
Step 1: Create Zoom App
- Go to Zoom Marketplace
- Create an OAuth app
- Configure:
- App Name: \LH42 Meeting Assistant\
- Redirect URL: \https://app.lakehouse42.com/api/auth/zoom/callback\
- Add scopes:
- \meeting:read\ - Access meeting info
- \recording:read\ - Access recordings
- \user:read\ - User info
- Note Client ID and Client Secret
Step 2: Connect in LH42
- Go to Settings > Integrations > Zoom
- Click Connect Zoom
- Authorize the app
- Configure meeting capture settings
Step 3: Configure Meeting Capture
\\\`python
client.integrations.zoom.configure({
"capture": {
"mode": "cloud_recording", # cloud_recording | live_bot | both
"auto_transcribe": True,
"generate_summary": True,
"extract_action_items": True,
"speaker_diarization": True
},
"filters": {
"meeting_types": ["scheduled", "recurring"],
"min_duration_minutes": 5,
"exclude_webinars": False,
"hosts": ["user@company.com"] # Optional: specific hosts only
},
"storage": {
"keep_audio": False, # Store audio file
"keep_video": False, # Store video file
"transcript_format": "vtt" # vtt | srt | txt
}
})
\\\`
Capture Modes
Cloud Recording (Recommended)
Uses Zoom's cloud recordings + native transcription:
\\\`
Meeting Ends → Zoom Cloud Recording Ready
│
└── Webhook: recording.completed
│
├── Download transcript (if available)
├── OR: Download audio → Whisper transcription
│
└── Process & Index
\\\`
Live Bot
Bot joins meeting for real-time capture:
\\\`
Meeting Starts → Webhook: meeting.started
│
└── Deploy transcription bot
│
├── Real-time audio capture
├── Whisper streaming transcription
├── Live speaker diarization
│
└── Meeting Ends → Generate summary
\\\`
Processing Pipeline
\\\`
Raw Transcript
│
├── Speaker diarization (who said what)
│
├── Topic segmentation
│
├── Entity extraction
│ ├── People mentioned
│ ├── Dates/deadlines
│ └── Action items
│
├── Summary generation
│ ├── Key points
│ ├── Decisions made
│ └── Action items with owners
│
└── Index to Iceberg
├── Full transcript (chunks)
├── Summary document
└── Metadata (participants, duration, topics)
\\\`
What Gets Indexed
| Content | Indexed | Notes |
|---|---|---|
| Full transcript | ✅ | Chunked with timestamps |
| Speaker labels | ✅ | Searchable by speaker |
| Meeting summary | ✅ | AI-generated |
| Action items | ✅ | With owners and due dates |
| Decisions | ✅ | Extracted automatically |
| Topics | ✅ | Auto-detected themes |
| Participants | ✅ | Attendee metadata |
| Duration | ✅ | Meeting length |
AI-Generated Output
Meeting Summary
\\\`markdown
Meeting Summary: Q4 Planning Review
Date: January 20, 2026
Duration: 45 minutes
Participants: John Smith, Jane Doe, Bob Wilson
Key Points
- Q4 revenue exceeded targets by 15%
- New product launch scheduled for March
- Hiring plan approved for 5 additional engineers
Decisions Made
- Proceed with Phase 2 development
- Increase marketing budget by 20%
Action Items
- [ ] @john: Finalize hiring plan by Jan 25
- [ ] @jane: Prepare product launch timeline
- [ ] @bob: Schedule follow-up with finance
\\\`
API Reference
List Meetings
\\\`bash
GET /api/integrations/zoom/meetings?status=processed&limit=50
# Response
{
"meetings": [
{
"id": "meeting_abc123",
"topic": "Q4 Planning Review",
"start_time": "2026-01-20T14:00:00Z",
"duration": 45,
"participants": 3,
"transcript_status": "ready",
"summary_status": "ready"
}
]
}
\\\`
Get Meeting Transcript
\\\`bash
GET /api/integrations/zoom/meetings/{id}/transcript
# Response
{
"transcript": {
"segments": [
{
"speaker": "John Smith",
"start": "00:00:15",
"end": "00:00:45",
"text": "Let's start by reviewing Q4 results..."
}
]
}
}
\\\`
Get Meeting Summary
\\\`bash
GET /api/integrations/zoom/meetings/{id}/summary
\\\`
Search Across Meetings
\\\`bash
POST /api/search
{
"query": "What did John say about the hiring plan?",
"filters": {
"source_type": "zoom_meeting",
"date_range": {"start": "2026-01-01", "end": "2026-01-31"}
}
}
\\\`
Webhooks
| Event | Action |
|---|---|
\meeting.started\ | Deploy live bot (if configured) |
\meeting.ended\ | Queue for processing |
\recording.completed\ | Download and process |
\recording.transcript_completed\ | Use native transcript |
Security & Privacy
- End-to-end encryption: Audio processed transiently
- No video storage: Only transcripts stored (unless configured)
- Access control: Meeting access follows Zoom permissions
- Opt-out: Participants can opt out of transcription
- Retention: Configurable retention policy
Troubleshooting
| Issue | Solution |
|---|---|
| Transcript missing | Enable cloud recording in Zoom |
| Poor transcription | Check audio quality; consider live bot |
| Bot can't join | Verify waiting room settings |
| Missing speakers | Enable speaker diarization |
Next Steps
- Discord Integration - Community platform
- Communication Overview - Architecture deep-dive