Google Sheets

Productivity OAuth Windmill docs

Read, upsert and format spreadsheet data from any Windmill script, flow or app.

Set up in 2 steps

1

Connect from the Resources page

Open Resources, click Add a resource/API and pick gsheets from the OAuth APIs list. Click Connect and sign in with the Google account that owns the spreadsheets, then name the resource and save it.

2

Run your first script

Fork any script below and point it at a sheet. The spreadsheet id is the long segment in its URL, between /d/ and /edit.

Scripts

Building blocks, if none of the projects above fit. Fork one, run it, or call it as a step inside your own flow.

Submit a script →

Trigger flows from Google Sheets

Google Sheets is not only a destination. These inbound paths are supported today.

New row (scheduled poll)

The New Row trigger script polls a worksheet and returns the rows appended since its last run. It polls because Google has no row-level push for Sheets. To run it, open a flow, add a trigger and choose Scheduled Poll, then pick the trigger script and an interval. Windmill puts the script first in the flow with a loop after it, so the steps you add run once per new item. The cursor is saved per flow: two flows polling the same source each get every item, and test runs keep a cursor of their own.

Resource type

The shape of the credential every script on this page expects.

FieldTypeRequiredWhat it is
tokenstringYesThe OAuth token, refreshed if necessary

Questions

Which spreadsheets can Windmill reach?

Every spreadsheet the connected account can open. The default connection asks for the spreadsheets scope, which covers reading and writing but nothing else in Drive. List Spreadsheets searches Drive, so it also needs a Drive scope such as drive.metadata.readonly ticked when you connect.

Can I create the resource by hand instead of connecting?

Nothing stops you — the resource is a single token field. But Google's access tokens last about an hour, and only the OAuth flow returns the refresh token that renews them, which is why this page has no CLI lane.

There is no Connect button on my instance

Self-hosted instances need a Google OAuth client configured once by an admin before the tile appears.