
Google Sheets
Let your coding agent read and write Google Sheets via the Sheets API v4 when users share spreadsheet links or ask to sync tabular data.
Overview
Google Sheets is an agent skill for the Build phase that integrates the Google Sheets API v4 so agents can read metadata, pull cell ranges, and write spreadsheet values from shared links.
Install
npx skills add https://github.com/vm0-ai/vm0-skills --skill google-sheetsWhat is this skill?
- Sheets API v4 base URL with spreadsheet ID parsing from docs.google.com URLs
- Read ranges, full sheets, and spreadsheet metadata (titles, sheet IDs)
- Write cell ranges via JSON value update payloads
- Troubleshooting via zero doctor check-connector for GOOGLE_SHEETS_TOKEN
- curl + jq examples for GET metadata and values endpoints
Adoption & trust: 554 installs on skills.sh; 64 GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You need live tabular data in Sheets updated or queried by your agent but do not want to hand-write REST calls and auth debugging every session.
Who is it for?
Indie SaaS and automation builders wiring lightweight reporting, lead capture, or ops tables through Google Sheets during MVP build.
Skip if: Complex bi-directional ETL, BigQuery-scale analytics, or teams that forbid cloud spreadsheet tokens in agent environments.
When should I use this skill?
User mentions Google Sheets, sheets.google.com, shares a spreadsheet link, asks to update a sheet, or asks about Excel/Sheets data.
What do I get? / Deliverables
Your agent can resolve spreadsheet IDs, read and write defined ranges, and self-check connector health when the Sheets token or endpoint fails.
- Successful API reads of metadata and cell ranges
- Written value updates to specified A1 ranges on a sheet tab
Recommended Skills
Journey fit
Spreadsheet integrations are classic build-phase glue for MVPs, ops dashboards, and lightweight CRMs without standing up a full database UI. Google Sheets sits on the integrations subphase alongside other third-party REST connectors your agent calls during implementation.
How it compares
Task REST integration for one API—not a full spreadsheet MCP server or no-code Zapier replacement.
Common Questions / FAQ
Who is google-sheets for?
Solo builders using Claude Code, Cursor, or Codex with vm0-style connectors who already store or share data in Google Sheets and want agents to hit the v4 API safely.
When should I use google-sheets?
In Build (integrations) when the user mentions Google Sheets, shares a spreadsheet link, or asks to read/update sheet data; in Operate (iterate) for small production tweaks to existing workbook-backed workflows.
Is google-sheets safe to install?
The skill documents bearer-token API access and shell curl usage; review the Security Audits panel on this Prism page and scope GOOGLE_SHEETS_TOKEN with least privilege.
SKILL.md
READMESKILL.md - Google Sheets
## Troubleshooting If requests fail, run `zero doctor check-connector --env-name GOOGLE_SHEETS_TOKEN` or `zero doctor check-connector --url https://sheets.googleapis.com/v4/spreadsheets --method GET` ## How to Use Base URL: `https://sheets.googleapis.com/v4/spreadsheets` **Finding your Spreadsheet ID:** The spreadsheet ID is in the URL: `https://docs.google.com/spreadsheets/d/{SPREADSHEET_ID}/edit` ### 1. Get Spreadsheet Metadata Get information about a spreadsheet (sheets, properties): ```bash curl -s "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet-id}" --header "Authorization: Bearer $GOOGLE_SHEETS_TOKEN" | jq '{title: .properties.title, sheets: [.sheets[].properties | {sheetId, title}]}' ``` ### 2. Read Cell Values Read a range of cells: ```bash curl -s "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet-id}/values/Sheet1%21A1:D10" --header "Authorization: Bearer $GOOGLE_SHEETS_TOKEN" | jq '.values' ``` ### 3. Read Entire Sheet Read all data from a sheet: ```bash curl -s "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet-id}/values/Sheet1" --header "Authorization: Bearer $GOOGLE_SHEETS_TOKEN" | jq '.values' ``` ### 4. Write Cell Values Update a range of cells. Write to `/tmp/gsheets_request.json`: ```json { "values": [ ["Name", "Email", "Status"] ] } ``` Then run: ```bash curl -s -X PUT "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet-id}/values/Sheet1%21A1:C1?valueInputOption=USER_ENTERED" --header "Authorization: Bearer $GOOGLE_SHEETS_TOKEN" --header "Content-Type: application/json" -d @/tmp/gsheets_request.json | jq '.updatedCells' ``` **valueInputOption:** - `RAW`: Values are stored as-is - `USER_ENTERED`: Values are parsed as if typed by user (formulas evaluated) ### 5. Append Rows Add new rows to the end of a sheet. Write to `/tmp/gsheets_request.json`: ```json { "values": [ ["John Doe", "john@example.com", "Active"] ] } ``` Then run: ```bash curl -s -X POST "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet-id}/values/Sheet1%21A:C:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS" --header "Authorization: Bearer $GOOGLE_SHEETS_TOKEN" --header "Content-Type: application/json" -d @/tmp/gsheets_request.json | jq '.updates | {updatedRange, updatedRows}' ``` ### 6. Batch Read Multiple Ranges Read multiple ranges in one request: ```bash curl -s "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet-id}/values:batchGet?ranges=Sheet1%21A1:B5&ranges=Sheet1%21D1:E5" --header "Authorization: Bearer $GOOGLE_SHEETS_TOKEN" | jq '.valueRanges' ``` ### 7. Batch Update Multiple Ranges Update multiple ranges in one request. Write to `/tmp/gsheets_request.json`: ```json { "valueInputOption": "USER_ENTERED", "data": [ { "range": "Sheet1!A1", "values": [["Header 1"]] }, { "range": "Sheet1!B1", "values": [["Header 2"]] } ] } ``` Then run: ```bash curl -s -X POST "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet-id}/values:batchUpdate" --header "Authorization: Bearer $GOOGLE_SHEETS_TOKEN" --header "Content-Type: application/json" -d @/tmp/gsheets_request.json | jq '.totalUpdatedCells' ``` ### 8. Clear Cell Values Clear a range of cells. Write to `/tmp/gsheets_request.json`: ```json {} ``` Then run: ```bash curl -s -X POST "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheet-id}/values/Sheet1%21A2:C100:clear" --header "Authorization: Bearer $GOOGLE_SHEETS_TOKEN" --header "Content-Type: application/json" -d @/tmp/gsheets_request.json | jq '.clearedRange' ``` ### 9. Create New Spreadsheet Write to `/tmp/gsheets_request.json`: ```json { "properties": { "title": "My New Spreadsheet" }, "sheets": [ { "properties": {