# Google Sheets

## Links

- Product page URL: https://www.agentpmt.com/marketplace/google-sheets-api
- Product markdown URL: https://www.agentpmt.com/marketplace/google-sheets-api?format=agent-md
- Product JSON URL: https://www.agentpmt.com/marketplace/google-sheets-api?format=agent-json

## Overview

- Product ID: 696302894cf4309309cac7b2
- Type: connector
- Unit type: request
- Price: 500 credits
- Categories: Financial Modeling, Data Science, Mathematical Computing, Data Storage & Persistence, Data Processing, Data Formatting & Conversion, List & Array Operations, Sorting & Ordering, Finance & Accounting, Portfolio Management, E-commerce & Product Catalog, Survey & Feedback Collection, Marketing Automation, Team Collaboration & Workspaces, Task & Workflow Automation
- Generated at: 2026-08-28T23:40:07.577Z

### Page Description

Create, read, update, format, share, and export Google Sheets with agent-safe spreadsheet workflows. Append rows at the true table end, append columns after the last non-empty data column, update selected fields in matched rows, manage tabs, apply validation and formatting, and store CSV/PDF/XLSX exports in File Manager.

### Agent Description

Work with Google Sheets using safe short actions: create and find spreadsheets, list tabs, read data, append rows at the true table end, append columns at the current data edge, update selected fields by key, export specific sheets or whole workbooks, share files, format cells, protect ranges, add named ranges, set validation, add conditional formatting, and copy or move ranges.

## Details

### Details

Create, read, update, format, share, and export Google Sheets with agent-safe spreadsheet workflows. Append rows at the true table end, append columns after the last non-empty data column, update selected fields in matched rows, manage tabs, apply validation and formatting, and store CSV/PDF/XLSX exports in File Manager.

### Actions

- `create` (5 credits): Create a new spreadsheet, optionally with an initial tab, headers, and rows.
- `search` (5 credits): Search or list recent Google Sheets spreadsheets.
- `list_sheets` (5 credits): List the tabs in a spreadsheet with sheet ids and dimensions.
- `read` (5 credits): Read values from a tab or A1 range. If sheet_name is omitted, resolves the real first tab.
- `get_headers` (5 credits): Read the header row and return header-to-column mappings plus duplicate diagnostics.
- `get_data_range` (5 credits): Find the last non-empty row/column and recommended append start for a tab.
- `append_rows` (5 credits): Append rows at the true table end. Object rows are mapped by sheet headers.
- `append_column` (5 credits): Append one new column immediately after the last non-empty data column and write its header and values.
- `update_row` (5 credits): Update selected columns in a matched row using header names. Touches only requested cells.
- `export_sheet` (5 credits): Export a specific sheet or whole spreadsheet to File Manager as CSV, TSV, PDF, XLSX, ODS, HTML, or ZIP.
- `share` (5 credits): Share a spreadsheet with a user, group, domain, or anyone.
- `add_sheet` (5 credits): Add a new tab to a spreadsheet.
- `delete_sheet` (5 credits): Delete a tab by name, id, or index.
- `rename_sheet` (5 credits): Rename a tab by name, id, or index.
- `sort` (5 credits): Sort a range, preferably by header name.
- `find_replace` (5 credits): Find and replace text across the spreadsheet or one sheet.
- `format_cells` (5 credits): Apply cell formatting or number format to a range.
- `protect_range` (5 credits): Protect a range, optionally warning-only or with explicit editor emails.
- `unprotect_range` (5 credits): Remove protection by protected range id.
- `add_named_range` (5 credits): Create a named range.
- `delete_named_range` (5 credits): Delete a named range by id.
- `set_data_validation` (5 credits): Set a Sheets data validation rule on a range.
- `add_conditional_formatting` (5 credits): Add a conditional formatting rule to a range.
- `copy_paste` (5 credits): Copy a source range to a destination range.
- `cut_paste` (5 credits): Move a source range to a destination start cell.

### Use Cases

append spreadsheet rows safely, update CRM-style rows by key, export a sheet to CSV or PDF, create reporting spreadsheets, add data validation to templates, protect header ranges, share sheets with collaborators, copy or move spreadsheet ranges, format dashboards, manage sheet tabs

