AutomationFlowsWeb Scraping › Scheduled AI Chatbot Backend with Gemini

Scheduled AI Chatbot Backend with Gemini

Original n8n title: AI Chatbot-backend

AI Chatbot-Backend. Uses scheduleTrigger, chainLlm, lmChatGoogleGemini, outputParserStructured. Scheduled trigger; 12 nodes.

Cron / scheduled trigger★★★★☆ complexityAI-powered12 nodesChain LlmGoogle Gemini ChatOutput Parser Structured@Apify/N8N Nodes ApifyRSS Feed ReadGoogle Sheets
Web Scraping Trigger: Cron / scheduled Nodes: 12 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Apifyn8N Nodes Apify → Google Sheets 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
{
  "updatedAt": "2026-02-22T12:03:50.586Z",
  "createdAt": "2026-02-13T09:47:33.610Z",
  "id": "BkxSgCu84ExUBjDs",
  "name": "AI Chatbot-Backend",
  "active": false,
  "isArchived": false,
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "months",
              "triggerAtHour": 7
            }
          ]
        }
      },
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.3,
      "position": [
        0,
        0
      ],
      "id": "8d7f6c8b-c593-4a9c-a451-ccbe6729cb07",
      "name": "Schedule Trigger"
    },
    {
      "parameters": {},
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        704,
        -16
      ],
      "id": "c774060d-f49d-484f-963b-476d446ac72d",
      "name": "Merge"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Kamu adalah Analis Data PLN.\nTugasmu adalah membaca data mentah dan mengubahnya menjadi format database JSON.\n\nDATA INPUT:\n- Sumber: {{ $json.Sumber }}\n- Tanggal: {{ $json.Tanggal }}\n- Isi Konten: {{ $json.Konten_teks }}\n- Komentar/Info Tambahan: {{ $json.Komentar }}\n\nINSTRUKSI ANALISIS:\n1. Baca konten di atas.\n2. Tentukan SENTIMEN (Wajib pilih satu: \"Positif\", \"Negatif\", atau \"Netral\").\n3. Buat RINGKASAN (Maksimal 15 kata).\n4. Tentukan TOPIK (Contoh: \"Pemadaman\", \"Promo\", \"Gangguan\", \"Apresiasi\").\n\nOUTPUT JSON SAJA:\nBerikan output HANYA dalam format JSON valid (tanpa markdown ```json atau teks lain), persis seperti ini:\n{\n\"sentimen\": \"...\",\n\"ringkasan\": \"...\",\n\"topik\": \"...\"\n}",
        "hasOutputParser": true,
        "batching": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.9,
      "position": [
        1184,
        0
      ],
      "id": "63d6b017-eb39-407b-a0b7-64332a7c326a",
      "name": "Basic LLM Chain"
    },
    {
      "parameters": {
        "modelName": "models/gemma-3-27b-it",
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        1184,
        256
      ],
      "id": "125fb8f5-4901-472f-bbae-8e8598391990",
      "name": "Google Gemini Chat Model",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "2fca0db9-9666-4867-947f-a7a2152e15ca",
              "name": "Tanggal",
              "value": "={{ $now }}",
              "type": "string"
            },
            {
              "id": "60d2fa21-02da-4fc6-8667-2c4c32da38b3",
              "name": "Sumber",
              "value": "Instagram",
              "type": "string"
            },
            {
              "id": "11772545-f783-41c5-ac85-0ab574ed7d02",
              "name": "Konten_teks",
              "value": "={{ $json.caption }}",
              "type": "string"
            },
            {
              "id": "7afe4dfe-a3a1-42fe-bbcf-e7472f216e0a",
              "name": "Komentar",
              "value": "={{ $json.latestComments }}",
              "type": "array"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        464,
        96
      ],
      "id": "d1bc9eb9-02e1-4cf4-a9c4-594e49e245dc",
      "name": "Edit Fields Apify"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "21085c57-a948-4626-90b5-2829aee22c18",
              "name": "Tanggal",
              "value": "={{ $json.pubDate }}",
              "type": "string"
            },
            {
              "id": "58db5212-0e11-4189-a9c3-80bc0421fe35",
              "name": "Sumber",
              "value": "Google News",
              "type": "string"
            },
            {
              "id": "0eb74e8e-caf6-4aef-aea3-ff461a7ff453",
              "name": "Konten_teks",
              "value": "={{ $json.title }}",
              "type": "string"
            },
            {
              "id": "3aabf531-61d6-4d9b-b4ca-f2d36f4cb7ae",
              "name": "Komentar",
              "value": "Berita Resmi (Tidak ada komentar)",
              "type": "string"
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        464,
        -128
      ],
      "id": "9d68cb85-6814-48b9-94d6-bc08b60f39ec",
      "name": "Edit Fields RSS"
    },
    {
      "parameters": {
        "jsonSchemaExample": "{\n  \"sentimen\": \"Positif\",\n  \"ringkasan\": \"Ini adalah ringkasan singkat.\",\n  \"topik\": \"Pemadaman\"\n}"
      },
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "typeVersion": 1.3,
      "position": [
        1328,
        272
      ],
      "id": "16ed6fbf-abea-4e28-8490-869b351422a0",
      "name": "Structured Output Parser"
    },
    {
      "parameters": {
        "batchSize": 2,
        "options": {}
      },
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [
        912,
        -16
      ],
      "id": "346110ce-b54a-429f-a26e-99f813cfc74d",
      "name": "Loop Over Items"
    },
    {
      "parameters": {
        "amount": 15
      },
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1.1,
      "position": [
        736,
        -240
      ],
      "id": "3ab92f99-672e-4991-86ad-c6149d4a4105",
      "name": "Wait"
    },
    {
      "parameters": {
        "resource": "Actor tasks",
        "operation": "Run task and get dataset",
        "actorTaskId": {
          "__rl": true,
          "value": "https://console.apify.com/actors/tasks/qzquEOjml7WiJc0UG/input",
          "mode": "url"
        }
      },
      "type": "@apify/n8n-nodes-apify.apify",
      "typeVersion": 1,
      "position": [
        256,
        96
      ],
      "id": "29616f3a-ac13-4088-9d08-4899c3fbb14a",
      "name": "Run task and get dataset",
      "credentials": {
        "apifyApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "url": "https://news.google.com/rss/search?q=PLN+Aceh+listrik+after:2025-11-01&hl=id&gl=ID&ceid=ID:id",
        "options": {}
      },
      "type": "n8n-nodes-base.rssFeedRead",
      "typeVersion": 1.2,
      "position": [
        256,
        -128
      ],
      "id": "dbb85531-9aa6-4f45-ae51-ceae97a83965",
      "name": "RSS Read"
    },
    {
      "parameters": {
        "operation": "append",
        "documentId": {
          "__rl": true,
          "value": "1DMCQfuqBJdNvbfwKY-86aO3S0zFtpZ6_SL09UQ8yt8g",
          "mode": "list",
          "cachedResultName": "Database PLN",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DMCQfuqBJdNvbfwKY-86aO3S0zFtpZ6_SL09UQ8yt8g/edit?usp=drivesdk"
        },
        "sheetName": {
          "__rl": true,
          "value": "gid=0",
          "mode": "list",
          "cachedResultName": "Sheet1",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1DMCQfuqBJdNvbfwKY-86aO3S0zFtpZ6_SL09UQ8yt8g/edit#gid=0"
        },
        "columns": {
          "mappingMode": "defineBelow",
          "value": {
            "Tanggal": "={{ $('Loop Over Items').item.json.Tanggal }}",
            "Sumber": "={{ $('Loop Over Items').item.json.Sumber }}",
            "Sentimen": "={{ $json.output.sentimen }}",
            "Ringkasan": "={{ $json.output.ringkasan }}",
            "Topik": "={{ $json.output.topik }}",
            "Komentar": "={{ $('Loop Over Items').item.json.Komentar }}",
            "Konten_teks": "={{ $('Loop Over Items').item.json.Konten_teks }}"
          },
          "matchingColumns": [],
          "schema": [
            {
              "id": "Tanggal",
              "displayName": "Tanggal",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Sumber",
              "displayName": "Sumber",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Konten_teks",
              "displayName": "Konten_teks",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true,
              "removed": false
            },
            {
              "id": "Komentar",
              "displayName": "Komentar",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Sentimen",
              "displayName": "Sentimen",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Ringkasan",
              "displayName": "Ringkasan",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            },
            {
              "id": "Topik",
              "displayName": "Topik",
              "required": false,
              "defaultMatch": false,
              "display": true,
              "type": "string",
              "canBeUsedToMatch": true
            }
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheets",
      "typeVersion": 4.7,
      "position": [
        1472,
        0
      ],
      "id": "1877116d-e9c7-4c9d-b979-aa87d7b08350",
      "name": "Append row in sheet",
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Run task and get dataset",
            "type": "main",
            "index": 0
          },
          {
            "node": "RSS Read",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "Append row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields Apify": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Edit Fields RSS": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run task and get dataset": {
      "main": [
        [
          {
            "node": "Edit Fields Apify",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS Read": {
      "main": [
        [
          {
            "node": "Edit Fields RSS",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append row in sheet": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate",
    "availableInMCP": false
  },
  "staticData": null,
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "versionId": "c6ef1094-4dfe-4649-9be6-2cdbfa626325",
  "activeVersionId": null,
  "triggerCount": 0,
  "shared": [
    {
      "updatedAt": "2026-02-13T09:47:33.613Z",
      "createdAt": "2026-02-13T09:47:33.613Z",
      "role": "workflow:owner",
      "workflowId": "BkxSgCu84ExUBjDs",
      "projectId": "Lw4fUBTO2lFMdRF0"
    }
  ],
  "activeVersion": null,
  "tags": []
}

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

How this works

This workflow powers a backend AI chatbot that automatically processes RSS feeds and generates structured insights using Google Gemini, delivering timely updates to Google Sheets for easy access. It's ideal for content creators, marketers, or analysts who need to monitor news sources without manual effort, saving hours on data aggregation and analysis. The key step involves chaining the LLM to parse and refine feed content into actionable formats, ensuring responses are coherent and ready for integration into apps or reports.

Use this when you require periodic, automated extraction of insights from multiple RSS feeds, such as daily market summaries or topic tracking. Avoid it for real-time interactions, as the cron trigger suits batch processing rather than instant queries. Common variations include swapping Gemini for another LLM or adding email notifications instead of Sheets for direct alerts.

About this workflow

AI Chatbot-Backend. Uses scheduleTrigger, chainLlm, lmChatGoogleGemini, outputParserStructured. Scheduled trigger; 12 nodes.

Source: https://github.com/SamVivan1/n8n-Workflows-Backup/blob/main/ai-chatbot-backend-BkxSgCu84ExUBjDs.json — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

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

Web Scraping

Community nodes are used in this workflow. B2B Sales Teams & SDRs Recruitment Agencies & Tech Recruiters Startup Founders Growth Marketing Teams Scrape Hiring Signals: The workflow starts by using an

Google Sheets, Google Gemini Chat, Output Parser Structured +3
Web Scraping

Visual Regression Testing With Apify And Ai Vision Model. Uses googleDrive, lmChatGoogleGemini, outputParserStructured, stickyNote. Scheduled trigger; 34 nodes.

Google Drive, Google Gemini Chat, Output Parser Structured +4
Web Scraping

This n8n workflow is a proof-of-concept template exploring how we might work with multimodal LLMs and their multi-image analysis capabilities. In this demo, we compare 2 screenshots of a webpage taken

Google Drive, Google Gemini Chat, Output Parser Structured +4
Web Scraping

This n8n workflow automates the process of collecting job and decision-maker data, crafting AI-generated referral messages, and drafting them in Gmail—all using a combination of Apify, Google Sheets,

Google Sheets, Chain Llm, Google Gemini Chat +3
Web Scraping

This workflow runs daily to scrape competitor Shopify app reviews via Apify, logs and deduplicates new low-rated reviews in Google Sheets, looks up the reviewer’s website with Serper, enriches contact

OpenAI Chat, Google Sheets, Hunter +5