Google Sheets, Calendar & Gmail

Connect a Google account once, and your app can write to Google Sheets, schedule Google Meet meetings on Google Calendar, and send email from Gmail

Overview

Google Sheets is built into Pentoggle as a first-class integration. Connect a Google account once, usually your own, as the app owner, via the business account connection, and your app can create a spreadsheet, append rows to it, read rows back, and work with an existing sheet the user selects via Google's file picker in the app.

The classic flow this powers: a form on your app that anyone can fill in (they can even sign in with Zoho first), with every submission landing live in your Google Sheet.

By default the app creates and owns its own spreadsheet on the first submission, headers and all, so there are no spreadsheet ids to find. This is the recommended path. To send responses into a sheet you already have, the user selects it via Google's file picker in the app; the app cannot open an arbitrary spreadsheet from a pasted id or URL, and sharing a sheet with the connected account is not sufficient on its own.

Note this is different from Sign in with Google, which is a login method. This integration is about your app working with spreadsheets; an app can use both independently.

What it supports

  • Connect once as the app owner: you connect your Google account a single time in Settings, and your app can then write into your sheets even from public pages or scheduled jobs where nobody is signed in. This is the usual setup for form-to-sheet flows.
  • Or let each user connect their own: alternatively, each signed-in user can connect their own Google account so the app works with their spreadsheets.
  • Responses saved automatically: every form submission (or other app action) adds a new row to your sheet, appearing within a second or two.
  • A tab for every form section: if your form is split into sections, each one gets its own tab in the sheet, and every response is filed into the right tab automatically, with no manual sorting.
  • New sheets created for you: your app can make a brand-new spreadsheet, complete with a tab and header row for each section, in your connected account, so you never have to set one up by hand.
  • Read your data back: the app can pull rows from a sheet to show in an admin view, or use a sheet as a simple, always-current source of content.
  • Safe from spreadsheet formulas: anything a visitor types is stored as plain text, so nobody can slip a live formula into your sheet through a form.
  • Works on a schedule too: combined with Scheduled tasks, your app can log a daily snapshot to a sheet or read one on a schedule.
  • Always connected: Pentoggle keeps your Google connection working in the background, so you never have to reconnect.

Meet scheduling & Gmail

The same Google connection also lets your app schedule Google Meet meetings and send email from Gmail. Each capability is opt-in: you request only the permissions your app actually uses.

  • Book a Meet in one step: your app creates a Google Calendar event with a Google Meet link attached, and Google sends its own native invite (with the join link and accept/decline buttons) to the attendee. You do not need Gmail for the invite itself.
  • List, reschedule, and cancel: the app can show upcoming meetings, move one to a new time, or cancel it, and attendees are notified automatically each time.
  • Send email from your own address: with Gmail connected, the app can send branded confirmations, reminders, or follow-ups from the connected account's real Gmail address, so replies come straight back to you.
  • Owner, business, or per-user: like Sheets, these work as your connected business account (for public booking pages and scheduled jobs) or as each signed-in user's own account.

A note on Gmail: the send permission is one of Google's sensitive scopes, not a restricted one, so it needs standard Google verification and no security assessment. Pentoggle's managed Google client already carries that verification, so sending works out of the box with nothing for you to set up. If sending from your own Gmail address is not essential, Pentoggle's built-in email feature sends confirmations and reminders too.

Apps you can build

  • Form builder with a Sheets backend — a Google Forms equivalent: visitors (optionally signed in with Zoho or Google) submit a form, and every response lands as a row in your Google Sheet in real time
  • Event or webinar registration — registrations flow into the sheet your operations team already works in; a scheduled job reads it back to send reminder emails
  • Lead capture for a sales team — a public inquiry form appends leads to the team's shared sheet, with a timestamp and source column, no CRM required
  • Field-survey collection — staff submit inspections or survey entries from their phones; each entry appends to a per-project spreadsheet tab
  • Sheet-driven dashboard — the app reads a sheet your team maintains (pricing, inventory, schedules) and renders it as a polished, always-current page
  • Expense or request tracker — employees file requests through the app; each one appends to the finance sheet, and an admin view reads back the latest rows
  • Demo or consultation booking — visitors pick a slot, the app creates a Google Meet event on your calendar, Google sends the invite, and a branded confirmation goes out from your Gmail

Example prompts

"Build a feedback form — name, email, rating, comments.
Save every submission to my Google Sheet."

"Visitors sign in with Zoho, fill the registration form,
and each response is added to my Google Sheet."

"Add an admin page that shows the latest 50 rows from
the responses spreadsheet."

