{
  "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 &mdash; ' + $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
          }
        ]
      ]
    }
  }
}