google-sheets · sanjay3290 — Claude Code skill: read and write Sheets
This skill gives your agent read and write access to Google Sheets: pull ranges, append rows, search for files by name. Handy when the data lives in a spreadsheet, not in code.
npx skills add sanjay3290/ai-skills --skill google-sheets -a claude-codeWhat google-sheets does
Everything runs through scripts in the scripts folder. Reading uses get-text, which prints plain text, CSV or JSON; get-range pulls a specific A1 range, and get-metadata lists sheets and dimensions. Writing covers update-range, append-rows and clear-range — the last one wipes values but keeps formatting. Merging cells or other structural edits go through batch-update.
Auth is standalone, no MCP server involved. First run is python scripts/auth.py login, which opens a browser; status checks where you stand and logout clears it. Tokens sit in the system keyring: Keychain on macOS, Credential Locker on Windows, Secret Service API on Linux. Expired tokens refresh on their own.
The catch is the account type. You need a Google Workspace account, and personal Gmail accounts are not supported — worth checking before you wire this into anything. In update-range values are parsed as if typed by a user, so formulas and numbers get interpreted; the --raw flag turns that off and stores everything literally. You can pass a full spreadsheet URL instead of an ID, and the script extracts the ID itself.
What it helps with
- read a spreadsheet without leaving the terminal
- append a results row after the last entry
- export a range to CSV for downstream processing
- find a spreadsheet by name without opening a browser
- clear cell values while keeping the sheet formatting
Example prompts for the agent
- read spreadsheet 1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms and show me what's in Q1
- append a row with today's totals to Sheet1
- find the spreadsheet with the 2024 budget
How to install google-sheets
1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill google-sheets -a claude-code2Manually: put the files in place
~/.claude/skills/google-sheets/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/google-sheets/
1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill google-sheets -a codex2Manually: put the files in place
.agents/skills/google-sheets/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill google-sheets -a cursor2Manually: put the files in place
.cursor/skills/google-sheets/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install sanjay3290/ai-skills google-sheets2Manually: put the files in place
.github/skills/google-sheets/SKILL.md1Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill google-sheets -a gemini-cli2Platform CLI
gemini skills install https://github.com/sanjay3290/ai-skills --path skills/google-sheetsManually: put the files in place
.devin/skills/google-sheets/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add sanjay3290/ai-skills --skill google-sheets -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about google-sheets
How do I install google-sheets in Claude?
Run npx skills add sanjay3290/ai-skills --skill google-sheets -a claude-code. The skill lands in ~/.claude/skills/google-sheets/SKILL.md.
What does google-sheets do?
It reads and writes Google Sheets: dumps sheet content, updates ranges, appends rows, searches for spreadsheets and returns metadata.
Which Google accounts work?
Google Workspace only. Personal Gmail accounts are not supported, so logging in with a regular address will not work.
Source text
SKILL.md · Apache-2.0
---
name: google-sheets
description: |
Read and write Google Sheets spreadsheets - get content, update cells, append rows, fetch specific ranges,
search for spreadsheets, and view metadata. Use when user asks to: read a spreadsheet, update cells,
add data to Google Sheets, find a spreadsheet, check sheet contents, export spreadsheet data, or get cell values.
Lightweight integration with standalone OAuth authentication supporting full read/write access.
license: Apache-2.0
metadata:
author: sanjay3290
version: "1.0"
---
# Google Sheets
Lightweight Google Sheets integration with standalone OAuth authentication. No MCP server required. Full read/write access.
> **Requires Google Workspace account.** Personal Gmail accounts are not supported.
## First-Time Setup
Authenticate with Google (opens browser):
```bash
python scripts/auth.py login
```
Check authentication status:
```bash
python scripts/auth.py status
```
Logout when needed:
```bash
python scripts/auth.py logout
```
## Read Commands
All operations via `scripts/sheets.py`. Auto-authenticates on first use if not logged in.
```bash
# Get spreadsheet content as plain text (default)
python scripts/sheets.py get-text SPREADSHEET_ID
# Get spreadsheet content as CSV
python scripts/sheets.py get-text SPREADSHEET_ID --format csv
# Get spreadsheet content as JSON
python scripts/sheets.py get-text SPREADSHEET_ID --format json
# Get values from a specific range (A1 notation)
python scripts/sheets.py get-range SPREADSHEET_ID "Sheet1!A1:D10"
python scripts/sheets.py get-range SPREADSHEET_ID "A1:C5"
# Find spreadsheets by search query
python scripts/sheets.py find "budget 2024"
python scripts/sheets.py find "sales report" --limit 5
# Get spreadsheet metadata (sheets, dimensions, etc.)
python scripts/sheets.py get-metadata SPREADSHEET_ID
```
## Write Commands
```bash
# Update a range of cells with values (JSON 2D array)
python scripts/sheets.py update-range SPREADSHEET_ID "Sheet1!A1:B2" '[["Hello","World"],["Foo","Bar"]]'
# Update with RAW input (no formula parsing, treats everything as literal text)
python scripts/sheets.py update-range SPREADSHEET_ID "Sheet1!A1:B1" '[["=SUM(A1:A5)","text"]]' --raw
# Append rows after the last data row
python scripts/sheets.py append-rows SPREADSHEET_ID "Sheet1!A:Z" '[["New Row Col A","New Row Col B"]]'
# Clear values from a range (keeps formatting)
python scripts/sheets.py clear-range SPREADSHEET_ID "Sheet1!A1:B10"
# Batch update (advanced - for formatting, merging, etc.)
python scripts/sheets.py batch-update SPREADSHEET_ID '[{"updateCells":{"range":{"sheetId":0},"fields":"userEnteredValue"}}]'
```
## Spreadsheet ID
You can use either:
- The spreadsheet ID: `1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms`
- The full URL: `https://docs.google.com/spreadsheets/d/1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms/edit`
The script automatically extracts the ID from URLs.
## Output Formats
### Text (default)
Human-readable format with pipe separators:
```
Spreadsheet Title: Sales Data
Sheet Name: Q1
Name | Revenue | Units
Product A | 10000 | 50
Product B | 15000 | 75
```
### CSV
Standard CSV format, suitable for further processing:
```
Name,Revenue,Units
Product A,10000,50
Product B,15000,75
```
### JSON
Structured data format:
```json
{
"Q1": [
["Name", "Revenue", "Units"],
["Product A", "10000", "50"]
]
}
```
## A1 Notation Examples
- `Sheet1!A1:B10` - Range A1 to B10 on Sheet1
- `Sheet1!A:A` - All of column A on Sheet1
- `Sheet1!1:1` - All of row 1 on Sheet1
- `A1:C5` - Range on the first sheet
## Value Input Options
- **USER_ENTERED** (default): Values are parsed as if typed by a user. Numbers, dates, and formulas are interpreted.
- **RAW** (`--raw` flag): Values are stored exactly as provided. No parsing of formulas or number formatting.
## Token Management
Tokens stored securely using the system keyring:
- **macOS**: Keychain
- **Windows**: Windows Credential Locker
- **Linux**: Secret Service API (GNOME Keyring, KDE Wallet, etc.)
Service name: `google-sheets-skill-oauth`
Tokens automatically refresh when expired using Google's cloud function.
© sanjay3290 · Apache-2.0 · sanjay3290/ai-skills
Similar skills
Everything for Office documents →google-sheets by other authors comes first.