### Workflows Using This Tool

#### 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 (meeting, interview, note, etc.), and logs everything in a spreadsheet with links to the audio and transcript files. You can run this as often as you like - it only processes new recordings and won't duplicate anything. Just connect your Plaud, Google Drive, and Google Sheets accounts and run it whenever you want to sync your latest recordings.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/plaud-recordings-to-google-drive-sync
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/plaud-recordings-to-google-drive-sync?format=agent-md
- Published: 2026-08-07T14:43:24.041Z

#### Narrated Walkthrough to a Numbered SOP Document

Turns talking through a job out loud into a written, numbered standard operating procedure. Built for the people who actually know the equipment and have no time to write documentation: maintenance and facilities teams, field service, manufacturing, labs, franchise operations, and any owner trying to get a process out of their own head before handing it over. Walk the machine or the task and narrate it, saying the step number out loud as you go, and the workflow pulls the transcript of each new Plaud recording and turns it into a clean procedure document: a title, the equipment or process it covers, tools and safety notes gathered into their own sections, then numbered steps in the order you said them, with your asides and warnings kept attached to the step they belong to. Filler, false starts and interruptions are dropped; the technical content is left in your words rather than rewritten into corporate documentation voice. It lands as a Google Doc so it stays editable and exports to PDF or Word, and anything the narration left ambiguous is flagged at the end for you to fill in rather than being invented. Say each step number aloud and the transcript carries its own index, which makes pairing photos to steps afterwards mechanical instead of guesswork.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/narrated-walkthrough-to-a-numbered-sop-document
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/narrated-walkthrough-to-a-numbered-sop-document?format=agent-md
- Published: 2026-07-26T00:01:54.152Z

#### One Plaud Recording, Several Differently Formatted Summaries

Gets you past the one-template-per-recording ceiling. The Plaud app applies a single AutoFlow template to a recording, so if you want a short recap for yourself, a decisions-only version for the people who missed it, and a clean action list for your task manager, you are re-running or rewriting by hand. This workflow reads the transcript once and produces every format you have defined in a single pass: you list the output formats you want in a Google Sheet, each with a name and a description of the shape and audience, and the workflow generates all of them from the same source text and writes them into one Google Doc per recording with a section for each. Because every version comes from the same read of the transcript, they stay consistent with each other rather than drifting the way separately generated summaries do. Formats are yours to change at any time by editing the sheet, with no re-recording and no template juggling in the app. A processed log keeps each recording to a single pass so it can run on a schedule over everything new.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/one-plaud-recording-several-differently-formatted-summaries
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/one-plaud-recording-several-differently-formatted-summaries?format=agent-md
- Published: 2026-07-26T00:01:46.081Z

#### Plaud Transcripts Corrected With Your Own Terminology Glossary

Fixes the words your transcription keeps getting wrong, by giving the pipeline your vocabulary instead of hoping a bigger model guesses right. Every speech model mangles terms it has never seen: cell line and reagent names, drug and device names, case and matter numbers, part numbers, local spelling and number conventions, team and client names. Swapping to a different model does not fix this, because none of them have your terms either. Keep a plain Google Sheet glossary of the terms that matter, each with the spelling you want and the misfires it usually comes back as ("HEK293" for "heck two ninety three"), plus any formatting rules you need enforced, such as Swiss German ss instead of eszett or 1'000.00 number style. On each run the workflow reads the glossary, pulls the transcript of every new Plaud recording, applies the corrections to the transcript first, and only then writes the summary and action items from the corrected text, so your terminology is right everywhere downstream instead of only in the raw transcript. The corrected transcript and summary land in a Google Doc, and every correction made is listed so you can see what changed and keep tuning the glossary. Unknown terms are flagged, never silently normalized into something that looks plausible.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/plaud-transcripts-corrected-with-your-own-terminology-glossary
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/plaud-transcripts-corrected-with-your-own-terminology-glossary?format=agent-md
- Published: 2026-07-26T00:01:37.863Z

#### Plaud Recordings to Google Calendar Events

Puts the meetings you agree to out loud straight onto your Google Calendar, without Zapier in the middle. Plaud's own app has no Calendar integration, so this closes that gap directly: each new recording is scanned, the transcript pulled, and any genuine scheduling commitment spoken in it ("let's do Tuesday at 3", "I'll come back out Thursday morning") is extracted with the relative date resolved against the recording's own date and your timezone. Each one becomes a Google Calendar event with the agreed time, a title naming who and what, and the surrounding quote from the transcript in the description so you can see exactly what was said. Vague intentions with no time attached ("we should catch up sometime") are deliberately ignored rather than guessed into a slot. Because it uses the full Google Calendar connector it also reads back, so an agent can answer what your week looks like from the same connection. A Google Sheet ledger records every recording id and every event created, so a scheduled run never double-books you.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/plaud-recordings-to-google-calendar-events
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/plaud-recordings-to-google-calendar-events?format=agent-md
- Published: 2026-07-26T00:01:29.867Z

#### Plaud Spoken Field Notes to a Structured Sheet

Turns a spoken site visit into a filled-in spreadsheet row, so measurements and specs never get typed up twice. Built for anyone who dictates structured details on the job rather than writing them down: window and flooring measurements, equipment specs, inspection findings, punch lists, service call notes. Say the details out loud in the same order each visit (client, room, width, drop, colour, notes) and the workflow reads each new Plaud recording, pulls its transcript, extracts only the values actually spoken, and appends them as one row to your Google Sheet under whatever column headers you have already set up. Values are never inferred: if a measurement was not said, the cell is left empty and flagged in the run summary rather than guessed, because a fabricated number on a quote is worse than a blank one. Recordings that are not field dictations (meetings, personal memos, ambient audio) are logged as skipped and produce no row. A Processed tab records every recording id so the workflow can run on a schedule without duplicating rows. Pair it with your own quote template and the spreadsheet row becomes the quote.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/plaud-spoken-field-notes-to-a-structured-sheet
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/plaud-spoken-field-notes-to-a-structured-sheet?format=agent-md
- Published: 2026-07-26T00:01:20.998Z

#### Plaud Spoken Commitments to Telegram Reminders

Catches every date and time you commit to out loud in your Plaud recordings — "I'll send it Thursday", "meet Bob at 3" — and sends the whole batch to you on Telegram. Scans each new recording, pulls the transcript (reusing the recording's own transcript when one exists), extracts spoken commitments and resolves relative dates against the recording date and your timezone, and logs them to a "Plaud Commitments" Google Sheet. Every run then sends one Telegram digest listing all open commitments sorted by due date, with overdue items flagged. Mark a row "done" in the sheet to drop it from future digests. Schedule it daily and the digest becomes your morning commitments briefing — no phone number needed: connect once through the AgentPMT Telegram bot, and if you haven't yet, the run summary walks you through it. A processed-recordings tab guarantees each recording is scanned exactly once.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/plaud-spoken-commitments-to-sms-reminders
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/plaud-spoken-commitments-to-sms-reminders?format=agent-md
- Published: 2026-07-22T14:01:25.974Z

#### Plaud Client Follow-Up Email Drafter

Drafts a follow-up email after every client call you record with Plaud — and never sends without your approval. Reviews each new recording, pulls the transcript (reusing the recording's own transcript when one exists), identifies genuine client conversations, and drafts a warm, concise follow-up recapping the discussion, what each side committed to, and the agreed next step — written strictly from what was said. Looks up the client's email address in your Google Contacts, then sends you the draft with the proposed recipient for approval; only after you approve (and confirm the address) is the email sent from your own Gmail account, so it lands in your Sent folder and replies come back to you. Every recording is logged in a Google Sheet so nothing is drafted twice. Skipped and rejected drafts are recorded with their reason.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/plaud-client-follow-up-email-drafter
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/plaud-client-follow-up-email-drafter?format=agent-md
- Published: 2026-07-22T04:40:53.556Z

#### Plaud Meeting Recap to Slack

Posts a clean, speaker-labeled recap of every team meeting you record with Plaud into a Slack channel of your choice (defaults to #meeting-recaps). Reviews each new recording, pulls the transcript (reusing the recording's own transcript when one exists), identifies genuine multi-person team meetings — solo memos, client calls, and test recordings are skipped — and posts a formatted recap with participants, decisions, topics discussed, and action items with owners. A Google Sheet ledger guarantees each recording is handled exactly once, so the workflow can run on a schedule without duplicate posts. The Slack app must be a member of the target channel.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/plaud-meeting-recap-to-slack
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/plaud-meeting-recap-to-slack?format=agent-md
- Published: 2026-07-22T04:25:40.501Z

#### Plaud Master Action-Item Tracker

Collects every action item spoken in your Plaud recordings into one master Google Sheet. Scans each new recording, pulls its transcript (reusing the recording's own transcript when one exists) and AI summary, extracts concrete tasks with the responsible owner and any spoken due date (resolved to a real calendar date from the recording date), and appends them to an "Action Items" tab with status "open" — deduplicated within and across meetings so the same commitment never appears twice. A "Processed Recordings" tab guarantees each recording is scanned exactly once, so the workflow can run on a schedule. Solves the problem of action items being trapped inside individual meeting summaries.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/plaud-master-action-item-tracker
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/plaud-master-action-item-tracker?format=agent-md
- Published: 2026-07-22T04:22:11.630Z

#### Plaud Call Logger for Pipedrive

Turns your Plaud voice recordings of client calls into Pipedrive records automatically. Reviews every new recording, identifies genuine client conversations, transcribes them (reusing the recording's own transcript when one exists), saves the transcript to a "Plaud Call Logs" Drive folder, matches the spoken client name and company to a Pipedrive person and open deal, attaches a call note with the discussion summary, commitments, next steps, and transcript link, and creates a follow-up activity dated from spoken commitments. Keeps a Google Sheet ledger so every recording is processed exactly once; recordings that are not client calls are logged and skipped. Re-runnable and idempotent.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/plaud-call-logger-for-pipedrive
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/plaud-call-logger-for-pipedrive?format=agent-md
- Published: 2026-07-22T04:22:05.790Z

#### X (Twitter) Thought Leadership Engine: Human-Voice AI Posts from Industry News with Approval and Auto-Publish

Stay visible on X (Twitter) every week without staring at a blank compose box. Give this AI social media workflow your beats and your positioning, and it scans the last week of industry news, picks the strongest non-overlapping angles, and writes opinionated, fact-backed posts in a natural human voice that sounds like you, not a press release. Every post is screened by an automated writing quality check that strips robotic, overused AI phrasing, and posts that benefit from a visual get a custom 16:9 image. All drafts queue in a Google Sheet and come to you for batch approval, and the workflow checks back for your decision at 5 and 10 minutes. Approve and it publishes to X, attaching images and links correctly, then marks each row with the live post link so you keep a complete content log. Miss the window and nothing posts: every draft stays safely queued in the sheet, ready to approve and publish on a later run. Ideal for founders, executives, consultants, developer advocates, and marketers who want Twitter automation with editorial control: AI-generated social media posts, social SEO, personal branding, content marketing, and a consistent thought leadership presence built on real facts and a human voice.

- Page URL: https://www.agentpmt.com/agent-workflow-skills/x-thought-leadership-engine-turn-industry-news-into-human-voice-posts-with-approval-and-auto-publish
- Markdown URL: https://www.agentpmt.com/agent-workflow-skills/x-thought-leadership-engine-turn-industry-news-into-human-voice-posts-with-approval-and-auto-publish?format=agent-md
- Published: 2026-06-10T20:59:52.887Z

### Related Content

No related content is currently linked to this product.

## Documentation

No platform documentation is currently linked to this product.

## Integration Details

### DynamicMCP

- Setup page URL: https://www.agentpmt.com/dynamic-mcp
- Claude setup guide: https://www.agentpmt.com/dynamic-mcp#platform=claude
- ChatGPT setup guide: https://www.agentpmt.com/dynamic-mcp#platform=chatgpt
- Cursor setup guide: https://www.agentpmt.com/dynamic-mcp#platform=cursor
- Windsurf setup guide: https://www.agentpmt.com/dynamic-mcp#platform=windsurf

Use the local router for command-based MCP clients. It forwards requests to `https://api.agentpmt.com/mcp` and does not execute tools locally.

```bash
npm install -g @agentpmt/mcp-router
agentpmt-setup
```

### REST API

The live page renders cURL, Python, JavaScript, and Node.js examples. Logged-in users see those examples prefilled with their own API and budget credentials.

- Purchase endpoint: https://api.agentpmt.com/products/purchase
- Authorization format: `Bearer <base64(apiKey:budgetKey)>`

```bash
curl -X POST "https://api.agentpmt.com/products/purchase" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer eW91ci1hcGkta2V5LWhlcmU6eW91ci1idWRnZXQta2V5LWhlcmU=" \
  -d '{
    "product_id": "696302894cf4309309cac7b2",
    "parameters": {
      "action": "create",
      "title": "example_title"
    }
  }'
```

### Autonomous Agents

Autonomous agents can access this tool through AgentAddress credit balances or direct x402 payments. Use the Autonomous Agent API reference for endpoint shapes after choosing the access pattern below.

- Autonomous Agent API reference URL: https://www.agentpmt.com/docs/api-reference/autonomous-agents
- Autonomous Agent API reference markdown URL: https://www.agentpmt.com/docs/api-reference/autonomous-agents?format=agent-md
- Credit-Based Access Using AgentAddress: https://www.agentpmt.com/docs/autonomous-agents/credit-based-tool-usage-with-agentaddress
- AgentAddress is preferred for persistent file access, stored platform state, and maximum tool use ability across repeated calls.
- Direct x402 is for independent one-off tool calls that do not require shared files or stored platform state.
- Direct x402 public payments: USDC on Base, Arbitrum, Optimism, Polygon, and Avalanche.

#### Product Skill Package

This product has a published Agent Skill package for product-specific operating instructions.

- Skill slug: google-sheets
- Version: 1.0.0
- Download SKILL.md: https://raw.githubusercontent.com/AgentPMT/agent-skills/main/skills/google-sheets/SKILL.md
- Package source: https://github.com/AgentPMT/agent-skills/tree/main/skills/google-sheets
- OpenClaw listing: https://clawhub.ai/agentpmt/google-sheets
- OpenClaw install: `openclaw skills install google-sheets`
- skills.sh install: `npx skills add AgentPMT/agent-skills --skill google-sheets`
- Last published: 2026-06-24T02:13:50.713Z

### Schema

#### Credentials

These runtime credentials should be provided under `parameters._credentials` when required.

- Google OAuth (`google_oauth`, oauth_token, required)
  Help: Connect your Google account.
  Connection ID: 69616abea90ed54743f01957

#### Parameters

- Schema type: actions

```json
{
  "actions": {
    "create": {
      "description": "Create a new spreadsheet, optionally with an initial tab, headers, and rows.",
      "properties": {
        "title": {
          "type": "string",
          "description": "Spreadsheet title.",
          "required": true
        },
        "initial_sheet_name": {
          "type": "string",
          "description": "Optional first tab name.",
          "required": false
        },
        "initial_headers": {
          "type": "array",
          "description": "Optional first header row.",
          "required": false,
          "items": {
            "type": "string"
          }
        },
        "rows": {
          "type": "array",
          "description": "Optional initial rows as arrays or objects keyed by headers.",
          "required": false,
          "items": {
            "type": "object"
          }
        }
      }
    },
    "search": {
      "description": "Search or list recent Google Sheets spreadsheets.",
      "properties": {
        "query": {
          "type": "string",
          "description": "Optional search text matched against spreadsheet name/content.",
          "required": false
        },
        "max_results": {
          "type": "integer",
          "description": "Maximum results to return, 1-100.",
          "required": false,
          "minimum": 1,
          "maximum": 100
        }
      }
    },
    "list_sheets": {
      "description": "List the tabs in a spreadsheet with sheet ids and dimensions.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        }
      }
    },
    "read": {
      "description": "Read values from a tab or A1 range. If sheet_name is omitted, resolves the real first tab.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "sheet_id": {
          "type": "integer",
          "description": "Optional numeric sheet id.",
          "required": false
        },
        "range": {
          "type": "string",
          "description": "Optional A1 range. Bare ranges are qualified with sheet_name.",
          "required": false
        },
        "value_render_option": {
          "type": "string",
          "description": "FORMATTED_VALUE, UNFORMATTED_VALUE, or FORMULA.",
          "required": false
        }
      }
    },
    "get_headers": {
      "description": "Read the header row and return header-to-column mappings plus duplicate diagnostics.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "header_row": {
          "type": "integer",
          "description": "One-based header row, default 1.",
          "required": false,
          "minimum": 1
        }
      }
    },
    "get_data_range": {
      "description": "Find the last non-empty row/column and recommended append start for a tab.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "range": {
          "type": "string",
          "description": "Optional A1 range to inspect.",
          "required": false
        }
      }
    },
    "append_rows": {
      "description": "Append rows at the true table end. Object rows are mapped by sheet headers.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "rows": {
          "type": "array",
          "description": "Rows as arrays or objects keyed by headers.",
          "required": true,
          "items": {
            "type": "object"
          }
        },
        "header_row": {
          "type": "integer",
          "description": "One-based header row, default 1.",
          "required": false,
          "minimum": 1
        },
        "value_input_option": {
          "type": "string",
          "description": "USER_ENTERED or RAW.",
          "required": false
        }
      }
    },
    "append_column": {
      "description": "Append one new column immediately after the last non-empty data column and write its header and values.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "column_name": {
          "type": "string",
          "description": "New column header.",
          "required": true
        },
        "column_values": {
          "type": "array",
          "description": "Values to write below the header at the data table edge.",
          "required": true,
          "items": {
            "type": "string"
          }
        }
      }
    },
    "update_row": {
      "description": "Update selected columns in a matched row using header names. Touches only requested cells.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "row_number": {
          "type": "integer",
          "description": "Optional one-based row number.",
          "required": false,
          "minimum": 1
        },
        "key_column": {
          "type": "string",
          "description": "Header used to find the row when row_number is omitted.",
          "required": false
        },
        "key_value": {
          "type": "string",
          "description": "Value to match in key_column.",
          "required": false
        },
        "updates": {
          "type": "object",
          "description": "Column patch keyed by header names.",
          "required": true
        },
        "multi": {
          "type": "boolean",
          "description": "Allow all matching rows to update.",
          "required": false
        }
      }
    },
    "export_sheet": {
      "description": "Export a specific sheet or whole spreadsheet to File Manager as CSV, TSV, PDF, XLSX, ODS, HTML, or ZIP.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name for specific-sheet export.",
          "required": false
        },
        "sheet_id": {
          "type": "integer",
          "description": "Optional numeric sheet id.",
          "required": false
        },
        "range": {
          "type": "string",
          "description": "Optional range for CSV/TSV exports.",
          "required": false
        },
        "format": {
          "type": "string",
          "description": "csv, tsv, pdf, xlsx, ods, html, or zip.",
          "required": true
        },
        "filename": {
          "type": "string",
          "description": "Optional stored filename.",
          "required": false
        },
        "expiration_days": {
          "type": "integer",
          "description": "File Manager expiration, 1-7 days.",
          "required": false,
          "minimum": 1,
          "maximum": 7
        }
      }
    },
    "share": {
      "description": "Share a spreadsheet with a user, group, domain, or anyone.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "email": {
          "type": "string",
          "description": "Email for user/group shares.",
          "required": false
        },
        "domain": {
          "type": "string",
          "description": "Domain for domain shares.",
          "required": false
        },
        "role": {
          "type": "string",
          "description": "reader, commenter, writer, organizer, fileOrganizer, or owner.",
          "required": false
        },
        "permission_type": {
          "type": "string",
          "description": "user, group, domain, or anyone.",
          "required": false
        }
      }
    },
    "add_sheet": {
      "description": "Add a new tab to a spreadsheet.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "new_sheet_name": {
          "type": "string",
          "description": "New tab name.",
          "required": true
        }
      }
    },
    "delete_sheet": {
      "description": "Delete a tab by name, id, or index.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Tab name.",
          "required": false
        },
        "sheet_id": {
          "type": "integer",
          "description": "Numeric sheet id.",
          "required": false
        },
        "sheet_index": {
          "type": "integer",
          "description": "Zero-based tab index.",
          "required": false
        }
      }
    },
    "rename_sheet": {
      "description": "Rename a tab by name, id, or index.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "new_sheet_name": {
          "type": "string",
          "description": "New tab name.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Current tab name.",
          "required": false
        },
        "sheet_id": {
          "type": "integer",
          "description": "Numeric sheet id.",
          "required": false
        },
        "sheet_index": {
          "type": "integer",
          "description": "Zero-based tab index.",
          "required": false
        }
      }
    },
    "sort": {
      "description": "Sort a range, preferably by header name.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name when range is bare A1 notation.",
          "required": false
        },
        "range": {
          "type": "string",
          "description": "A1 range to sort.",
          "required": true
        },
        "sort_specs": {
          "type": "array",
          "description": "Sort specs with header/column_name or dimensionIndex and order/sortOrder.",
          "required": true,
          "items": {
            "type": "object"
          }
        }
      }
    },
    "find_replace": {
      "description": "Find and replace text across the spreadsheet or one sheet.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "find": {
          "type": "string",
          "description": "Text or regex to find.",
          "required": true
        },
        "replacement": {
          "type": "string",
          "description": "Replacement text.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab limit.",
          "required": false
        },
        "match_case": {
          "type": "boolean",
          "description": "Case-sensitive match.",
          "required": false
        },
        "match_entire_cell": {
          "type": "boolean",
          "description": "Match entire cell contents only.",
          "required": false
        },
        "search_by_regex": {
          "type": "boolean",
          "description": "Treat find as regex.",
          "required": false
        }
      }
    },
    "format_cells": {
      "description": "Apply cell formatting or number format to a range.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "range": {
          "type": "string",
          "description": "A1 range to format.",
          "required": true
        },
        "cell_format": {
          "type": "object",
          "description": "Text/background/alignment/wrap formatting.",
          "required": false
        },
        "number_format": {
          "type": "object",
          "description": "Sheets numberFormat object.",
          "required": false
        }
      }
    },
    "protect_range": {
      "description": "Protect a range, optionally warning-only or with explicit editor emails.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "range": {
          "type": "string",
          "description": "A1 range to protect.",
          "required": true
        },
        "description": {
          "type": "string",
          "description": "Protection description.",
          "required": false
        },
        "warning_only": {
          "type": "boolean",
          "description": "If true, warn instead of blocking edits.",
          "required": false
        },
        "editor_emails": {
          "type": "array",
          "description": "Users allowed to edit protected range.",
          "required": false,
          "items": {
            "type": "string"
          }
        }
      }
    },
    "unprotect_range": {
      "description": "Remove protection by protected range id.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "protected_range_id": {
          "type": "integer",
          "description": "Google protectedRangeId to delete.",
          "required": true
        }
      }
    },
    "add_named_range": {
      "description": "Create a named range.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "range": {
          "type": "string",
          "description": "A1 range.",
          "required": true
        },
        "name": {
          "type": "string",
          "description": "Named range name.",
          "required": true
        }
      }
    },
    "delete_named_range": {
      "description": "Delete a named range by id.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "named_range_id": {
          "type": "string",
          "description": "Google namedRangeId to delete.",
          "required": true
        }
      }
    },
    "set_data_validation": {
      "description": "Set a Sheets data validation rule on a range.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "range": {
          "type": "string",
          "description": "A1 range.",
          "required": true
        },
        "validation_rule": {
          "type": "object",
          "description": "Sheets DataValidationRule object.",
          "required": true
        }
      }
    },
    "add_conditional_formatting": {
      "description": "Add a conditional formatting rule to a range.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "range": {
          "type": "string",
          "description": "A1 range for the rule.",
          "required": true
        },
        "rule": {
          "type": "object",
          "description": "Sheets ConditionalFormatRule object; ranges can be omitted.",
          "required": true
        }
      }
    },
    "copy_paste": {
      "description": "Copy a source range to a destination range.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "source_range": {
          "type": "string",
          "description": "A1 source range.",
          "required": true
        },
        "destination_range": {
          "type": "string",
          "description": "A1 destination range.",
          "required": true
        },
        "paste_type": {
          "type": "string",
          "description": "Sheets pasteType such as PASTE_NORMAL or PASTE_VALUES.",
          "required": false
        },
        "paste_orientation": {
          "type": "string",
          "description": "NORMAL or TRANSPOSE.",
          "required": false
        }
      }
    },
    "cut_paste": {
      "description": "Move a source range to a destination start cell.",
      "properties": {
        "spreadsheet_id": {
          "type": "string",
          "description": "Google spreadsheet id or URL.",
          "required": true
        },
        "sheet_name": {
          "type": "string",
          "description": "Optional tab name.",
          "required": false
        },
        "source_range": {
          "type": "string",
          "description": "A1 source range.",
          "required": true
        },
        "destination_range": {
          "type": "string",
          "description": "A1 destination start cell.",
          "required": true
        },
        "paste_type": {
          "type": "string",
          "description": "Sheets pasteType such as PASTE_NORMAL or PASTE_VALUES.",
          "required": false
        }
      }
    }
  }
}
```

### Usage Instructions

# Google Sheets

Use short action names. Prefer `read`, `append_rows`, `append_column`, `update_row`, and `export_sheet` for common workflows.

Safety rules:
- Do not guess a tab is named `Sheet1`; omit `sheet_name` or call `list_sheets`.
- Do not calculate append row or column positions; use `append_rows` or `append_column`.
- `append_rows` appends at the true table end. `append_column` writes after the last non-empty data column, not at a blank default grid edge.
- Do not overwrite full rows when only selected fields changed; use `update_row` with `updates`.
- Use `export_sheet` for CSV/TSV/PDF/XLSX/ODS/HTML/ZIP exports. Specific-sheet rendered exports use an official temporary-spreadsheet flow.

Examples:
```json
{"action":"read","spreadsheet_id":"1abc...","sheet_name":"Leads","range":"A1:D20"}
```
```json
{"action":"append_rows","spreadsheet_id":"1abc...","sheet_name":"Leads","rows":[{"Name":"Ada","Status":"New"}]}
```
```json
{"action":"append_column","spreadsheet_id":"1abc...","sheet_name":"Leads","column_name":"Owner","column_values":["Sam","Riley"]}
```
```json
{"action":"update_row","spreadsheet_id":"1abc...","sheet_name":"Leads","key_column":"Email","key_value":"ada@example.com","updates":{"Status":"Qualified","Owner":"Sam"}}
```
```json
{"action":"export_sheet","spreadsheet_id":"1abc...","sheet_name":"Leads","format":"pdf","filename":"leads.pdf"}
```

### Frequently Asked Questions

#### How do I connect this tool to an external agent?

- Page URL: https://www.agentpmt.com/faq
- Markdown URL: https://www.agentpmt.com/faq?format=agent-md

You can install the local MCP server by opening a terminal and running:

```
npm install -g @agentpmt/mcp-router
agentpmt-setup
```

This will connect you to local agents like Claude Code, Windsurf, Grok Build, Cursor, etc.

Alternatively you can connect to the hosted version with this config block, no installation required:

```
{
  "mcpServers": {
    "agentpmt": {
      "type": "streamable-http",
      "url": "https://api.agentpmt.com/mcp",
      "headers": {
        "Authorization": "Bearer <AGENTPMT_BEARER_TOKEN>",
        "x-instance-metadata": "{\"client\":\"generic-mcp\",\"platform\":\"remote\"}"
      }
    }
  }
}
```

[View MCP Connection Instructions](/docs/mcp-reference/connection) for more details.

#### How does an external agent use this tool?

- Page URL: https://www.agentpmt.com/faq
- Markdown URL: https://www.agentpmt.com/faq?format=agent-md

After the external agent is connected to an Agent Group that can use this tool, paste this prompt into the agent:

> Use the AgentPMT-Tool-Search-and-Execution tool. First call action 'get\_instructions' so you know how to use the tool search interface. Then call action 'get\_schema' with tool\_id 696302894cf4309309cac7b2 ("Google Sheets"). After reading the schema and any returned instructions, tell me what this tool can do, we are going to be using it

The agent should fetch the tool schema first, collect the required parameters for your request, and then call the tool through AgentPMT.

### Dependencies

This product has no public dependency products.