Use this skill when you need to create, inspect, update, append to, or reorganize Google Sheets from a locally installed `gog` CLI. It is for local Google ac...
Documents
Google Sheets
Try itRead and write Google Sheets data with managed OAuth authentication through a single API gateway.
What it does
Provides HTTP-based access to Google Sheets for reading values, writing data, appending rows, and performing batch updates. Supports cell formatting, sheet creation, column resizing, sorting, and filtering. Authentication uses a bearer token with managed OAuth connections, so spreadsheet IDs are paired with user-authorized Google accounts. Includes JavaScript and Python examples and supports both RAW and USER_ENTERED value input modes.
When to use it
- Reading spreadsheet ranges into an application
- Updating or appending rows to a Google Sheet
- Applying formatting or adding sheets via batch updates
- Connecting multiple Google accounts for sheet operations
The skill document
Google Sheets
Access the Google Sheets API with managed OAuth authentication. Read and write spreadsheet values, create sheets, apply formatting, and perform batch operations.
Quick Start
# Read values from a spreadsheet
curl -s -X GET 'https://gateway.maton.ai/google-sheets/v4/spreadsheets/SPREADSHEET_ID/values/Sheet1!A1:D10' \
-H 'Authorization: Bearer YOUR_API_KEY'
Base URL
https://gateway.maton.ai/google-sheets/v4/spreadsheets/{spreadsheetId}/{endpoint}
The gateway proxies requests to sheets.googleapis.com and automatically injects your OAuth token.
Authentication
All requests require the Maton API key in the Authorization header:
Authorization: Bearer YOUR_API_KEY
Environment Variable: Set your API key as MATON_API_KEY:
export MATON_API_KEY="YOUR_API_KEY"
Getting Your API Key
- Sign in at maton.ai
- Go to maton.ai/settings
- Copy your API key
Connection Management
Manage your Google OAuth connections at https://ctrl.maton.ai.
List Connections
curl -s -X GET 'https://ctrl.maton.ai/connections?app=google-sheets&status=ACTIVE' \
-H 'Authorization: Bearer YOUR_API_KEY'
Create Connection
curl -s -X POST 'https://ctrl.maton.ai/connections' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-d '{"app": "google-sheets"}'
Get Connection
curl -s -X GET 'https://ctrl.maton.ai/connections/{connection_id}' \
-H 'Authorization: Bearer YOUR_API_KEY'
Response:
{
"connection": {
"connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
"status": "ACTIVE",
"url": "https://connect.maton.ai/?session_token=...",
"app": "google-sheets"
}
}
Open the returned url in a browser to complete OAuth authorization.
Delete Connection
curl -s -X DELETE 'https://ctrl.maton.ai/connections/{connection_id}' \
-H 'Authorization: Bearer YOUR_API_KEY'
Using Multiple Connections
If you have multiple Google accounts connected, specify which to use:
curl -s -X GET 'https://gateway.maton.ai/google-sheets/v4/spreadsheets/SPREADSHEET_ID' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Maton-Connection: {connection_id}'
API Reference
Get Spreadsheet Metadata
GET /google-sheets/v4/spreadsheets/{spreadsheetId}
Get Values
GET /google-sheets/v4/spreadsheets/{spreadsheetId}/values/{range}
Example:
GET /google-sheets/v4/spreadsheets/SHEET_ID/values/Sheet1!A1:D10
Get Multiple Ranges
GET /google-sheets/v4/spreadsheets/{spreadsheetId}/values:batchGet?ranges=Sheet1!A1:B10&ranges=Sheet2!A1:C5
Update Values
PUT /google-sheets/v4/spreadsheets/{spreadsheetId}/values/{range}?valueInputOption=USER_ENTERED
Content-Type: application/json
{
"values": [
["A1", "B1", "C1"],
["A2", "B2", "C2"]
]
}
Append Values
POST /google-sheets/v4/spreadsheets/{spreadsheetId}/values/{range}:append?valueInputOption=USER_ENTERED
Content-Type: application/json
{
"values": [
["New Row 1", "Data", "More Data"],
["New Row 2", "Data", "More Data"]
]
}
Batch Update Values
POST /google-sheets/v4/spreadsheets/{spreadsheetId}/values:batchUpdate
Content-Type: application/json
{
"valueInputOption": "USER_ENTERED",
"data": [
{"range": "Sheet1!A1:B2", "values": [["A1", "B1"], ["A2", "B2"]]},
{"range": "Sheet1!D1:E2", "values": [["D1", "E1"], ["D2", "E2"]]}
]
}
Clear Values
POST /google-sheets/v4/spreadsheets/{spreadsheetId}/values/{range}:clear
Create Spreadsheet
POST /google-sheets/v4/spreadsheets
Content-Type: application/json
{
"properties": {"title": "New Spreadsheet"},
"sheets": [{"properties": {"title": "Sheet1"}}]
}
Batch Update (formatting, add sheets, etc.)
POST /google-sheets/v4/spreadsheets/{spreadsheetId}:batchUpdate
Content-Type: application/json
{
"requests": [
{"addSheet": {"properties": {"title": "New Sheet"}}}
]
}
Common batchUpdate Requests
Update Cells with Formatting
{
"updateCells": {
"rows": [
{"values": [{"userEnteredValue": {"stringValue": "Name"}}, {"userEnteredValue": {"numberValue": 100}}]}
],
"fields": "userEnteredValue",
"start": {"sheetId": 0, "rowIndex": 0, "columnIndex": 0}
}
}
Format Header Row (Bold + Background Color)
{
"repeatCell": {
"range": {"sheetId": 0, "startRowIndex": 0, "endRowIndex": 1, "startColumnIndex": 0, "endColumnIndex": 3},
"cell": {
"userEnteredFormat": {
"backgroundColor": {"red": 0.2, "green": 0.6, "blue": 0.9},
"textFormat": {"bold": true}
}
},
"fields": "userEnteredFormat(backgroundColor,textFormat)"
}
}
Auto-Resize Columns
{
"autoResizeDimensions": {
"dimensions": {"sheetId": 0, "dimension": "COLUMNS", "startIndex": 0, "endIndex": 3}
}
}
Rename Sheet
{
"updateSheetProperties": {
"properties": {"sheetId": 0, "title": "NewName"},
"fields": "title"
}
}
Insert Rows/Columns
{
"insertDimension": {
"range": {"sheetId": 0, "dimension": "ROWS", "startIndex": 1, "endIndex": 3},
"inheritFromBefore": true
}
}
Sort Range
{
"sortRange": {
"range": {"sheetId": 0, "startRowIndex": 1, "endRowIndex": 10, "startColumnIndex": 0, "endColumnIndex": 3},
"sortSpecs": [{"dimensionIndex": 1, "sortOrder": "DESCENDING"}]
}
}
Add Filter
{
"setBasicFilter": {
"filter": {
"range": {"sheetId": 0, "startRowIndex": 0, "endRowIndex": 100, "startColumnIndex": 0, "endColumnIndex": 5}
}
}
}
Delete Sheet
{
"deleteSheet": {"sheetId": 123456789}
}
Value Input Options
RAW- Values are stored as-isUSER_ENTERED- Values are parsed as if typed into the UI (formulas executed, numbers parsed)
Range Notation
Sheet1!A1:D10- Specific rangeSheet1!A:D- Entire columns A through DSheet1!1:10- Entire rows 1 through 10Sheet1- Entire sheetA1:D10- Range in first sheet
Code Examples
JavaScript
// Read values
const response = await fetch(
'https://gateway.maton.ai/google-sheets/v4/spreadsheets/SHEET_ID/values/Sheet1!A1:D10',
{
headers: {
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
}
}
);
// Write values
await fetch(
'https://gateway.maton.ai/google-sheets/v4/spreadsheets/SHEET_ID/values/Sheet1!A1:B2?valueInputOption=USER_ENTERED',
{
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.MATON_API_KEY}`
},
body: JSON.stringify({
values: [['A1', 'B1'], ['A2', 'B2']]
})
}
);
Python
import os
import requests
# Read values
response = requests.get(
'https://gateway.maton.ai/google-sheets/v4/spreadsheets/SHEET_ID/values/Sheet1!A1:D10',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'}
)
# Write values
response = requests.put(
'https://gateway.maton.ai/google-sheets/v4/spreadsheets/SHEET_ID/values/Sheet1!A1:B2',
headers={'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'},
params={'valueInputOption': 'USER_ENTERED'},
json={'values': [['A1', 'B1'], ['A2', 'B2']]}
)
Notes
- Range in URL path must be URL-encoded (
!→%21,:→%3A) - Use
valueInputOption=USER_ENTEREDto parse formulas and numbers - Delete spreadsheets via the Google Drive API, not Sheets API
- Sheet IDs are numeric and found in the spreadsheet metadata
Error Handling
| Status | Meaning |
|---|---|
| 400 | Missing Google Sheets connection |
| 401 | Invalid or missing Maton API key |
| 429 | Rate limited (10 req/sec per account) |
| 4xx/5xx | Passthrough error from Google Sheets API |
Resources
Questions people ask
- How does authentication work?
- Requests use a bearer token (MATON_API_KEY) sent in the Authorization header. The gateway proxies calls to sheets.googleapis.com and injects the OAuth token for the connected Google account.
- Can I delete a spreadsheet through this skill?
- No. The documentation states that spreadsheets must be deleted through the Google Drive API, not the Sheets API.
- What rate limits apply?
- The gateway enforces a limit of 10 requests per second per account; higher loads receive HTTP 429 responses.
Related skills
Google Docs Connector: Google Docs: create, edit, format documents. Tables, images, headers, page breaks. Export to PDF/DOCX/HTML. Share and manage permissions. Use when an agent needs google docs connector, document automation, report generation, template creation, collaborative editing, batch update, document id, requests through AgentPMT-hosted remote tool calls. Discovery terms: google docs connector, document automation, report generation, template creation, collaborative editing.
Connect agents to Google Drive through managed OAuth for file and folder operations.
Create and manage Google Slides presentations via the Slides API through a managed OAuth proxy.
Design Gmail, Drive, Sheets, and Calendar automations with scope-aware plans. Use for repeatable daily task automation with explicit OAuth scopes and audit-r...
Plaud Recordings to Google Drive Sync: Automatically backs up your Plaud recordings to Google Drive and keeps a tracking spreadsheet in Google Sheets. Each time you run this workflow, it downloads any new recordings from your Plaud account to a "Plaud Recordings" folder in Drive, creates a transcript for each recording (using Plaud's built-in transcripts when available, or automatic speech-to-text otherwise), saves the transcript alongside the audio file, identifies what each recording is about.
More from byungkyu
Browse all skillsSend SMS, place voice calls, and manage Twilio phone resources through an OAuth-authenticated proxy.
Connect agents to Google Drive through managed OAuth for file and folder operations.
Manage Google Meet spaces, records, participants, recordings, and transcripts with managed OAuth.
Read, send, and manage Outlook mail, folders, calendar events, and contacts through Microsoft Graph with managed OAuth.
Create and manage Google Slides presentations via the Slides API through a managed OAuth proxy.
Route calls to third-party APIs through a managed gateway without handling OAuth or API keys yourself.