To integrate Replit with Google Meet, use the Google Calendar API with OAuth 2.0 to create Calendar events with Google Meet conference links attached. Google Meet does not have its own standalone REST API — meetings are created by adding a conferenceData request to a Google Calendar event. Store your OAuth credentials in Replit Secrets (lock icon 🔒) and use a server-side OAuth flow to generate access tokens. Deploy as Autoscale or Reserved VM for webhook-enabled applications.
Create Google Meet Links Programmatically from Your Replit App
Google Meet is deeply integrated with Google Calendar — unlike Zoom or Webex, there is no standalone Google Meet REST API for creating meetings. Instead, you create a Google Calendar event and request a Meet conference link by setting conferenceData in the event payload. Google automatically generates a unique meet.google.com link, adds it to the calendar event, and shares it with all invited attendees. This architecture means that creating, updating, and deleting Meet meetings is really creating, updating, and deleting Calendar events.
The authentication model is OAuth 2.0, which is more complex than simple API key authentication. You must create a Google Cloud project, enable the Calendar API, configure OAuth consent screen settings, and generate OAuth 2.0 client credentials. Users (or service accounts for automated systems) must authorize your application to access their Google Calendar. The OAuth flow produces an access token (valid for one hour) and a refresh token (long-lived) that your Replit server stores in Replit Secrets and uses to obtain new access tokens without requiring re-authorization.
For automated meeting creation (scheduling without a user completing OAuth each time), use a Google service account instead of user OAuth. Service accounts can be granted domain-wide delegation in Google Workspace, allowing them to create calendar events on behalf of any user in the organization. This is the right approach for building scheduling automation tools, booking systems, or meeting creation triggered by webhooks from other services.
Integration method
Google Meet integrates with Replit through the Google Calendar API using OAuth 2.0 authentication. You create a Google Cloud project, enable the Google Calendar API, and configure OAuth 2.0 credentials. Your Replit server handles the OAuth flow to obtain access tokens, then calls the Calendar API with a conferenceDataVersion parameter and conferenceSolutionKey set to 'hangoutsMeet' to generate Google Meet links automatically. Access tokens expire after one hour and must be refreshed using the refresh token stored securely in Replit Secrets.
Prerequisites
- A Replit account with a Node.js or Python Repl ready
- A Google account and access to Google Cloud Console (console.cloud.google.com)
- A Google Cloud project with the Google Calendar API enabled
- OAuth 2.0 client credentials (Client ID and Client Secret) downloaded from Google Cloud Console
- For service account use: a Google Workspace account with admin access to grant domain-wide delegation
Step-by-step guide
Create a Google Cloud Project and Enable the Calendar API
Create a Google Cloud Project and Enable the Calendar API
Google Meet integration requires a Google Cloud project with the Calendar API enabled. Navigate to console.cloud.google.com and create a new project (or select an existing one). Click 'Enable APIs and Services', search for 'Google Calendar API', and enable it. Next, configure the OAuth consent screen: in the left sidebar go to APIs & Services → OAuth consent screen. Select 'External' for user type (or 'Internal' for Google Workspace-only apps). Fill in the application name, support email, and developer contact email. Under Scopes, add the Google Calendar scope: https://www.googleapis.com/auth/calendar (full access) or https://www.googleapis.com/auth/calendar.events (events only). Add test users if your app is in development mode. Create OAuth 2.0 credentials: go to APIs & Services → Credentials → Create Credentials → OAuth client ID. Select 'Web application' as the application type. Add your Replit development URL and deployed URL to the 'Authorized redirect URIs' (e.g., https://yourapp.replit.app/auth/callback). Download the JSON credentials file — you will extract the client_id and client_secret from it. Store the credentials in Replit Secrets (lock icon 🔒): GOOGLE_CLIENT_ID: the client_id from the downloaded JSON. GOOGLE_CLIENT_SECRET: the client_secret from the JSON. GOOGLE_REDIRECT_URI: your OAuth callback URL (https://yourapp.replit.app/auth/callback). After the first OAuth flow completes, you will also store the refresh token as GOOGLE_REFRESH_TOKEN.
1// check-google-secrets.js2const required = ['GOOGLE_CLIENT_ID', 'GOOGLE_CLIENT_SECRET', 'GOOGLE_REDIRECT_URI'];3for (const key of required) {4 if (!process.env[key]) {5 throw new Error(`Missing: ${key}. Add it in Replit Secrets (lock icon 🔒).`);6 }7}8console.log('Google OAuth secrets configured.');9console.log('Client ID:', process.env.GOOGLE_CLIENT_ID.slice(0, 20) + '...');10console.log('Redirect URI:', process.env.GOOGLE_REDIRECT_URI);Pro tip: Google OAuth consent screen in 'Testing' mode only allows up to 100 test users. Add your own Google account as a test user during development. When you are ready to go live, submit for Google verification to remove the test-user restriction.
Expected result: The Google Cloud project has the Calendar API enabled, OAuth consent screen is configured, and OAuth credentials are stored in Replit Secrets. The verification script runs without errors.
Implement the OAuth 2.0 Authorization Flow with Node.js
Implement the OAuth 2.0 Authorization Flow with Node.js
The OAuth 2.0 flow for Google has three steps: redirect the user to Google's authorization URL to grant permissions, handle the callback where Google returns an authorization code, and exchange the code for access and refresh tokens. Store the refresh token permanently in Replit Secrets — it is a long-lived credential that lets you get new access tokens without requiring the user to re-authorize every hour. Install the Google APIs Node.js library: npm install googleapis in the Shell. The googleapis library handles token exchange, automatic token refresh, and all API calls through a consistent interface. The OAuth flow generates a one-time authorization code (in the redirect callback URL), which you exchange for an access_token (expires in 3600 seconds) and a refresh_token (does not expire unless revoked). The access token is used in API requests; the refresh token is used to generate new access tokens silently. After the initial OAuth flow, your app should only need the refresh token stored in Secrets — the library handles refreshing automatically. IMPORTANT: The refresh token is only returned on the first authorization. If you lose it, you must revoke the authorization at myaccount.google.com/permissions and re-run the OAuth flow. Store it in GOOGLE_REFRESH_TOKEN in Replit Secrets immediately after the initial authorization.
1// google-auth.js — OAuth 2.0 flow for Google Calendar API2const { google } = require('googleapis');3const express = require('express');4const app = express();56const oauth2Client = new google.auth.OAuth2(7 process.env.GOOGLE_CLIENT_ID,8 process.env.GOOGLE_CLIENT_SECRET,9 process.env.GOOGLE_REDIRECT_URI10);1112// If we have a refresh token already, set it up13if (process.env.GOOGLE_REFRESH_TOKEN) {14 oauth2Client.setCredentials({15 refresh_token: process.env.GOOGLE_REFRESH_TOKEN16 });17 console.log('Google OAuth: using stored refresh token');18}1920// Step 1: Redirect user to Google's authorization page21app.get('/auth/google', (req, res) => {22 const authUrl = oauth2Client.generateAuthUrl({23 access_type: 'offline', // Request a refresh token24 prompt: 'consent', // Force consent to get refresh token every time25 scope: [26 'https://www.googleapis.com/auth/calendar.events',27 'https://www.googleapis.com/auth/calendar.readonly'28 ]29 });30 res.redirect(authUrl);31});3233// Step 2: Handle the OAuth callback — exchange code for tokens34app.get('/auth/callback', async (req, res) => {35 const { code, error } = req.query;36 if (error) return res.status(400).send(`Authorization denied: ${error}`);3738 try {39 const { tokens } = await oauth2Client.getToken(code);40 oauth2Client.setCredentials(tokens);4142 console.log('=== SAVE THESE TO REPLIT SECRETS ===');43 console.log('GOOGLE_REFRESH_TOKEN:', tokens.refresh_token);44 console.log('====================================');4546 // In production: store tokens.refresh_token in your database47 // For setup: manually copy it to Replit Secrets as GOOGLE_REFRESH_TOKEN48 res.send('Authorization successful! Check the console for your refresh token. Add it to Replit Secrets as GOOGLE_REFRESH_TOKEN.');49 } catch (err) {50 console.error('Token exchange error:', err.message);51 res.status(500).send('Authorization failed. Check the console for details.');52 }53});5455module.exports = { oauth2Client };5657app.listen(3000, '0.0.0.0', () => {58 console.log('Auth server running. Visit /auth/google to authorize.');59});Pro tip: Set prompt: 'consent' in generateAuthUrl to force Google to show the consent screen every time during initial setup — this ensures you receive a refresh token. Without prompt: 'consent', Google may skip the consent screen for previously authorized apps and not return a refresh token.
Expected result: Visiting /auth/google in your browser redirects to Google's login. After logging in and granting permissions, Google redirects back to /auth/callback and the console shows your refresh token. Copy it to Replit Secrets as GOOGLE_REFRESH_TOKEN.
Create Google Meet Events via the Calendar API
Create Google Meet Events via the Calendar API
With OAuth credentials in place, creating Google Meet links is straightforward — create a Calendar event with conferenceData set to request a Meet conference. The Calendar API returns the event with a generated meet.google.com join URL in the conferenceData.entryPoints array. The conferenceDataVersion=1 query parameter is required — without it, the Calendar API ignores the conferenceData request and creates a plain calendar event without a Meet link. Attendees are specified in the attendees array with their email addresses. Google Calendar automatically sends invitation emails to all attendees if sendUpdates is set to 'all'. The invitees receive an email with the calendar event and the Meet link. For Python, the google-auth and google-api-python-client libraries provide the same functionality. Install with pip install google-auth google-auth-oauthlib google-api-python-client in the Shell.
1// create-meet.js — Create Google Calendar event with Meet link2const { google } = require('googleapis');34const oauth2Client = new google.auth.OAuth2(5 process.env.GOOGLE_CLIENT_ID,6 process.env.GOOGLE_CLIENT_SECRET,7 process.env.GOOGLE_REDIRECT_URI8);910// Load stored refresh token11oauth2Client.setCredentials({12 refresh_token: process.env.GOOGLE_REFRESH_TOKEN13});1415const calendar = google.calendar({ version: 'v3', auth: oauth2Client });1617async function createMeetEvent({18 title,19 description = '',20 startDateTime, // ISO 8601: '2026-04-01T14:00:00-05:00'21 endDateTime, // ISO 8601: '2026-04-01T15:00:00-05:00'22 attendeeEmails = [],23 timeZone = 'America/New_York'24}) {25 const event = {26 summary: title,27 description,28 start: { dateTime: startDateTime, timeZone },29 end: { dateTime: endDateTime, timeZone },30 attendees: attendeeEmails.map(email => ({ email })),31 conferenceData: {32 createRequest: {33 requestId: `meet-${Date.now()}`, // Unique ID to prevent duplicate creation34 conferenceSolutionKey: { type: 'hangoutsMeet' }35 }36 }37 };3839 const response = await calendar.events.insert({40 calendarId: 'primary',41 requestBody: event,42 conferenceDataVersion: 1, // REQUIRED to generate Meet link43 sendUpdates: 'all' // Send invitation emails to attendees44 });4546 const createdEvent = response.data;47 const meetLink = createdEvent.conferenceData?.entryPoints48 ?.find(ep => ep.entryPointType === 'video')?.uri;4950 console.log('Event created:', createdEvent.id);51 console.log('Meet link:', meetLink);52 console.log('Calendar link:', createdEvent.htmlLink);5354 return {55 eventId: createdEvent.id,56 meetLink,57 calendarLink: createdEvent.htmlLink,58 startDateTime: createdEvent.start.dateTime59 };60}6162// Example: create a meeting in 1 hour63(async () => {64 const start = new Date(Date.now() + 3600000).toISOString();65 const end = new Date(Date.now() + 7200000).toISOString();66 const meeting = await createMeetEvent({67 title: 'Product Demo',68 description: 'Demo of the new feature set',69 startDateTime: start,70 endDateTime: end,71 attendeeEmails: ['client@example.com'],72 timeZone: 'America/New_York'73 });74 console.log('Meeting details:', meeting);75})();7677module.exports = { createMeetEvent };Pro tip: Each conferenceData.createRequest must have a unique requestId to prevent duplicate Meet links being created if the API call is retried. Using Date.now() or a UUID ensures uniqueness across requests.
Expected result: Running the script creates a Calendar event visible in Google Calendar. The console shows the Google Meet link (meet.google.com/xxx-xxxx-xxx), event ID, and calendar link. The attendee receives an invitation email with the Meet link.
Create Google Meet Events with Python
Create Google Meet Events with Python
The Python implementation uses the google-auth and google-api-python-client libraries to authenticate and call the Calendar API. The pattern is identical to Node.js: initialize an OAuth2 credentials object with the stored refresh token, build the Calendar service client, and call events().insert() with conferenceDataVersion=1. Install the required packages: pip install google-auth google-auth-oauthlib google-api-python-client in the Shell. The Python API returns the created event as a dictionary. The Meet link is nested at response['conferenceData']['entryPoints'][0]['uri'] for video entry points. Always check that conferenceData exists in the response — if conferenceDataVersion was not set or there was an error generating the Meet link, the key may be absent. For Flask applications, wrap the calendar functions as route handlers. For background jobs (sending meeting invites from a cron-like scheduled task), call the functions directly from the scheduled code.
1# create_meet.py — Create Google Meet events with Python on Replit2import os3from google.oauth2.credentials import Credentials4from google.auth.transport.requests import Request5from googleapiclient.discovery import build6from datetime import datetime, timedelta, timezone78def get_calendar_service():9 """Initialize and return an authenticated Google Calendar service."""10 creds = Credentials(11 token=None,12 refresh_token=os.environ['GOOGLE_REFRESH_TOKEN'],13 token_uri='https://oauth2.googleapis.com/token',14 client_id=os.environ['GOOGLE_CLIENT_ID'],15 client_secret=os.environ['GOOGLE_CLIENT_SECRET'],16 scopes=['https://www.googleapis.com/auth/calendar.events']17 )18 # Auto-refresh the access token if expired19 if creds.expired or not creds.valid:20 creds.refresh(Request())2122 return build('calendar', 'v3', credentials=creds)2324def create_meet_event(25 title: str,26 start_dt: datetime,27 end_dt: datetime,28 attendee_emails: list = None,29 description: str = '',30 time_zone: str = 'America/New_York'31) -> dict:32 """Create a Google Calendar event with a Google Meet link."""33 service = get_calendar_service()3435 event = {36 'summary': title,37 'description': description,38 'start': {39 'dateTime': start_dt.isoformat(),40 'timeZone': time_zone41 },42 'end': {43 'dateTime': end_dt.isoformat(),44 'timeZone': time_zone45 },46 'attendees': [{'email': e} for e in (attendee_emails or [])],47 'conferenceData': {48 'createRequest': {49 'requestId': f'meet-{int(start_dt.timestamp())}',50 'conferenceSolutionKey': {'type': 'hangoutsMeet'}51 }52 }53 }5455 result = service.events().insert(56 calendarId='primary',57 body=event,58 conferenceDataVersion=1, # Required to generate Meet link59 sendUpdates='all'60 ).execute()6162 # Extract Meet link from entry points63 meet_link = None64 entry_points = result.get('conferenceData', {}).get('entryPoints', [])65 for ep in entry_points:66 if ep.get('entryPointType') == 'video':67 meet_link = ep.get('uri')68 break6970 print(f'Event created: {result["id"]}')71 print(f'Meet link: {meet_link}')7273 return {74 'event_id': result['id'],75 'meet_link': meet_link,76 'calendar_link': result.get('htmlLink'),77 'start': result['start']['dateTime']78 }7980if __name__ == '__main__':81 # Create a meeting starting in 1 hour for 1 hour82 now = datetime.now(timezone.utc)83 start = now + timedelta(hours=1)84 end = now + timedelta(hours=2)85 meeting = create_meet_event(86 title='Demo Call',87 start_dt=start,88 end_dt=end,89 attendee_emails=['client@example.com']90 )91 print('Meeting created:', meeting)Pro tip: The Python google-auth library refreshes the access token automatically when you call creds.refresh(Request()). You do not need to manage token expiry manually — just always call this before building the service if you are unsure about token validity.
Expected result: Running python create_meet.py creates a Google Calendar event and prints the Meet link. The event appears in Google Calendar with a Google Meet join button for all attendees.
Deploy and Build a Meeting Creation API
Deploy and Build a Meeting Creation API
Wrap the calendar functions in an Express or Flask server to expose a meeting creation API that your frontend or other services can call. This server-side API handles the Google OAuth complexity transparently — callers simply POST meeting details and receive the Meet link in response. For deployment, use Autoscale for a low-traffic meeting creation API (event-driven, scales to zero when idle). Use Reserved VM if you need guaranteed low latency for real-time booking flows where users expect immediate confirmation. After deploying, update your Google Cloud Console: go to APIs & Services → Credentials → your OAuth client → add the deployed URL to Authorized redirect URIs. This is required if any OAuth flows will occur after deployment (relevant if you are implementing per-user OAuth rather than a single service account). For high-volume meeting creation (e.g., scheduling thousands of meetings automatically), consider using a Google service account with domain-wide delegation instead of user OAuth. Service accounts do not require user interaction to authorize and can create events on behalf of any user in a Google Workspace organization.
1// meet-server.js — Express API for creating Google Meet events2const express = require('express');3const { google } = require('googleapis');4const app = express();5app.use(express.json());67const oauth2Client = new google.auth.OAuth2(8 process.env.GOOGLE_CLIENT_ID,9 process.env.GOOGLE_CLIENT_SECRET,10 process.env.GOOGLE_REDIRECT_URI11);12oauth2Client.setCredentials({ refresh_token: process.env.GOOGLE_REFRESH_TOKEN });13const calendar = google.calendar({ version: 'v3', auth: oauth2Client });1415// POST /meetings — create a meeting with Meet link16app.post('/meetings', async (req, res) => {17 try {18 const { title, startDateTime, endDateTime, attendees = [], description = '', timeZone = 'UTC' } = req.body;19 if (!title || !startDateTime || !endDateTime) {20 return res.status(400).json({ error: 'title, startDateTime, and endDateTime are required' });21 }2223 const event = {24 summary: title,25 description,26 start: { dateTime: startDateTime, timeZone },27 end: { dateTime: endDateTime, timeZone },28 attendees: attendees.map(email => ({ email })),29 conferenceData: {30 createRequest: {31 requestId: `meet-${Date.now()}`,32 conferenceSolutionKey: { type: 'hangoutsMeet' }33 }34 }35 };3637 const response = await calendar.events.insert({38 calendarId: 'primary',39 requestBody: event,40 conferenceDataVersion: 1,41 sendUpdates: 'all'42 });4344 const meetLink = response.data.conferenceData?.entryPoints45 ?.find(ep => ep.entryPointType === 'video')?.uri;4647 res.status(201).json({48 eventId: response.data.id,49 meetLink,50 calendarLink: response.data.htmlLink51 });52 } catch (err) {53 console.error('Calendar API error:', err.message);54 res.status(500).json({ error: err.message });55 }56});5758// DELETE /meetings/:eventId — cancel a meeting59app.delete('/meetings/:eventId', async (req, res) => {60 try {61 await calendar.events.delete({62 calendarId: 'primary',63 eventId: req.params.eventId,64 sendUpdates: 'all'65 });66 res.json({ deleted: true, eventId: req.params.eventId });67 } catch (err) {68 res.status(500).json({ error: err.message });69 }70});7172app.listen(3000, '0.0.0.0', () => console.log('Meet API server running on port 3000'));Pro tip: Store meeting event IDs in your application database when creating them. You will need the event ID to update or delete the meeting later — the Calendar API does not provide a lookup by title or attendee without listing all events.
Expected result: POST /meetings with title, startDateTime, endDateTime, and attendees returns a 201 response with eventId, meetLink, and calendarLink. The meeting appears in Google Calendar and invitees receive email invitations.
Common use cases
Automated Meeting Scheduler
Build a booking system that creates Google Meet links automatically when users book appointments. When a booking is confirmed in your app, the Replit server calls the Calendar API to create an event with a Meet link, sends the link to both the host and the attendee, and stores the event ID for future updates or cancellations.
Build an appointment booking API that creates a Google Calendar event with a Google Meet link when a booking is submitted, emails the Meet link to both the host and client, and returns the event ID for tracking cancellations.
Copy this prompt to try it in Replit
Team Standup and Meeting Bot
Automatically create recurring Google Meet meetings for team standups, sprints, or project kickoffs. The Replit server accepts a meeting request (title, attendee emails, recurrence rule) and creates a recurring calendar event with a Meet link that all attendees receive via Google Calendar invitation emails.
Create an API endpoint that accepts meeting details (title, attendee list, start time, duration, recurrence) and creates a recurring Google Calendar event with a Meet link, returning the join URL for display in a team dashboard.
Copy this prompt to try it in Replit
CRM-Integrated Meeting Creation
Trigger Google Meet creation directly from your CRM when a deal reaches a key stage (demo request, proposal review, contract signing). The Replit middleware receives the CRM webhook, creates a Calendar event with Meet link for the sales rep and prospect, and posts the meeting details back into the CRM deal record.
Build a webhook receiver that triggers when a CRM deal moves to 'Demo Scheduled' stage, creates a Google Calendar event with a Meet link for the sales rep and prospect, and updates the CRM deal with the meeting URL and event ID.
Copy this prompt to try it in Replit
Troubleshooting
Google Calendar event is created but conferenceData is absent — no Meet link in the response
Cause: The conferenceDataVersion=1 parameter was not included in the insert request, or the Google account creating the event does not have Google Meet enabled (some free Google accounts have limitations).
Solution: Ensure conferenceDataVersion: 1 is passed as a query parameter in the events.insert() call (not in the request body). Verify the Google account has Google Meet available — Google Workspace accounts always have Meet, but some legacy free accounts may have restrictions. Check the Google Cloud Console to confirm the Calendar API is properly enabled.
1// Correct: conferenceDataVersion as query param, not in body2const response = await calendar.events.insert({3 calendarId: 'primary',4 requestBody: event, // conferenceData goes here5 conferenceDataVersion: 1 // THIS must be a query parameter6});OAuth error: 'invalid_grant' — refresh token is invalid or expired
Cause: The refresh token stored in GOOGLE_REFRESH_TOKEN has been revoked. This happens when the user revokes app access at myaccount.google.com/permissions, when there are more than 50 refresh tokens for the same app, or if the OAuth consent screen app is deleted and recreated.
Solution: Delete the GOOGLE_REFRESH_TOKEN secret from Replit, re-run the OAuth flow at /auth/google to generate a new authorization and capture the new refresh token, and update GOOGLE_REFRESH_TOKEN in Replit Secrets with the new value.
Error 403: 'The caller does not have permission' when calling Calendar API
Cause: The OAuth scope granted does not include calendar event creation, or the calendar being accessed (calendarId) belongs to a different Google account than the authenticated user.
Solution: Verify the OAuth scope includes https://www.googleapis.com/auth/calendar.events or https://www.googleapis.com/auth/calendar. Re-run the OAuth flow with the correct scope. Use calendarId: 'primary' to always target the authenticated user's primary calendar.
1// Ensure correct scope is requested in OAuth flow2const authUrl = oauth2Client.generateAuthUrl({3 access_type: 'offline',4 prompt: 'consent',5 scope: ['https://www.googleapis.com/auth/calendar.events'] // Must include this6});OAuth redirect fails: 'redirect_uri_mismatch' error from Google
Cause: The GOOGLE_REDIRECT_URI in Replit Secrets does not exactly match one of the Authorized redirect URIs configured in Google Cloud Console OAuth credentials. Even a trailing slash difference causes this error.
Solution: In Google Cloud Console → APIs & Services → Credentials → your OAuth client, verify the Authorized redirect URIs list includes your exact Replit URL (e.g., https://yourapp.replit.app/auth/callback). Add both your development and deployed URLs. The URI must match character for character including protocol, domain, and path.
Best practices
- Store GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, and GOOGLE_REFRESH_TOKEN in Replit Secrets (lock icon 🔒) — refresh tokens are long-lived credentials equivalent to a password for the user's Google account
- Always include conferenceDataVersion: 1 as a query parameter (not in the request body) when creating events — without it, Google Meet links are never generated
- Use unique requestId values in conferenceData.createRequest (e.g., combining timestamp and a UUID) to prevent duplicate Meet links if API calls are retried
- Store calendar event IDs in your database when creating meetings — you need them to update or cancel meetings, and the Calendar API does not easily reverse-lookup by title
- Send sendUpdates: 'all' when creating events with attendees so Google automatically emails invitations — do not build your own email system for this
- For automated meeting creation without user OAuth interaction, use a Google service account with domain-wide delegation instead of user OAuth tokens
- Handle token refresh errors gracefully — log them and trigger re-authorization rather than crashing, since refresh tokens can be revoked at any time by the user
- Deploy as Autoscale for meeting creation APIs — the workload is event-driven and Autoscale scales to zero when idle, keeping costs low
Alternatives
Zoom has a dedicated REST API for creating meetings directly (without going through a calendar service), making programmatic meeting management simpler and more feature-rich than Google Meet's Calendar API approach.
Webex offers a dedicated meetings REST API that lets you create, list, and manage meetings without Calendar as an intermediary, which is better for enterprise environments already using Cisco infrastructure.
GoToMeeting provides a REST API for meeting scheduling with enterprise-focused controls like registration forms and co-organizer management, worth considering for formal webinar-style meetings.
Frequently asked questions
Does Google Meet have its own REST API?
No — Google Meet does not have a standalone REST API for creating or managing meetings. Google Meet links are created through the Google Calendar API by setting conferenceData with a conferenceSolutionKey of 'hangoutsMeet' in a Calendar event. The Google Meet REST API (beta as of early 2024) focuses on conference record retrieval (past meeting data) rather than meeting creation.
How do I store Google OAuth credentials securely in Replit?
Click the lock icon (🔒) in the Replit sidebar and add GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REDIRECT_URI, and GOOGLE_REFRESH_TOKEN as separate secrets. The refresh token is the most sensitive — it grants long-term access to the Google Calendar. Never put it in code files or commit it to version control.
Can I create Google Meet links without a Google Workspace account?
Yes, personal Google accounts (gmail.com) can create Google Meet links through the Calendar API, though some enterprise Meet features (like recording or noise cancellation) require Google Workspace. For automated service account use (creating meetings without user interaction), you need a Google Workspace account with admin access to configure domain-wide delegation.
Why does my Google OAuth refresh token stop working?
Google revokes refresh tokens when: the user revokes your app's access in their Google Account settings, your app has more than 50 refresh tokens per user (Google automatically invalidates the oldest), or your OAuth app's credentials are deleted and recreated. If your refresh token stops working, re-run the OAuth authorization flow and update GOOGLE_REFRESH_TOKEN in Replit Secrets with the new token.
What deployment type should I use for a Google Meet integration on Replit?
Autoscale works well for most Google Meet integration scenarios — meeting creation is event-driven (triggered by user actions or webhooks), and Autoscale scales to zero when idle. If your app handles real-time booking flows where users expect immediate Meet link generation (e.g., a live scheduling widget), the 1-3 second cold start on Autoscale is acceptable since Calendar API calls take that long anyway.
How do I cancel or update a Google Meet meeting from Replit?
Use the Calendar API events.delete() method with the event ID to cancel a meeting (this also removes it from all attendees' calendars and sends cancellation notifications if sendUpdates is set to 'all'). For updates (changing time, adding attendees), use events.patch() with only the fields you want to change. Always store the event ID in your database when creating meetings, as you need it for subsequent operations.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation