# Upsert Row — Google Sheets

> Upsert a row of data in a Google Sheet. See the documentation

- Key: `google_sheets-upsert-row`
- Type: Action (Write)
- Version: 0.1.21
- App: Google Sheets (`google_sheets`) — https://pipedream.com/apps/google-sheets.md
- This page (HTML): https://pipedream.com/apps/google-sheets/actions/upsert-row
- Hints: destructive · open-world
- Source: https://github.com/PipedreamHQ/pipedream/blob/master/components/google_sheets/actions/upsert-row/upsert-row.mjs

## Description

Upsert a row of data in a Google Sheet. [See the documentation](https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/append)

## Props

| Prop | Type | Required | Description |
|---|---|---|---|
| `drive` | `string` | No | Select a specific drive to search. Defaults to All Drives (My Drive and all Shared Drives you have access to) when no selection is made. To limit to your personal drive or a Shared Drive, select it from this list. Options are loaded from the connected account. |
| `sheetId` | `string` | Yes | Select a spreadsheet or provide a spreadsheet ID Options are loaded from the connected account. |
| `worksheetId` | `integer` | Yes | Select a worksheet or provide a worksheet ID Options are loaded from the connected account. |
| `insert` | `string[]` | Yes | Insert statement: the row data you want to add to the Google sheet if the key doesn't exist. If the key does exist and Update is not set, the row will be updated using this array. Enter individual cell values or enter a custom expression to pass an array with each element representing a cell/column value (e.g. {{ [5, "test"] }}). |
| `column` | `string` | Yes | The column of the sheet to lookup (e.g. A). This column functions as the key column for the upsert operation. |
| `value` | `string` | No | The value of the key to search for in Key Column. Defaults to the value in Insert's "key" column if left blank. |
| `updates` | `object` | No | Update statment: if the spreadsheet contains duplicate key Value in some row in the specified Column, individual cells in the first duplicate row will be updated using this object's column-value pairs.<br /> Enter the column name for the key (e.g. B) and the corresponding column value (e.g. test). You may also enter a custom expression and pass a JSON object with key/value pairs representing columns and values (e.g. {{ { A: 5, B: "test" } }}). |

## Run it

**MCP**

```ts
import { Client } from "@modelcontextprotocol/sdk/client/index.js"
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js"
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const accessToken = await pd.rawAccessToken

const transport = new StreamableHTTPClientTransport(
  new URL("https://remote.mcp.pipedream.net/v3"),
  {
    requestInit: {
      headers: {
        Authorization: `Bearer ${accessToken}`,
        "x-pd-project-id": process.env.PIPEDREAM_PROJECT_ID!,
        "x-pd-environment": "production",
        "x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
        "x-pd-app-slug": "google_sheets",
      },
    },
  },
)

const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)

const { tools } = await mcp.listTools()

// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
  name: "google_sheets-upsert-row",
  arguments: {
    drive: "Drive",
    sheetId: "Spreadsheet ID",
  },
})
```

**TypeScript**

```ts
import { PipedreamClient } from "@pipedream/sdk"

const pd = new PipedreamClient({
  projectId: process.env.PIPEDREAM_PROJECT_ID!,
  clientId: process.env.PIPEDREAM_CLIENT_ID!,
  clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
  projectEnvironment: "production",
})

const result = await pd.actions.run({
  id: "google_sheets-upsert-row",
  externalUserId: "{external_user_id}", // any stable ID for this user in your system
  configuredProps: {
    google_sheets: { authProvisionId: "apn_xxxxxxx" },
    drive: "Drive",
    sheetId: "Spreadsheet ID",
  },
})

console.log(result)
```

**cURL**

```bash
curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
  -H "Content-Type: application/json" \
  -H "X-PD-Environment: production" \
  -H "Authorization: Bearer {access_token}" \
  -d '{
    "external_user_id": "{external_user_id}",
    "id": "google_sheets-upsert-row",
    "configured_props": {
      "google_sheets": { "authProvisionId": "apn_xxxxxxx" },
      "drive": "Drive",
      "sheetId": "Spreadsheet ID"
    }
  }'
```

---

- App: https://pipedream.com/apps/google-sheets.md · All apps: https://pipedream.com/apps
