Read, upsert and format spreadsheet data from any Windmill script, flow or app.
Set up in 2 steps
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.
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.
Upsert Row
Update Cell
Merge Cells
List Spreadsheets
Insert Rows or Columns
Get Cell
Format Cells
Delete Rows
Add Column
New Row
Update Row
Find Rows
Get Spreadsheet
Add Rows
Delete Worksheet
Clear All Values
Create Worksheet
Clear Row
Get Values in Range
List Worksheets
Copy Worksheet
Create Spreadsheet
Update Values
Clear Columns
Get Values
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.
gsheets
View raw schema →| Field | Type | Required | What it is |
|---|---|---|---|
| token | string | Yes | The 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.