> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Google AppSheet Integration for AI Agents & Workflows

> Manage rows in Google AppSheet tables via the AppSheet API

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/zKB2qsP6Q61VNLfB/logos/google-appsheet.svg?fit=max&auto=format&n=zKB2qsP6Q61VNLfB&q=85&s=ac664d874adaec49c30e57cff4e6c614" alt="Google AppSheet logo" width="72" height="72" data-path="logos/google-appsheet.svg" />

## Overview

Add **Google AppSheet** to any ModuleX agent or workflow. Manage rows in Google AppSheet tables (add, read, update, delete) via the AppSheet REST API (`api.appsheet.com`).

<Info>
  **Categories**: Productivity & Collaboration · No Code · Databases · **Auth**: AppSheet API Key · **Actions**: 4
</Info>

## Authentication

### AppSheet API Key

Authenticate using your AppSheet Application Access Key and App ID

<Steps>
  <Step title="Step 1">
    Open your app in AppSheet at [https://www.appsheet.com](https://www.appsheet.com)
  </Step>

  <Step title="Step 2">
    Go to Settings > Integrations > IN: from cloud services to your app
  </Step>

  <Step title="Step 3">
    Enable the API and copy the Application Access Key
  </Step>

  <Step title="Step 4">
    Copy the App ID from the URL or Settings > App Info
  </Step>
</Steps>

#### Required Credentials

| Field                  | Description                                                                | Required | Format                                 |
| ---------------------- | -------------------------------------------------------------------------- | -------- | -------------------------------------- |
| App ID                 | Your AppSheet application ID (found in Settings > App Info or the app URL) | Yes      | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` |
| Application Access Key | Your AppSheet Application Access Key from Settings > Integrations          | Yes      | `V2-xxxxx-xxxxx-xxxxx-xxxxx-xxxxx`     |

## Available Actions

<AccordionGroup>
  <Accordion title="add_row — Add a new row to a specific table in the AppSheet app">
    ### Parameters

    <ResponseField name="table_name" type="string" required>
      Name of the table to add a row to
    </ResponseField>

    <ResponseField name="row" type="object" required>
      JSON object representing the row data to add, with keys matching table column names
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "rows": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Rows",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "AddRowOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="delete_row — Delete a specific row from a table in the AppSheet app">
    ### Parameters

    <ResponseField name="table_name" type="string" required>
      Name of the table to delete a row from
    </ResponseField>

    <ResponseField name="row" type="object">
      JSON object containing the key field values of the record to delete
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "rows": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Rows",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "DeleteRowOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_rows — Read existing records from a table in the AppSheet app">
    ### Parameters

    <ResponseField name="table_name" type="string" required>
      Name of the table to read rows from
    </ResponseField>

    <ResponseField name="selector" type="string">
      An expression to filter and format the rows returned, e.g. Filter(TableName, \[Column] = "Value")
    </ResponseField>

    <ResponseField name="row" type="object">
      Filter results using key field values, e.g. \{"First Name": "John"}
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "rows": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Rows",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetRowsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="update_row — Update an existing row in a specific table in the AppSheet app">
    ### Parameters

    <ResponseField name="table_name" type="string" required>
      Name of the table containing the row to update
    </ResponseField>

    <ResponseField name="row" type="object" required>
      JSON object with the key field values of the record to update and any fields to change
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "rows": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Rows",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "UpdateRowOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* AppSheet API has no publicly documented per-minute rate limits, but Google
  recommends keeping request volume moderate for shared-tenant apps.
* Each app must have the API enabled in Settings > Integrations.
* Error model: non-2xx responses and timeouts are caught and returned as
  `success=False` + `error` rather than raising.

## Related integrations

<CardGroup cols={3}>
  <Card title="Cal.com" href="/integrations/tools/cal-com" />

  <Card title="Canva" href="/integrations/tools/canva" />

  <Card title="ConvertAPI" href="/integrations/tools/convertapi" />
</CardGroup>

## Links

* [Google AppSheet](https://www.appsheet.com)
