This workflow corresponds to n8n.io template #14702 — we link there as the canonical source.
This workflow follows the Google Sheets → OpenAI 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": "hXgddRLsi9UFzwpK",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "AI Tech Insight Engine",
"tags": [
{
"id": "i8BYq3xE6YekBdia",
"name": "ai automation",
"createdAt": "2026-03-13T14:40:52.799Z",
"updatedAt": "2026-03-13T14:40:52.799Z"
},
{
"id": "suabas1C8ijzX9N3",
"name": "content-creation",
"createdAt": "2026-04-04T05:17:22.149Z",
"updatedAt": "2026-04-04T05:17:22.149Z"
},
{
"id": "WqG2CpeVNRVhuYrs",
"name": "tech-news",
"createdAt": "2026-04-04T05:17:26.966Z",
"updatedAt": "2026-04-04T05:17:26.966Z"
},
{
"id": "OPClKOGtFbi517F4",
"name": "rss",
"createdAt": "2026-04-04T05:17:30.821Z",
"updatedAt": "2026-04-04T05:17:30.821Z"
},
{
"id": "79N3m0Kx1rUp5ZW0",
"name": "data-processing",
"createdAt": "2026-04-04T05:17:40.751Z",
"updatedAt": "2026-04-04T05:17:40.751Z"
},
{
"id": "hGsabpUIt7VN7kNj",
"name": "social-media",
"createdAt": "2026-04-04T05:17:52.775Z",
"updatedAt": "2026-04-04T05:17:52.775Z"
},
{
"id": "qfS2esG6Rh52i4DR",
"name": "slack",
"createdAt": "2026-01-29T06:09:26.747Z",
"updatedAt": "2026-01-29T06:09:26.747Z"
}
],
"nodes": [
{
"id": "69c8a0e8-f35e-463b-9a39-a0141604a323",
"name": "Fetch RSS - TechCrunch",
"type": "n8n-nodes-base.rssFeedRead",
"position": [
-192,
-240
],
"parameters": {
"url": "https://techcrunch.com/feed/",
"options": {
"ignoreSSL": false
}
},
"typeVersion": 1.2
},
{
"id": "20359861-a460-4171-959b-00f155e25232",
"name": "Filter - Published Within 72h",
"type": "n8n-nodes-base.if",
"position": [
48,
-448
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "d4161e94-36c4-4b88-b23d-2ed4cb35dc53",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ new Date($json.isoDate) > new Date(Date.now() - 72 * 60 * 60 * 1000) }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "68f47e54-9232-43b5-8a85-3f7af8434469",
"name": "Filter - Tech Keywords",
"type": "n8n-nodes-base.if",
"position": [
688,
-272
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5fc6c2fa-2672-472c-8d44-54eb7b617b7e",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{$json.title.toLowerCase().includes(\"ai\") ||\n$json.title.toLowerCase().includes(\"artificial intelligence\") ||\n$json.title.toLowerCase().includes(\"cybersecurity\") ||\n$json.title.toLowerCase().includes(\"robotics\") ||\n$json.title.toLowerCase().includes(\"quantum\") ||\n$json.title.toLowerCase().includes(\"blockchain\") ||\n$json.title.toLowerCase().includes(\"machine learning\")}}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.3
},
{
"id": "b0aec9c9-fdb4-44d2-89cc-9cfdb7370032",
"name": "Normalize Link",
"type": "n8n-nodes-base.code",
"position": [
304,
-464
],
"parameters": {
"jsCode": "return items.map(item => {\n item.json.link = item.json.link.replace(/\\/$/, '');\n return item;\n});"
},
"typeVersion": 2
},
{
"id": "85c380cc-922f-48c3-80f8-e462b6f99782",
"name": "Remove Already Posted Links",
"type": "n8n-nodes-base.code",
"position": [
512,
-208
],
"parameters": {
"jsCode": "const existingLinks = $items(\"Check Google sheet\")\n .map(i => i.json.link?.replace(/\\/$/, ''))\n .filter(Boolean);\n\nreturn $items(\"Normalize Link\")\n .filter(item => {\n const cleanLink = item.json.link.replace(/\\/$/, '');\n return !existingLinks.includes(cleanLink);\n });"
},
"typeVersion": 2
},
{
"id": "3e41cf51-ca8a-4b6d-aaf0-a078a4d45b6e",
"name": "Sort by Publish Date",
"type": "n8n-nodes-base.code",
"position": [
896,
-464
],
"parameters": {
"jsCode": "items.sort((a, b) => new Date(b.json.pubDate) - new Date(a.json.pubDate));\nreturn items.slice(0, 3);"
},
"typeVersion": 2
},
{
"id": "8fda05fd-a7ce-4117-a66a-ba61e81ba273",
"name": "AI - Score & Generate Tweet",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1152,
-448
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {
"textFormat": {
"textOptions": {
"type": "json_schema",
"schema": "{\n \"type\": \"object\",\n \"properties\": {\n \"score\": {\n \"type\": \"number\"\n },\n \"tweet\": {\n \"type\": \"string\"\n } \n },\n \"required\": [\"score\", \"tweet\"],\n \"additionalProperties\": false\n}"
}
}
},
"responses": {
"values": [
{
"role": "system",
"content": "=You are a professional tech social media editor. \n\n1. Rate the article from 1-10 based on innovation in emerging technology. \n2. Write a concise, engaging tweet under 240 characters (without the link). \n3. Add 1-2 relevant tech hashtags. \n\nReturn your answer strictly in this JSON format: \n\n{ \n\"score\": number,\n\"tweet\": \"text\" \n}"
},
{
"content": "=Title: {{$json.title}}\nSummary: {{ $json.summary }}\nCategories: {{($json.categories || []).join(\", \")}}"
}
]
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "79cdd473-8ff1-4261-af16-f1ba9b83f659",
"name": "Filter - Score \u2265 8",
"type": "n8n-nodes-base.if",
"position": [
1952,
-256
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "cb3691ae-0a77-436b-ae66-063edc37200e",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $json.score }}",
"rightValue": 8
}
]
}
},
"typeVersion": 2.3
},
{
"id": "a165286f-72e9-4294-b278-39b691fd5da1",
"name": "Sort by AI Score",
"type": "n8n-nodes-base.code",
"position": [
2160,
-272
],
"parameters": {
"jsCode": "items.sort((a, b) => b.json.score - a.json.score);\nreturn items;"
},
"typeVersion": 2
},
{
"id": "b02d7f07-396a-4334-aa50-091397fe896f",
"name": "Limit - Top 2 Posts",
"type": "n8n-nodes-base.limit",
"position": [
2336,
-272
],
"parameters": {
"maxItems": 2
},
"typeVersion": 1
},
{
"id": "179b42fc-b1dc-4c9d-83cd-7ce43e40efd5",
"name": "Log to Google Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
2592,
-64
],
"parameters": {
"columns": {
"value": {
"guid": "={{ $json.guid }}",
"link": "={{ $json.link }}",
"score": "={{ $json.score }}",
"tweet": "={{ $json.tweet }}",
"creator": "={{ $json.creator }}",
"pub_date": "={{ $json.pub_date }}",
"date_posted": "={{ $now }}"
},
"schema": [
{
"id": "link",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "guid",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "guid",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "creator",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "creator",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "pub_date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "pub_date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "tweet",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "tweet",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "score",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "score",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "date_posted",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "date_posted",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"link"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/12JlGr67t6pywk5qaptbHVUSnaYFr_kelzLvkEEJ8eI4/edit#gid=0",
"cachedResultName": "techcrunch"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "12JlGr67t6pywk5qaptbHVUSnaYFr_kelzLvkEEJ8eI4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/12JlGr67t6pywk5qaptbHVUSnaYFr_kelzLvkEEJ8eI4/edit?usp=drivesdk",
"cachedResultName": "techcrunch_rss_feed"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "0815ea29-16f4-46a2-ad32-997798809396",
"name": "Low Score",
"type": "n8n-nodes-base.noOp",
"position": [
2032,
16
],
"parameters": {},
"typeVersion": 1
},
{
"id": "e85e1194-8d2f-4a8d-99c3-169cd8542eb9",
"name": "Old Article",
"type": "n8n-nodes-base.noOp",
"position": [
80,
-160
],
"parameters": {},
"typeVersion": 1
},
{
"id": "679e320e-39f5-4bbc-ae44-11b2d8597feb",
"name": "Preserve RSS Data",
"type": "n8n-nodes-base.code",
"position": [
912,
-224
],
"parameters": {
"jsCode": "return items.map(item => {\n return {\n json: {\n rss: item.json, // Preserve everything\n title: item.json.title,\n summary: item.json.contentSnippet,\n categories: item.json.categories\n }\n };\n});"
},
"typeVersion": 2
},
{
"id": "ffcb7a9c-491c-48d3-b852-98d24f84bb6d",
"name": "Normalize Final Structure",
"type": "n8n-nodes-base.code",
"position": [
1728,
-48
],
"parameters": {
"jsCode": "return items.map(item => {\n const ai = item.json.output?.[0]?.content?.[0]?.text;\n const rss = item.json.rss;\n\n if (!ai || !rss) {\n throw new Error(\"Missing AI or RSS data\");\n }\n\n return {\n json: {\n score: ai.score,\n tweet: ai.tweet,\n link: rss.link,\n guid: rss.guid,\n creator: rss.creator,\n pub_date: rss.pubDate\n }\n };\n});"
},
"typeVersion": 2
},
{
"id": "dfca707e-72ca-4611-85bf-a5ea4260726c",
"name": "Merge AI + RSS (By Position)",
"type": "n8n-nodes-base.merge",
"position": [
1488,
-240
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "0f99b011-eb2f-463d-8978-5fc64b4d2c81",
"name": "Alignment Validator",
"type": "n8n-nodes-base.code",
"position": [
1728,
-448
],
"parameters": {
"jsCode": "return items.map(item => {\n\n const ai = item.json.output?.[0]?.content?.[0]?.text;\n\n if (!ai) {\n item.json.ai_score = 0;\n item.json.tweet_text = null;\n item.json.valid = false;\n return item;\n }\n\n item.json.ai_score = ai.score ?? 0;\n item.json.tweet_text = ai.tweet ?? null;\n\n // Alignment validation (optional)\n item.json.valid = item.json.ai_score >= 8;\n\n return item;\n});"
},
"typeVersion": 2
},
{
"id": "0d8ca477-eec1-4f86-9707-3f9be4a51d6a",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-224,
-464
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"typeVersion": 1.3
},
{
"id": "4f1217d8-dd63-40fa-bd94-61d250324df1",
"name": "Not Tech Related",
"type": "n8n-nodes-base.noOp",
"position": [
704,
16
],
"parameters": {},
"typeVersion": 1
},
{
"id": "7b4b4e69-efc6-4ecb-8ded-46f325b47cf0",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
-560
],
"parameters": {
"width": 480,
"height": 640,
"content": "## AI Tech Insight Engine\n\nThis workflow automatically collects the latest technology news, filters for emerging tech topics, scores each article using AI, and generates high-quality social media content. It ensures only the most relevant and innovative tech updates are shared, reducing noise and improving content quality.\n\n### How it works\nThe workflow starts with an RSS feed (e.g., TechCrunch) and filters recent articles. It removes duplicates by checking Google Sheets, then sends articles to an AI model to evaluate innovation and generate a tweet/digest. Items are scored, filtered (score \u2265 8), sorted, and limited to the top results. Finally, formatted outputs are sent to Slack (or other platforms) and logged for tracking.\n\n### Setup\n- Add your RSS feed URL (e.g., TechCrunch)\n- Configure OpenAI API credentials\n- Connect Google Sheets for deduplication and logging\n- Set up Slack webhook or node for notifications\n\n### Customization\n- Adjust score threshold (e.g., \u22657 or \u22659)\n- Modify prompt for tone or niche (AI, cybersecurity, etc.)\n- Change output destination (X, Telegram, Email)"
},
"typeVersion": 1
},
{
"id": "3fb02ed0-c949-488c-a945-4a60049b4b31",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
-560
],
"parameters": {
"color": 7,
"width": 304,
"height": 544,
"content": "## Data Ingestion\nFetch latest tech articles on a schedule from RSS sources."
},
"typeVersion": 1
},
{
"id": "fde9e2ec-7092-4e62-a3e2-d278c70b91d2",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
48,
-560
],
"parameters": {
"color": 7,
"width": 800,
"height": 752,
"content": "## Filtering & Deduplication\nFilter relevant topics and remove already processed articles."
},
"typeVersion": 1
},
{
"id": "99860a52-b7bd-409f-9880-cd3c230642d7",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
864,
-560
],
"parameters": {
"color": 7,
"width": 576,
"height": 560,
"content": "## AI Scoring & Content Generation\nScore innovation and generate tweet + image concept using AI."
},
"typeVersion": 1
},
{
"id": "f3329fed-b2b1-4397-8e1f-dbdcc3a8d8be",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1456,
-560
],
"parameters": {
"color": 7,
"width": 448,
"height": 720,
"content": "## Merge & Normalize\nCombine AI output with RSS data and standardize structure."
},
"typeVersion": 1
},
{
"id": "f83a9f24-3254-4198-b81a-e7bb57d9a04e",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1920,
-560
],
"parameters": {
"color": 7,
"width": 544,
"height": 720,
"content": "## Quality Filter\nKeep only high-impact articles based on AI score threshold."
},
"typeVersion": 1
},
{
"id": "73931452-ae0c-4996-a12c-70aa9dfd0609",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
2480,
-560
],
"parameters": {
"color": 7,
"width": 464,
"height": 720,
"content": "## Distribution & tracking\nSend curated tech insights to Slack or other platforms.\nStore processed items for tracking and deduplication.\n"
},
"typeVersion": 1
},
{
"id": "facbce73-6f53-4615-b104-d22dd810c679",
"name": "Check Google sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
320,
-208
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $json.link }}",
"lookupColumn": "link"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/12JlGr67t6pywk5qaptbHVUSnaYFr_kelzLvkEEJ8eI4/edit#gid=0",
"cachedResultName": "techcrunch"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "12JlGr67t6pywk5qaptbHVUSnaYFr_kelzLvkEEJ8eI4",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/12JlGr67t6pywk5qaptbHVUSnaYFr_kelzLvkEEJ8eI4/edit?usp=drivesdk",
"cachedResultName": "techcrunch_rss_feed"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7,
"alwaysOutputData": true
},
{
"id": "cfb883c5-d1f6-4f98-9b96-b443584bc232",
"name": "Send to Slack Channel",
"type": "n8n-nodes-base.slack",
"position": [
2592,
-416
],
"parameters": {
"text": "={{ $json.tweet }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C0A252GLT70",
"cachedResultName": "all-team-sawi"
},
"otherOptions": {
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
}
],
"active": false,
"settings": {
"timezone": "Asia/Manila",
"callerPolicy": "workflowsFromSameOwner",
"timeSavedMode": "fixed",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "b1be9cda-0a02-447f-9877-6c05b8adb474",
"connections": {
"Normalize Link": {
"main": [
[
{
"node": "Check Google sheet",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Fetch RSS - TechCrunch",
"type": "main",
"index": 0
}
]
]
},
"Sort by AI Score": {
"main": [
[
{
"node": "Limit - Top 2 Posts",
"type": "main",
"index": 0
}
]
]
},
"Preserve RSS Data": {
"main": [
[
{
"node": "AI - Score & Generate Tweet",
"type": "main",
"index": 0
},
{
"node": "Merge AI + RSS (By Position)",
"type": "main",
"index": 1
}
]
]
},
"Check Google sheet": {
"main": [
[
{
"node": "Remove Already Posted Links",
"type": "main",
"index": 0
}
]
]
},
"Alignment Validator": {
"main": [
[
{
"node": "Normalize Final Structure",
"type": "main",
"index": 0
}
]
]
},
"Limit - Top 2 Posts": {
"main": [
[
{
"node": "Log to Google Sheet",
"type": "main",
"index": 0
},
{
"node": "Send to Slack Channel",
"type": "main",
"index": 0
}
]
]
},
"Filter - Score \u2265 8": {
"main": [
[
{
"node": "Sort by AI Score",
"type": "main",
"index": 0
}
],
[
{
"node": "Low Score",
"type": "main",
"index": 0
}
]
]
},
"Sort by Publish Date": {
"main": [
[
{
"node": "Preserve RSS Data",
"type": "main",
"index": 0
}
]
]
},
"Fetch RSS - TechCrunch": {
"main": [
[
{
"node": "Filter - Published Within 72h",
"type": "main",
"index": 0
}
]
]
},
"Filter - Tech Keywords": {
"main": [
[
{
"node": "Sort by Publish Date",
"type": "main",
"index": 0
}
],
[
{
"node": "Not Tech Related",
"type": "main",
"index": 0
}
]
]
},
"Normalize Final Structure": {
"main": [
[
{
"node": "Filter - Score \u2265 8",
"type": "main",
"index": 0
}
]
]
},
"AI - Score & Generate Tweet": {
"main": [
[
{
"node": "Merge AI + RSS (By Position)",
"type": "main",
"index": 0
}
]
]
},
"Remove Already Posted Links": {
"main": [
[
{
"node": "Filter - Tech Keywords",
"type": "main",
"index": 0
}
]
]
},
"Merge AI + RSS (By Position)": {
"main": [
[
{
"node": "Alignment Validator",
"type": "main",
"index": 0
}
]
]
},
"Filter - Published Within 72h": {
"main": [
[
{
"node": "Normalize Link",
"type": "main",
"index": 0
}
],
[
{
"node": "Old Article",
"type": "main",
"index": 0
}
]
]
}
}
}
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.
googleSheetsOAuth2ApiopenAiApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automatically collects the latest technology news, filters for emerging topics, and uses AI to score relevance and generate clean, ready-to-share content. It helps you focus on high-impact updates while eliminating noise, making it ideal for curated tech feeds or…
Source: https://n8n.io/workflows/14702/ — 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.
This workflow automatically creates a daily market intelligence brief for your stock portfolio. Instead of checking prices, news, and social media separately, it brings everything together into one cl
Imagine a dedicated financial expert tirelessly working behind the scenes, sifting through every transaction, every investment move, and every accounting entry. That's exactly what this automated syst
(n8n + Google Sheets + OpenAI + Slack)
Automate your social media content pipeline from idea to scheduled post. This workflow reads content ideas from a Google Sheet, uses OpenAI to generate platform-optimized posts for LinkedIn, X (Twitte
Property management companies, building managers, and inspection teams who want to automate recurring property inspections, improve issue tracking, and streamline reporting.