# append_sheet_rows (https://sellersheetai.com/docs/mcp-api/tools/append_sheet_rows)

> Append rows below the last non-empty row of the columns in range_.

Access: **WRITE** · toolset google_workspace · family null

Writing starts at range_'s leftmost column.

## Call it

MCP tool call:

```json
{
  "name": "append_sheet_rows",
  "arguments": {
    "spreadsheet_id": "<spreadsheet_id>",
    "range_": "<range_>",
    "values": []
  }
}
```

Tool API (early access — contact us):

```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/append_sheet_rows \
  -H "Authorization: Bearer $SELLERSHEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"spreadsheet_id":"<spreadsheet_id>","range_":"<range_>","values":[]}'
```

## Arguments

| Name | Type | Required | Description |
|---|---|---|---|
| `spreadsheet_id` | string | yes | the spreadsheet ID (from its URL or get_sheet_metadata). |
| `range_` | string | yes | Column-only A1 notation, no row numbers ('Sheet1!A:Z', not 'Sheet1!A1:Z10' — a row-bounded range is refused with a 400). Examples: 'Sheet1!A:Z'  → appends from column A 'Sheet1!C:Z'  → appends from column C 'C:Z'         → appends from column C of the spreadsheet's first tab |
| `values` | object[] | yes | 2D list of rows to append. |

## Result

- `data.appended` — the number of rows written.

## Gotchas

- Cells are written RAW, not parsed: '=SUM(A:A)' lands as text and '2026-05-12' as a string. Use write_sheet at the next row when the rows carry formulas or dates. Calls that append to the same tab must run one after another: each finds the next empty row, so two at once write to the same row. The spreadsheet must be shared with SellerSheet's Google service account as Editor (workbooks set up by the SellerSheet sidebar already are); a permission error means the user has to share it.

## Example

- # Append from column A append_sheet_rows("1ABC...", "Sheet1!A:Z", [["val1", "val2", "val3"]]) # Append from column C append_sheet_rows("1ABC...", "Sheet1!C:Z", [["c_val", "d_val"]])