This workflow corresponds to n8n.io template #17754 — we link there as the canonical source.
This workflow follows the Gmail → 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 →
{
"id": "rtS92v4XMlvGJ5Nu",
"name": "AI Competitor Monitoring Platform",
"tags": [],
"nodes": [
{
"id": "dab9f584-c2c5-46dc-b4eb-a24567e89eab",
"name": "AI Competitor Monitoring Platform",
"type": "n8n-nodes-base.stickyNote",
"position": [
-528,
-512
],
"parameters": {
"color": 3,
"width": 560,
"height": 740,
"content": "# AI Competitor Monitoring Platform\n\n## What this workflow does\n\nThis workflow automatically monitors competitor websites and RSS feeds, summarizes the latest updates with AI, stores the results in Google Sheets and Notion, and sends notifications through Slack and Gmail. It helps marketing teams, product managers, founders, and SEO professionals stay informed about competitor activity without manual research.\n\n## How it works\n\n1. Loads workflow configuration.\n2. Collects website content and RSS feeds.\n3. Merges and removes duplicate updates.\n4. Uses OpenAI to generate summaries.\n5. Stores insights in Google Sheets and Notion.\n6. Sends Slack and email notifications.\n\n## Setup\n\n\u2610 Connect OpenAI credentials\n\n\u2610 Connect Google Sheets\n\n\u2610 Connect Notion\n\n\u2610 Connect Slack\n\n\u2610 Connect Gmail\n\n\u2610 Update the Workflow Configuration node with your competitors.\n\n## Customization\n\n\u2022 Add more competitors in the Configuration node.\n\n\u2022 Replace Slack with Teams or Discord.\n\n\u2022 Replace Google Sheets with Airtable or Supabase."
},
"typeVersion": 1
},
{
"id": "20430031-f63d-4397-864b-d7b3b1850ae7",
"name": "Configuration",
"type": "n8n-nodes-base.stickyNote",
"position": [
272,
224
],
"parameters": {
"color": 7,
"width": 380,
"height": 100,
"content": "## Configuration\n\nUpdate your competitors, RSS feeds, notification channels, and AI model before running the workflow."
},
"typeVersion": 1
},
{
"id": "a01d948e-1a02-4019-bc08-e99017890434",
"name": "Website Monitoring",
"type": "n8n-nodes-base.stickyNote",
"position": [
1136,
-176
],
"parameters": {
"color": 7,
"width": 380,
"height": 80,
"content": "## Website Monitoring\n\nDownloads competitor webpages and extracts the latest content for analysis."
},
"typeVersion": 1
},
{
"id": "f522bb7a-d3ab-4af2-96a6-111ebe985636",
"name": "RSS Monitoring",
"type": "n8n-nodes-base.stickyNote",
"position": [
1456,
768
],
"parameters": {
"color": 7,
"width": 380,
"height": 80,
"content": "## RSS Monitoring\n\nFetches the latest articles from competitor RSS feeds and removes duplicate entries."
},
"typeVersion": 1
},
{
"id": "cd088b84-7fb7-4997-9416-dbce0f137abf",
"name": "AI Analysis",
"type": "n8n-nodes-base.stickyNote",
"position": [
2608,
-368
],
"parameters": {
"color": 7,
"width": 380,
"height": 80,
"content": "## AI Analysis\n\nSends the collected content to OpenAI to generate structured summaries and key insights."
},
"typeVersion": 1
},
{
"id": "38c659c7-14c9-4d5d-b122-87bab469eb5f",
"name": "Storage",
"type": "n8n-nodes-base.stickyNote",
"position": [
2848,
704
],
"parameters": {
"color": 7,
"width": 380,
"height": 80,
"content": "## Storage\n\nStores the generated insights in Google Sheets and Notion for future reference."
},
"typeVersion": 1
},
{
"id": "3cb54aa1-175b-4527-b615-35eca74664c1",
"name": "Notifications",
"type": "n8n-nodes-base.stickyNote",
"position": [
3792,
784
],
"parameters": {
"color": 7,
"width": 380,
"height": 80,
"content": "## Notifications\n\nSends summarized competitor updates to Slack and Gmail."
},
"typeVersion": 1
},
{
"id": "ad20f9ea-cf05-4e0c-9fce-0135d2724c22",
"name": "Warning",
"type": "n8n-nodes-base.stickyNote",
"position": [
-496,
448
],
"parameters": {
"width": 380,
"height": 120,
"content": "\u26a0 Before running\n\nConnect your OpenAI, Google Sheets, Notion, Slack, and Gmail credentials.\n\nUpdate the Workflow Configuration node with your own competitors before enabling the schedule."
},
"typeVersion": 1
},
{
"id": "3d631f3f-8b73-48d3-a80b-bc5fcff9eab9",
"name": "Daily 8 AM Schedule",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
0,
464
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 8
}
]
}
},
"typeVersion": 1.3
},
{
"id": "f77b1ab7-3188-4dc3-a318-3e5bf43ca47f",
"name": "Workflow Configuration",
"type": "n8n-nodes-base.set",
"position": [
224,
464
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "cfg1",
"name": "competitors",
"type": "string",
"value": "Competitor A,Competitor B,Competitor C"
},
{
"id": "cfg2",
"name": "competitor_urls",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__https://competitor-a.com,https://competitor-b.com,https://competitor-c.com__>"
},
{
"id": "cfg3",
"name": "rss_feeds",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__https://competitor-a.com/rss/,https://competitor-b.com/rss/,https://competitor-c.com/rss/__>"
},
{
"id": "cfg4",
"name": "keywords",
"type": "string",
"value": "product launch, pricing, acquisition, partnership, funding, new feature, layoffs, hiring"
},
{
"id": "cfg5",
"name": "openai_model",
"type": "string",
"value": "gpt-4o"
},
{
"id": "cfg6",
"name": "slack_channel",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Your Slack channel name e.g. competitor-intel__>"
},
{
"id": "cfg7",
"name": "email_recipient",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__recipient@yourcompany.com__>"
},
{
"id": "cfg8",
"name": "notion_database_id",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Your Notion Database ID from the database URL__>"
},
{
"id": "cfg9",
"name": "google_sheets_id",
"type": "string",
"value": "<__PLACEHOLDER_VALUE__Your Google Sheets document ID from the spreadsheet URL__>"
},
{
"id": "cfg10",
"name": "report_date",
"type": "string",
"value": "={{ $now.toFormat(\"yyyy-MM-dd\") }}"
}
]
}
},
"typeVersion": 3.5
},
{
"id": "47afa7a3-e50d-419c-87c6-edd6be618b28",
"name": "Split Competitors List",
"type": "n8n-nodes-base.code",
"position": [
448,
464
],
"parameters": {
"jsCode": "var config = $input.first().json;\nvar names = config.competitors.split(',').map(function(c) { return c.trim(); });\nvar urls = config.competitor_urls.split(',').map(function(u) { return u.trim(); });\nvar feeds = config.rss_feeds.split(',').map(function(r) { return r.trim(); });\n\nreturn names.map(function(name, i) {\n return {\n json: {\n competitor: name,\n website_url: urls[i] || '',\n rss_feed: feeds[i] || '',\n keywords: config.keywords,\n openai_model: config.openai_model,\n slack_channel: config.slack_channel,\n email_recipient: config.email_recipient,\n notion_database_id: config.notion_database_id,\n google_sheets_id: config.google_sheets_id,\n report_date: config.report_date,\n }\n };\n});"
},
"typeVersion": 2
},
{
"id": "5552f5c2-678c-4415-b2cd-f20629898c7f",
"name": "Set Current Competitor",
"type": "n8n-nodes-base.set",
"position": [
896,
272
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "sc1",
"name": "competitor",
"type": "string",
"value": "={{ $json.competitor }}"
},
{
"id": "sc2",
"name": "website_url",
"type": "string",
"value": "={{ $json.website_url }}"
},
{
"id": "sc3",
"name": "rss_feed",
"type": "string",
"value": "={{ $json.rss_feed }}"
},
{
"id": "sc4",
"name": "google_news_url",
"type": "string",
"value": "={{ \"https://news.google.com/rss/search?q=\" + $json.competitor.replace(/ /g, \"+\") + \"&hl=en-US&gl=US&ceid=US:en\" }}"
},
{
"id": "sc5",
"name": "reddit_url",
"type": "string",
"value": "={{ \"https://www.reddit.com/search.rss?q=\" + $json.competitor.replace(/ /g, \"+\") + \"&sort=new&limit=10\" }}"
},
{
"id": "sc6",
"name": "keywords",
"type": "string",
"value": "={{ $json.keywords }}"
},
{
"id": "sc7",
"name": "openai_model",
"type": "string",
"value": "={{ $json.openai_model }}"
},
{
"id": "sc8",
"name": "report_date",
"type": "string",
"value": "={{ $json.report_date }}"
},
{
"id": "sc9",
"name": "notion_database_id",
"type": "string",
"value": "={{ $json.notion_database_id }}"
},
{
"id": "sc10",
"name": "google_sheets_id",
"type": "string",
"value": "={{ $json.google_sheets_id }}"
},
{
"id": "sc11",
"name": "slack_channel",
"type": "string",
"value": "={{ $json.slack_channel }}"
},
{
"id": "sc12",
"name": "email_recipient",
"type": "string",
"value": "={{ $json.email_recipient }}"
}
]
}
},
"typeVersion": 3.5
},
{
"id": "c252ccc5-c560-4e31-b11f-500bdd93f666",
"name": "Fetch Website HTML",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
1120,
0
],
"parameters": {
"url": "={{ $json.website_url }}",
"options": {
"timeout": 30000,
"redirect": {
"redirect": {
"maxRedirects": 5
}
},
"response": {
"response": {
"responseFormat": "text",
"outputPropertyName": "htmlContent"
}
}
}
},
"typeVersion": 4.5
},
{
"id": "ad34145d-8d4a-47b9-b0dc-5437ec746313",
"name": "Extract Page Data",
"type": "n8n-nodes-base.code",
"onError": "continueRegularOutput",
"position": [
1344,
0
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "var html = $json.htmlContent || $json.data || '';\nvar competitor = $json.competitor || '';\nvar url = $json.website_url || '';\n\nvar titleMatch = html.match(/<title[^>]*>([^<]+)<\\/title>/i);\nvar title = titleMatch ? titleMatch[1].trim() : competitor + ' - Official Website';\n\nvar descMatch = html.match(/<meta[^>]*name=\"description\"[^>]*content=\"([^\"]{1,500})\"/i);\nif (!descMatch) {\n descMatch = html.match(/<meta[^>]*content=\"([^\"]{1,500})\"[^>]*name=\"description\"/i);\n}\nvar description = descMatch ? descMatch[1].trim() : 'No description found';\n\nvar h1Match = html.match(/<h1[^>]*>([^<]{1,200})<\\/h1>/i);\nvar h1 = h1Match ? h1Match[1].replace(/<[^>]+>/g, '').trim() : '';\n\nreturn {\n json: {\n source: 'website',\n competitor: competitor,\n title: title,\n headline: title,\n url: url,\n content: description + (h1 ? ' | ' + h1 : ''),\n summary: description.substring(0, 300),\n published_at: new Date().toISOString(),\n }\n};"
},
"typeVersion": 2
},
{
"id": "6c7d3e81-afd1-4e3e-9d50-dbd0fdf9259b",
"name": "Read Company RSS Feed",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
1120,
192
],
"parameters": {
"url": "={{ $(\"Set Current Competitor\").item.json.rss_feed }}",
"options": {}
},
"typeVersion": 1.2
},
{
"id": "25ce99df-6da3-4731-b38c-abb4e8995937",
"name": "Tag RSS Data",
"type": "n8n-nodes-base.code",
"onError": "continueRegularOutput",
"position": [
1344,
192
],
"parameters": {
"jsCode": "var competitor = $(\"Set Current Competitor\").item.json.competitor;\nvar items = $input.all();\nif (!items || items.length === 0) return [];\nreturn items.map(function(item) {\n return {\n json: {\n source: 'company_rss',\n competitor: competitor,\n title: item.json.title || '',\n headline: item.json.title || '',\n url: item.json.link || item.json.url || '',\n content: (item.json.contentSnippet || item.json.content || '').substring(0, 500),\n summary: (item.json.contentSnippet || '').substring(0, 200),\n published_at: item.json.isoDate || item.json.pubDate || new Date().toISOString(),\n }\n };\n});"
},
"typeVersion": 2
},
{
"id": "de1cdbf6-37eb-48d1-9d21-9063ab4c31d3",
"name": "Read Google News RSS",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
1120,
384
],
"parameters": {
"url": "={{ $(\"Set Current Competitor\").item.json.google_news_url }}",
"options": {}
},
"typeVersion": 1.2
},
{
"id": "c9afd302-26d2-46a7-946e-809eb5a927e2",
"name": "Tag Google News Data",
"type": "n8n-nodes-base.code",
"onError": "continueRegularOutput",
"position": [
1344,
384
],
"parameters": {
"jsCode": "var competitor = $(\"Set Current Competitor\").item.json.competitor;\nvar items = $input.all();\nif (!items || items.length === 0) return [];\nreturn items.map(function(item) {\n return {\n json: {\n source: 'google_news',\n competitor: competitor,\n title: item.json.title || '',\n headline: item.json.title || '',\n url: item.json.link || item.json.url || '',\n content: (item.json.contentSnippet || item.json.content || '').substring(0, 500),\n summary: (item.json.contentSnippet || '').substring(0, 200),\n published_at: item.json.isoDate || item.json.pubDate || new Date().toISOString(),\n }\n };\n});"
},
"typeVersion": 2
},
{
"id": "bbfce634-15ce-4a8a-b51b-35aea48fa0d7",
"name": "Read Reddit RSS",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueRegularOutput",
"position": [
1120,
576
],
"parameters": {
"url": "={{ $(\"Set Current Competitor\").item.json.reddit_url }}",
"options": {
"ignoreSSL": false
}
},
"typeVersion": 1.2
},
{
"id": "f55dc4b3-21fb-48f6-b3e9-87c898db8900",
"name": "Tag Reddit Data",
"type": "n8n-nodes-base.code",
"onError": "continueRegularOutput",
"position": [
1344,
576
],
"parameters": {
"jsCode": "var competitor = $(\"Set Current Competitor\").item.json.competitor;\nvar items = $input.all();\nif (!items || items.length === 0) return [];\nreturn items.map(function(item) {\n return {\n json: {\n source: 'reddit',\n competitor: competitor,\n title: item.json.title || '',\n headline: item.json.title || '',\n url: item.json.link || item.json.url || '',\n content: (item.json.contentSnippet || item.json.content || '').substring(0, 500),\n summary: (item.json.contentSnippet || '').substring(0, 200),\n published_at: item.json.isoDate || item.json.pubDate || new Date().toISOString(),\n }\n };\n});"
},
"typeVersion": 2
},
{
"id": "66239656-d000-4999-97d5-3c8f5ffabc47",
"name": "Loop Over Competitors",
"type": "n8n-nodes-base.splitInBatches",
"position": [
672,
464
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "357dcdd0-8567-43ff-bc66-dbfe121927c7",
"name": "Merge All Sources",
"type": "n8n-nodes-base.merge",
"position": [
1568,
256
],
"parameters": {
"numberInputs": 4
},
"typeVersion": 3.2
},
{
"id": "fa4b188b-3269-448b-acbc-406bde82e733",
"name": "Remove Duplicate Articles",
"type": "n8n-nodes-base.removeDuplicates",
"position": [
1792,
288
],
"parameters": {
"compare": "selectedFields",
"options": {},
"fieldsToCompare": "url"
},
"typeVersion": 1.1
},
{
"id": "71a4fea1-9136-4731-93ee-ad1b7b34ce40",
"name": "Aggregate Competitor Data",
"type": "n8n-nodes-base.aggregate",
"position": [
2016,
288
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "articles"
},
"typeVersion": 1
},
{
"id": "e0e22338-bf59-4105-9de3-bd7e5d92f53a",
"name": "Prepare AI Prompt",
"type": "n8n-nodes-base.code",
"position": [
2240,
288
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "var articles = $json.articles || [];\nvar competitor = articles.length > 0 ? (articles[0].competitor || 'Unknown') : 'Unknown';\nvar reportDate = articles.length > 0 ? (articles[0].report_date || articles[0].published_at || new Date().toISOString().split('T')[0]) : new Date().toISOString().split('T')[0];\nvar keywords = $(\"Workflow Configuration\").first().json.keywords || '';\nvar model = $(\"Workflow Configuration\").first().json.openai_model || 'gpt-4o';\n\nvar systemPrompt = 'You are an expert competitive intelligence analyst producing daily briefings for senior business leaders. Analyze the provided competitor data with precision and strategic insight. Focus on actionable intelligence that can influence product, marketing, and business development decisions. Your reports must be factual, prioritized by business impact, and formatted in clean Markdown. Always extract and highlight: (1) product launches and feature releases, (2) pricing or packaging changes, (3) marketing campaigns and brand positioning shifts, (4) hiring trends signaling strategic direction, (5) new partnerships or ecosystem moves, (6) funding and financial events, and (7) any indicators of strategic risk to competitors in this market.';\n\nvar articleSummaries = articles.slice(0, 20).map(function(a, i) {\n return (i + 1) + '. SOURCE: ' + (a.source || 'unknown') + '\\n HEADLINE: ' + (a.headline || a.title || 'No headline') + '\\n URL: ' + (a.url || 'N/A') + '\\n CONTENT: ' + (a.content || a.summary || 'No content').substring(0, 400);\n}).join('\\n\\n');\n\nvar userMessage = 'COMPETITOR INTELLIGENCE ANALYSIS REQUEST\\n\\nCompetitor: ' + competitor + '\\nReport Date: ' + reportDate + '\\nKeywords to emphasize: ' + keywords + '\\nTotal data points collected: ' + articles.length + '\\n\\nDATA COLLECTED:\\n\\n' + articleSummaries + '\\n\\nProduce a comprehensive intelligence report in Markdown with EXACTLY these sections:\\n\\n# Competitor Intelligence Report: ' + competitor + '\\n\\n## Executive Summary\\n[2-3 sentence overview of the single most important developments detected today]\\n\\n## Key Changes Detected\\n\\n### Product & Feature Updates\\n[Bullet list of detected product launches, feature releases, roadmap signals \u2014 write None detected if nothing found]\\n\\n### Pricing & Packaging\\n[Bullet list of pricing changes, new tiers, promotions, or discontinuations \u2014 write None detected if nothing found]\\n\\n### Marketing & Brand Activity\\n[Bullet list of campaign signals, messaging shifts, new positioning \u2014 write None detected if nothing found]\\n\\n### Hiring Trends\\n[Bullet list of hiring signals indicating strategic direction \u2014 write None detected if nothing found]\\n\\n### Partnerships & Ecosystem\\n[Bullet list of new partnerships, integrations, or ecosystem moves \u2014 write None detected if nothing found]\\n\\n### Funding & Financial Events\\n[Bullet list of funding rounds, acquisitions, earnings news \u2014 write None detected if nothing found]\\n\\n## Urgency Score: [NUMBER]/10\\n[One sentence justification of the urgency rating \u2014 1 is minimal activity, 10 is major competitive threat]\\n\\n## Risk Level: [Low/Medium/High]\\n[One sentence explaining the strategic risk to your business from this competitor this period]\\n\\n## Recommended Actions\\n1. [Specific action your team should take based on findings]\\n2. [Second specific action]\\n3. [Third specific action]\\n\\n## Top 5 Headlines\\n1. [Most important headline from the data]\\n2. [Second headline]\\n3. [Third headline]\\n4. [Fourth headline]\\n5. [Fifth headline]';\n\nreturn {\n json: {\n articles: articles,\n competitor: competitor,\n report_date: reportDate,\n openai_model: model,\n system_prompt: systemPrompt,\n user_message: userMessage,\n notion_database_id: $(\"Workflow Configuration\").first().json.notion_database_id,\n google_sheets_id: $(\"Workflow Configuration\").first().json.google_sheets_id,\n slack_channel: $(\"Workflow Configuration\").first().json.slack_channel,\n email_recipient: $(\"Workflow Configuration\").first().json.email_recipient,\n }\n};"
},
"typeVersion": 2
},
{
"id": "d26a79ea-5dba-483a-989b-7b2308eb0f5f",
"name": "Generate AI Summary",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
2464,
288
],
"parameters": {
"url": "https://api.openai.com/v1/chat/completions",
"method": "POST",
"options": {
"timeout": 90000,
"response": {
"response": {
"neverError": true
}
}
},
"jsonBody": "={{ { \"model\": $json.openai_model, \"messages\": [{ \"role\": \"system\", \"content\": $json.system_prompt }, { \"role\": \"user\", \"content\": $json.user_message }], \"max_tokens\": 2000, \"temperature\": 0.3 } }}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "openAiApi"
},
"typeVersion": 4.5
},
{
"id": "76358506-52e9-4475-b200-a91944a1395d",
"name": "Build Markdown Report",
"type": "n8n-nodes-base.code",
"position": [
2688,
288
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "var aiContent = '';\nif ($json.choices && $json.choices[0] && $json.choices[0].message) {\n aiContent = $json.choices[0].message.content || '';\n}\nif (!aiContent) {\n aiContent = '# Analysis Temporarily Unavailable\\n\\nAI analysis could not be generated for this competitor. Please check your OpenAI API key and try again. The data has been collected and saved.';\n}\n\nvar competitor = $json.competitor || 'Unknown';\nvar reportDate = $json.report_date || new Date().toISOString().split('T')[0];\nvar articles = $json.articles || [];\n\nvar urgencyMatch = aiContent.match(/Urgency Score[:\\s]*([0-9]+)/i);\nvar urgencyScore = urgencyMatch ? parseInt(urgencyMatch[1]) : 5;\n\nvar riskMatch = aiContent.match(/Risk Level[:\\s]*(Low|Medium|High)/i);\nvar riskLevel = riskMatch ? riskMatch[1] : 'Medium';\n\nvar execMatch = aiContent.match(/## Executive Summary\\n([\\s\\S]*?)(?=\\n## |$)/);\nvar execSummary = execMatch ? execMatch[1].trim().substring(0, 600) : 'Analysis complete. See full report for findings.';\n\nvar sourceCount = {};\narticles.forEach(function(a) {\n if (a.source) { sourceCount[a.source] = (sourceCount[a.source] || 0) + 1; }\n});\nvar sourceSummary = Object.keys(sourceCount).map(function(k) { return k + ': ' + sourceCount[k] + ' item' + (sourceCount[k] !== 1 ? 's' : ''); }).join(', ') || 'website, company_rss, google_news, reddit';\n\nreturn {\n json: {\n competitor: competitor,\n report_date: reportDate,\n markdown_report: aiContent,\n executive_summary: execSummary,\n urgency_score: urgencyScore,\n risk_level: riskLevel,\n sources_monitored: sourceSummary,\n total_articles: articles.length,\n notion_database_id: $json.notion_database_id || '',\n google_sheets_id: $json.google_sheets_id || '',\n slack_channel: $json.slack_channel || '',\n email_recipient: $json.email_recipient || '',\n }\n};"
},
"typeVersion": 2
},
{
"id": "5e916119-5883-40d1-b445-d8f60e4d3c66",
"name": "Save Report to Notion",
"type": "n8n-nodes-base.notion",
"onError": "continueRegularOutput",
"position": [
2912,
288
],
"parameters": {
"title": "={{ $json.competitor + \" \u2014 Competitor Intel \u2014 \" + $json.report_date }}",
"options": {},
"resource": "databasePage",
"databaseId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.notion_database_id }}"
},
"propertiesUi": {
"propertyValues": [
{
"key": "Company|rich_text",
"type": "rich_text",
"textContent": "={{ $json.competitor }}"
},
{
"key": "Date|date",
"date": "={{ $json.report_date }}",
"type": "date",
"includeTime": false
},
{
"key": "Risk Level|select",
"type": "select",
"selectValue": "={{ $json.risk_level }}"
},
{
"key": "Urgency Score|number",
"type": "number",
"numberValue": "={{ $json.urgency_score }}"
},
{
"key": "Summary|rich_text",
"type": "rich_text",
"textContent": "={{ $json.executive_summary }}"
},
{
"key": "Sources|rich_text",
"type": "rich_text",
"textContent": "={{ $json.sources_monitored }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "f80fde53-37df-4f70-816a-f8103d2faea8",
"name": "Save Data to Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueRegularOutput",
"position": [
3136,
464
],
"parameters": {
"columns": {
"value": {
"Date": "={{ $json.report_date }}",
"Company": "={{ $json.competitor }}",
"Risk Level": "={{ $json.risk_level }}",
"Urgency Score": "={{ $json.urgency_score }}",
"Total Articles": "={{ $json.total_articles }}",
"Executive Summary": "={{ $json.executive_summary }}",
"Sources Monitored": "={{ $json.sources_monitored }}"
},
"schema": [
{
"id": "Date",
"type": "string",
"display": true,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Company",
"type": "string",
"display": true,
"required": false,
"displayName": "Company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Urgency Score",
"type": "number",
"display": true,
"required": false,
"displayName": "Urgency Score",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Risk Level",
"type": "string",
"display": true,
"required": false,
"displayName": "Risk Level",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Executive Summary",
"type": "string",
"display": true,
"required": false,
"displayName": "Executive Summary",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Sources Monitored",
"type": "string",
"display": true,
"required": false,
"displayName": "Sources Monitored",
"defaultMatch": false,
"canBeUsedToMatch": false
},
{
"id": "Total Articles",
"type": "number",
"display": true,
"required": false,
"displayName": "Total Articles",
"defaultMatch": false,
"canBeUsedToMatch": false
}
],
"mappingMode": "defineBelow"
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "Intelligence Log",
"cachedResultName": "Intelligence Log"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.google_sheets_id }}",
"cachedResultName": ""
}
},
"typeVersion": 4.7
},
{
"id": "23798971-99b8-417f-8d58-f74b230791bf",
"name": "Prepare Report Header",
"type": "n8n-nodes-base.code",
"position": [
3360,
464
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "var competitor = $json.competitor || 'Unknown';\nvar reportDate = $json.report_date || $now.toFormat('yyyy-MM-dd');\nvar slackChannel = $json.slack_channel || 'competitor-intel';\nvar emailRecipient = $json.email_recipient || '';\n\nreturn {\n json: {\n report_title: 'Competitor Intelligence: ' + competitor + ' \u2014 ' + reportDate,\n report_date: reportDate,\n slack_channel: slackChannel,\n email_recipient: emailRecipient,\n competitors_monitored: competitor,\n competitor: competitor,\n urgency_score: $json.urgency_score || 5,\n risk_level: $json.risk_level || 'Medium',\n executive_summary: $json.executive_summary || '',\n sources_monitored: $json.sources_monitored || '',\n total_articles: $json.total_articles || 0,\n markdown_report: $json.markdown_report || '',\n }\n};"
},
"typeVersion": 2
},
{
"id": "8d0fc3c3-3ce2-4eab-9fb6-7421375e737d",
"name": "Build Slack Message",
"type": "n8n-nodes-base.code",
"position": [
3584,
368
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "var title = $json.report_title || 'Daily Competitor Intelligence Report';\nvar competitors = $json.competitors_monitored || '';\nvar channel = $json.slack_channel || 'competitor-intel';\nvar emailRecipient = $json.email_recipient || '';\nvar reportDate = $json.report_date || '';\n\nvar lines = [];\nlines.push(':bar_chart: *' + title + '*');\nlines.push('');\nlines.push(':white_check_mark: *All competitors analyzed successfully.*');\nlines.push('');\nlines.push('*Competitors monitored today:* ' + competitors);\nlines.push('');\nlines.push('*Data sources per competitor:*');\nlines.push('\u2022 Website homepage content');\nlines.push('\u2022 Company RSS blog and press feeds');\nlines.push('\u2022 Google News press mentions');\nlines.push('\u2022 Reddit community discussions');\nlines.push('');\nlines.push('*Reports saved to:*');\nlines.push(':notebook: Notion \u2014 Full AI intelligence reports with urgency scores and recommended actions');\nlines.push(':bar_chart: Google Sheets \u2014 Structured data for trend analysis');\nlines.push('');\nlines.push(':mag: Open your Notion database to review findings and recommended actions.');\nlines.push('');\nlines.push('_Powered by AI Competitor Monitoring Platform on n8n_');\n\nreturn {\n json: {\n slack_message: lines.join('\\n'),\n slack_channel: channel,\n email_recipient: emailRecipient,\n report_title: title,\n report_date: reportDate,\n competitors_monitored: competitors,\n }\n};"
},
"typeVersion": 2
},
{
"id": "62bc1fd8-9ae3-4135-819c-1b0e8942520c",
"name": "Send Slack Report",
"type": "n8n-nodes-base.slack",
"onError": "continueRegularOutput",
"position": [
3808,
368
],
"parameters": {
"resource": "channel",
"channelId": "={{ $json.slack_channel }}",
"authentication": "oAuth2"
},
"typeVersion": 2.5
},
{
"id": "699e88fb-270f-485a-aa44-0e1cb5f6ee82",
"name": "Monitoring Complete",
"type": "n8n-nodes-base.set",
"position": [
4032,
368
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "mc1",
"name": "status",
"type": "string",
"value": "success"
},
{
"id": "mc2",
"name": "completed_at",
"type": "string",
"value": "={{ $now.toISO() }}"
},
{
"id": "mc3",
"name": "message",
"type": "string",
"value": "Daily competitor monitoring completed successfully. All reports saved to Notion and Google Sheets. Notifications sent via Slack and Gmail."
}
]
}
},
"typeVersion": 3.5
},
{
"id": "0627dfd0-5df0-41f1-86bf-25da1f9b8dfd",
"name": "Build Email Body",
"type": "n8n-nodes-base.code",
"position": [
3584,
560
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "var reportDate = $json.report_date || new Date().toISOString().split('T')[0];\nvar reportTitle = $json.report_title || 'Daily Competitor Intelligence Report';\nvar competitors = $json.competitors_monitored || 'See Notion database';\nvar emailRecipient = $json.email_recipient || '';\nvar slackChannel = $json.slack_channel || '';\n\nvar html = '<html><body style=\"font-family: Arial, sans-serif; max-width: 680px; margin: 0 auto; padding: 20px; color: #1f2937; background: #f9fafb;\">';\nhtml += '<div style=\"background: white; border-radius: 16px; padding: 32px; box-shadow: 0 1px 3px rgba(0,0,0,0.1);\">';\nhtml += '<div style=\"background: #1e40af; padding: 28px 32px; border-radius: 12px; color: white; margin-bottom: 32px;\">';\nhtml += '<h1 style=\"margin: 0; font-size: 22px; font-weight: 700;\">Daily Competitor Intelligence Report</h1>';\nhtml += '<p style=\"margin: 8px 0 0; opacity: 0.85; font-size: 14px;\">Generated on ' + reportDate + ' by AI Competitor Monitoring Platform</p>';\nhtml += '</div>';\nhtml += '<h2 style=\"color: #1e40af; font-size: 18px; margin-top: 0;\">What Was Monitored Today</h2>';\nhtml += '<p style=\"color: #4b5563;\">Competitors tracked: <strong>' + competitors + '</strong></p>';\nhtml += '<table style=\"width: 100%; border-collapse: collapse; margin: 16px 0; font-size: 14px;\">';\nhtml += '<tr style=\"background: #eff6ff;\"><td style=\"padding: 12px 16px; border: 1px solid #dbeafe; font-weight: 600;\">Data Source</td><td style=\"padding: 12px 16px; border: 1px solid #dbeafe; font-weight: 600;\">Coverage</td></tr>';\nhtml += '<tr><td style=\"padding: 10px 16px; border: 1px solid #e5e7eb;\">Website Monitoring</td><td style=\"padding: 10px 16px; border: 1px solid #e5e7eb;\">Homepage content, titles, descriptions analyzed</td></tr>';\nhtml += '<tr style=\"background: #f9fafb;\"><td style=\"padding: 10px 16px; border: 1px solid #e5e7eb;\">Company RSS Feeds</td><td style=\"padding: 10px 16px; border: 1px solid #e5e7eb;\">Blog posts and press announcements collected</td></tr>';\nhtml += '<tr><td style=\"padding: 10px 16px; border: 1px solid #e5e7eb;\">Google News</td><td style=\"padding: 10px 16px; border: 1px solid #e5e7eb;\">Press mentions and news coverage captured</td></tr>';\nhtml += '<tr style=\"background: #f9fafb;\"><td style=\"padding: 10px 16px; border: 1px solid #e5e7eb;\">Reddit Discussions</td><td style=\"padding: 10px 16px; border: 1px solid #e5e7eb;\">Community sentiment and discussions tracked</td></tr>';\nhtml += '<tr><td style=\"padding: 10px 16px; border: 1px solid #e5e7eb;\">AI Analysis</td><td style=\"padding: 10px 16px; border: 1px solid #e5e7eb;\">GPT-4o intelligence reports with urgency scores</td></tr>';\nhtml += '</table>';\nhtml += '<h2 style=\"color: #1e40af; font-size: 18px;\">Where To Find Your Reports</h2>';\nhtml += '<div style=\"background: #f0fdf4; border-left: 4px solid #22c55e; padding: 16px; border-radius: 8px; margin-bottom: 16px;\">';\nhtml += '<strong>Notion Database</strong> \u2014 Full markdown intelligence reports per competitor including executive summaries, urgency scores (1-10), risk levels (Low/Medium/High), and recommended actions.';\nhtml += '</div>';\nhtml += '<div style=\"background: #eff6ff; border-left: 4px solid #3b82f6; padding: 16px; border-radius: 8px; margin-bottom: 24px;\">';\nhtml += '<strong>Google Sheets</strong> \u2014 Structured data rows for trend analysis, historical comparison, and stakeholder reporting.';\nhtml += '</div>';\nhtml += '<h2 style=\"color: #1e40af; font-size: 18px;\">Recommended Next Steps</h2>';\nhtml += '<ol style=\"color: #4b5563; line-height: 2;\">';\nhtml += '<li>Review competitors with urgency score 7+ in Notion immediately</li>';\nhtml += '<li>Share critical findings with your product and marketing leadership</li>';\nhtml += '<li>Execute recommended actions identified by the AI for high-risk competitors</li>';\nhtml += '<li>Track changes week-over-week using the Google Sheets Intelligence Log</li>';\nhtml += '</ol>';\nhtml += '<hr style=\"border: none; border-top: 1px solid #e5e7eb; margin: 24px 0;\"/>';\nhtml += '<p style=\"color: #9ca3af; font-size: 12px; text-align: center;\">Automatically generated by AI Competitor Monitoring Platform on n8n.</p>';\nhtml += '</div></body></html>';\n\nreturn {\n json: {\n email_body: html,\n email_subject: reportTitle,\n email_recipient: emailRecipient,\n report_date: reportDate,\n competitors_monitored: competitors,\n slack_channel: slackChannel,\n }\n};"
},
"typeVersion": 2
},
{
"id": "fbf5f0c9-96d8-4d95-bf20-0e78ba4685aa",
"name": "Send Gmail Summary",
"type": "n8n-nodes-base.gmail",
"onError": "continueRegularOutput",
"position": [
3808,
560
],
"parameters": {
"sendTo": "={{ $json.email_recipient }}",
"message": "={{ $json.email_body }}",
"options": {
"appendAttribution": false
},
"subject": "={{ $json.email_subject }}"
},
"typeVersion": 2.2
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"executionOrder": "v1"
},
"versionId": "2054986a-9a03-4afd-af71-c1715a59c018",
"nodeGroups": [],
"connections": {
"Tag RSS Data": {
"main": [
[
{
"node": "Merge All Sources",
"type": "main",
"index": 1
}
]
]
},
"Read Reddit RSS": {
"main": [
[
{
"node": "Tag Reddit Data",
"type": "main",
"index": 0
}
]
]
},
"Tag Reddit Data": {
"main": [
[
{
"node": "Merge All Sources",
"type": "main",
"index": 3
}
]
]
},
"Build Email Body": {
"main": [
[
{
"node": "Send Gmail Summary",
"type": "main",
"index": 0
}
]
]
},
"Extract Page Data": {
"main": [
[
{
"node": "Merge All Sources",
"type": "main",
"index": 0
}
]
]
},
"Merge All Sources": {
"main": [
[
{
"node": "Remove Duplicate Articles",
"type": "main",
"index": 0
}
]
]
},
"Prepare AI Prompt": {
"main": [
[
{
"node": "Generate AI Summary",
"type": "main",
"index": 0
}
]
]
},
"Send Slack Report": {
"main": [
[
{
"node": "Monitoring Complete",
"type": "main",
"index": 0
}
]
]
},
"Fetch Website HTML": {
"main": [
[
{
"node": "Extract Page Data",
"type": "main",
"index": 0
}
]
]
},
"Build Slack Message": {
"main": [
[
{
"node": "Send Slack Report",
"type": "main",
"index": 0
}
]
]
},
"Daily 8 AM Schedule": {
"main": [
[
{
"node": "Workflow Configuration",
"type": "main",
"index": 0
}
]
]
},
"Generate AI Summary": {
"main": [
[
{
"node": "Build Markdown Report",
"type": "main",
"index": 0
}
]
]
},
"Read Google News RSS": {
"main": [
[
{
"node": "Tag Google News Data",
"type": "main",
"index": 0
}
]
]
},
"Tag Google News Data": {
"main": [
[
{
"node": "Merge All Sources",
"type": "main",
"index": 2
}
]
]
},
"Build Markdown Report": {
"main": [
[
{
"node": "Save Report to Notion",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Competitors": {
"main": [
[],
[
{
"node": "Set Current Competitor",
"type": "main",
"index": 0
}
]
]
},
"Prepare Report Header": {
"main": [
[
{
"node": "Build Slack Message",
"type": "main",
"index": 0
},
{
"node": "Build Email Body",
"type": "main",
"index": 0
}
]
]
},
"Read Company RSS Feed": {
"main": [
[
{
"node": "Tag RSS Data",
"type": "main",
"index": 0
}
]
]
},
"Save Report to Notion": {
"main": [
[
{
"node": "Save Data to Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"Set Current Competitor": {
"main": [
[
{
"node": "Fetch Website HTML",
"type": "main",
"index": 0
},
{
"node": "Read Company RSS Feed",
"type": "main",
"index": 0
},
{
"node": "Read Google News RSS",
"type": "main",
"index": 0
},
{
"node": "Read Reddit RSS",
"type": "main",
"index": 0
}
]
]
},
"Split Competitors List": {
"main": [
[
{
"node": "Loop Over Competitors",
"type": "main",
"index": 0
}
]
]
},
"Workflow Configuration": {
"main": [
[
{
"node": "Split Competitors List",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Competitor Data": {
"main": [
[
{
"node": "Prepare AI Prompt",
"type": "main",
"index": 0
}
]
]
},
"Remove Duplicate Articles": {
"main": [
[
{
"node": "Aggregate Competitor Data",
"type": "main",
"index": 0
}
]
]
},
"Save Data to Google Sheets": {
"main": [
[
{
"node": "Prepare Report Header",
"type": "main",
"index": 0
},
{
"node": "Loop Over Competitors",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow runs daily at 8 AM to monitor competitors by scraping their homepages and reading company RSS feeds, Google News RSS, and Reddit RSS, then uses OpenAI to generate an intelligence report that is saved to Notion and Google Sheets and sent to Slack and Gmail. Runs…
Source: https://n8n.io/workflows/17754/ — 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.
Daily Business Report Generator. Uses googleSheets, httpRequest, slack, gmail. Scheduled trigger; 17 nodes.
Revenue operations teams, SaaS growth managers, and sales directors who need automated weekly insights from their Stripe payment data. Perfect for small to medium businesses tracking subscription reve
This workflow triggers when a HubSpot deal stage changes to Closed Won and automatically generates an invoice. It collects deal and contact data, builds a styled invoice, converts it into a PDF, and s
This n8n workflow automates the end-to-end client onboarding process: capturing client details, validating emails, assigning tiers, generating welcome packs, creating tasks, notifying teams, archiving
Founders, product managers, content strategists, indie hackers, and anyone who wants to automatically monitor tech industry trends across multiple sources — without manually browsing Hacker News and P