Compares the Google Meet REST API and the Nylas Notetaker API for integrating Google meeting recording and transcription into SaaS applications.
What you’ll learn:
Who it’s for: Platform builders who want to to ship production-ready meeting intelligence features in weeks instead of 6+ months.
There’s growing demand for SaaS applications that integrate with meeting platforms like Google Meet.
When we surveyed 1000 SaaS users, 85% said they wanted meeting recording and transcription features to be built into their favorite work tools.
But if you’re a product builder trying to meet this demand, you likely want to spend your engineers’ time building something other than just the plumbing to get audio and video files from meetings.
Unfortunately, integrating with Google Meet doesn’t give you the same options as building custom meeting bot infrastructure with Zoom SDK (which is a pretty complex process anyway). It’s also a lot of work trying to get your recordings automatically synced up with Google Calendar, which is how a lot of Google Meet links are generated.
We’re going to cover the basics of what you can do with Google Meet APIs, how you would use the REST API for post-meeting files, and an easier way to go about it.
There are three native Google options for developers to build apps around Google Meet:
The integration | Data access | Implementation | Use cases |
---|---|---|---|
REST API | Post-meeting recordings/transcripts | High, 2-3 weeks for only a Google Meet integration (not including ongoing maintenance) | Meeting archives, automated training sessions, meeting summaries and action items |
Media API | Real-time audio/video | Very high, 1-2 months | Live transcription, real-time meeting analysis and assistants |
Add-ons SDK | In-meeting UI extensions | Medium, 1-2 weeks | Document collaboration, polling/engagement features |
If you’re trying to build a SaaS app or workflow (like a CRM or ATS that pulls data from Google Meet conferences), you could do that with the REST API.
Here’s a quick walkthrough of what that would look like.
The REST API will help you:
Before integrating, you’ll need:
Choose your authentication method based on your use case:
Setting up authentication
# Google Meet API scopes (same for both authentication methods)
scopes = [
'https://www.googleapis.com/auth/meetings.space.readonly',
'https://www.googleapis.com/auth/meetings.space.created',
'https://www.googleapis.com/auth/meetings.space.settings', # Auto-recording
'https://www.googleapis.com/auth/drive.readonly' # Recordings access
]
# OAuth 2.0 - User authentication (user clicks "Allow")
from google_auth_oauthlib.flow import InstalledAppFlow
flow = InstalledAppFlow.from_client_secrets_file('credentials.json', scopes)
user_creds = flow.run_local_server(port=0)
# Service Account - Server authentication (no user interaction)
from google.oauth2 import service_account
service_creds = service_account.Credentials.from_service_account_file(
'service-account-key.json', scopes=scopes
)
The Google Meet REST API provides several endpoints for managing meetings and accessing data. Here are a few you’ll likely need:
REST API endpoints
url = 'https://meet.googleapis.com/v2/spaces'
data = {
"config": {
"autoRecording": True, # Automatically start recording
"autoTranscription": True # Generate transcripts
}
}
response = requests.post(url, headers=headers, json=data)
meeting_url = response.json().get('meetingUri')
# Retrieve recordings after meeting ends (with processing delays)
recordings_url = f'https://meet.googleapis.com/v2/conferenceRecords/{conference_id}/recordings'
response = requests.get(recordings_url, headers=headers)
for recording in response.json().get('recordings', []):
if recording.get('state') == 'FILE_GENERATED':
drive_file_id = recording.get('driveDestination', {}).get('file')
# Download via Google Drive API
# Webhook endpoint for real-time meeting events
@app.route('/webhook/meet', methods=['POST'])
def meet_webhook():
event = request.json
if event.get('eventType') == 'google.workspace.meet.participant.v2.joined':
participant_email = event.get('participant', {}).get('user', {}).get('email')
# Process participant data for your application
return jsonify({"status": "received"}), 200
You’ll quickly realize that there are issues that keep developers from using the REST API to build production apps that process high volumes of meeting data.
When building production SaaS applications, the Google Meet REST API’s limitations create significant engineering overhead. Developers spend months building workarounds for calendar mapping, handling inconsistent recording availability, and managing Google Drive storage failures. This engineering time could be better spent on core product features.
But a unified meeting API like Nylas gives developers a single integration that works across Google Meet, Zoom, and Microsoft Teams — even emails and calendars. This means:
In this quick example, let’s walk through using Nylas to integrate with add AI-powered sales call transcription to a CRM. We’ll use the Notetaker API to capture meeting recordings and transcripts from Google Meet calls to feed into your app.
That’s reliable, secure data to power your AI models and bring meeting intelligence to users.
Make sure you have this on hand:
First, set up your development environment with your Nylas API credentials
Set up your development environment
# Set environment variables for reuse
export NYLAS_API_KEY="<YOUR_NYLAS_API_KEY>"
Then authenticate users to connect their Google accounts for meeting access through an OAuth2.0 authentication flow. This will grant your app specific permissions and give you a Grant ID for that user. You can read more on our authentication process in our docs.
Authenticate users
import "dotenv/config";
import express from "express";
import Nylas from "nylas";
const config = {
clientId: process.env.NYLAS_CLIENT_ID,
callbackUri: "http://localhost:3000/oauth/exchange",
apiKey: process.env.NYLAS_API_KEY,
apiUri: process.env.NYLAS_API_URI,
};
const nylas = new Nylas({
apiKey: config.apiKey,
apiUri: config.apiUri,
});
const app = express();
const port = 3000;
// Route to initialize authentication
app.get("/nylas/auth", (req, res) => {
const authUrl = nylas.auth.urlForOAuth2({
clientId: config.clientId,
provider: "google",
redirectUri: config.callbackUri,
loginHint: "email_to_connect",
});
res.redirect(authUrl);
});
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
Deploy a bot to join and record specific Google Meet sessions.
Deploy a bot
curl --request POST \
--url "https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/notetakers" \
--header 'Accept: application/json, application/gzip' \
--header 'Authorization: Bearer <NYLAS_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"meeting_link": "https://meet.google.com/abc-defg-hij",
"name": "Sales Call Recorder"
}'
For automated deployment, integrate with your calendar to send bots to scheduled sales meetings.
Map bots to Google Calendar events
curl --request PUT \
--url 'https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/calendars/<CALENDAR_ID>' \
--header 'Accept: application/json, application/gzip' \
--header 'Authorization: Bearer <NYLAS_API_KEY>' \
--header 'Content-Type: application/json' \
--data '{
"notetaker": {
"name": "Sales Call Recorder",
"rules": {
"event_selection": ["external"],
"participant_filter": {
"participants_gte": 2
}
}
}
}'
Unlike the REST API, you can get production-ready Google Meet recordings for ad-hoc and scheduled meetings through a single Nylas endpoint. You can also get transcripts from Meet meetings complete with speaker diarization.
Retrieve recordings and transcripts after meetings complete
curl --request GET \
--url "https://api.us.nylas.com/v3/grants/<NYLAS_GRANT_ID>/notetakers/<NOTETAKER_ID>/media" \
--header 'Accept: application/json, application/gzip' \
--header 'Authorization: Bearer <NYLAS_API_KEY>'
The response includes both recording and transcript URLs with no dependency on host permissions, headless browser bot architecture, or additional transcription APIs.
You can also set up webhook notifications to get real-time updates on bot status and media availability.
Nylas sends multiple webhook events throughout the meeting lifecycle:
notetaker.created
: When bots are creatednotetaker.updated
: When bot statuses changes (scheduled → connecting → in_call → completed)notetaker.meeting_state
: For real-time meeting events (joined, left, failed_entry)notetaker.media
: When media files are processed and readynotetaker.deleted
: When a bot is cancelled or deletedSet up webhook notifications
app.post('/webhooks/nylas', (req, res) => {
const { type, data } = req.body;
if (type === 'notetaker.media' && data.object.state === 'available') {
const videoUrl = data.object.media.recording; // Video file
const transcriptUrl = data.object.media.transcript; // Transcript
// Process both video and transcript for CRM integration
processMediaForCRM(videoUrl, transcriptUrl, data.object.id);
}
res.status(200).send('OK');
});
Use the transcript and video recordings as data sources for your AI products and agents.
Extract sales insights from transcript data.
# Download transcript using the signed URL from webhook
curl --request GET \
--url "<TRANSCRIPT_URL_FROM_WEBHOOK>" \
--output "meeting_transcript.json"
In September 2025, Nylas will be launching built-in summaries and action items that will be made available in the /media endpoint. All you’ll need to do is turn on this feature with a simple API call to start automatically generating summaries and action items for all meetings the Notetaker meeting bot joins!
In summary, the Notetaker API beats the REST API for SaaS app integrations on a few key fronts:
And of course, with Nylas, you have a partner who specializes in building and maintaining integrations across meeting providers. We’ve experimented, failed, and learned a lot about Google Meet integrations in the process of shipping the Notetaker API. Our team of experts are ready to help so you don’t have to worry about integrations as you build your AI products and meeting features.
Factor | Google Meet REST API | Nylas Notetaker API |
---|---|---|
Programmatic recordings | Pre-configured meeting spaces that start recording when a user with the right permission joins | Reliable bots capture every meeting for users |
Easy authentication | Complex OAuth setup, multiple scopes | Simple OAuth, one flow across platforms |
Webhook updates | Basic participant events only | Full lifecycle bot updates + media-ready webhooks |
Transcripts | Inconsistent processing, audio-dependent quality | Built-in, diarized, production-ready |
Summaries and action items | Not available via API as a data source | (Coming soon) Auto-generated for all meetings and available via an API call |
Cross-platform support | Google Meet only | Google Meet, Zoom, Teams |
Calendar mapping | Error-prone, manual fixes needed if changes are made to calendar events | Automatic, calendar sync with the Nylas Calendar API |
Storage management | Dependent on Drive, failures possible | Signed URLs, no Drive dependency |
Takeaway | Heavy lift for reliable programmatic data retrieval, single-platform, unreliable at scale | Reliable and production-ready across the biggest meeting platforms (Meet, Teams, Zoom) |
How do I create a Google Meet link programmatically?
Use the REST API’s /v2/spaces
endpoint with your auth headers. You can set options like auto-recording or transcription when creating the meeting so that meetings are recorded when a user with the right permission joins.
Can I embed Google Meet directly into my app or website?
Not in the same way as Zoom or Teams. You can generate and share meeting links through the REST API, or build a Meet add-on for in-meeting extensions.
What OAuth scopes do I need?
At minimum, you’ll need meetings.space
for creating and managing meetings. If you want recordings or transcripts, add drive.readonly
for access to stored files.
How does authentication work on mobile?
Follow the same OAuth 2.0 flow, but store tokens securely using Keychain on iOS or EncryptedSharedPreferences on Android.
Can I customize the Google Meet interface?
Customization is limited. You can configure meeting settings (like auto-recording or participant permissions), but the Meet UI itself can’t be redesigned.
What are the main limitations of the Google Meet REST API?
Recordings can take 5–45 minutes to process, and may fail if the organizer’s Google Drive is full. There’s no way to guarantee programmatic recording, calendar mapping can break with event changes, and transcripts are often low quality without a separate transcription API.