Skip to main content
skill CX Codex

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.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add sanjay3290/ai-skills --skill google-sheets -a claude-code
Open on GitHub

What 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-code

2Manually: put the files in place

~/.claude/skills/google-sheets/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/google-sheets/

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.

From the same set15

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor