n8n Google Sheets Trigger: start a video from each new row
n8n's Google Sheets Trigger polls a sheet and fires on added or updated rows. Key each row's video run on a row id so an edit doesn't bill twice.

n8n's Google Sheets Trigger is a polling trigger: n8n checks the sheet on a schedule and starts the workflow when a row was added, updated, or either. To start a video from each new row, map the row's cells into the video request as data and key the request on an id column, so an edit or a repeat poll doesn't start a second paid run.
n8n behavior comes from its Google Sheets Trigger docs, its common issues page, and the node's source code; Sume behavior from Create a run. All read 2026-09-28. Sume has no n8n node, so the video step is a plain HTTPS call from the HTTP Request node.
Which Trigger On option should I pick?
The node offers three events, and the default is not "new row":
| Trigger On | What the source shows |
|---|---|
| Row Added | Compares the row count with the last check and emits the rows past it. The first automatic check only records the count. |
| Row Updated | Compares sheet revisions. Skips rows that were empty in the previous revision, so a brand-new row does not fire it. Takes Columns to Watch and Include in Output (New, Old, or Both Versions). Needs edit access to the document. |
| Row Added or Updated | The default. Same options and edit-access rule as Row Updated. Without Columns to Watch, a new column also fires it. |
Why does a new row fire too early or not at all?
Row Added counts rows; it does not remember which rows it has seen. Three things follow:
- A row still being typed can be caught by a poll before every cell is filled, and later edits will not fire Row Added again. Paste complete rows, or use the status-column pattern below.
- Deleting rows between two polls can hide a row added in the same window, because the count does not change.
- Rows that exist when the trigger starts are never emitted automatically. A manual test run, by contrast, returns every data row.
How do I start a video only when a row is ready?
Give the sheet an id column and a status column. Set Trigger On to Row Added or Updated with Columns to Watch set to status (not Row Updated, which skips new rows), add an If node that passes only rows whose status is ready, then an HTTP Request node. n8n nodes usually run once per item, so each ready row sends one request to your Format's runs endpoint with a Bearer credential and an Idempotency-Key of row-{{ $json.id }}:
inputtakes up to 64 top-level keys, so one key per column fits most sheets.- Same key, same body: Sume returns the original run, with no second charge.
- Same key, changed body (someone edited the row and set it back to
ready):409 idempotency_conflict, and nothing runs. Add a version to the key when you want the row made again.
{
"instruction": "Make a 20-second vertical product video from this row.",
"input": {
"product": {{ JSON.stringify($json.product) }},
"headline": {{ JSON.stringify($json.headline) }}
},
"generation_spend_cap_usd": 15,
"communication": { "webhook_url": "https://n8n.example.com/webhook/sume-done" }
}What if many rows arrive at once?
One poll can emit several rows. To hand them to Sume as one request, a bulk run takes 1 to 100 items, each the same body as a single run, and keeps 1 to 16 in flight; see Format bulk runs. The queue itself has no webhook; communication.webhook_url is set per item, so each run still reports on its own.
Receive each finished run in a second workflow that starts with a Webhook node, as in the RSS version of this build. Writing the video URL back to the row is covered in n8n Google Sheets AI avatar videos.
Why do dates arrive as numbers?
Google Sheets can send dates as serial numbers: days since December 30, 1899, with the time as a fraction. With Row Added, add the DateTime Render option and set it to Formatted String; the result then follows the spreadsheet's locale. The update events have no such option, and the node's source reads their values as serial numbers, so convert dates in a later node. If a test run seems stuck waiting behind a reverse proxy, n8n's docs point to missing websocket proxying.
Sources
- n8n Docs: Google Sheets Trigger (read 2026-09-28)
- n8n Docs: Google Sheets Trigger common issues (read 2026-09-28)
- n8n source: GoogleSheetsTrigger.node.ts (read 2026-09-28)
- n8n source: GoogleSheetsTrigger.utils.ts (read 2026-09-28)
- n8n Docs: Loop (read 2026-09-28)
- n8n Docs: If node (read 2026-09-28)
- Create a run
- Bulk runs
Related posts
More in Integrations
- n8n human in the loop: approve each AI video before posting
In n8n, a Send and Wait for Response step pauses the workflow until a person approves or declines. Put it after the video is made and before it is posted.
- n8n MCP Server Trigger: give Claude a video tool
n8n's MCP Server Trigger makes a workflow an MCP server with its own URL. How to connect Claude and attach a tool that generates a video over HTTPS.
- n8n Schedule Trigger: time zone, cron, and why it won't fire
n8n's Schedule Trigger runs a workflow on an interval or cron, in the workflow's time zone, once the workflow is published. Setup, fixes, and safe paid calls.
- n8n text to speech: turn text into an audio file
Do text to speech in n8n with HTTP Request nodes: one submits the text, a Wait loop checks the job, and one downloads the audio as a binary file.
Written by Sume