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.
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
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/google-sheets/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How google-sheets Compares
| Feature / Agent | google-sheets | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/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 rangeRelated Skills
google-drive
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
Create, list, and manage Google Calendar events. Use when asked to schedule meetings, check calendar, create events, or manage appointments.
yt-dlp-downloader
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
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
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
Take screenshots of websites and web pages
weather
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
Get weather forecasts - temperature, precipitation, wind, and conditions
vhs-terminal-recordings
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
Verify if an email address is valid and deliverable
valyu
Web search, AI answers, content extraction, and async deep research
uptime-monitor
Monitor website uptime - check availability, response times, and status