> **Building with AI coding agents?** If you're using an AI coding agent, install the official Scalekit plugin. It gives your agent full awareness of the Scalekit API — reducing hallucinations and enabling faster, more accurate code generation.
>
> - **Claude Code**: `/plugin marketplace add scalekit-inc/claude-code-authstack` then `/plugin install <auth-type>@scalekit-auth-stack`
> - **GitHub Copilot CLI**: `copilot plugin marketplace add scalekit-inc/github-copilot-authstack` then `copilot plugin install <auth-type>@scalekit-auth-stack`
> - **Codex**: run the bash installer, restart, then open Plugin Directory and enable `<auth-type>`
> - **Skills CLI** (Windsurf, Cline, 40+ agents): `npx skills add scalekit-inc/skills --list` then `--skill <skill-name>`
>
> `<auth-type>` / `<skill-name>`: `agentkit`, `full-stack-auth`, `mcp-auth`, `modular-sso`, `modular-scim` — [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Google Sheets

**Authentication:** OAuth 2.0
**Categories:** Files, Documents, Data, Analytics
## What you can do

Connect this agent connector to let your agent:

- **Values clear, append** — Clear all values in a specified range of a Google Sheets spreadsheet
- **Update update** — Update cell values in a specific range of a Google Sheet
- **Get get** — Returns only the cell values from a specific range in a Google Sheet — no metadata, no formatting, just the data
- **Read read** — Returns everything about a spreadsheet — including spreadsheet metadata, sheet properties, cell values, formatting, themes, and pixel sizes
- **Create create** — Create a new Google Sheets spreadsheet with an optional title and initial sheet configuration

## Authentication

This connector uses **OAuth 2.0**. Scalekit acts as the OAuth client: it redirects your user to Google Sheets, obtains an access token, and automatically refreshes it before it expires. Your agent code never handles tokens directly — you only pass a `connectionName` and a user `identifier`.

You supply your Google Sheets **Connected App** credentials (Client ID + Secret) once per environment in the Scalekit dashboard.

Before calling this connector from your code, create the Google Sheets connection in **AgentKit** > **Connections** and copy the exact **Connection name** from that connection into your code. The value in code must match the dashboard exactly.

## Set up the connector

Register your Scalekit environment with the Google Sheets connector so Scalekit handles the authentication flow and token lifecycle for you. The connection name you create will be used to identify and invoke the connection programmatically. Then complete the configuration in your application as follows:

> caution
>
> Google applications using scopes that permit access to certain user data must complete a verification process.

1. ### Set up auth redirects

    - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** > **Create Connection**. Find **Google Sheets** and click **Create**. Click **Use your own credentials** and copy the redirect URI. It looks like `https:///sso/v1/oauth//callback`.

      > Image: Copy redirect URI from Scalekit dashboard

    - Navigate to [Google Cloud Console](https://console.cloud.google.com/projectselector2/home/dashboard?supportedpurview=project) → **APIs & Services** → **Credentials**. Select **+ Create Credentials**, then **OAuth client ID**. Choose **Web application** from the Application type menu.

      > Image: Select Web Application in Google OAuth settings

    - Under **Authorized redirect URIs**, click **+ Add URI**, paste the redirect URI, and click **Create**.

      > Image: Add authorized redirect URI in Google Cloud Console

2. ### Enable the Google Sheets API

    - In [Google Cloud Console](https://console.cloud.google.com/projectselector2/home/dashboard?supportedpurview=project), go to **APIs & Services** → **Library**. Search for "Google Sheets API" and click **Enable**.

3. ### Get client credentials

    - Google provides your Client ID and Client Secret after you create the OAuth client ID in step 1.

4. ### Add credentials in Scalekit

    - In [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** and open the connection you created.
    - Enter your credentials:
      - Client ID (from above)
      - Client Secret (from above)
      - Permissions (scopes — see [Google API Scopes reference](https://developers.google.com/identity/protocols/oauth2/scopes))

      > Image: Add credentials in Scalekit dashboard
    - Click **Save**.

## Code examples

Connect a user's Google Sheets account and make API calls on their behalf — Scalekit handles OAuth and token management automatically.

You can interact with Google Sheets in two ways — via direct proxy API calls or via Scalekit optimized tool calls. Scroll down to see the list of available Scalekit tools.

## Proxy API Calls

  ### Node.js

```typescript

const connectionName = 'google_sheets'; // get your connection name from connection configurations
const identifier = 'user_123';          // your unique user identifier

// Get your credentials from app.scalekit.com → Developers → Settings → API Credentials
const scalekit = new ScalekitClient(
  process.env.SCALEKIT_ENV_URL,
  process.env.SCALEKIT_CLIENT_ID,
  process.env.SCALEKIT_CLIENT_SECRET
);
const actions = scalekit.actions;

// Authenticate the user
const { link } = await actions.getAuthorizationLink({
  connectionName,
  identifier,
});
console.log('🔗 Authorize Google Sheets:', link); // present this link to your user for authorization, or click it yourself for testing
process.stdout.write('Press Enter after authorizing...');
await new Promise(r => process.stdin.once('data', r));

// Make a request via Scalekit proxy
const result = await actions.request({
  connectionName,
  identifier,
  path: '/v4/spreadsheets',
  method: 'GET',
});
console.log(result);
```

  ### Python

```python

from dotenv import load_dotenv
load_dotenv()

connection_name = "google_sheets"  # get your connection name from connection configurations
identifier = "user_123"            # your unique user identifier

# Get your credentials from app.scalekit.com → Developers → Settings → API Credentials
scalekit_client = scalekit.client.ScalekitClient(
    client_id=os.getenv("SCALEKIT_CLIENT_ID"),
    client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
    env_url=os.getenv("SCALEKIT_ENV_URL"),
)
actions = scalekit_client.actions

# Authenticate the user
link_response = actions.get_authorization_link(
    connection_name=connection_name,
    identifier=identifier
)
# present this link to your user for authorization, or click it yourself for testing
print("🔗 Authorize Google Sheets:", link_response.link)
input("Press Enter after authorizing...")

# Make a request via Scalekit proxy
result = actions.request(
    connection_name=connection_name,
    identifier=identifier,
    path="/v4/spreadsheets",
    method="GET"
)
print(result)
```

## Scalekit Tools

## `googlesheets_create_spreadsheet`

Create a new Google Sheets spreadsheet with an optional title and initial sheet configuration. Returns the new spreadsheet ID and metadata.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `locale` | string | No | Locale of the spreadsheet |
| `schema_version` | string | No | Optional schema version to use for tool execution |
| `sheets` | `array<object>` | No | Initial sheets to include in the spreadsheet |
| `time_zone` | string | No | Time zone for the spreadsheet |
| `title` | string | No | Title of the new spreadsheet |
| `tool_version` | string | No | Optional tool version to use for execution |

## `googlesheets_get_values`

Returns only the cell values from a specific range in a Google Sheet — no metadata, no formatting, just the data. For full spreadsheet metadata and formatting, use googlesheets_read_spreadsheet instead.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `major_dimension` | string | No | Whether values are returned by rows or columns |
| `range` | string | Yes | Cell range to read in A1 notation |
| `schema_version` | string | No | Optional schema version to use for tool execution |
| `spreadsheet_id` | string | Yes | The ID of the Google Sheet |
| `tool_version` | string | No | Optional tool version to use for execution |
| `value_render_option` | string | No | How values should be rendered in the response |

## `googlesheets_read_spreadsheet`

Returns everything about a spreadsheet — including spreadsheet metadata, sheet properties, cell values, formatting, themes, and pixel sizes. If you only need cell values, use googlesheets_get_values instead.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `include_grid_data` | boolean | No | Include cell data in the response |
| `ranges` | string | No | Cell range to read in A1 notation |
| `schema_version` | string | No | Optional schema version to use for tool execution |
| `spreadsheet_id` | string | Yes | The ID of the Google Sheet to read |
| `tool_version` | string | No | Optional tool version to use for execution |

## `googlesheets_update_values`

Update cell values in a specific range of a Google Sheet. Supports writing single cells or multiple rows and columns at once.

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `include_values_in_response` | boolean | No | Return the updated cell values in the response |
| `range` | string | Yes | Cell range to update in A1 notation |
| `schema_version` | string | No | Optional schema version to use for tool execution |
| `spreadsheet_id` | string | Yes | The ID of the Google Sheet to update |
| `tool_version` | string | No | Optional tool version to use for execution |
| `value_input_option` | string | No | How input values should be interpreted |
| `values` | `array<array>` | Yes | 2D array of values to write to the range |

## Tool list

Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first.

## Tool list

### `googlesheets_append_values`

Append rows of data to a Google Sheets spreadsheet. Data is added after the last row with existing content in the specified range.

Parameters:

- `range` (`string`, required): The A1 notation range to append data to (e.g. Sheet1!A1)
- `spreadsheet_id` (`string`, required): The ID of the spreadsheet to append data to
- `values` (`array`, required): 2D array of values to append. Each inner array is a row.
- `insert_data_option` (`string`, optional): How the input data should be inserted. Options: INSERT_ROWS (inserts new rows), OVERWRITE (overwrites existing data). Default: OVERWRITE
- `value_input_option` (`string`, optional): How input data should be interpreted. Options: RAW (literal values), USER_ENTERED (as if typed in UI, parses formulas/dates). Default: USER_ENTERED

### `googlesheets_clear_values`

Clear all values in a specified range of a Google Sheets spreadsheet. Formatting is preserved; only the cell values are cleared.

Parameters:

- `range` (`string`, required): The A1 notation range to clear (e.g. Sheet1!A1:D10)
- `spreadsheet_id` (`string`, required): The ID of the spreadsheet to clear values in

### `googlesheets_create_spreadsheet`

Create a new Google Sheets spreadsheet with an optional title and initial sheet configuration. Returns the new spreadsheet ID and metadata.

Parameters:

- `locale` (`string`, optional): Locale of the spreadsheet
- `schema_version` (`string`, optional): Optional schema version to use for tool execution
- `sheets` (`array`, optional): Initial sheets to include in the spreadsheet
- `time_zone` (`string`, optional): Time zone for the spreadsheet
- `title` (`string`, optional): Title of the new spreadsheet
- `tool_version` (`string`, optional): Optional tool version to use for execution

### `googlesheets_get_values`

Returns only the cell values from a specific range in a Google Sheet — no metadata, no formatting, just the data. For full spreadsheet metadata and formatting, use googlesheets_read_spreadsheet instead.

Parameters:

- `range` (`string`, required): Cell range to read in A1 notation
- `spreadsheet_id` (`string`, required): The ID of the Google Sheet
- `major_dimension` (`string`, optional): Whether values are returned by rows or columns
- `schema_version` (`string`, optional): Optional schema version to use for tool execution
- `tool_version` (`string`, optional): Optional tool version to use for execution
- `value_render_option` (`string`, optional): How values should be rendered in the response

### `googlesheets_read_spreadsheet`

Returns everything about a spreadsheet — including spreadsheet metadata, sheet properties, cell values, formatting, themes, and pixel sizes. If you only need cell values, use googlesheets_get_values instead.

Parameters:

- `spreadsheet_id` (`string`, required): The ID of the Google Sheet to read
- `include_grid_data` (`boolean`, optional): Include cell data in the response
- `ranges` (`string`, optional): Cell range to read in A1 notation
- `schema_version` (`string`, optional): Optional schema version to use for tool execution
- `tool_version` (`string`, optional): Optional tool version to use for execution

### `googlesheets_update_values`

Update cell values in a specific range of a Google Sheet. Supports writing single cells or multiple rows and columns at once.

Parameters:

- `range` (`string`, required): Cell range to update in A1 notation
- `spreadsheet_id` (`string`, required): The ID of the Google Sheet to update
- `values` (`array`, required): 2D array of values to write to the range
- `include_values_in_response` (`boolean`, optional): Return the updated cell values in the response
- `schema_version` (`string`, optional): Optional schema version to use for tool execution
- `tool_version` (`string`, optional): Optional tool version to use for execution
- `value_input_option` (`string`, optional): How input values should be interpreted


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
