Skip to content
Docs
Docs & knowledge

Google Sheets

Let hires read ranges in Google Sheets and, if you allow it, add rows to them.

Explore 3 actions and their permissionsExact inputs, sign-in scopes, access limits and approval rules.

With Google Sheets, a hire can:

  • see a spreadsheet's sheets (tabs) and their sizes,
  • read cells, like Invoices!A1:F100 or a whole sheet, as shown, as raw numbers, or as formulas,
  • add rows after the last row of a table, like a log, a sign-up list or a tracker, if you allow it.

A hire names a spreadsheet by its address or ID. To find spreadsheets by name or contents, connect Google Drive too.

1. Make an app in Google Cloud

If you already made one for another Google tool, use the same app: turn on the Sheets API and add the scope below.

  1. Open console.cloud.google.com, and create a project (or pick one).
  2. APIs & Services → Library: search for Google Sheets API and click Enable.
  3. APIs & Services → OAuth consent screen: Internal with Google Workspace; with a personal account, External, add yourself as a test user, then Publish app (in testing, Google stops the access after 7 days).
  4. Add the scope https://www.googleapis.com/auth/spreadsheets.readonly, or https://www.googleapis.com/auth/spreadsheets if hires should add rows.
  5. Credentials → Create credentials → OAuth client ID, type Web application. Under Authorized redirect URIs, add the address Roster shows on the Google Sheets connection. It ends in /api/integrations/google-sheets/oauth/callback.
  6. Copy the Client ID and Client secret.

2. Connect it in Roster

  1. Open Integrations → Tools → Add a tool, search for Google Sheets and choose it.
  2. Paste the OAuth app client ID and OAuth app client secret.
  3. What hires may do: Read spreadsheets, or Read spreadsheets and add rows. Roster asks Google only for what you choose here. If you change it later, press Connect again.
  4. Click Connect, then Connect with Google Sheets on the new connection, sign in and click Allow.

3. Give hires access

On the hire's Tools tab, click Give access on Google Sheets:

  • Read only: it can list sheets and read cells.
  • Read and write: it can also add rows, when the connection allows it.
  • Spreadsheets: IDs of the spreadsheets it may use: the part after /d/ in the address. Leave it empty for every spreadsheet the account can open.

Rows are added exactly as the hire writes them, so text that starts with = stays text. A hire can ask for values to be read as if a person typed them (dates, numbers, formulas) when that's what's wanted.

If something goes wrong

  • "Isn't connected yet": press Connect with Google Sheets on the connection.
  • Adding rows is refused with 403: the connection was connected for reading only. Choose Read spreadsheets and add rows and press Connect again.
  • "No spreadsheet": the connected account can't open it. Share it with that account.

Tools and permissions reference

This reference is built from the same definitions Roster uses to connect Google Sheets and give hires access. It updates with each release.

Authentication and requested permissions

The account or app you connect sets the outer limit. Each hire's access can narrow it further. Connecting a tool gives it to no hire until you give access on that hire's Tools tab.

OAuth 2.0

From the OAuth client (Web application) you created in Google Cloud for Roster.

For: What hires may do: Read spreadsheets.

Requested scopes:

  • https://www.googleapis.com/auth/spreadsheets.readonly

OAuth 2.0

From the OAuth client (Web application) you created in Google Cloud for Roster.

For: What hires may do: Read spreadsheets and add rows.

Requested scopes:

  • https://www.googleapis.com/auth/spreadsheets

Connection fields

Google Sheets connection fields
FieldWhat to provide
OAuth app client ID
clientId
Optional
From the OAuth client (Web application) you created in Google Cloud for Roster.
OAuth app client secret
clientSecret
Optional · sealed secret
Use the value for your account or connection.
What hires may do
access
Optional
Read only asks Google for less. Changing this means pressing Connect again.

Choices: Read spreadsheets (read); Read spreadsheets and add rows (write).

Starts with: read.

Per-hire limits

Read-only hires receive only actions that read. Read-and-write access also allows actions that change things, where the connection itself permits them. An empty resource allowlist usually means everything the connected account can reach; each field below explains its meaning.

