google-sheets

Create spreadsheets, read data, and manage Google Sheets. Use when asked to create sheets, add data to spreadsheets, lookup rows, update cells, or manage sheet data.

9 stars

Best use case

google-sheets is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Create spreadsheets, read data, and manage Google Sheets. Use when asked to create sheets, add data to spreadsheets, lookup rows, update cells, or manage sheet data.

Teams using google-sheets should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/google-sheets/SKILL.md --create-dirs "https://raw.githubusercontent.com/orthogonal-sh/skills/main/skills/google-sheets/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/google-sheets/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How google-sheets Compares

Feature / Agentgoogle-sheetsStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Create spreadsheets, read data, and manage Google Sheets. Use when asked to create sheets, add data to spreadsheets, lookup rows, update cells, or manage sheet data.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Google Sheets

Create spreadsheets, read data, add rows, and manage Google Sheets. Connect your Google account to work with spreadsheet data, perform lookups, and automate sheet operations.

## Requirements

- Install the `orth` CLI
- Connect your Google Sheets at https://orthogonal.com/dashboard/integrations
- OAuth connection must be active (HTTP 428 response means not connected)

## Actions

### Create Spreadsheet

Create a new Google Sheets spreadsheet.

```bash
orth run google-sheets /create-spreadsheet --body '{
  "title": "Project Tracker"
}'
```

**Parameters:**
- `title` (required) - Title for the new spreadsheet

### Get Sheet Names

Retrieve all sheet names and IDs from a spreadsheet.

```bash
orth run google-sheets /get-sheet-names --body '{
  "spreadsheet_id": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"
}'
```

**Parameters:**
- `spreadsheet_id` (required) - Google Sheets spreadsheet ID

### Add Row

Add a new row to a specific sheet.

```bash
orth run google-sheets /add-row --body '{
  "spreadsheet_id": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
  "sheet_id": 0,
  "insert_index": 2
}'
```

**Parameters:**
- `spreadsheet_id` (required) - Google Sheets spreadsheet ID
- `sheet_id` (required) - Sheet ID (numeric gid, not sheet name)
- `insert_index` - Row index to insert at (0-based)
- `inherit_from_before` - Inherit formatting from row above (true/false)

### Lookup Row

Search for rows matching a query in the spreadsheet.

```bash
orth run google-sheets /lookup-row --body '{
  "spreadsheet_id": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
  "query": "John Doe",
  "range": "Sheet1!A1:Z1000"
}'
```

**Parameters:**
- `spreadsheet_id` (required) - Google Sheets spreadsheet ID
- `query` (required) - Text to search for in the sheet
- `range` - Range to search in (A1 notation, e.g., "Sheet1!A1:Z100")
- `case_sensitive` - Case-sensitive search (true/false)

### Get Values

Retrieve data from specific ranges in the spreadsheet.

```bash
orth run google-sheets /get-values --body '{
  "spreadsheet_id": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
  "ranges": ["Sheet1!A1:C10", "Sheet2!A1:B5"]
}'
```

**Parameters:**
- `spreadsheet_id` (required) - Google Sheets spreadsheet ID
- `ranges` (required) - Array of ranges in A1 notation to retrieve

### Update Values

Update data in specific cells or ranges.

```bash
orth run google-sheets /update-values --body '{
  "spreadsheet_id": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
  "sheet_name": "Sheet1",
  "values": [["Name", "Age", "Email"], ["John Doe", "30", "john@example.com"]],
  "first_cell_location": "A1"
}'
```

**Parameters:**
- `spreadsheet_id` (required) - Google Sheets spreadsheet ID
- `sheet_name` (required) - Name of the sheet to update
- `values` (required) - 2D array of values to write
- `first_cell_location` - Starting cell location (A1 notation, defaults to A1)
- `valueInputOption` - How values are interpreted (USER_ENTERED, RAW)
- `includeValuesInResponse` - Return updated values in response (true/false)

## Usage Examples

**Create project tracking sheet:**
```bash
orth run google-sheets /create-spreadsheet -b '{"title":"Q1 Project Dashboard"}'
```

**Get all sheet names:**
```bash
orth run google-sheets /get-sheet-names -b '{"spreadsheet_id":"1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms"}'
```

**Add empty row:**
```bash
orth run google-sheets /add-row -b '{"spreadsheet_id":"1ABC...","sheet_id":0,"insert_index":5}'
```

**Search for customer:**
```bash
orth run google-sheets /lookup-row -b '{"spreadsheet_id":"1ABC...","query":"john@company.com","range":"Customers!A:Z"}'
```

**Get header row:**
```bash
orth run google-sheets /get-values -b '{"spreadsheet_id":"1ABC...","ranges":["Sheet1!1:1"]}'
```