"Every Monday at 9am, read last week's rows from the
sheet and email me a summary."

"Let visitors book a demo — they pick a time, create a
Google Meet on my calendar, and email them a confirmation
from my Gmail with the join link."

Setting up Google for your app

Google Sheets, Calendar, and sending email from Gmail all work out of the box. Pentoggle runs them on its own managed Google client, so there is no Google Cloud project to create, no Client ID or Secret to paste, and no consent screen to publish. You simply connect a Google account and start using it.

Connecting the account

Open your app's Settings → OAuth Providers → Google card. For form-to-sheet flows and public booking pages, click Business account → Connect and sign in with the Google account that owns the target resource (the spreadsheet or the calendar). Make sure every permission checkbox is ticked on Google's consent screen, since Google lets you uncheck individual permissions. Apps where each end-user connects their own Google account use the same one-click connect, with no setup either.

The card shows the connection's health and lets you reconnect or disconnect at any time. Staging and production each hold their own connection, so testing never touches your production sheet.

What about reading email? Sending is fully managed, but reading, searching, or organizing a mailbox uses Google's restricted scopes, which a shared client cannot carry without an annual security assessment. Those are not supported today; the connector is send-only. Full mailbox and full-Drive access remain on the roadmap.

How it works

  1. You (or a user) approve the connection on Google's consent screen, served by Pentoggle's managed Google client
  2. Pentoggle exchanges the code for tokens server-side and stores them encrypted; your app's frontend never sees them
  3. On the first submission, the app creates its spreadsheet (with column headers) in the connected account's Drive and remembers it, so you never hunt for a spreadsheet id. To use an existing sheet instead, the user selects it through Google's file picker in the app, which grants the app access to just that one file
  4. Public form submissions use the business connection, so they work with no signed-in user — the form function's own access policy is the guard rail
  5. Access tokens are refreshed automatically in the background; with a published consent screen, the connection persists until you revoke it

Limitations

  • Sheets, Calendar, and Gmail — Google Drive is not wrapped yet, and Gmail is send-only (no reading or searching mail). For Google login, use Sign in with Google
  • Sheets: append and read, not edit — updating or deleting existing rows and cell formatting are not supported yet; the sweet spot is collection (append) and display (read)
  • No availability lookup yet — Meet scheduling creates, lists, cancels, and reschedules events, but does not yet read a calendar's free/busy times to suggest open slots
  • Existing sheets are chosen through the file picker — to write into a sheet you already have, the user selects it via Google's file picker in the app; the app cannot open an arbitrary sheet from a pasted id or URL, and sharing a sheet with the connected account is not sufficient on its own
  • Gmail is send-only — sending email from the connected account is fully managed, but reading, searching, or labeling a mailbox uses Google's restricted scopes and is not supported yet
  • Google's per-minute quotas apply — the Sheets API allows roughly 60 requests per minute per user; ample for forms and dashboards, not for high-frequency streaming writes

Troubleshooting

  • "The connected Google account does not have access to this spreadsheet" — the app can only use sheets it created or that the user selected via the file picker in the app; sharing a sheet with the connected account is not enough. Have the user pick the sheet through the file picker in the app, or let the app create its own (the default)
  • "No spreadsheet with that id" — the sheet the app recorded was deleted, or a stale id is stored; let the app recreate its sheet, or have the user re-select the sheet via the file picker in the app
  • Missing-permission error on every call — the Drive file permission wasn't granted; hit Reconnect in Settings and make sure the permission labeled "See, edit, create, and delete only the specific Google Drive files you use with this app" is ticked on Google's consent screen
  • Meeting invite did not arrive — confirm the attendee email is correct; Google Calendar sends the invite itself

The errors below only apply if you registered your own Google client for Gmail send (Sheets and Calendar never hit them):

  • "redirect_uri_mismatch" — the URI in your own OAuth client must be exactly https://pentoggle.com/api/baas/oauth/google/callback. No trailing slash, no http://, no query string
  • "Error 403: org_internal" — your consent screen is Internal but the connecting account isn't in the organization that owns your Cloud project. Recreate the project inside the org, or switch the consent screen to External and add yourself as a test user
  • "Access blocked: app has not completed verification" — the connecting account isn't in your consent screen's Test users list, or continue past the unverified-app notice
  • "Gmail API is not enabled" — enable the Gmail API in your Cloud project under APIs & Services → Library
  • Email did not arrive — confirm the gmail.send permission was ticked on reconnect and the Gmail API is enabled
  • Connection worked last week, fails today — your consent screen is in Testing status and the 7-day expiry hit; reconnect, and publish the consent screen to stop this recurring