Google Sheets per-hire limits
FieldWhat to provide
Spreadsheets
spreadsheets
Optional
IDs of spreadsheets the hire may use: the part after /d/ in the address. Leave empty for every spreadsheet the account can open.

Actions

3 actions: 2 only read and 1 change something. A read action may still need approval when your workspace or hire is set to ask. A locked approval requirement always applies.

3 of 3 actions. Open an action for its arguments and full input schema.

list_sheetsRead only

A spreadsheet's title and its sheets (tabs), with each one's size.

Approval: Uses your workspace and hire approval settings.

Arguments for list_sheets
ArgumentTypeDetails
spreadsheetRequiredstringthe spreadsheet's ID or its address
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "spreadsheet": {
      "type": "string",
      "minLength": 5,
      "maxLength": 300,
      "description": "the spreadsheet's ID or its address"
    }
  },
  "required": [
    "spreadsheet"
  ]
}
read_rangeRead only

Read cells from a spreadsheet, like Sheet1!A1:F50 or just a sheet's name for all of it. Rows come numbered, cells split by |.

Approval: Uses your workspace and hire approval settings.

Arguments for read_range
ArgumentTypeDetails
spreadsheetRequiredstringthe spreadsheet's ID or its address
rangeRequiredstringA1 notation, e.g. Invoices!A1:F100, or a sheet name
valuesOptional"formatted" | "unformatted" | "formulas"as shown, raw numbers, or the formulas themselvesDefault: "formatted"
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "spreadsheet": {
      "type": "string",
      "minLength": 5,
      "maxLength": 300,
      "description": "the spreadsheet's ID or its address"
    },
    "range": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "A1 notation, e.g. Invoices!A1:F100, or a sheet name"
    },
    "values": {
      "default": "formatted",
      "description": "as shown, raw numbers, or the formulas themselves",
      "type": "string",
      "enum": [
        "formatted",
        "unformatted",
        "formulas"
      ]
    }
  },
  "required": [
    "spreadsheet",
    "range"
  ]
}
append_rowsRead and write

Add rows after the last row of a table in a sheet (give the sheet's name, or the table's range). Values are kept as written unless as_typed is on.

Approval: Uses your workspace and hire approval settings.

Available with: What hires may do: Read spreadsheets and add rows.

Arguments for append_rows
ArgumentTypeDetails
spreadsheetRequiredstringthe spreadsheet's ID or its address
rangeRequiredstringthe sheet's name or the table's range, e.g. Log!A:D
rowsRequiredstring | number | boolean[][]See input schema below.
as_typedOptionalbooleanread values as if a person typed them (dates, numbers, formulas starting with =)Default: false
Full input schema (JSON)
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "spreadsheet": {
      "type": "string",
      "minLength": 5,
      "maxLength": 300,
      "description": "the spreadsheet's ID or its address"
    },
    "range": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "the sheet's name or the table's range, e.g. Log!A:D"
    },
    "rows": {
      "minItems": 1,
      "maxItems": 200,
      "type": "array",
      "items": {
        "minItems": 1,
        "maxItems": 50,
        "type": "array",
        "items": {
          "anyOf": [
            {
              "type": "string",
              "maxLength": 5000
            },
            {
              "type": "number"
            },
            {
              "type": "boolean"
            }
          ]
        }
      }
    },
    "as_typed": {
      "default": false,
      "description": "read values as if a person typed them (dates, numbers, formulas starting with =)",
      "type": "boolean"
    }
  },
  "required": [
    "spreadsheet",
    "range",
    "rows"
  ]
}

Watches and incoming events

  • No built-in watch is declared. Give a hire a scheduled responsibility if it should check this service regularly.
  • No incoming webhook handler is declared for this integration.

Limits and troubleshooting

  • Permission errors: check both the connected account's rights and the hire's resource and read/write limits.
  • Expired or revoked access: reconnect or replace the key on the connection.
  • Rate limits and unavailable services can interrupt work. The hire's timecard records the outcome.
  • The action schema describes accepted inputs. It does not grant additional access or bypass approvals.

Service documentation · Integration source reference

On this page