1. Create Google Cloud Project
Go to Google Cloud Console.
Create a new project or select an existing one.
Enable the following APIs:
Google Drive API
Google Sheets API
2. Configure OAuth Consent Screen
In the left sidebar, go to APIs & Services > OAuth consent screen.
Choose External for User Type and click Create.
Fill in the required details (App name, Support email, Developer email).
Add the following Scopes:
.../auth/drive
.../auth/drive.file
.../auth/spreadsheets
Save and continue through the remaining steps.
3. Create OAuth Credentials
Go to APIs & Services > Credentials.
Click + Create Credentials > OAuth Client ID.
Choose Web Application.
Add these to Authorized Redirect URIs (found in your Bubble plugin settings):
https://yourapp.bubbleapps.io/api/1.1/oauth_redirectAlso add your Live version URL if applicable.
Save and copy your Client ID and Client Secret.
4. Add Credentials to Bubble Plugin
Open the Bubble plugin editor for your app.
In the plugin settings, paste:
Your Client ID into the appropriate field.
Your Client Secret in the client_secret field.
Fill in:
Token endpoint:
https://oauth2.googleapis.com/tokenAuthorization endpoint:
https://accounts.google.com/o/oauth2/authUser Info endpoint:
https://www.googleapis.com/oauth2/v2/userinfoScope: email
https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/spreadsheetsSet the OAuth2 type to: User-Agent Flow.
5. Using the Plugin in Workflows
After authentication, use the following actions from the plugin in your Bubble workflows:
Create File – Create a new blank file in the user's Google Drive.
Upload File – Upload a file with MIME type and base64 data.
Copy File – Make a duplicate of a specified file.
List Files – Retrieve a list of Drive files with filtering.
Delete File – Remove a file by its ID.
Update Spreadsheet – Push values to a specified range in a Sheet.
Update Document – Perform text edits inside a Google Doc.
You will need to pass:
The file ID (from actions like "List Files" or "Create File").
Any content or value objects, often passed as JSON for updates.