A powerful, automated Google Meet recording service designed for deployment on Render.com. This service provides real browser automation for recording Google Meet sessions with high-quality audio output in multiple formats.
- ✅ Automated Google Meet Recording - Full browser automation using Puppeteer
- ✅ Multiple Audio Formats - Export in MP3, WAV, and FLAC formats
- ✅ RESTful API - Simple HTTP endpoints for integration
- ✅ Real-time Status Tracking - Monitor recording progress and status
- ✅ Automatic Cleanup - Configurable retention and cleanup policies
- ✅ Docker Ready - Containerized for easy deployment
- ✅ Render.com Optimized - Pre-configured for Render.com deployment
This service is designed to work with n8n or other automation tools:
User Request → n8n Workflow → Render Service → Google Meet Recording
| Component | n8n | Render Service |
|---|---|---|
| Complexity | Simple HTTP calls | Heavy processing |
| Resources | Minimal | Full system access |
| Maintenance | Easy updates | Independent deployment |
| Cost | Your existing server | Free tier available |
- Fork this repository to your GitHub account
- Sign up for Render.com (free tier available)
- Connect your GitHub account to Render
- Create a new Web Service and select this repository
- Render will automatically deploy using the included
render.yaml
Your service will be available at: https://your-app-name.onrender.com
# Health check
curl https://your-app-name.onrender.com/health
# Start a recording
curl -X POST https://your-app-name.onrender.com/api/record \
-H "Content-Type: application/json" \
-d '{
"meetUrl": "https://meet.google.com/your-meeting-code",
"options": {
"audioFormat": "mp3",
"quality": "320k",
"maxDuration": 3600
}
}'POST /api/record
Content-Type: application/json
{
"meetUrl": "https://meet.google.com/xxx-xxxx-xxx",
"options": {
"audioFormat": "mp3", // mp3, wav, flac
"quality": "320k", // audio bitrate for mp3
"maxDuration": 14400 // max seconds (4 hours default)
}
}Response:
{
"success": true,
"recordingId": "rec_1634567890_xyz123",
"status": "initializing",
"message": "Recording process started",
"statusUrl": "/api/status/rec_1634567890_xyz123",
"downloadUrl": "/api/download/rec_1634567890_xyz123"
}GET /api/status/{recordingId}Response:
{
"recordingId": "rec_1634567890_xyz123",
"status": "recording_active",
"startTime": "2023-10-18T14:30:00.000Z",
"duration": 1200,
"isActive": true
}GET /api/download/{recordingId}/{format}Available formats: mp3, wav, flac
POST /api/stop/{recordingId}GET /health| Variable | Default | Description |
|---|---|---|
PORT |
3000 |
Server port |
NODE_ENV |
development |
Environment mode |
| Option | Default | Description |
|---|---|---|
audioFormat |
mp3 |
Output format (mp3, wav, flac) |
quality |
320k |
Audio bitrate for MP3 |
maxDuration |
14400 |
Maximum recording duration (seconds) |
Here's a sample n8n workflow to integrate with this service:
{
"name": "Google Meet Recorder - Render Integration",
"nodes": [
{
"parameters": {
"method": "POST",
"url": "https://your-render-app.onrender.com/api/record",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"contentType": "json",
"jsonBody": "{\n \"meetUrl\": \"{{ $json.meetUrl }}\",\n \"options\": {\n \"audioFormat\": \"mp3\",\n \"quality\": \"320k\"\n }\n}"
},
"name": "Start Recording",
"type": "n8n-nodes-base.httpRequest"
}
]
}- Node.js 18+
- FFmpeg
- Google Chrome/Chromium
# Clone the repository
git clone https://github.com/yourusername/meet-recorder-render.git
cd meet-recorder-render
# Install dependencies
npm install
# Start development server
npm run dev# Start the service
npm start
# In another terminal, test recording
curl -X POST http://localhost:3000/api/record \
-H "Content-Type: application/json" \
-d '{
"meetUrl": "https://meet.google.com/your-test-meeting",
"options": {"audioFormat": "mp3"}
}'meet-recorder-render/
├── package.json # Dependencies and scripts
├── server.js # Main Express application
├── Dockerfile # Container configuration
├── render.yaml # Render.com deployment config
├── scripts/
│ └── record_meet.js # Puppeteer recording logic
└── README.md # This file
- The service runs in a sandboxed Docker container
- Uses non-root user for enhanced security
- Automatic cleanup of old recordings
- No persistent storage of sensitive data
- ✅ 750 hours/month free runtime
- ✅ 1GB storage for recordings
- ✅ 512MB RAM per service
- ✅ 0.1 CPU allocation
- RAM: ~200-300MB per active recording
- Storage: ~50-100MB per hour of audio
- CPU: Moderate during recording, high during processing
initializing → launching_browser → joining_meeting → recording_active → processing → completed
-
Recording fails to start
- Check if the Google Meet URL is valid and accessible
- Ensure the meeting hasn't started yet or allows late joins
-
Audio quality issues
- Adjust the
qualitysetting in recording options - Try different audio formats (wav for highest quality)
- Adjust the
-
Service timeouts
- Render.com free tier has request timeouts
- For long recordings, use the status endpoint to monitor progress
Check recording logs at:
/tmp/recordings/{recordingId}/process.log- Process output/tmp/recordings/{recordingId}/error.log- Error logs/tmp/recordings/{recordingId}/ffmpeg.log- Audio processing logs
The service provides several monitoring endpoints:
/health- Service health and status/api/status/{recordingId}- Individual recording status- Process logs for debugging
- Fork the repository
- Create a feature branch
- Make your changes
- Test locally
- Submit a pull request
MIT License - see LICENSE file for details
For issues and questions:
- Check the troubleshooting section above
- Review the API documentation
- Open an issue on GitHub
Built with ❤️ for automated Google Meet recording