This workflow corresponds to n8n.io template #16243 — 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": "smaBUDax7eOjpM41",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Sales outreach radar template",
"tags": [],
"nodes": [
{
"id": "e2c0bb3b-5323-4d7b-824f-f1e790105001",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
1408,
1360
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "96dee1e9-4914-4cc0-9f01-4b361e6aaf11",
"name": "Config",
"type": "n8n-nodes-base.set",
"position": [
1616,
1360
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "assign-feedUrl",
"name": "feedUrl",
"type": "string",
"value": "https://www.reddit.com/r/n8n/new/.rss?limit=50"
},
{
"id": "assign-offering",
"name": "offering",
"type": "string",
"value": "[Describe what you sell here: your product/service, who it\u2019s for, and the problem it solves.]"
},
{
"id": "assign-scoreThreshold",
"name": "scoreThreshold",
"type": "number",
"value": 6
},
{
"id": "assign-maxItems",
"name": "maxItems",
"type": "number",
"value": 10
},
{
"id": "assign-recipientEmail",
"name": "recipientEmail",
"type": "string",
"value": "[youremail@company.com]"
},
{
"id": "assign-digestTitle",
"name": "digestTitle",
"type": "string",
"value": "Sales Outreach Radar"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "fb6dd2a2-4da4-4bc0-ac5e-92cdb5ec8cb0",
"name": "RSS Read",
"type": "n8n-nodes-base.rssFeedRead",
"position": [
1824,
1360
],
"parameters": {
"url": "={{ $('Config').first().json.feedUrl }}",
"options": {}
},
"typeVersion": 1.1
},
{
"id": "0ad651f1-ced8-460b-9253-8773e92d9543",
"name": "Filter Last 24h",
"type": "n8n-nodes-base.filter",
"position": [
2032,
1360
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "cond-24h",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ new Date($json.isoDate).getTime() }}",
"rightValue": "={{ Date.now() - 86400000 }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "370f0fbf-c6de-4cf0-a2ea-12bae99df5a6",
"name": "AI Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2208,
1360
],
"parameters": {
"text": "={{ 'Evaluate this feed item as a sales-outreach opportunity:\\n\\nTitle: ' + $json.title + '\\n\\nContent: ' + ($json.contentSnippet ? $json.contentSnippet.substring(0, 800) : '(no content / link-only item)') + '\\n\\nURL: ' + $json.link }}",
"agent": "conversationalAgent",
"options": {
"systemMessage": "=You are a sales-outreach opportunity scorer. You read items from a monitored feed and judge whether each one is a good opportunity to proactively reach out and offer the product/service described below.\n\n<offering>\n{{ $('Config').first().json.offering }}\n</offering>\n\nFor each item, score how strong a sales-outreach opportunity it is \u2014 i.e. how clearly the author expresses a need, pain point, intent, or buying signal that the offering above could address, and how likely a relevant, non-spammy outreach would be welcome.\n\nScoring 1-10:\n- 8-10: Strong signal. A clear, active need or pain the offering directly solves; the author is asking for help, recommendations, or alternatives; good fit and good timing.\n- 5-7: Moderate signal. A related need or partial fit; the author may be receptive but intent is weaker or the fit is indirect.\n- 1-4: Weak / skip. No real need, off-topic, just showcasing or sharing news, venting, already resolved, or where outreach would be unwelcome or come across as spam.\n\nBe conservative. A false high score wastes outreach effort and risks reputation, so reward genuine buying signals over vague topical relevance.\n\nReturn a JSON object with exactly these fields:\n- score: number 1-10\n- reason: short explanation (1-2 sentences) for the score\n- suggestion: a concrete, personalized outreach angle \u2014 what to lead with and how to be genuinely helpful, NOT a generic pitch\n- title: the exact item title, verbatim from the input\n- url: the exact URL, verbatim from the input"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 1.7
},
{
"id": "86fca6bb-3b43-440f-b1e7-24ff579fcc02",
"name": "Anthropic Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
2208,
1568
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "claude-opus-4-6",
"cachedResultName": "Claude Opus 4.6"
},
"options": {}
},
"credentials": {
"anthropicApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "f64b14f1-1a08-440e-8a4b-90639122a569",
"name": "Sort by Score",
"type": "n8n-nodes-base.sort",
"position": [
2720,
1360
],
"parameters": {
"options": {},
"sortFieldsUi": {
"sortField": [
{
"order": "descending",
"fieldName": "output.score"
}
]
}
},
"typeVersion": 1
},
{
"id": "779db7fa-589f-4157-a17e-5e7f47d001c4",
"name": "Aggregate Posts",
"type": "n8n-nodes-base.aggregate",
"position": [
3120,
1360
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "posts"
},
"typeVersion": 1
},
{
"id": "353eac79-727b-4710-ad53-eebed0873987",
"name": "Has Posts?",
"type": "n8n-nodes-base.if",
"position": [
3344,
1360
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "cond-has-posts",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ $json.posts.length }}",
"rightValue": 0
}
]
}
},
"typeVersion": 2.2
},
{
"id": "1c978774-c7ae-403a-a141-4f67c1364e82",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
896,
1024
],
"parameters": {
"width": 428,
"height": 460,
"content": "## Sales outreach radar workflow\n\n### How does it work\nWatches an RSS feed daily, scores each new item 1-10 as a sales-outreach opportunity against your offering using an LLM, and emails a digest of the best ones.\n\n### Setup\n1. Add **Anthropic API** credentials to the **Anthropic Chat Model** node.\n2. Add **Gmail (OAuth2)** credentials to the **Gmail** node.\n3. Open **Config** and set: `feedUrl`, `offering`, `recipientEmail`\n (optionally also: `scoreThreshold`, `maxItems`, `digestTitle`).\n4. Any RSS feed works \u2014 subreddit `.rss`, blog, job board, forum.\n Adjust the schedule in **Schedule Trigger** if needed.\n\n**Tip:** Gmail can be swapped for Slack, Telegram, or Discord. Replace the final node."
},
"typeVersion": 1
},
{
"id": "6a120760-a4a1-4278-a98d-c8b5d787817a",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
1568,
1184
],
"parameters": {
"color": 6,
"width": 185,
"height": 153,
"content": "**Configure everything here.**\nSet `feedUrl`, `offering`, `recipientEmail`, and more."
},
"typeVersion": 1
},
{
"id": "4d99fda9-c620-4d84-a647-a9efd0ebed54",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2192,
1184
],
"parameters": {
"color": 6,
"width": 248,
"height": 152,
"content": "**AI Scorer**\nScores each feed item 1\u201310 as a sales-outreach opportunity against your offering from Config. The scoring rubric lives in this node's system prompt. "
},
"typeVersion": 1
},
{
"id": "3254aec6-15cc-4f6a-bf0b-b1ee4b50819e",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1360,
1184
],
"parameters": {
"color": 6,
"width": 185,
"height": 153,
"content": "**Start of workflow**\nConfigure a daily, weekly or monthly trigger."
},
"typeVersion": 1
},
{
"id": "ea6d5b11-1fa6-4c6d-a331-0a5aa2bb0693",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2352,
1568
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"type\": \"object\",\n \"properties\": {\n \"score\": {\n \"type\": \"number\",\n \"description\": \"Sales-outreach opportunity score from 1 to 10\"\n },\n \"reason\": {\n \"type\": \"string\",\n \"description\": \"Short explanation for the score in 1-2 sentences\"\n },\n \"suggestion\": {\n \"type\": \"string\",\n \"description\": \"A concrete, personalized outreach angle \u2014 what to lead with and how to help, not a generic pitch\"\n },\n \"title\": {\n \"type\": \"string\",\n \"description\": \"The exact item title verbatim from the input\"\n },\n \"url\": {\n \"type\": \"string\",\n \"description\": \"The exact URL verbatim from the input\"\n }\n },\n \"required\": [\"score\", \"reason\", \"suggestion\", \"title\", \"url\"]\n}"
},
"typeVersion": 1.3
},
{
"id": "16bb39bc-bd61-4c0d-a383-78d9af569a06",
"name": "Limit Top 10",
"type": "n8n-nodes-base.limit",
"position": [
2928,
1360
],
"parameters": {
"maxItems": "={{ $('Config').first().json.maxItems }}"
},
"typeVersion": 1
},
{
"id": "1471f1e3-8080-48b4-b109-e48c0d1c9460",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1776,
1184
],
"parameters": {
"color": 6,
"width": 185,
"height": 153,
"content": "**RSS Read**\n\nFetches the latest items from the feed in Config (feedUrl). Use a subreddit URL + /new/.rss?limit=50."
},
"typeVersion": 1
},
{
"id": "53749782-5b8f-4bd2-b660-db6e5f2f34bd",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1984,
1184
],
"parameters": {
"color": 6,
"width": 185,
"height": 153,
"content": "**Filter Last 24h**\n\nKeeps only items published in the last 24 hours, so old posts aren't re-scored on every run. "
},
"typeVersion": 1
},
{
"id": "e16d1fed-abb9-4b48-8541-d188b5f02c74",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
2464,
1184
],
"parameters": {
"color": 6,
"width": 185,
"height": 153,
"content": "**Filter by Score**\nDrops low-scoring items, keeping only those at or above scoreThreshold (default 6). "
},
"typeVersion": 1
},
{
"id": "0885cd64-624d-4c4c-bf86-d8391f5633e5",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
2672,
1184
],
"parameters": {
"color": 6,
"width": 185,
"height": 153,
"content": "**Sort by Score**\nOrders surviving items highest-first, so the strongest opportunities appear at the top of the digest."
},
"typeVersion": 1
},
{
"id": "7346061d-7afc-4402-ab6a-522ce9097594",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
2880,
1184
],
"parameters": {
"color": 6,
"width": 185,
"height": 153,
"content": "**Limits top 10**\nCaps the digest to the top maxItems (default 10) so the email stays readable on busy days."
},
"typeVersion": 1
},
{
"id": "e3eb65c2-d3d6-4a45-9a47-f37aa1894348",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
3088,
1184
],
"parameters": {
"color": 6,
"width": 185,
"height": 153,
"content": "**Aggregate posts**\nCombines all scored items into a single list (posts) so the next steps build one email instead of one per item."
},
"typeVersion": 1
},
{
"id": "09cde239-45ed-4342-85ef-67b162c54d18",
"name": "Sticky Note10",
"type": "n8n-nodes-base.stickyNote",
"position": [
3296,
1184
],
"parameters": {
"color": 6,
"width": 185,
"height": 153,
"content": "**Has Posts?**\nOnly sends an email if at least one item passed the filter. Prevents empty digests on quiet days."
},
"typeVersion": 1
},
{
"id": "72edfbdf-8ce8-4070-b4e4-464e0c96ea92",
"name": "Sticky Note11",
"type": "n8n-nodes-base.stickyNote",
"position": [
3504,
1184
],
"parameters": {
"color": 6,
"width": 185,
"height": 153,
"content": "**Send Email**\nSends the formatted HTML digest to recipientEmail; add your Gmail (OAuth2) credentials here. "
},
"typeVersion": 1
},
{
"id": "15317e96-b1cb-4998-a17b-75a1f5e2391c",
"name": "Filter by score",
"type": "n8n-nodes-base.filter",
"position": [
2512,
1360
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "cond-score",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $json.output.score }}",
"rightValue": "={{ $('Config').first().json.scoreThreshold }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "0f6c439c-f16b-4f07-b1f4-b96fe334f156",
"name": "Send email",
"type": "n8n-nodes-base.gmail",
"position": [
3552,
1360
],
"parameters": {
"sendTo": "={{ $('Config').first().json.recipientEmail }}",
"message": "={{ '<html><body style=\"font-family:Arial,Helvetica,sans-serif;margin:0;padding:0;background:#f7f7f7;\"><table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><table width=\"700\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" style=\"background:#ffffff;margin:20px auto;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.08);\"><tr><td style=\"background:#ff4500;padding:28px 32px;text-align:center;\"><h1 style=\"margin:0;color:#ffffff;font-size:26px;font-weight:700;letter-spacing:-0.5px;\">' + $('Config').first().json.digestTitle + '</h1><p style=\"margin:6px 0 0;color:rgba(255,255,255,0.85);font-size:14px;\">Opportunity digest — ' + $now.toFormat('EEEE d MMMM yyyy') + '</p></td></tr>' + $json.posts.map(function(p, i) { return '<tr><td style=\"padding:20px 32px;border-bottom:1px solid #f0f0f0;\"><table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\"><tr><td><span style=\"display:inline-block;background:' + (p.output.score >= 8 ? '#ff4500' : p.output.score >= 6 ? '#ff6534' : '#ff8c69') + ';color:#fff;font-size:12px;font-weight:700;padding:3px 10px;border-radius:20px;margin-bottom:8px;\">Score ' + p.output.score + '/10</span></td></tr><tr><td><h3 style=\"margin:0 0 8px;font-size:16px;line-height:1.4;\"><a href=\"' + p.output.url + '\" style=\"color:#1a1a1a;text-decoration:none;\">' + p.output.title + '</a></h3></td></tr><tr><td style=\"font-size:13px;color:#444;padding-bottom:6px;\">' + p.output.reason + '</td></tr><tr><td style=\"font-size:13px;color:#666;font-style:italic;\">Suggestion: ' + p.output.suggestion + '</td></tr></table></td></tr>'; }).join('') + '<tr><td style=\"padding:20px 32px;text-align:center;color:#aaa;font-size:12px;\">Generated by your n8n Sales Outreach Radar</td></tr></table></td></tr></table></body></html>' }}",
"options": {},
"subject": "={{ $('Config').first().json.digestTitle + ' \u00b7 ' + $now.toFormat('d MMMM yyyy') }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "d45d2fc2-bfe0-4f2d-a13b-a5801dc5491f",
"connections": {
"Config": {
"main": [
[
{
"node": "RSS Read",
"type": "main",
"index": 0
}
]
]
},
"AI Agent": {
"main": [
[
{
"node": "Filter by score",
"type": "main",
"index": 0
}
]
]
},
"RSS Read": {
"main": [
[
{
"node": "Filter Last 24h",
"type": "main",
"index": 0
}
]
]
},
"Has Posts?": {
"main": [
[
{
"node": "Send email",
"type": "main",
"index": 0
}
]
]
},
"Limit Top 10": {
"main": [
[
{
"node": "Aggregate Posts",
"type": "main",
"index": 0
}
]
]
},
"Sort by Score": {
"main": [
[
{
"node": "Limit Top 10",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Posts": {
"main": [
[
{
"node": "Has Posts?",
"type": "main",
"index": 0
}
]
]
},
"Filter Last 24h": {
"main": [
[
{
"node": "AI Agent",
"type": "main",
"index": 0
}
]
]
},
"Filter by score": {
"main": [
[
{
"node": "Sort by Score",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Config",
"type": "main",
"index": 0
}
]
]
},
"Anthropic Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Agent",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "AI Agent",
"type": "ai_outputParser",
"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.
anthropicApigmailOAuth2
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow runs on a weekly schedule, reads an RSS feed (for example, a subreddit RSS), scores recent items with Anthropic Claude as sales-outreach opportunities against your offering, and emails a ranked digest of the best matches via Gmail. Runs on a weekly schedule. Reads…
Source: https://n8n.io/workflows/16243/ — 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.
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
My workflow 14. Uses rssFeedRead, chainLlm, lmChatOpenAi, openWeatherMap. Scheduled trigger; 40 nodes.
Automatically re-engage old or inactive clients by sending AI-personalized follow-up emails using Claude 3.7 Sonnet, Gmail, and Google Sheets — with smart reply detection to avoid messaging clients wh
If you teach on Udemy at any meaningful scale, you already know the problem: 80% of student messages are variations of the same handful of questions, but every one of them needs a thoughtful reply to
How it works: Daily Trigger: Every morning at 8 AM, the workflow is automatically triggered. Fetch Trending Topics: The workflow collects trending topics from external sources, such as news RSS feeds