AutomationFlowsData & Sheets › Sub 004 RSS Ingestion

Sub 004 RSS Ingestion

SUB-004-rss-ingestion. Uses executeWorkflowTrigger, rssFeedRead, postgres. Event-driven trigger; 7 nodes.

Event trigger★★★★☆ complexity7 nodesExecute Workflow TriggerRSS Feed ReadPostgres
Data & Sheets Trigger: Event Nodes: 7 Complexity: ★★★★☆ Added:

This workflow follows the Execute Workflow Trigger → Postgres recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "sub004-rss-ingestion-00000000000",
  "name": "SUB-004-rss-ingestion",
  "nodes": [
    {
      "parameters": {
        "inputSource": "passthrough"
      },
      "id": "c1000000-0004-0004-0004-000000000001",
      "name": "Trigger",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "typeVersion": 1.1,
      "position": [
        240,
        500
      ]
    },
    {
      "parameters": {
        "url": "={{ $json.feed_url }}",
        "options": {}
      },
      "id": "c1000000-0004-0004-0004-000000000002",
      "name": "Fetch RSS Feed",
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.1,
      "position": [
        460,
        500
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "={{ `SELECT COALESCE((SELECT id FROM raw_research WHERE source_url = '${($json.link||'').replace(/'/g,\"''\")}' LIMIT 1), 0) AS existing_id, '${($json.link||'').replace(/'/g,\"''\")}' AS link, '${($json.title||'').replace(/'/g,\"''\")}' AS title, '${($json.contentSnippet||$json.content||$json.title||'').replace(/'/g,\"''\")}' AS content_text` }}",
        "options": {}
      },
      "id": "c1000000-0004-0004-0004-000000000003",
      "name": "Check Duplicate",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.5,
      "position": [
        680,
        500
      ],
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "c1000000-0004-0004-0004-000000000030",
              "leftValue": "={{ $json.existing_id }}",
              "rightValue": 0,
              "operator": {
                "type": "number",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "c1000000-0004-0004-0004-000000000004",
      "name": "Is New?",
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2.2,
      "position": [
        900,
        500
      ]
    },
    {
      "parameters": {
        "operation": "executeQuery",
        "query": "={{ `INSERT INTO raw_research (channel_id, source_type, source_url, source_name, content_title, content_text, status, created_at) VALUES (${$('Trigger').item.json.channel_id}, 'rss', '${($json.link||'').replace(/'/g,\"''\")}', '${($('Trigger').item.json.source_name||'').replace(/'/g,\"''\")}', '${($json.title||'').replace(/'/g,\"''\")}', '${($json.content_text||'').replace(/'/g,\"''\")}', 'ingested', NOW()) RETURNING id` }}",
        "options": {}
      },
      "id": "c1000000-0004-0004-0004-000000000005",
      "name": "Insert Raw Research",
      "type": "n8n-nodes-base.postgres",
      "typeVersion": 2.5,
      "position": [
        1120,
        500
      ],
      "credentials": {
        "postgres": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "inserted_items",
        "options": {}
      },
      "id": "c1000000-0004-0004-0004-000000000006",
      "name": "Aggregate Results",
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [
        1340,
        500
      ]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "c1000000-0004-0004-0004-000000000040",
              "name": "items_inserted",
              "value": "={{ $json.inserted_items.length }}",
              "type": "number"
            },
            {
              "id": "c1000000-0004-0004-0004-000000000041",
              "name": "feed_url",
              "value": "={{ $('Trigger').item.json.feed_url }}",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "id": "c1000000-0004-0004-0004-000000000007",
      "name": "Return",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        1560,
        500
      ]
    }
  ],
  "connections": {
    "Trigger": {
      "main": [
        [
          {
            "node": "Fetch RSS Feed",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch RSS Feed": {
      "main": [
        [
          {
            "node": "Check Duplicate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Duplicate": {
      "main": [
        [
          {
            "node": "Is New?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is New?": {
      "main": [
        [
          {
            "node": "Insert Raw Research",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Insert Raw Research": {
      "main": [
        [
          {
            "node": "Aggregate Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate Results": {
      "main": [
        [
          {
            "node": "Return",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

SUB-004-rss-ingestion. Uses executeWorkflowTrigger, rssFeedRead, postgres. Event-driven trigger; 7 nodes.

Source: https://github.com/navin-labs/content-factory-os/blob/main/n8n/workflows/subworkflows/SUB-004-rss-ingestion.json — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

WF-34 manage_sources. Uses executeWorkflowTrigger, postgres, rssFeedRead. Event-driven trigger; 10 nodes.

Execute Workflow Trigger, Postgres, RSS Feed Read
Data & Sheets

SUB-006-trends-ingestion. Uses executeWorkflowTrigger, rssFeedRead, postgres. Event-driven trigger; 7 nodes.

Execute Workflow Trigger, RSS Feed Read, Postgres
Data & Sheets

WF-13 discovery_rss. Uses executeWorkflowTrigger, postgres, rssFeedRead. Event-driven trigger; 5 nodes.

Execute Workflow Trigger, Postgres, RSS Feed Read
Data & Sheets

Reagendamiento_v2. Uses executeWorkflowTrigger, redis, httpRequest, n8n-nodes-evolution-api. Event-driven trigger; 89 nodes.

Execute Workflow Trigger, Redis, HTTP Request +3
Data & Sheets

Agendamiento_v2. Uses n8n-nodes-evolution-api, redis, httpRequest, executeWorkflowTrigger. Event-driven trigger; 59 nodes.

N8N Nodes Evolution Api, Redis, HTTP Request +3