**Get specific columns:**
```bash
orth run google-sheets /get-values -b '{"spreadsheet_id":"1ABC...","ranges":["Sheet1!A:A","Sheet1!C:C"]}'
```

**Add new data row:**
```bash
orth run google-sheets /update-values -b '{"spreadsheet_id":"1ABC...","sheet_name":"Sheet1","values":[["New Customer","John Smith","john@example.com","2024-03-15"]],"first_cell_location":"A2"}'
```

**Update multiple cells:**
```bash
orth run google-sheets /update-values -b '{"spreadsheet_id":"1ABC...","sheet_name":"Data","values":[["Updated","Value"],["Another","Update"]],"first_cell_location":"B5","valueInputOption":"USER_ENTERED"}'
```

**Add headers to new sheet:**
```bash
orth run google-sheets /update-values -b '{"spreadsheet_id":"1ABC...","sheet_name":"Customers","values":[["Name","Email","Phone","Date Added"]],"first_cell_location":"A1"}'
```

## A1 Notation Guide

Google Sheets uses A1 notation for cell references:

**Basic ranges:**
- `A1` - Single cell
- `A1:B2` - 2x2 range
- `A:A` - Entire column A
- `1:1` - Entire row 1
- `A1:Z` - Column A to Z in row 1

**Sheet references:**
- `Sheet1!A1:B2` - Range in specific sheet
- `'My Sheet'!A1` - Sheet with spaces (use quotes)

**Open ranges:**
- `A1:C` - From A1 to end of column C
- `A1:1` - From A1 to end of row 1

## Error Handling

- **HTTP 428** - Google Sheets integration not connected. Visit https://orthogonal.com/dashboard/integrations to connect your account
- **400 Bad Request** - Invalid spreadsheet ID, range, or data format
- **403 Forbidden** - Insufficient permissions to access or edit spreadsheet
- **404 Not Found** - Spreadsheet or sheet does not exist
- **429 Rate Limited** - Google Sheets API quota exceeded

## Tips

- Spreadsheet IDs are found in the Google Sheets URL
- Sheet IDs are numeric (gid parameter in URL), different from sheet names
- Use sheet names (not IDs) for update-values action
- Values array must be 2D: `[["row1col1", "row1col2"], ["row2col1", "row2col2"]]`
- USER_ENTERED interprets formulas and formats, RAW inserts literal values
- A1 notation is case-insensitive (a1 same as A1)
- Use quotes around sheet names containing spaces
- Empty cells in values arrays are represented as empty strings
- Lookup searches all text in the specified range

Related Skills

google-drive

9
from orthogonal-sh/skills

Find, create, and manage files and folders in Google Drive. Use when asked to search Drive, create files, upload documents, organize folders, or access Drive content.

google-calendar

9
from orthogonal-sh/skills

Create, list, and manage Google Calendar events. Use when asked to schedule meetings, check calendar, create events, or manage appointments.

yt-dlp-downloader

9
from orthogonal-sh/skills

Download videos from YouTube, Bilibili, Twitter, and thousands of other sites using yt-dlp. Use when the user provides a video URL and wants to download it, extract audio (MP3), download subtitles, or select video quality. Triggers on phrases like "下载视频", "download video", "yt-dlp", "YouTube", "B站", "抖音", "提取音频", "extract audio".

slack

9
from orthogonal-sh/skills

Send messages and manage Slack channels. Use when asked to send Slack messages, post to channels, list channels, or fetch message history.

yc-batch-evaluator

9
from orthogonal-sh/skills

Evaluate YC batch companies for investment — scrapes the YC directory, researches each company and its founders (work history, LinkedIn, website), assesses founder-company fit, and exports to Google Sheets with priority rankings. Use when asked to evaluate YC companies, research a YC batch, screen startups, or do due diligence on YC companies.

website-screenshot

9
from orthogonal-sh/skills

Take screenshots of websites and web pages

weather

9
from orthogonal-sh/skills

Get current weather and forecasts using free APIs (no API key required). Use when asked about weather, temperature, forecasts, or climate conditions for any location.

weather-forecast

9
from orthogonal-sh/skills

Get weather forecasts - temperature, precipitation, wind, and conditions

vhs-terminal-recordings

9
from orthogonal-sh/skills

Create polished terminal GIF recordings using VHS (Video Hardware Software) by Charmbracelet. Use when asked to create terminal demos, CLI gifs, command-line recordings, or animated terminal screenshots for documentation, READMEs, or marketing.

verify-email

9
from orthogonal-sh/skills

Verify if an email address is valid and deliverable

valyu

9
from orthogonal-sh/skills

Web search, AI answers, content extraction, and async deep research

uptime-monitor

9
from orthogonal-sh/skills

Monitor website uptime - check availability, response times, and status