skills/tier-3-business-ops/google-sheets/SKILL.md
Spreadsheet operations for small businesses. Sales tracking, inventory management, expense reports, simple dashboards, and data import/export. Built on the gws CLI.
npx skillsauth add pbc-os/agent-skills-public google-sheetsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Spreadsheet operations built for how small businesses actually track data.
Uses the gws CLI for all Sheets operations. See the google-workspace skill for setup.
gws CLI installed and authenticated with Sheets + Drive scopegws auth login -s sheets,drive if not already donegws sheets +read # Read values from a spreadsheet
gws sheets +append # Append a row to a spreadsheet
gws sheets spreadsheets create # Create a new spreadsheet
gws sheets spreadsheets get # Get spreadsheet metadata
# Read a range
gws sheets +read
# When prompted: spreadsheet ID + range (e.g., "Sheet1!A1:D10")
# Read via API directly
gws sheets spreadsheets values get --params '{
"spreadsheetId": "SPREADSHEET_ID",
"range": "Sheet1!A1:D100"
}'
# Read entire sheet
gws sheets spreadsheets values get --params '{
"spreadsheetId": "SPREADSHEET_ID",
"range": "Sheet1"
}'
# Append a single row
gws sheets +append
# When prompted: spreadsheet ID, range, values
# Append via API directly
gws sheets spreadsheets values append --params '{
"spreadsheetId": "SPREADSHEET_ID",
"range": "Sheet1!A:D",
"valueInputOption": "USER_ENTERED"
}' --json '{
"values": [["2026-01-15", "Widget A", "50", "$12.50"]]
}'
# Update a specific range
gws sheets spreadsheets values update --params '{
"spreadsheetId": "SPREADSHEET_ID",
"range": "Sheet1!B2",
"valueInputOption": "USER_ENTERED"
}' --json '{
"values": [["updated value"]]
}'
# Batch update multiple ranges
gws sheets spreadsheets values batchUpdate --params '{
"spreadsheetId": "SPREADSHEET_ID"
}' --json '{
"valueInputOption": "USER_ENTERED",
"data": [
{"range": "Sheet1!A1", "values": [["Revenue"]]},
{"range": "Sheet1!B1", "values": [["Date"]]},
{"range": "Sheet1!A2", "values": [["$1,250"]]}
]
}'
gws sheets spreadsheets create --json '{
"properties": {"title": "Q1 2026 Sales Tracker"},
"sheets": [
{"properties": {"title": "Daily Sales"}},
{"properties": {"title": "Summary"}},
{"properties": {"title": "By Product"}}
]
}'
For ready-to-adapt sheet designs — Daily Sales, Inventory, Expense Tracking, Vendor Log, Order Log, and a simple P&L — see references/smb-sheet-templates.md. Each template includes a recommended column layout, conditional formatting rules, and SUMIFS/INDEX formulas you can drop in.
Track daily revenue with a simple append workflow:
# Append today's sales data
gws sheets spreadsheets values append --params '{
"spreadsheetId": "SALES_SHEET_ID",
"range": "Daily Sales!A:E",
"valueInputOption": "USER_ENTERED"
}' --json '{
"values": [["2026-01-15", "Store 1", "$2,450", "87 transactions", "Wednesday"]]
}'
# Read current inventory levels
gws sheets spreadsheets values get --params '{
"spreadsheetId": "INVENTORY_SHEET_ID",
"range": "Current Stock!A2:D"
}' --format json | jq '.values[] | select(.[2] | try tonumber catch -1) | select(.[2] | tonumber < 10)'
# Find items with less than 10 units.
# Note: `A2:D` skips the header row; the `try/catch` guards against non-numeric cells.
# Log an expense
gws sheets spreadsheets values append --params '{
"spreadsheetId": "EXPENSE_SHEET_ID",
"range": "Expenses!A:E",
"valueInputOption": "USER_ENTERED"
}' --json '{
"values": [["2026-01-15", "Office Supplies", "Staples", "$47.32", "Receipt in Drive"]]
}'
# Read summary data for a report
gws sheets spreadsheets values get --params '{
"spreadsheetId": "REPORT_SHEET_ID",
"range": "Summary!A1:C12"
}' --format table
# Export sheet as CSV (via Drive export)
gws drive files export --params '{
"fileId": "SPREADSHEET_ID",
"mimeType": "text/csv"
}' -o ./export.csv
# Export as Excel
gws drive files export --params '{
"fileId": "SPREADSHEET_ID",
"mimeType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
}' -o ./export.xlsx
# List all spreadsheets
gws drive files list --params '{
"q": "mimeType=\"application/vnd.google-apps.spreadsheet\"",
"pageSize": 20,
"orderBy": "modifiedTime desc"
}' --format table
# Search by name
gws drive files list --params '{
"q": "mimeType=\"application/vnd.google-apps.spreadsheet\" and name contains '\''sales'\''",
"pageSize": 10
}'
autoresearch — Track experiment results in sheets; use sheet data as eval inputgoogle-drive — Sheets are Drive files; use Drive for search and permissionsgmail — Email sheet data as reportsmorning-briefing — Pull KPIs from sheets for daily briefingsemantic-layer-audit — Document sheet data sources in your semantic layervalueInputOption: "USER_ENTERED" to let Sheets parse dates, numbers, and formulasvalueInputOption: "RAW" when you want exact text (no parsing)docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit--format csv output from gws can be piped directly into other toolsgoogle-workspace — Required setup (install and auth)google-drive — File-level operations on spreadsheetsautoresearch — Use sheets as parameter/experiment trackingmorning-briefing — Pull sheet KPIs into daily digestSheets are the swiss army knife of small business data. Simple, flexible, and accessible.
tools
Generate and iteratively refine USPTO-style patent figure drawings from provisional patent application markdown files, using nano-banana for v1 generation and targeted single-fix edits for v2+ iteration.
data-ai
Weekly revenue / sales forecasting for small businesses with multiple locations or product lines. Blends recent trend + seasonal baseline + YoY growth with per-entity holiday multipliers and week-of-month adjustments. Ships autoresearch-compatible eval and parameters so you can tune it on your own historical data.
data-ai
Analyze email, calendar, and file patterns to discover repeatable workflows that AI agents can automate.
testing
Automated daily digest for small business owners. Combines email triage, calendar agenda, open tasks, and business KPIs into a single morning briefing. Composable — works with whatever data sources are available. Urgent emails require body inspection and explicit escalation signals — never classified from sender/timing metadata alone.