> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.meetgail.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.meetgail.com/_mcp/server.

# Google Sheets Append Rows

> Adds one or more rows to a Google Sheets tab, matching each row's fields to columns by header name.

The Append Rows node adds new rows to the bottom of a spreadsheet tab. You give it
rows made of named fields, and it lines each field up with the matching column by
header name, so you do not have to worry about column order.

## When to use it

* You want to log the result of a run to a spreadsheet your team watches.
* You are building up a running list, one or several rows at a time.
* You want to hand structured data to a sheet without minding column order.

## Inputs

| Field       | What it's for                                                           | Example                                   |
| ----------- | ----------------------------------------------------------------------- | ----------------------------------------- |
| Spreadsheet | The spreadsheet to write to, identified by the id from its web address. | `1AbC...xYz`                              |
| Rows        | One or more rows, each made of named fields keyed by column header.     | `{ "Name": "Sarah Chen", "State": "FL" }` |
| Tab         | The tab to append to. Leave blank to use the first tab.                 | `Leads`                                   |

Any field can be a fixed value or an [expression](/platform/workflows/core-concepts/expressions/using-expressions-in-nodes)
that reads from an earlier step. Field names are matched to headers without regard
to case; fields that match no column are ignored, and columns with no matching
field are left blank.

## Outputs

| Field      | What you get back           |
| ---------- | --------------------------- |
| Rows added | How many rows were written. |

## Example

Chen Insurance Group tracks inbound leads in a Google Sheet with columns for name,
email, and state. When a new lead comes in, a workflow uses Append Rows to add a
row - `{ "Name": "Marcus Johnson", "Email": "marcus@example.com", "State": "FL" }` -
to the "Leads" tab. Because rows match on header name, the fields land in the right
columns no matter how the sheet is arranged.

![The Google Sheets Append Rows node configuration panel, showing the spreadsheet, rows, and tab.](https://fdr-prod-docs-files-public.s3.us-east-1.amazonaws.com/gail.docs.buildwithfern.com/1d85f2c57d31182a2fe9fa1f0e519449d9512af6df410dff69914078e7e1a19f/docs/pages/platform/workflows/assets/google-sheets-append-rows.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIA6KXJSKKNFOCF7G4B%2F20260823%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20260823T232907Z&X-Amz-Expires=604800&X-Amz-Signature=df474a9a5133a7ddd9a292dc46c162284275062d064a3fc740d910462ede79f8&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject)

The tab needs a header row in row 1, and rows match to those headers by name. If
you name a specific tab and later rename it in Sheets, the saved workflow will
break - leave the tab blank to always target the first tab, or update the
workflow after renaming.

## Related nodes

#### [Create CSV](/platform/workflows/node-reference/files-and-documents/create-csv)

Build a CSV file from the same kind of row data.

#### [For Each](/platform/workflows/node-reference/logic-and-flow/for-each)

Loop over a list to build the rows you append.

#### [Check](/platform/workflows/node-reference/logic-and-flow/check)

Branch on whether the append succeeded.