This workflow corresponds to n8n.io template #13124 — we link there as the canonical source.
This workflow follows the Agent → Gmail 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 →
{
"id": "ZZXpfLP_ZuegrgJ7LL_pi",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Turn HR news into policy update tasks with RSS, Google Drive, AI, and Gmail",
"tags": [],
"nodes": [
{
"id": "350bfc57-6b38-45aa-b1be-fa759d671b2c",
"name": "Weekly trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
2144,
1712
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
1
],
"triggerAtHour": 9
}
]
}
},
"typeVersion": 1.3
},
{
"id": "8f2d95fb-089a-49c0-acde-2508847b3381",
"name": "Config",
"type": "n8n-nodes-base.set",
"position": [
2368,
1712
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "id-1",
"name": "newsUrl",
"type": "string",
"value": "REPLACE_WITH_RSS_URL"
},
{
"id": "id-2",
"name": "userEmail",
"type": "string",
"value": "REPLACE_WITH_YOUR_EMAIL"
},
{
"id": "id-3",
"name": "templatesFolderId",
"type": "string",
"value": "REPLACE_WITH_YOUR_DRIVE_FOLDER_ID"
},
{
"id": "id-4",
"name": "maxArticles",
"type": "number",
"value": 10
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "37d0ff95-f82e-4a87-a63b-830ac3db1db0",
"name": "Read RSS feed",
"type": "n8n-nodes-base.rssFeedRead",
"position": [
2592,
1712
],
"parameters": {
"url": "={{ $node[\"Config\"].json.newsUrl }}",
"options": {}
},
"executeOnce": true,
"typeVersion": 1.2
},
{
"id": "a6501ad7-e491-4ee7-a8ea-a1cfffc1ad0f",
"name": "Keep last 7 days",
"type": "n8n-nodes-base.filter",
"position": [
2816,
1712
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "6ec5e10a-1b4e-4045-8ea1-241bda50004b",
"operator": {
"type": "dateTime",
"operation": "after"
},
"leftValue": "={{ $json.date }}",
"rightValue": "={{ $now.minus({ days: 7 }).toISO() }}"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "914d6fe1-c7cf-43c5-bb25-70320208da4f",
"name": "Cap articles",
"type": "n8n-nodes-base.code",
"position": [
2992,
1712
],
"parameters": {
"jsCode": "const maxArticles = Number($node[\"Config\"].json.maxArticles ?? 10);\nreturn items.slice(0, Math.max(0, maxArticles));\n"
},
"typeVersion": 2
},
{
"id": "5b3f2fd0-266f-4e29-80e9-98f90cc4b053",
"name": "Fetch article page",
"type": "n8n-nodes-base.httpRequest",
"position": [
2592,
1952
],
"parameters": {
"url": "={{ $json.link }}",
"options": {}
},
"typeVersion": 4.3
},
{
"id": "7bb2a0ba-e4e3-437f-84ca-2846f432604b",
"name": "Extract article body",
"type": "n8n-nodes-base.html",
"position": [
2800,
1952
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "body_html",
"cssSelector": ".article-detail__body",
"returnValue": "html"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "7f4d62a3-d80b-4ab5-916f-24c56671db38",
"name": "Clean article text",
"type": "n8n-nodes-base.code",
"position": [
2992,
1952
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "let html = $json.body_html || '';\n\n// remove social bar\nhtml = html.replace(/<div class=\"horizontal-social-bar\">[\\s\\S]*?<\\/div>/i, ' ');\n\n// remove ad containers that often look like <div id=\"Ads_...\"> ... </div>\nhtml = html.replace(/<div[^>]+id=\"Ads_[^\"]+\"[\\s\\S]*?<\\/div>/gi, ' ');\n\n// remove script blocks anywhere\nhtml = html.replace(/<script[\\s\\S]*?<\\/script>/gi, ' ');\nhtml = html.replace(/<style[\\s\\S]*?<\\/style>/gi, ' ');\n\n// cut off everything from the \"Das k\u00f6nnte Sie auch interessieren\" paragraph onward\nhtml = html.replace(/<p>\\s*<strong>\\s*Das k\u00f6nnte Sie auch interessieren:\\s*<\\/strong>\\s*<\\/p>[\\s\\S]*$/i, ' ');\n\n// also remove the tag list if it is still present\nhtml = html.replace(/<div class=\"taglist--v2\">[\\s\\S]*$/i, ' ');\n\n// convert to text, keep some structure\nlet text = html\n .replace(/<h2[^>]*>/gi, '\\n\\n')\n .replace(/<\\/h2>/gi, '\\n')\n .replace(/<p[^>]*>/gi, '\\n')\n .replace(/<\\/p>/gi, '\\n')\n .replace(/<br\\s*\\/?>/gi, '\\n')\n .replace(/<[^>]+>/g, ' ')\n .replace(/ /g, ' ')\n .replace(/&/g, '&')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/\\s+\\n/g, '\\n')\n .replace(/\\n\\s+/g, '\\n')\n .replace(/[ \\t]+/g, ' ')\n .trim();\n\nreturn {\n url: $json.url,\n body_text: text,\n};\n"
},
"typeVersion": 2
},
{
"id": "ae7e185a-cbbe-4e38-8bb2-f7f31f2ac791",
"name": "Combine article data",
"type": "n8n-nodes-base.merge",
"position": [
3168,
1728
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "3f6dbfe7-6bea-43a3-aa96-42ea1e286629",
"name": "Normalize article fields",
"type": "n8n-nodes-base.set",
"position": [
3376,
1728
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2b317bd0-342e-42fc-9e24-484279a93e68",
"name": "article_id",
"type": "string",
"value": ""
},
{
"id": "85109e1e-1ffa-4a43-a3f3-f9ffe4ef4dad",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "d0cdfdce-c55c-494b-8ce0-a9a8b62635a2",
"name": "link",
"type": "string",
"value": "={{ $json.link }}"
},
{
"id": "e945fe0f-90f9-442c-a4bb-ebba59b92299",
"name": "date",
"type": "string",
"value": "={{ $json.date }}"
},
{
"id": "92f919e8-f889-4718-b717-a6921e55ac59",
"name": "body_text",
"type": "string",
"value": "={{ $json.body_text }}"
},
{
"id": "9d3fa1d8-0325-4ea0-bb47-b5dd8f2aae18",
"name": "body_text_short",
"type": "string",
"value": ""
}
]
}
},
"typeVersion": 3.4
},
{
"id": "005a4fc4-189e-4b1d-b2fc-1fd0e0fd2d85",
"name": "Add id and excerpt",
"type": "n8n-nodes-base.code",
"position": [
3600,
1728
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const link = $json.link || '';\nconst text = ($json.body_text || '').trim();\nconst maxLen = 2500;\n\nconst body_text_short = text.length > maxLen ? text.slice(0, maxLen) + '...' : text;\n\n// cheap stable id without crypto\nconst article_id = Buffer.from(link).toString('base64').slice(0, 24);\n\nreturn {\n ...$json,\n article_id,\n body_text_short,\n};\n"
},
"typeVersion": 2
},
{
"id": "123ca2b2-eb7c-4a56-b08e-bba908f6617b",
"name": "List policy and template files",
"type": "n8n-nodes-base.googleDrive",
"position": [
3376,
1952
],
"parameters": {
"filter": {
"driveId": {
"mode": "list",
"value": "My Drive"
},
"folderId": {
"__rl": true,
"mode": "list",
"value": "={{ $node[\"Config\"].json.templatesFolderId }}"
}
},
"options": {
"fields": [
"id",
"name",
"mimeType",
"modifiedTime"
]
},
"resource": "fileFolder",
"returnAll": true
},
"executeOnce": true,
"typeVersion": 3
},
{
"id": "7e0f4608-decb-45af-84ed-83d475c837d8",
"name": "Aggregate file inventory",
"type": "n8n-nodes-base.code",
"position": [
3600,
1952
],
"parameters": {
"jsCode": "return [{\n json: {\n drive_files: items.map(i => ({\n id: i.json.id,\n name: i.json.name,\n mimeType: i.json.mimeType,\n modifiedTime: i.json.modifiedTime,\n }))\n }\n}];\n"
},
"typeVersion": 2
},
{
"id": "04b64ee8-2630-443e-9263-07471d9654c5",
"name": "Attach file inventory",
"type": "n8n-nodes-base.merge",
"position": [
3856,
1728
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineAll"
},
"typeVersion": 3.2
},
{
"id": "2155e60e-2389-45bf-8d76-280aea1ff700",
"name": "Structured output schema",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
4224,
1952
],
"parameters": {
"jsonSchemaExample": "{\n \"article_id\": \"string\",\n \"title\": \"string\",\n \"link\": \"string\",\n \"date\": \"string\",\n \"relevance\": 0,\n \"summary\": \"string\",\n \"impacted_files\": [\n {\n \"file_id\": \"string\",\n \"file_name\": \"string\",\n \"action\": \"review|update\",\n \"recommended_change\": \"string\"\n }\n ],\n \"missing_docs\": [\n {\n \"proposed_name\": \"string\",\n \"why\": \"string\"\n }\n ]\n}\n"
},
"typeVersion": 1.3
},
{
"id": "3a808b25-de63-46a3-bfc9-a56b46d30a15",
"name": "Gemini chat model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
4080,
1952
],
"parameters": {
"options": {}
},
"typeVersion": 1
},
{
"id": "9485d9e9-8ccc-481b-9270-636986760f1c",
"name": "Doc impact analyzer",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
4080,
1728
],
"parameters": {
"text": "=Article:\n{{ $json.article_id }}\n {{ $json.title }}\n{{ $json.link }}\n{{ $json.date }}\n{{ $json.body_text_short }}\n\nExisting documents:\n{{ JSON.stringify($json.drive_files) }}",
"options": {
"systemMessage": "Use this:\n\nYou are an HR policy and contract analyst for Germany. You will receive one HR related news article and a list of existing HR policy and contract template file names.\n\nYour task:\n\nDetermine whether the article implies a need to update or review any existing policy or contract template based on the file names\n\nIf yes, list the impacted files and describe the recommended change in one sentence each\n\nIf no existing file fits but the topic suggests a missing document, propose a new policy or template name and why\n\nGive a relevance score from 0 to 3 where 0 means no action and 3 means high urgency\n\nOutput rules:\n\nOutput valid JSON only\n\nDo not add any text outside JSON\n\nKeep it short"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3.1
},
{
"id": "3beabe24-4bdf-4222-9e01-8d15fe55651f",
"name": "Build radar report",
"type": "n8n-nodes-base.code",
"position": [
4432,
1728
],
"parameters": {
"jsCode": "function toObject(v) {\n if (!v) return null;\n if (typeof v === 'string') {\n try { return JSON.parse(v); } catch (e) { return null; }\n }\n if (typeof v === 'object') return v;\n return null;\n}\n\nconst results = items\n .map(i => toObject(i.json.output ?? i.json))\n .filter(Boolean);\n\nconst rank = (r) => Number(r ?? 0);\nresults.sort((a, b) => rank(b.relevance) - rank(a.relevance));\n\nconst top3 = results.slice(0, 3);\n\nconst impactedByFile = {};\nfor (const a of results) {\n for (const f of (a.impacted_files || [])) {\n if (!f?.file_id || !f?.file_name) continue;\n\n if (!impactedByFile[f.file_id]) {\n impactedByFile[f.file_id] = {\n file_id: f.file_id,\n file_name: f.file_name,\n actions: []\n };\n }\n\n impactedByFile[f.file_id].actions.push({\n action: f.action,\n recommended_change: f.recommended_change,\n source_article: { title: a.title, link: a.link, date: a.date, relevance: a.relevance }\n });\n }\n}\n\nconst missingDocs = [];\nconst seen = new Set();\nfor (const a of results) {\n for (const m of (a.missing_docs || [])) {\n const name = (m.proposed_name || '').trim();\n const key = name.toLowerCase();\n if (!name || seen.has(key)) continue;\n seen.add(key);\n\n missingDocs.push({\n proposed_name: name,\n why: m.why,\n source_article: { title: a.title, link: a.link }\n });\n }\n}\n\nreturn [{\n json: {\n top3_articles: top3.map(a => ({\n title: a.title,\n link: a.link,\n date: a.date,\n relevance: a.relevance,\n summary: a.summary\n })),\n impacted_files: Object.values(impactedByFile),\n missing_doc_ideas: missingDocs,\n all_articles: results\n }\n}];\n"
},
"typeVersion": 2
},
{
"id": "ae5ff442-bad0-4617-a990-97caca3205f8",
"name": "OpenAI chat model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
4656,
1952
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-5.2",
"cachedResultName": "gpt-5.2"
},
"options": {
"timeout": 600000
},
"builtInTools": {}
},
"typeVersion": 1.3
},
{
"id": "bf6cb6d9-02ce-4a5d-9ad2-205ede9874e0",
"name": "Email writer",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
4656,
1728
],
"parameters": {
"text": "={{ JSON.stringify($json) }}",
"options": {
"systemMessage": "You are a senior HR compliance analyst who also understands internal communications and executive readability.\n\nYour task is to generate a modern, scannable internal email newsletter as HTML.\nThe email must be easy to skim, visually calm, and readable in under 2 minutes.\n\nImportant:\nGood structure and clarity matter more than completeness.\nDo not dump text. Distill.\n\nUse ONLY the information in the provided report JSON.\nDo not invent facts, risks, or legal interpretations.\n\n=== EDITORIAL RULES ===\n\nWriting style:\n- Short sentences\n- Plain English\n- No legal jargon unless unavoidable\n- Prefer clarity over precision if both are present in the input\n\nCompression rules:\n- Each article: max 3 short sentences\n- Each recommendation: exactly 1 sentence\n- Avoid repeating the same idea in different words\n- If something is low impact, keep it very short\n\nScanning rules:\n- Every section must be understandable by reading only the headings and bold text\n- Use visual separation, not long paragraphs\n- Never put more than 4 lines of text in a single block\n\n=== STRUCTURE (MANDATORY) ===\n\nOutput ONLY valid HTML (no markdown, no explanations).\n\nUse this structure:\n\n1) Header\n - Title: \"HR Weekly Radar\"\n - Subline: date range derived from article dates\n\n2) Intro\n - 2 short sentences answering:\n \"Why should I care about this week?\"\n\n3) Section: Most relevant developments\n - Exactly the top 3 articles\n - Each article as a card:\n \u2022 Title\n \u2022 Why it matters (1 to 2 sentences)\n \u2022 Link\n\n4) Section: Documents to review or update\n - Group by document name\n - For each document:\n \u2022 What to review or update\n \u2022 Why (linked to article topic)\n\n5) Section: Missing or emerging policy topics\n - Short list\n - One line per suggested document\n\n6) Section: Suggested next steps\n - 3 to 5 short, concrete actions\n - Written as short sentences, not bullets\n\n=== VISUAL RULES ===\n\n- Use simple HTML with inline CSS\n- Max width: 600px\n- Neutral system font stack\n- Clear spacing between sections\n- Card-like blocks for articles and recommendations\n- No heavy colors, no icons, no emojis\n\n=== CONSTRAINTS ===\n\n- No subject line\n- No references to \"JSON\", \"input\", or \"data\"\n- Do not mention the original publisher explicitly\n- Output HTML only\n- Write in English\n"
},
"promptType": "define"
},
"typeVersion": 3.1
},
{
"id": "1c44b24f-8185-4e75-aab5-f47c0f8fd8a6",
"name": "Send radar email",
"type": "n8n-nodes-base.gmail",
"position": [
5008,
1728
],
"parameters": {
"sendTo": "={{ $node[\"Config\"].json.userEmail }}",
"message": "={{$json.output}}",
"options": {},
"subject": "Turn HR news into policy update tasks with RSS, Google Drive, AI, and Gmail"
},
"typeVersion": 2.2
},
{
"id": "c655408d-51f2-4bbb-bf85-306cbe51d6a3",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1392,
1392
],
"parameters": {
"width": 720,
"height": 448,
"content": "## How it works\nThis workflow runs once per week and turns HR news into a short internal radar email.\n\n* It reads an RSS feed and keeps only articles from the last 7 days\n* It fetches each article page, extracts the main content, and cleans it into plain text\n* For each article, an AI agent compares the article against your policy and contract template file names from Google Drive\n* The agent outputs structured JSON with a relevance score, a short summary, and suggested documents to review or update\n* A second AI step aggregates everything into a calm, scannable HTML email and sends it to you\n\n## Setup steps\n* Set `newsUrl` to the RSS feed you want to monitor\n* Set `templatesFolderId` to the Google Drive folder that contains your policies and templates\n* Set `userEmail` to the recipient address for the weekly email\n* Tune `maxArticles` to cap cost and runtime\n* Run once manually to verify the HTML extractor CSS selector matches your publisher\n"
},
"typeVersion": 1
},
{
"id": "0f7b9d68-2e6f-4f94-b3df-6f14b5de4e03",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
5168,
1664
],
"parameters": {
"width": 416,
"height": 208,
"content": "## Good to know\n* This sends article text and file names to LLMs\n* Respect the publisher\u2019s terms and avoid redistributing full article text\n* If cost is too high, lower `maxArticles` or shorten `body_text_short`\n"
},
"typeVersion": 1
},
{
"id": "aaea9036-5296-4fc8-b3cc-aa45fe65ff03",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
2144,
1568
],
"parameters": {
"color": 7,
"width": 976,
"height": 288,
"content": "## Collect items\n\n* Runs weekly on the schedule trigger\n* Reads the RSS feed you set in newsUrl\n* Keeps only items from the last 7 days\n* Caps processing with maxArticles to control runtime and cost"
},
"typeVersion": 1
},
{
"id": "b2e8a765-2be3-432e-8941-f5f3a01c2048",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2512,
1920
],
"parameters": {
"color": 7,
"width": 640,
"height": 368,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Extract article text\n* Fetches each article URL from the RSS item\n* Extracts the main body with a CSS selector\n* Removes common noise (ads, social blocks, scripts)\n* Truncates the cleaned text to reduce tokens and cost\n* If the body is empty, adjust the CSS selector in the HTML extraction node for your source site"
},
"typeVersion": 1
},
{
"id": "e18783e9-38a0-4326-83ae-be866ad2918b",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
3312,
1520
],
"parameters": {
"color": 7,
"width": 1840,
"height": 624,
"content": "## Analyze and send\n* Loads file names from your Drive folder (templatesFolderId)\n* Compares each article to your document list and suggests review or updates\n* Aggregates results into a weekly report\n* Generates a calm, scannable HTML email and sends it to userEmail"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "1a412dab-86be-40d8-bb3f-d9d2de6b456b",
"connections": {
"Config": {
"main": [
[
{
"node": "Read RSS feed",
"type": "main",
"index": 0
}
]
]
},
"Cap articles": {
"main": [
[
{
"node": "Fetch article page",
"type": "main",
"index": 0
},
{
"node": "Combine article data",
"type": "main",
"index": 0
}
]
]
},
"Email writer": {
"main": [
[
{
"node": "Send radar email",
"type": "main",
"index": 0
}
]
]
},
"Read RSS feed": {
"main": [
[
{
"node": "Keep last 7 days",
"type": "main",
"index": 0
}
]
]
},
"Weekly trigger": {
"main": [
[
{
"node": "Config",
"type": "main",
"index": 0
}
]
]
},
"Keep last 7 days": {
"main": [
[
{
"node": "Cap articles",
"type": "main",
"index": 0
}
]
]
},
"Gemini chat model": {
"ai_languageModel": [
[
{
"node": "Doc impact analyzer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenAI chat model": {
"ai_languageModel": [
[
{
"node": "Email writer",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Add id and excerpt": {
"main": [
[
{
"node": "List policy and template files",
"type": "main",
"index": 0
},
{
"node": "Attach file inventory",
"type": "main",
"index": 0
}
]
]
},
"Build radar report": {
"main": [
[
{
"node": "Email writer",
"type": "main",
"index": 0
}
]
]
},
"Clean article text": {
"main": [
[
{
"node": "Combine article data",
"type": "main",
"index": 1
}
]
]
},
"Fetch article page": {
"main": [
[
{
"node": "Extract article body",
"type": "main",
"index": 0
}
]
]
},
"Doc impact analyzer": {
"main": [
[
{
"node": "Build radar report",
"type": "main",
"index": 0
}
]
]
},
"Combine article data": {
"main": [
[
{
"node": "Normalize article fields",
"type": "main",
"index": 0
}
]
]
},
"Extract article body": {
"main": [
[
{
"node": "Clean article text",
"type": "main",
"index": 0
}
]
]
},
"Attach file inventory": {
"main": [
[
{
"node": "Doc impact analyzer",
"type": "main",
"index": 0
}
]
]
},
"Aggregate file inventory": {
"main": [
[
{
"node": "Attach file inventory",
"type": "main",
"index": 1
}
]
]
},
"Normalize article fields": {
"main": [
[
{
"node": "Add id and excerpt",
"type": "main",
"index": 0
}
]
]
},
"Structured output schema": {
"ai_outputParser": [
[
{
"node": "Doc impact analyzer",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"List policy and template files": {
"main": [
[
{
"node": "Aggregate file inventory",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
AI powered workflow that scans HR news via RSS, checks which of your policies or contract templates might need updates, and sends a weekly internal newsletter as HTML.
Source: https://n8n.io/workflows/13124/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
LinkedIn_Job_Hunt_and_Cover_Letter. Uses outputParserStructured, outputParserAutofixing, googleDrive, agent. Scheduled trigger; 85 nodes.
This n8n automation workflow automates the creation, scripting, production, and posting of YouTube videos. It leverages AI (OpenAI), image generation (PIAPI), video rendering (Shotstack), and platform
The Multi-Model Agency Content Engine is a high-performance editorial system designed for agencies. It solves the "blank page" problem by alternating between real-world social proof and strategic expe
V2 (2026) available! An intelligent, fully automated news aggregation system that collects articles from multiple sources (RSS feeds + Google Search), uses AI to classify and summarize the most import
kisisel asistan. Uses toolWorkflow, toolHttpRequest, toolCalculator, toolThink. Scheduled trigger; 43 nodes.