Join a video meeting as an AI bot with voice, avatar, and screenshare across four operating modes.
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
Find why your productivity system keeps failing, then apply the smallest fix — capacity math, bottleneck routing, durable local notes.
Fetch raw ad creative, app, ranking, and revenue data from AdMapix as structured JSON.
Stores durable facts in a categorized, plain-markdown vault on disk, alongside your agent's built-in memory.
Generate and edit Draw.io, Mermaid, and Excalidraw diagrams from natural language using a structured JSON spec.
Site audit, content writing, and competitor analysis for organic search rankings.
More from byungkyu
Browse all skillsRead and write Excel workbooks, worksheets, ranges, tables, and charts in OneDrive through Microsoft Graph with managed OAuth.
Manage Stripe customers, subscriptions, invoices, products, prices, and payments through OAuth-authenticated API calls.
Search, read, and manage YouTube videos, playlists, channels, subscriptions, and comments via managed OAuth.
Manage WooCommerce products, orders, customers, coupons, shipping, taxes, and more through managed OAuth REST API calls.
Manage ClickUp workspaces, spaces, folders, lists, and tasks via the ClickUp API with managed OAuth.
Query and manage Salesforce CRM records via REST API with managed OAuth authentication.