n8n RSS Feed Trigger: start a video for each new feed item
n8n's RSS Feed Trigger polls a feed and emits items newer than the last one it saw. Send each item's text to a video run keyed on its guid.

n8n's RSS Feed Trigger polls a feed URL on a schedule you set and starts the workflow with every item published since the newest item it saw last time. To turn each new item into a video, send the item's title, link, and text to the video request as data, and key that request on the item's guid, so a repeat of the same item does not start a second paid run.
n8n behavior comes from its RSS Feed Trigger docs and the node's source code; Sume behavior comes from Create a run. All read 2026-09-28. Sume has no n8n node, so the video step is a plain HTTPS call from n8n's HTTP Request node.
How does the RSS Feed Trigger decide what is new?
It compares dates, not ids. You set Feed URL and Poll Times (every hour, day, week, or month, every X minutes or hours, or a custom cron). On each poll, the node's source keeps only items whose date is later than the newest item date stored at the previous poll, then stores the new newest date.
- An item with no date is never emitted.
- On the very first poll, the cutoff is the current time, so items already in the feed do not start runs.
- A manual test run returns only the feed's first item, whatever its date.
What does each feed item contain?
The node parses feeds with the rss-parser library. These are the fields worth mapping into a video request. In RSS 2.0 every item element is optional, so check that your feed has a guid before you key on it, and fall back to link if it does not.
| Field | What it holds | Use it for |
|---|---|---|
title | The item title. | The video's subject. |
link | The item URL. | A source line or end card. |
contentSnippet | The content with HTML tags stripped and entities unescaped. | The text the video is based on. |
guid | A string that uniquely identifies the item. | The Idempotency-Key. |
isoDate | pubDate or dc:date in ISO 8601. | What the trigger compares. |
How do I start one video per new item?
Connect an HTTP Request node to the trigger. n8n nodes usually run once per item, so a poll that finds three items sends three requests. Post to your own Format (a saved video recipe; see create a Sume Format over the API) with a Bearer credential and an Idempotency-Key of rss-{{ $json.guid }}. Same key and same body returns the original run with no second charge, and a changed body under the same key (say, an edited article) answers 409 idempotency_conflict with nothing run. A key is up to 255 characters. In the JSON body, JSON.stringify keeps quotes inside the article text from breaking the JSON:
{
"instruction": "Make a 30-second vertical video summarizing this article.",
"input": {
"title": {{ JSON.stringify($json.title) }},
"summary": {{ JSON.stringify($json.contentSnippet) }},
"source_url": {{ JSON.stringify($json.link) }}
},
"generation_spend_cap_usd": 15,
"communication": { "webhook_url": "https://n8n.example.com/webhook/sume-done" }
}How do I get each finished video back?
Use a second workflow that starts with a Webhook node, not a Wait node. A Wait node's resume URL is unique to the execution, so several items from one poll would share it. The Webhook node's production URL registers when you publish that workflow and is built from the node's fixed Path, so it does not change between executions, and a retried create sends an identical body.
- Sume POSTs one signed
format.run.terminaldelivery when each run completes or fails, to a public HTTPS URL. Itsrun_idstays the same across delivery retries, so dedupe on it before you publish. - In current code Sume also refuses a webhook URL with an explicit port, so the Webhook node's URL must be public HTTPS on the default port.
- In the receiving workflow, the delivery is
$json.body. ReadGET /v1/format-runs/{{ $json.body.run_id }}with your key before you publish anything, as the Wait node guide explains. primary_output_urlon a completed run is a durablemedia.sume.comURL.
Is it safe to send feed text to an AI video agent?
Treat it as untrusted. Sume writes input to a file and tells the agent it is caller-supplied data, not instructions, and the docs call this a trust boundary, not a sandbox: the spend cap bounds the damage. input takes up to 64 top-level keys and 2 MiB and is never truncated. Keep instructions in instruction, and read passing untrusted data to an AI agent. Only turn feeds you have the rights to into videos.
Sources
- n8n Docs: RSS Feed Trigger (read 2026-09-28)
- n8n source: RssFeedReadTrigger.node.ts (read 2026-09-28)
- rss-parser README (read 2026-09-28)
- RSS Advisory Board: RSS 2.0 Specification (read 2026-09-28)
- n8n Docs: Webhook node (read 2026-09-28)
- n8n Docs: Loop (read 2026-09-28)
- n8n Docs: Wait node (read 2026-09-28)
- Create a run
- Runs and results
Related posts
More in Integrations
- 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.
- n8n upload to TikTok with the HTTP Request node
n8n has no TikTok node in its docs. Upload with HTTP Request nodes: query creator info, init a Direct Post with FILE_UPLOAD, then PUT the bytes.
- n8n: upload a file to Google Drive from a URL
Download the file with n8n's HTTP Request node set to return a File, then upload that binary with the Google Drive node's Upload operation into a folder.
- n8n YouTube Shorts automation: make a video, then upload it
Automate YouTube Shorts in n8n: start a vertical video with an HTTP Request node, download the finished MP4, and post it with the YouTube node's Upload.
Written by Sume