The google-sheets connector reads the spreadsheets you name. Every tab becomes its own record type, and the first row of a tab supplies the column names.
| Connector name | google-sheets |
| Products | Records |
| Credentials | The portal's Connect button, or a Google OAuth client and a refresh token |
| Scopes | spreadsheets.readonly and drive.metadata.readonly |
| Status | Preview: tested against Google's documented responses, not yet on a live account |
What it pulls
One record per non-empty row of each grid tab, under the type <spreadsheet title>__<tab> in lower case (client_billing_2026__invoices). Each record keeps the row number in _row, the spreadsheet id in _spreadsheet_id and the tab name in _sheet. Empty header cells become column_<n>; a repeated header gets _2, _3. Chart and object tabs are skipped.
Values come as Sheets stores them: numbers as numbers, dates as the text you see.
Credentials
Use an OAuth client with both scopes and give the SDK clientId, clientSecret and refreshToken. The account must be able to view each spreadsheet.
Or skip the tokens: click Connect next to Google Sheets in the portal (Settings → Connected systems), then run datayield connect google-sheets --broker -o spreadsheetIds=....
Connect
datayield connect google-sheets -o spreadsheetIds=1AbC...,1XyZ... \
-o clientId=<client id> -o clientSecret=env:GOOGLE_CLIENT_SECRET -o refreshToken=env:GOOGLE_REFRESH_TOKENOptions
| Option | Required | Meaning |
|---|---|---|
spreadsheetIds |
yes | Spreadsheet ids, separated by commas: the long part of the URL between /d/ and /edit |
clientId, clientSecret, refreshToken |
yes, or accessToken |
The OAuth client and a refresh token |
accessToken |
instead of the above | A current access token, for a one-off run. It expires within an hour. |
New records on each run
A spreadsheet that has not changed since the last successful run is skipped. A changed one is sent whole, because Sheets records no change time per row; match rows across months on _row or a column of your own.
Google allows 60 reads a minute per user. The SDK stays under that and waits when Google asks it to.