{"workflow":{"id":13455,"name":"Monitor website changes and send diff alerts via Telegram and email","views":76,"recentViews":0,"totalViews":76,"createdAt":"2026-02-17T10:37:27.202Z","description":"## **Who is this for**\n\n\nThis workflow is ideal for marketers, product managers, competitive intelligence teams, and anyone who needs to track changes on web pages — whether it's competitor pricing, job postings, policy updates, product pages, or any content that matters to your business.\n\n\n## **What this workflow does**\n\n\nIt automatically monitors a list of URLs on a schedule, fetches each page, extracts clean text content, compares it against the previous snapshot stored in Google Sheets, generates a detailed line-by-line diff with change percentage and severity rating, and sends instant alerts via Telegram and email when changes are detected.\n\n\n## **How it works**\n\n\n- Schedule Trigger checks your target URLs at a configurable interval (default: every 4 hours).\n- URL List node defines which pages to monitor — easily add or remove URLs without touching other nodes.\n- HTTP Request fetches the current HTML content of each page with browser-like headers.\n- Content Extractor strips HTML tags, scripts, styles, and navigation to get clean readable text, plus extracts page title and meta description.\n- Load Previous Snapshot reads the last saved version from Google Sheets for comparison.\n- Diff Engine compares current vs. previous content line-by-line, calculates a change percentage, assigns a severity level (low/medium/high/critical), and generates a human-readable diff summary showing exactly what was added or removed.\n- Change Filter only passes through pages that actually changed — no noise, no false alerts.\n- Save Snapshot stores the new version in Google Sheets for the next comparison cycle.\n- Telegram + Email Alerts send formatted notifications with the diff summary, change percentage, severity, and a direct link to the page.\n\n\n## **Setup steps**\n\n\n- Add URLs — Edit the \"URL List\" code node and add your target URLs. Each entry needs a name (friendly label) and url (full URL). Optionally add a selector keyword to focus on specific page sections.\n- Google Sheets — Create a new spreadsheet with a sheet named \"website\" and columns: Name, url, selector, pageTitle, metaDescription, cleanText, contentHash, contentLength, fetchedAt, httpStatus. Connect your Google Sheets OAuth credential and set the spreadsheet ID in both Sheet nodes.\n- Telegram — Create a bot via @BotFather, get your Bot Token and Chat ID. Connect the Telegram credential and set your Chat ID in the Telegram Alert node.\n- Email (optional) — Connect your SMTP or Gmail credential in the Email Alert node and set your from/to addresses.\n- Schedule — Adjust the cron interval in the trigger node (every 1 hour for critical pages, every 24 hours for low-priority).\n- First Run — Run the workflow manually once to save baseline snapshots. Change detection begins from the second run onward.\n\n## **Requirements**\n\n\n- Google Sheets account with OAuth credentials\n- Telegram bot (created via @BotFather) with bot token and chat ID\n- SMTP or Gmail credentials for email alerts (optional)\n- n8n instance (cloud or self-hosted)\n\n\n## **How to customize**\n\n\n- Add CSS selector keywords in the URL List to monitor only specific sections of a page (e.g., pricing tables, job listings).\n- Increase check frequency to every 15 minutes for critical monitoring.\n- Add Slack, Discord, or WhatsApp as additional alert channels by branching from the Save Snapshot node.\n- Use AI (OpenAI, Ollama) to summarize changes in plain language instead of raw diff output.\n- Monitor API endpoints (JSON responses) by adjusting the Content Extractor logic.\n- Add multiple sheets for different monitoring categories (competitors, pricing, legal, careers).","workflow":{"id":"qodlu90C8ezDmvwD","meta":{"instanceId":"8f8ee4eb853c20789e317beb113798e3d078c0c7ef754b4b9fad98c2eee7e79d","templateCredsSetupCompleted":true},"name":"Monitor website changes with diff detection and get instant Telegram and email alerts","tags":[{"id":"mHQntpbppFUpZPGm","name":"template","createdAt":"2026-02-17T08:30:26.885Z","updatedAt":"2026-02-17T08:30:26.885Z"}],"nodes":[{"id":"48770788-5b55-45c5-a828-a402fc15ed72","name":"Sticky Note - Main Overview","type":"n8n-nodes-base.stickyNote","position":[-400,-208],"parameters":{"width":740,"height":1080,"content":"## Monitor website changes with diff detection and get instant Telegram and email alerts\n\nAutomatically monitor any website for changes, detect exactly what changed with a line-by-line diff, and get instant alerts via Telegram and email — perfect for tracking competitor pages, pricing updates, policy changes, job postings, or any web content that matters to your business.\n\n### How it works\n1. **Schedule Trigger** checks your target URLs at a configurable interval (default: every 4 hours).\n2. **URL List** defines which pages to monitor — easily add or remove URLs without touching other nodes.\n3. **HTTP Request** fetches the current HTML content of each page.\n4. **Content Extractor** strips HTML tags, scripts, and styles to get clean readable text, plus extracts key metadata (title, meta description).\n5. **Load Previous Snapshot** reads the last saved version from Google Sheets for comparison.\n6. **Diff Engine** compares current vs. previous content line-by-line, calculates a change percentage, assigns a severity level, and generates a human-readable diff summary showing exactly what was added or removed.\n7. **Change Filter** only passes through pages that actually changed — no noise, no false alerts.\n8. **Save Snapshot** stores the new version in Google Sheets for the next comparison cycle.\n9. **Telegram + Email Alerts** send formatted notifications with the diff summary, change percentage, severity, and a direct link to the page.\n\n### Setup steps\n1. **URLs to Monitor** — Edit the \"URL List\" node and add your target URLs (one per item). Each URL needs a `name` (friendly label) and `url` (full URL). Optionally add a `selector` keyword.\n2. **Google Sheets** — Create a new spreadsheet with columns: `Name`, `url`, `selector`, `pageTitle`, `metaDescription`, `cleanText`, `contentHash`, `contentLength`, `fetchedAt`, `httpStatus`. Connect your Google Sheets OAuth credential and set the spreadsheet ID in both Sheet nodes.\n3. **Telegram** — Create a bot via @BotFather, get your Bot Token and Chat ID. Connect the Telegram credential and set your Chat ID.\n4. **Email** (optional) — Connect your SMTP or Gmail credential and set your from/to addresses.\n5. **Schedule** — Adjust the cron interval (every 1hr for critical, every 24hrs for low-priority).\n6. **First Run** — Run manually once to save baseline snapshots. Change detection begins from the second run.\n\n### Customization\n- Add CSS selector keywords to monitor only specific page sections (e.g., pricing tables).\n- Increase check frequency to every 15 minutes for critical monitoring.\n- Add Slack, Discord, or WhatsApp as additional alert channels.\n- Use AI (OpenAI, Ollama) to summarize changes instead of raw diff.\n- Monitor API endpoints (JSON) by adjusting the Content Extractor.\n- Add multiple sheets for different monitoring categories."},"typeVersion":1},{"id":"0270a40a-7dbd-476e-bcb9-498a84723911","name":"Sticky Note - Trigger","type":"n8n-nodes-base.stickyNote","position":[496,592],"parameters":{"color":6,"width":520,"height":260,"content":"## ⏰ Trigger + URL Config\nSchedule trigger fires at set interval, URL List defines pages to monitor"},"typeVersion":1},{"id":"b56e9165-9022-46fc-98a0-ed8c0c98cc7b","name":"Sticky Note - Fetch","type":"n8n-nodes-base.stickyNote","position":[1056,592],"parameters":{"color":6,"width":520,"height":260,"content":"## 🌐 Fetch + Extract\nDownload page HTML and extract clean text content with metadata"},"typeVersion":1},{"id":"aa5786f6-6a62-4ac0-ae94-be4013f95bbb","name":"Sticky Note - Diff","type":"n8n-nodes-base.stickyNote","position":[1616,592],"parameters":{"color":6,"width":600,"height":260,"content":"## 🔍 Compare + Diff\nLoad previous snapshot from Sheets, compare content, calculate diff and severity"},"typeVersion":1},{"id":"9df49e9f-7f1f-468b-85dd-0891a0ff97ed","name":"Sticky Note - Alerts","type":"n8n-nodes-base.stickyNote","position":[2240,496],"parameters":{"color":6,"width":660,"height":596,"content":"## 📣 Alert + Save\nSave new snapshot to Sheets, send Telegram and email alerts for detected changes"},"typeVersion":1},{"id":"94bf7b88-d154-4aad-905d-7bb233cd53be","name":"Sticky Note - Warning URLs","type":"n8n-nodes-base.stickyNote","position":[704,912],"parameters":{"color":3,"width":300,"height":140,"content":"## ⚠️ Add Your URLs\nEdit the \"📋 URL List\" node to add the websites you want to monitor. Add one item per URL with `name` and `url` fields."},"typeVersion":1},{"id":"b182dead-db8f-4f37-a986-c3a47742a038","name":"Sticky Note - Warning First Run","type":"n8n-nodes-base.stickyNote","position":[1712,928],"parameters":{"color":3,"width":300,"height":140,"content":"## ⚠️ First Run = Baseline\nThe first run saves snapshots only — no alerts will fire. Changes are detected from the second run onward."},"typeVersion":1},{"id":"d64b65a1-5d3c-48d1-a21e-cba7a78bdb94","name":"⏰ Every 4 Hours","type":"n8n-nodes-base.scheduleTrigger","position":[544,720],"parameters":{"rule":{"interval":[{"field":"hours","hoursInterval":4}]}},"typeVersion":1.2},{"id":"4150789f-9e18-4bbe-9e6b-6900fd638b09","name":"📋 URL List","type":"n8n-nodes-base.code","position":[784,720],"parameters":{"jsCode":"// ============================================\n// URL LIST - Add your URLs to monitor here\n// ============================================\n// Each item needs:\n//   name: A friendly label for alerts\n//   url: The full URL to monitor\n//   selector: (optional) CSS-like keyword to focus on specific content\n// ============================================\n\nconst urlsToMonitor = [\n  {\n    name: 'Example - n8n Pricing',\n    url: 'https://n8n.io/pricing/',\n    selector: 'pricing'\n  },\n  {\n    name: 'Example - GitHub Trending',\n    url: 'https://github.com/trending',\n    selector: ''\n  },\n  {\n    name: 'Example - Hacker News',\n    url: 'https://news.ycombinator.com/',\n    selector: ''\n  }\n  // Add more URLs here:\n  // {\n  //   name: 'Competitor Pricing Page',\n  //   url: 'https://competitor.com/pricing',\n  //   selector: 'price'\n  // },\n];\n\nreturn urlsToMonitor.map(item => ({ json: item }));"},"typeVersion":2},{"id":"dc406a5b-3e63-43e0-b28d-4aff3e14dfd4","name":"🌐 Fetch Page","type":"n8n-nodes-base.httpRequest","onError":"continueRegularOutput","position":[1104,720],"parameters":{"url":"={{ $json.url }}","options":{"timeout":15000,"redirect":{"redirect":{"maxRedirects":5}},"response":{"response":{"responseFormat":"text"}}},"sendHeaders":true,"headerParameters":{"parameters":[{"name":"User-Agent","value":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"},{"name":"Accept","value":"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"},{"name":"Accept-Language","value":"en-US,en;q=0.5"}]}},"typeVersion":4.2},{"id":"31e3e410-d7ff-4203-b9fa-a892344f4885","name":"📄 Extract Content","type":"n8n-nodes-base.code","position":[1344,720],"parameters":{"jsCode":"// ============================================\n// CONTENT EXTRACTOR\n// Strips HTML, extracts clean text + metadata\n// ============================================\n\nconst urlData = $('📋 URL List').item.json;\nconst rawResponse = $json;\n\nlet rawHtml = '';\nif (typeof rawResponse === 'string') {\n  rawHtml = rawResponse;\n} else if (rawResponse.data) {\n  rawHtml = String(rawResponse.data);\n} else if (rawResponse.body) {\n  rawHtml = String(rawResponse.body);\n} else {\n  rawHtml = JSON.stringify(rawResponse);\n}\n\n// Extract metadata\nlet pageTitle = '';\nlet metaDescription = '';\n\ntry {\n  const titleMatch = rawHtml.match(/<title[^>]*>([^<]+)<\\/title>/i);\n  pageTitle = titleMatch ? titleMatch[1].trim() : '';\n  \n  const metaMatch = rawHtml.match(/<meta[^>]*name=[\"']description[\"'][^>]*content=[\"']([^\"']+)[\"']/i)\n    || rawHtml.match(/<meta[^>]*content=[\"']([^\"']+)[\"'][^>]*name=[\"']description[\"']/i);\n  metaDescription = metaMatch ? metaMatch[1].trim() : '';\n} catch (e) {}\n\n// Strip HTML to get clean text\nlet cleanText = rawHtml\n  // Remove script and style blocks entirely\n  .replace(/<script[^>]*>[\\s\\S]*?<\\/script>/gi, '')\n  .replace(/<style[^>]*>[\\s\\S]*?<\\/style>/gi, '')\n  .replace(/<noscript[^>]*>[\\s\\S]*?<\\/noscript>/gi, '')\n  // Remove SVG blocks\n  .replace(/<svg[^>]*>[\\s\\S]*?<\\/svg>/gi, '')\n  // Remove navigation and footer (usually noise)\n  .replace(/<nav[^>]*>[\\s\\S]*?<\\/nav>/gi, ' [NAV] ')\n  .replace(/<footer[^>]*>[\\s\\S]*?<\\/footer>/gi, ' [FOOTER] ')\n  // Convert block elements to newlines\n  .replace(/<\\/(div|p|h[1-6]|li|tr|section|article|blockquote)>/gi, '\\n')\n  .replace(/<br\\s*\\/?>/gi, '\\n')\n  .replace(/<hr\\s*\\/?>/gi, '\\n---\\n')\n  // Remove remaining HTML tags\n  .replace(/<[^>]+>/g, ' ')\n  // Decode HTML entities\n  .replace(/&nbsp;/g, ' ')\n  .replace(/&amp;/g, '&')\n  .replace(/&lt;/g, '<')\n  .replace(/&gt;/g, '>')\n  .replace(/&quot;/g, '\"')\n  .replace(/&#39;/g, \"'\")\n  .replace(/&#x27;/g, \"'\")\n  .replace(/&#x2F;/g, '/')\n  // Clean whitespace\n  .replace(/[ \\t]+/g, ' ')           // Collapse horizontal whitespace\n  .replace(/\\n\\s*\\n\\s*\\n/g, '\\n\\n')  // Max 2 newlines\n  .replace(/^\\s+|\\s+$/gm, '')        // Trim each line\n  .trim();\n\n// If selector keyword is provided, try to focus on relevant content\nconst selector = urlData.selector || '';\nlet focusedContent = cleanText;\n\nif (selector) {\n  const lines = cleanText.split('\\n');\n  const relevantLines = [];\n  let capturing = false;\n  let captureCount = 0;\n  \n  for (const line of lines) {\n    if (line.toLowerCase().includes(selector.toLowerCase())) {\n      capturing = true;\n      captureCount = 0;\n    }\n    if (capturing) {\n      relevantLines.push(line);\n      captureCount++;\n      if (captureCount > 50) capturing = false; // Capture 50 lines after keyword\n    }\n  }\n  \n  if (relevantLines.length > 0) {\n    focusedContent = relevantLines.join('\\n');\n  }\n}\n\n// Generate content hash for quick comparison\nlet contentHash = 0;\nconst hashInput = focusedContent.substring(0, 10000);\nfor (let i = 0; i < hashInput.length; i++) {\n  const char = hashInput.charCodeAt(i);\n  contentHash = ((contentHash << 5) - contentHash) + char;\n  contentHash = contentHash & contentHash; // Convert to 32-bit integer\n}\ncontentHash = Math.abs(contentHash).toString(36);\n\nreturn {\n  json: {\n    // URL info\n    name: urlData.name,\n    url: urlData.url,\n    selector: selector,\n    \n    // Extracted content\n    pageTitle: pageTitle,\n    metaDescription: metaDescription,\n    cleanText: focusedContent.substring(0, 50000), // Limit storage size\n    contentHash: contentHash,\n    contentLength: focusedContent.length,\n    \n    // Metadata\n    fetchedAt: new Date().toISOString(),\n    httpStatus: rawResponse.statusCode || rawResponse.status || 200\n  }\n};"},"typeVersion":2},{"id":"23a42e29-2815-4cad-90db-67afcb7cedda","name":"📋 Load Previous Snapshot","type":"n8n-nodes-base.googleSheets","position":[1664,720],"parameters":{"options":{},"filtersUI":{"values":[{"lookupValue":"={{ $json.name }}","lookupColumn":"Name"},{"lookupValue":"={{ $json.url }}","lookupColumn":"url"},{"lookupValue":"={{ $json.selector }}","lookupColumn":"selector"},{"lookupValue":"={{ $json.pageTitle }}","lookupColumn":"page title"},{"lookupValue":"={{ $json.metaDescription }}","lookupColumn":"meta description"},{"lookupValue":"={{ $json.cleanText }}","lookupColumn":"clean text"},{"lookupValue":"={{ $json.contentHash }}","lookupColumn":"content hash"},{"lookupValue":"={{ $json.contentLength }}","lookupColumn":"content lenght"},{"lookupValue":"={{ $json.fetchedAt }}","lookupColumn":"fetched at"},{"lookupValue":"={{ $json.httpStatus }}","lookupColumn":"http status"}]},"sheetName":{"__rl":true,"mode":"list","value":299160514,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit#gid=299160514","cachedResultName":"website"},"documentId":{"__rl":true,"mode":"list","value":"YOUR_GOOGLE_SHEET_ID","cachedResultUrl":"https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit","cachedResultName":"Website Monitor"}},"typeVersion":4.6,"alwaysOutputData":true},{"id":"e94c53d2-d0e0-44c6-bb51-92ec84550ac0","name":"🔍 Diff Engine","type":"n8n-nodes-base.code","position":[1840,720],"parameters":{"jsCode":"// ============================================\n// DIFF ENGINE\n// Compare current vs previous, generate diff\n// ============================================\n\nconst currentData = $('📄 Extract Content').item.json;\nconst allPreviousRows = $('📋 Load Previous Snapshot').all();\n\n// Find the previous snapshot for this specific URL\nlet previousContent = '';\nlet previousHash = '';\nlet lastChecked = '';\nlet isFirstRun = true;\n\nfor (const row of allPreviousRows) {\n  const rowUrl = (row.json.URL || row.json.url || '').trim();\n  if (rowUrl === currentData.url) {\n    previousContent = row.json.Content || row.json.content || '';\n    previousHash = row.json['Content Hash'] || row.json.contentHash || '';\n    lastChecked = row.json['Last Checked'] || row.json.lastChecked || '';\n    isFirstRun = false;\n    break;\n  }\n}\n\n// Quick hash comparison first\nif (!isFirstRun && previousHash === currentData.contentHash) {\n  return {\n    json: {\n      ...currentData,\n      hasChanged: false,\n      isFirstRun: false,\n      changePercentage: 0,\n      diffSummary: 'No changes detected.',\n      addedLines: [],\n      removedLines: [],\n      lastChecked: lastChecked,\n      comparedAt: new Date().toISOString()\n    }\n  };\n}\n\n// If first run, save baseline\nif (isFirstRun) {\n  return {\n    json: {\n      ...currentData,\n      hasChanged: false,\n      isFirstRun: true,\n      changePercentage: 0,\n      diffSummary: 'First run — baseline snapshot saved. Changes will be detected from the next run.',\n      addedLines: [],\n      removedLines: [],\n      lastChecked: 'Never',\n      comparedAt: new Date().toISOString()\n    }\n  };\n}\n\n// ============================================\n// DETAILED DIFF COMPARISON\n// ============================================\n\nconst prevLines = previousContent.split('\\n').map(l => l.trim()).filter(l => l.length > 0);\nconst currLines = currentData.cleanText.split('\\n').map(l => l.trim()).filter(l => l.length > 0);\n\n// Build sets for comparison\nconst prevSet = new Set(prevLines);\nconst currSet = new Set(currLines);\n\n// Find added lines (in current but not in previous)\nconst addedLines = currLines.filter(line => !prevSet.has(line));\n\n// Find removed lines (in previous but not in current)\nconst removedLines = prevLines.filter(line => !currSet.has(line));\n\n// Calculate change percentage\nconst totalLines = Math.max(prevLines.length, currLines.length, 1);\nconst changedLines = addedLines.length + removedLines.length;\nconst changePercentage = Math.round((changedLines / totalLines) * 100);\n\n// Generate human-readable diff summary\nlet diffSummary = '';\n\nif (addedLines.length > 0) {\n  diffSummary += `\\n➕ ADDED (${addedLines.length} lines):\\n`;\n  addedLines.slice(0, 20).forEach(line => {\n    diffSummary += `  + ${line.substring(0, 200)}\\n`;\n  });\n  if (addedLines.length > 20) {\n    diffSummary += `  ... and ${addedLines.length - 20} more added lines\\n`;\n  }\n}\n\nif (removedLines.length > 0) {\n  diffSummary += `\\n➖ REMOVED (${removedLines.length} lines):\\n`;\n  removedLines.slice(0, 20).forEach(line => {\n    diffSummary += `  - ${line.substring(0, 200)}\\n`;\n  });\n  if (removedLines.length > 20) {\n    diffSummary += `  ... and ${removedLines.length - 20} more removed lines\\n`;\n  }\n}\n\nif (!diffSummary) {\n  diffSummary = 'Hash changed but no line-level differences detected (possible whitespace or formatting change).';\n}\n\n// Determine change severity\nlet severity = 'low';\nif (changePercentage > 50) severity = 'critical';\nelse if (changePercentage > 20) severity = 'high';\nelse if (changePercentage > 5) severity = 'medium';\n\nreturn {\n  json: {\n    ...currentData,\n    hasChanged: true,\n    isFirstRun: false,\n    changePercentage: changePercentage,\n    severity: severity,\n    diffSummary: diffSummary.trim(),\n    addedCount: addedLines.length,\n    removedCount: removedLines.length,\n    addedLines: addedLines.slice(0, 30),\n    removedLines: removedLines.slice(0, 30),\n    previousContentLength: previousContent.length,\n    currentContentLength: currentData.cleanText.length,\n    lastChecked: lastChecked,\n    comparedAt: new Date().toISOString()\n  }\n};"},"typeVersion":2},{"id":"f44c17be-0ca7-403a-8292-e58839c7e2cf","name":"🔄 Changed?","type":"n8n-nodes-base.if","position":[2080,720],"parameters":{"options":{},"conditions":{"options":{"version":2,"leftValue":"","caseSensitive":true,"typeValidation":"strict"},"combinator":"and","conditions":[{"id":"has-changed","operator":{"type":"boolean","operation":"true"},"leftValue":"={{ $json.hasChanged }}","rightValue":true}]}},"typeVersion":2.2},{"id":"e525973e-572e-4ba6-9d9b-206a59f4dc57","name":"💾 Save Snapshot","type":"n8n-nodes-base.googleSheets","position":[2320,656],"parameters":{"columns":{"value":{"Name":"={{ $json.name }}"},"schema":[{"id":"Name","type":"string","display":true,"removed":false,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"url","type":"string","display":true,"removed":false,"required":false,"displayName":"url","defaultMatch":false,"canBeUsedToMatch":true},{"id":"selector","type":"string","display":true,"removed":false,"required":false,"displayName":"selector","defaultMatch":false,"canBeUsedToMatch":true},{"id":"page title","type":"string","display":true,"removed":false,"required":false,"displayName":"page title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"meta description","type":"string","display":true,"removed":false,"required":false,"displayName":"meta description","defaultMatch":false,"canBeUsedToMatch":true},{"id":"clean text","type":"string","display":true,"removed":false,"required":false,"displayName":"clean text","defaultMatch":false,"canBeUsedToMatch":true},{"id":"content hash","type":"string","display":true,"removed":false,"required":false,"displayName":"content hash","defaultMatch":false,"canBeUsedToMatch":true},{"id":"content lenght","type":"string","display":true,"removed":false,"required":false,"displayName":"content lenght","defaultMatch":false,"canBeUsedToMatch":true},{"id":"fetched at","type":"string","display":true,"removed":false,"required":false,"displayName":"fetched at","defaultMatch":false,"canBeUsedToMatch":true},{"id":"http status","type":"string","display":true,"removed":false,"required":false,"displayName":"http status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"name","type":"string","display":true,"removed":false,"required":false,"displayName":"name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"pageTitle","type":"string","display":true,"removed":false,"required":false,"displayName":"pageTitle","defaultMatch":false,"canBeUsedToMatch":true},{"id":"metaDescription","type":"string","display":true,"removed":false,"required":false,"displayName":"metaDescription","defaultMatch":false,"canBeUsedToMatch":true},{"id":"cleanText","type":"string","display":true,"removed":false,"required":false,"displayName":"cleanText","defaultMatch":false,"canBeUsedToMatch":true},{"id":"contentHash","type":"string","display":true,"removed":false,"required":false,"displayName":"contentHash","defaultMatch":false,"canBeUsedToMatch":true},{"id":"contentLength","type":"string","display":true,"removed":false,"required":false,"displayName":"contentLength","defaultMatch":false,"canBeUsedToMatch":true},{"id":"fetchedAt","type":"string","display":true,"removed":false,"required":false,"displayName":"fetchedAt","defaultMatch":false,"canBeUsedToMatch":true},{"id":"httpStatus","type":"string","display":true,"removed":false,"required":false,"displayName":"httpStatus","defaultMatch":false,"canBeUsedToMatch":true},{"id":"hasChanged","type":"string","display":true,"removed":false,"required":false,"displayName":"hasChanged","defaultMatch":false,"canBeUsedToMatch":true},{"id":"isFirstRun","type":"string","display":true,"removed":false,"required":false,"displayName":"isFirstRun","defaultMatch":false,"canBeUsedToMatch":true},{"id":"changePercentage","type":"string","display":true,"removed":false,"required":false,"displayName":"changePercentage","defaultMatch":false,"canBeUsedToMatch":true},{"id":"diffSummary","type":"string","display":true,"removed":false,"required":false,"displayName":"diffSummary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"addedLines","type":"string","display":true,"removed":false,"required":false,"displayName":"addedLines","defaultMatch":false,"canBeUsedToMatch":true},{"id":"removedLines","type":"string","display":true,"removed":false,"required":false,"displayName":"removedLines","defaultMatch":false,"canBeUsedToMatch":true},{"id":"lastChecked","type":"string","display":true,"removed":false,"required":false,"displayName":"lastChecked","defaultMatch":false,"canBeUsedToMatch":true},{"id":"comparedAt","type":"string","display":true,"removed":false,"required":false,"displayName":"comparedAt","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"autoMapInputData","matchingColumns":["Name"],"attemptToConvertTypes":false,"convertFieldsToString":true},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":299160514,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit#gid=299160514","cachedResultName":"website"},"documentId":{"__rl":true,"mode":"list","value":"YOUR_GOOGLE_SHEET_ID","cachedResultUrl":"https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit","cachedResultName":"Website Monitor"}},"typeVersion":4.6},{"id":"6ab2ff6a-4c6e-41d4-947a-4209a6bd46fe","name":"📲 Telegram Alert","type":"n8n-nodes-base.telegram","position":[2576,592],"webhookId":"00000000-0000-0000-0000-000000000001","parameters":{"text":"={{ (() => {\nconst d = $json;\nconst severityEmoji = {\n  'critical': '🔴',\n  'high': '🟠',\n  'medium': '🟡',\n  'low': '🟢'\n};\nconst emoji = severityEmoji[d.severity] || '🔵';\n\nlet msg = `${emoji} *WEBSITE CHANGE DETECTED*\\n\\n`;\nmsg += `📄 *${d.name}*\\n`;\nmsg += `🔗 ${d.url}\\n\\n`;\nmsg += `📊 *Change: ${d.changePercentage}%* (${d.severity})\\n`;\nmsg += `➕ ${d.addedCount || 0} lines added\\n`;\nmsg += `➖ ${d.removedCount || 0} lines removed\\n\\n`;\nmsg += `📝 *Diff Summary:*\\n`;\nmsg += '```\\n';\nmsg += (d.diffSummary || 'No details').substring(0, 2000);\nmsg += '\\n```\\n\\n';\nmsg += `⏰ Detected: ${d.comparedAt}\\n`;\nmsg += `📅 Last checked: ${d.lastChecked}`;\n\nreturn msg;\n})() }}","chatId":"YOUR_TELEGRAM_CHAT_ID","additionalFields":{"parse_mode":"Markdown","disable_web_page_preview":true}},"typeVersion":1.2},{"id":"09dd047f-76eb-400e-83da-2cddfbf387cd","name":"📧 Email Alert","type":"n8n-nodes-base.emailSend","position":[2576,752],"webhookId":"00000000-0000-0000-0000-000000000002","parameters":{"html":"=<div style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; max-width: 650px; margin: 0 auto; background: #f5f5f5; padding: 20px;\">\n  <div style=\"background: {{ $json.severity === 'critical' ? '#dc3545' : $json.severity === 'high' ? '#fd7e14' : $json.severity === 'medium' ? '#ffc107' : '#28a745' }}; padding: 20px 24px; border-radius: 12px 12px 0 0;\">\n    <h2 style=\"color: white; margin: 0; font-size: 20px;\">🔍 Website Change Detected</h2>\n    <p style=\"color: rgba(255,255,255,0.9); margin: 8px 0 0; font-size: 14px;\">{{ $json.severity.toUpperCase() }} severity — {{ $json.changePercentage }}% changed</p>\n  </div>\n  \n  <div style=\"background: white; padding: 24px; border: 1px solid #e0e0e0;\">\n    <h3 style=\"margin-top: 0; color: #333;\">{{ $json.name }}</h3>\n    <p style=\"margin: 4px 0;\"><strong>URL:</strong> <a href=\"{{ $json.url }}\" style=\"color: #0066cc;\">{{ $json.url }}</a></p>\n    <p style=\"margin: 4px 0;\"><strong>Page Title:</strong> {{ $json.pageTitle }}</p>\n    \n    <div style=\"display: flex; gap: 16px; margin: 16px 0;\">\n      <div style=\"background: #e8f5e9; padding: 12px 16px; border-radius: 8px; flex: 1; text-align: center;\">\n        <div style=\"font-size: 24px; font-weight: bold; color: #2e7d32;\">+{{ $json.addedCount || 0 }}</div>\n        <div style=\"font-size: 12px; color: #666;\">Lines Added</div>\n      </div>\n      <div style=\"background: #ffebee; padding: 12px 16px; border-radius: 8px; flex: 1; text-align: center;\">\n        <div style=\"font-size: 24px; font-weight: bold; color: #c62828;\">-{{ $json.removedCount || 0 }}</div>\n        <div style=\"font-size: 12px; color: #666;\">Lines Removed</div>\n      </div>\n      <div style=\"background: #e3f2fd; padding: 12px 16px; border-radius: 8px; flex: 1; text-align: center;\">\n        <div style=\"font-size: 24px; font-weight: bold; color: #1565c0;\">{{ $json.changePercentage }}%</div>\n        <div style=\"font-size: 12px; color: #666;\">Changed</div>\n      </div>\n    </div>\n    \n    <div style=\"background: #f8f9fa; padding: 16px; border-radius: 8px; border-left: 4px solid #6c757d; margin-top: 16px;\">\n      <h4 style=\"margin: 0 0 8px; color: #333;\">📝 Diff Summary</h4>\n      <pre style=\"margin: 0; font-size: 13px; color: #555; white-space: pre-wrap; word-wrap: break-word; font-family: 'SF Mono', Monaco, monospace;\">{{ $json.diffSummary.substring(0, 3000) }}</pre>\n    </div>\n    \n    <div style=\"margin-top: 20px; text-align: center;\">\n      <a href=\"{{ $json.url }}\" style=\"display: inline-block; background: #0066cc; color: white; padding: 12px 32px; border-radius: 8px; text-decoration: none; font-weight: 600;\">View Page →</a>\n    </div>\n  </div>\n  \n  <div style=\"padding: 12px; text-align: center;\">\n    <p style=\"margin: 0; color: #999; font-size: 12px;\">Detected at {{ $json.comparedAt }} · Previous check: {{ $json.lastChecked }}</p>\n    <p style=\"margin: 4px 0 0; color: #999; font-size: 12px;\">Powered by n8n Website Monitor</p>\n  </div>\n</div>","options":{},"subject":"={{ (() => {\nconst s = {'critical':'🔴','high':'🟠','medium':'🟡','low':'🟢'};\nreturn `${s[$json.severity] || '🔵'} Website Changed: ${$json.name} (${$json.changePercentage}%)`;\n})() }}","toEmail":"user@example.com","fromEmail":"user@example.com"},"typeVersion":2.1},{"id":"8c5ef23c-9c33-449b-b90c-2fad25cc69a7","name":"💾 Save (No Change)","type":"n8n-nodes-base.googleSheets","position":[2320,832],"parameters":{"columns":{"value":{},"schema":[{"id":"Name","type":"string","display":true,"removed":false,"required":false,"displayName":"Name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"url","type":"string","display":true,"required":false,"displayName":"url","defaultMatch":false,"canBeUsedToMatch":true},{"id":"selector","type":"string","display":true,"required":false,"displayName":"selector","defaultMatch":false,"canBeUsedToMatch":true},{"id":"page title","type":"string","display":true,"required":false,"displayName":"page title","defaultMatch":false,"canBeUsedToMatch":true},{"id":"meta description","type":"string","display":true,"required":false,"displayName":"meta description","defaultMatch":false,"canBeUsedToMatch":true},{"id":"clean text","type":"string","display":true,"required":false,"displayName":"clean text","defaultMatch":false,"canBeUsedToMatch":true},{"id":"content hash","type":"string","display":true,"required":false,"displayName":"content hash","defaultMatch":false,"canBeUsedToMatch":true},{"id":"content lenght","type":"string","display":true,"required":false,"displayName":"content lenght","defaultMatch":false,"canBeUsedToMatch":true},{"id":"fetched at","type":"string","display":true,"required":false,"displayName":"fetched at","defaultMatch":false,"canBeUsedToMatch":true},{"id":"http status","type":"string","display":true,"required":false,"displayName":"http status","defaultMatch":false,"canBeUsedToMatch":true},{"id":"name","type":"string","display":true,"removed":false,"required":false,"displayName":"name","defaultMatch":false,"canBeUsedToMatch":true},{"id":"pageTitle","type":"string","display":true,"removed":false,"required":false,"displayName":"pageTitle","defaultMatch":false,"canBeUsedToMatch":true},{"id":"metaDescription","type":"string","display":true,"removed":false,"required":false,"displayName":"metaDescription","defaultMatch":false,"canBeUsedToMatch":true},{"id":"cleanText","type":"string","display":true,"removed":false,"required":false,"displayName":"cleanText","defaultMatch":false,"canBeUsedToMatch":true},{"id":"contentHash","type":"string","display":true,"removed":false,"required":false,"displayName":"contentHash","defaultMatch":false,"canBeUsedToMatch":true},{"id":"contentLength","type":"string","display":true,"removed":false,"required":false,"displayName":"contentLength","defaultMatch":false,"canBeUsedToMatch":true},{"id":"fetchedAt","type":"string","display":true,"removed":false,"required":false,"displayName":"fetchedAt","defaultMatch":false,"canBeUsedToMatch":true},{"id":"httpStatus","type":"string","display":true,"removed":false,"required":false,"displayName":"httpStatus","defaultMatch":false,"canBeUsedToMatch":true},{"id":"hasChanged","type":"string","display":true,"removed":false,"required":false,"displayName":"hasChanged","defaultMatch":false,"canBeUsedToMatch":true},{"id":"isFirstRun","type":"string","display":true,"removed":false,"required":false,"displayName":"isFirstRun","defaultMatch":false,"canBeUsedToMatch":true},{"id":"changePercentage","type":"string","display":true,"removed":false,"required":false,"displayName":"changePercentage","defaultMatch":false,"canBeUsedToMatch":true},{"id":"diffSummary","type":"string","display":true,"removed":false,"required":false,"displayName":"diffSummary","defaultMatch":false,"canBeUsedToMatch":true},{"id":"addedLines","type":"string","display":true,"removed":false,"required":false,"displayName":"addedLines","defaultMatch":false,"canBeUsedToMatch":true},{"id":"removedLines","type":"string","display":true,"removed":false,"required":false,"displayName":"removedLines","defaultMatch":false,"canBeUsedToMatch":true},{"id":"lastChecked","type":"string","display":true,"removed":false,"required":false,"displayName":"lastChecked","defaultMatch":false,"canBeUsedToMatch":true},{"id":"comparedAt","type":"string","display":true,"removed":false,"required":false,"displayName":"comparedAt","defaultMatch":false,"canBeUsedToMatch":true}],"mappingMode":"autoMapInputData","matchingColumns":["Name"],"attemptToConvertTypes":false,"convertFieldsToString":false},"options":{},"operation":"appendOrUpdate","sheetName":{"__rl":true,"mode":"list","value":299160514,"cachedResultUrl":"https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit#gid=299160514","cachedResultName":"website"},"documentId":{"__rl":true,"mode":"list","value":"YOUR_GOOGLE_SHEET_ID","cachedResultUrl":"https://docs.google.com/spreadsheets/d/YOUR_GOOGLE_SHEET_ID/edit","cachedResultName":"Website Monitor"}},"typeVersion":4.6},{"id":"0e16d10a-b095-411b-a4f7-4552b0de7958","name":"📝 Log Result","type":"n8n-nodes-base.code","position":[2576,928],"parameters":{"jsCode":"// Log entry for change history\nconst d = $json;\n\nreturn {\n  json: {\n    status: d.isFirstRun ? 'baseline_saved' : (d.hasChanged ? 'change_detected' : 'no_change'),\n    url: d.url,\n    name: d.name,\n    changePercentage: d.changePercentage || 0,\n    severity: d.severity || 'none',\n    addedCount: d.addedCount || 0,\n    removedCount: d.removedCount || 0,\n    checkedAt: d.fetchedAt,\n    message: d.isFirstRun \n      ? `✅ Baseline saved for ${d.name}` \n      : (d.hasChanged \n        ? `🔄 ${d.changePercentage}% change detected on ${d.name}` \n        : `✓ No changes on ${d.name}`)\n  }\n};"},"typeVersion":2}],"active":false,"pinData":{},"settings":{"binaryMode":"separate","availableInMCP":false,"executionOrder":"v1"},"versionId":"5f721126-5edd-484e-aade-2ea8a2598349","connections":{"📋 URL List":{"main":[[{"node":"🌐 Fetch Page","type":"main","index":0}]]},"🔄 Changed?":{"main":[[{"node":"💾 Save Snapshot","type":"main","index":0}],[{"node":"💾 Save (No Change)","type":"main","index":0}]]},"🌐 Fetch Page":{"main":[[{"node":"📄 Extract Content","type":"main","index":0}]]},"🔍 Diff Engine":{"main":[[{"node":"🔄 Changed?","type":"main","index":0}]]},"⏰ Every 4 Hours":{"main":[[{"node":"📋 URL List","type":"main","index":0}]]},"💾 Save Snapshot":{"main":[[{"node":"📲 Telegram Alert","type":"main","index":0},{"node":"📧 Email Alert","type":"main","index":0}]]},"📄 Extract Content":{"main":[[{"node":"📋 Load Previous Snapshot","type":"main","index":0}]]},"💾 Save (No Change)":{"main":[[{"node":"📝 Log Result","type":"main","index":0}]]},"📋 Load Previous Snapshot":{"main":[[{"node":"🔍 Diff Engine","type":"main","index":0}]]}}},"lastUpdatedBy":1,"workflowInfo":{"nodeCount":19,"nodeTypes":{"n8n-nodes-base.if":{"count":1},"n8n-nodes-base.code":{"count":4},"n8n-nodes-base.telegram":{"count":1},"n8n-nodes-base.emailSend":{"count":1},"n8n-nodes-base.stickyNote":{"count":7},"n8n-nodes-base.httpRequest":{"count":1},"n8n-nodes-base.googleSheets":{"count":3},"n8n-nodes-base.scheduleTrigger":{"count":1}}},"status":"published","readyToDemo":null,"user":{"name":"Tony Adijah","username":"togo","bio":"Automating the boring stuff so you don’t have to. 🤖 📐 n8n Workflows & Templates 🚀 Helping you save 10+ hours a week. 👇 Grab free workflows below.","verified":true,"links":["https://www.linkedin.com/in/tony-adijah-965903131/"],"avatar":"https://gravatar.com/avatar/e2635712dd01a1dae354636c1a925735948ada9697e9d55824f24558a3eab732?r=pg&d=retro&size=200"},"nodes":[{"id":11,"icon":"fa:envelope","name":"n8n-nodes-base.emailSend","codex":{"data":{"alias":["SMTP","email","human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/build-your-own-virtual-assistant-with-n8n-a-step-by-step-guide/","icon":"👦","label":"Build your own virtual assistant with n8n: A step by step guide"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.sendemail/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/sendemail/"}]},"categories":["Communication","HITL","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Send Email","color":"#00bb88"},"iconData":{"icon":"envelope","type":"icon"},"displayName":"Send Email","typeVersion":2,"nodeCategories":[{"id":6,"name":"Communication"},{"id":9,"name":"Core Nodes"},{"id":28,"name":"HITL"}]},{"id":18,"icon":"file:googleSheets.svg","name":"n8n-nodes-base.googleSheets","codex":{"data":{"alias":["CSV","Sheet","Spreadsheet","GS"],"resources":{"generic":[{"url":"https://n8n.io/blog/love-at-first-sight-ricardos-n8n-journey/","icon":"❤️","label":"Love at first sight: Ricardo’s n8n journey"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/supercharging-your-conference-registration-process-with-n8n/","icon":"🎫","label":"Supercharging your conference registration process with n8n"},{"url":"https://n8n.io/blog/creating-triggers-for-n8n-workflows-using-polling/","icon":"⏲","label":"Creating triggers for n8n workflows using polling"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/migrating-community-metrics-to-orbit-using-n8n/","icon":"📈","label":"Migrating Community Metrics to Orbit using n8n"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/your-business-doesnt-need-you-to-operate/","icon":" 🖥️","label":"Hey founders! Your business doesn't need you to operate"},{"url":"https://n8n.io/blog/how-honest-burgers-use-automation-to-save-100k-per-year/","icon":"🍔","label":"How Honest Burgers Use Automation to Save $100k per year"},{"url":"https://n8n.io/blog/how-a-digital-strategist-uses-n8n-for-online-marketing/","icon":"💻","label":"How a digital strategist uses n8n for online marketing"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.googlesheets/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/"}]},"categories":["Data & Storage","Productivity"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"input\",\"output\"]","defaults":{"name":"Google Sheets"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MCIgaGVpZ2h0PSI2MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNS42OSAxIDUyIDE3LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0OC4yOTMgNjBIMTIuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDkgNTYuMzEyVjQuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTIuNzA3IDF6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM1LjY5IDEgNTIgMTcuMjI1SDM5LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzkuMjExIDE3LjIyNSA1MiAyMi40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTIwLjEyIDMxLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMS42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzEuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjxwYXRoIGZpbGw9IiMyOEI0NDYiIGQ9Ik0zNC42OSAwIDUxIDE2LjIyNXYzOS4wODdhMy42NyAzLjY3IDAgMCAxLTEuMDg0IDIuNjFBMy43IDMuNyAwIDAgMSA0Ny4yOTMgNTlIMTEuNzA3YTMuNyAzLjcgMCAwIDEtMi42MjMtMS4wNzhBMy42NyAzLjY3IDAgMCAxIDggNTUuMzEyVjMuNjg4YTMuNjcgMy42NyAwIDAgMSAxLjA4NC0yLjYxQTMuNyAzLjcgMCAwIDEgMTEuNzA3IDB6Ii8+PHBhdGggZmlsbD0iIzZBQ0U3QyIgZD0iTTM0LjY5IDAgNTEgMTYuMjI1SDM4LjM5N2MtMi4wNTQgMC0zLjcwNy0xLjgyOS0zLjcwNy0zLjg3MnoiLz48cGF0aCBmaWxsPSIjMjE5QjM4IiBkPSJNMzguMjExIDE2LjIyNSA1MSAyMS40OHYtNS4yNTV6Ii8+PHBhdGggZmlsbD0iI0ZGRiIgZD0iTTE5LjEyIDMwLjk3NWMwLS44MTcuNjYyLTEuNDc1IDEuNDgzLTEuNDc1aDE3Ljc5NGMuODIxIDAgMS40ODIuNjU4IDEuNDgyIDEuNDc1djE1LjQ4N2MwIC44MTgtLjY2MSAxLjQ3NS0xLjQ4MiAxLjQ3NUgyMC42MDNhMS40NzYgMS40NzYgMCAwIDEtMS40ODItMS40NzRWMzAuOTc0em0yLjIyNSAxLjQ3NWg2LjY3MnYyLjIxMmgtNi42NzJ6bTAgNS4xNjJoNi42NzJ2Mi4yMTNoLTYuNjcyem0wIDUuMTYzaDYuNjcydjIuMjEyaC02LjY3MnptOS42MzgtMTAuMzI1aDYuNjcydjIuMjEyaC02LjY3MnptMCA1LjE2Mmg2LjY3MnYyLjIxM2gtNi42NzJ6bTAgNS4xNjNoNi42NzJ2Mi4yMTJoLTYuNjcyeiIvPjwvZz48L3N2Zz4="},"displayName":"Google Sheets","typeVersion":5,"nodeCategories":[{"id":3,"name":"Data & Storage"},{"id":4,"name":"Productivity"}]},{"id":19,"icon":"file:httprequest.svg","name":"n8n-nodes-base.httpRequest","codex":{"data":{"alias":["API","Request","URL","Build","cURL"],"resources":{"generic":[{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/automatically-pulling-and-visualizing-data-with-n8n/","icon":"📈","label":"Automatically pulling and visualizing data with n8n"},{"url":"https://n8n.io/blog/learn-how-to-automatically-cross-post-your-content-with-n8n/","icon":"✍️","label":"Learn how to automatically cross-post your content with n8n"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/running-n8n-on-ships-an-interview-with-maranics/","icon":"🛳","label":"Running n8n on ships: An interview with Maranics"},{"url":"https://n8n.io/blog/what-are-apis-how-to-use-them-with-no-code/","icon":" 🪢","label":"What are APIs and how to use them with no code"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automate-designs-with-bannerbear-and-n8n/","icon":"🎨","label":"Automate Designs with Bannerbear and n8n"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/building-an-expense-tracking-app-in-10-minutes/","icon":"📱","label":"Building an expense tracking app in 10 minutes"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/how-to-use-the-http-request-node-the-swiss-army-knife-for-workflow-automation/","icon":"🧰","label":"How to use the HTTP Request Node - The Swiss Army Knife for Workflow Automation"},{"url":"https://n8n.io/blog/learn-how-to-use-webhooks-with-mattermost-slash-commands/","icon":"🦄","label":"Learn how to use webhooks with Mattermost slash commands"},{"url":"https://n8n.io/blog/how-a-membership-development-manager-automates-his-work-and-investments/","icon":"📈","label":"How a Membership Development Manager automates his work and investments"},{"url":"https://n8n.io/blog/a-low-code-bitcoin-ticker-built-with-questdb-and-n8n-io/","icon":"📈","label":"A low-code bitcoin ticker built with QuestDB and n8n.io"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/automations-for-activists/","icon":"✨","label":"How Common Knowledge use workflow automation for activism"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/how-goomer-automated-their-operations-with-over-200-n8n-workflows/","icon":"🛵","label":"How Goomer automated their operations with over 200 n8n workflows"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.httprequest/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"output\"]","defaults":{"name":"HTTP Request","color":"#0004F5"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00MCAyMEM0MCA4Ljk1MzE0IDMxLjA0NjkgMCAyMCAwQzguOTUzMTQgMCAwIDguOTUzMTQgMCAyMEMwIDMxLjA0NjkgOC45NTMxNCA0MCAyMCA0MEMzMS4wNDY5IDQwIDQwIDMxLjA0NjkgNDAgMjBaTTIwIDM2Ljk0NThDMTguODg1MiAzNi45NDU4IDE3LjEzNzggMzUuOTY3IDE1LjQ5OTggMzIuNjk4NUMxNC43OTY0IDMxLjI5MTggMTQuMTk2MSAyOS41NDMxIDEzLjc1MjYgMjcuNjg0N0gyNi4xODk4QzI1LjgwNDUgMjkuNTQwMyAyNS4yMDQ0IDMxLjI5MDEgMjQuNTAwMiAzMi42OTg1QzIyLjg2MjIgMzUuOTY3IDIxLjExNDggMzYuOTQ1OCAyMCAzNi45NDU4Wk0xMi45MDY0IDIwQzEyLjkwNjQgMjEuNjA5NyAxMy4wMDg3IDIzLjE2NCAxMy4yMDAzIDI0LjYzMDVIMjYuNzk5N0MyNi45OTEzIDIzLjE2NCAyNy4wOTM2IDIxLjYwOTcgMjcuMDkzNiAyMEMyNy4wOTM2IDE4LjM5MDMgMjYuOTkxMyAxNi44MzYgMjYuNzk5NyAxNS4zNjk1SDEzLjIwMDNDMTMuMDA4NyAxNi44MzYgMTIuOTA2NCAxOC4zOTAzIDEyLjkwNjQgMjBaTTIwIDMuMDU0MTlDMjEuMTE0OSAzLjA1NDE5IDIyLjg2MjIgNC4wMzA3OCAyNC41MDAxIDcuMzAwMzlDMjUuMjA2NiA4LjcxNDA4IDI1LjgwNzIgMTAuNDA2NyAyNi4xOTIgMTIuMzE1M0gxMy43NTAxQzE0LjE5MzMgMTAuNDA0NyAxNC43OTQyIDguNzEyNTQgMTUuNDk5OCA3LjMwMDY0QzE3LjEzNzcgNC4wMzA4MyAxOC44ODUxIDMuMDU0MTkgMjAgMy4wNTQxOVpNMzAuMTQ3OCAyMEMzMC4xNDc4IDE4LjQwOTkgMzAuMDU0MyAxNi44NjE3IDI5LjgyMjcgMTUuMzY5NUgzNi4zMDQyQzM2LjcyNTIgMTYuODQyIDM2Ljk0NTggMTguMzk2NCAzNi45NDU4IDIwQzM2Ljk0NTggMjEuNjAzNiAzNi43MjUyIDIzLjE1OCAzNi4zMDQyIDI0LjYzMDVIMjkuODIyN0MzMC4wNTQzIDIzLjEzODMgMzAuMTQ3OCAyMS41OTAxIDMwLjE0NzggMjBaTTI2LjI3NjcgNC4yNTUxMkMyNy42MzY1IDYuMzYwMTkgMjguNzExIDkuMTMyIDI5LjM3NzQgMTIuMzE1M0gzNS4xMDQ2QzMzLjI1MTEgOC42NjggMzAuMTA3IDUuNzgzNDYgMjYuMjc2NyA0LjI1NTEyWk0xMC42MjI2IDEyLjMxNTNINC44OTI5M0M2Ljc1MTQ3IDguNjY3ODQgOS44OTM1MSA1Ljc4MzQxIDEzLjcyMzIgNC4yNTUxM0MxMi4zNjM1IDYuMzYwMjEgMTEuMjg5IDkuMTMyMDEgMTAuNjIyNiAxMi4zMTUzWk0zLjA1NDE5IDIwQzMuMDU0MTkgMjEuNjAzIDMuMjc3NDMgMjMuMTU3NSAzLjY5NDg0IDI0LjYzMDVIMTAuMTIxN0M5Ljk0NjE5IDIzLjE0MiA5Ljg1MjIyIDIxLjU5NDMgOS44NTIyMiAyMEM5Ljg1MjIyIDE4LjQwNTcgOS45NDYxOSAxNi44NTggMTAuMTIxNyAxNS4zNjk1SDMuNjk0ODRDMy4yNzc0MyAxNi44NDI1IDMuMDU0MTkgMTguMzk3IDMuMDU0MTkgMjBaTTI2LjI3NjYgMzUuNzQyN0MyNy42MzY1IDMzLjYzOTMgMjguNzExIDMwLjg2OCAyOS4zNzc0IDI3LjY4NDdIMzUuMTA0NkMzMy4yNTEgMzEuMzMyMiAzMC4xMDY4IDM0LjIxNzkgMjYuMjc2NiAzNS43NDI3Wk0xMy43MjM0IDM1Ljc0MjdDOS44OTM2OSAzNC4yMTc5IDYuNzUxNTUgMzEuMzMyNCA0Ljg5MjkzIDI3LjY4NDdIMTAuNjIyNkMxMS4yODkgMzAuODY4IDEyLjM2MzUgMzMuNjM5MyAxMy43MjM0IDM1Ljc0MjdaIiBmaWxsPSIjM0E0MkU5Ii8+Cjwvc3ZnPgo="},"displayName":"HTTP Request","typeVersion":4,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":20,"icon":"fa:map-signs","name":"n8n-nodes-base.if","codex":{"data":{"alias":["Router","Filter","Condition","Logic","Boolean","Branch"],"details":"The IF node can be used to implement binary conditional logic in your workflow. You can set up one-to-many conditions to evaluate each item of data being inputted into the node. That data will either evaluate to TRUE or FALSE and route out of the node accordingly.\n\nThis node has multiple types of conditions: Bool, String, Number, and Date & Time.","resources":{"generic":[{"url":"https://n8n.io/blog/learn-to-automate-your-factorys-incident-reporting-a-step-by-step-guide/","icon":"🏭","label":"Learn to Automate Your Factory's Incident Reporting: A Step by Step Guide"},{"url":"https://n8n.io/blog/2021-the-year-to-automate-the-new-you-with-n8n/","icon":"☀️","label":"2021: The Year to Automate the New You with n8n"},{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/how-to-build-a-low-code-self-hosted-url-shortener/","icon":"🔗","label":"How to build a low-code, self-hosted URL shortener in 3 steps"},{"url":"https://n8n.io/blog/automate-your-data-processing-pipeline-in-9-steps-with-n8n/","icon":"⚙️","label":"Automate your data processing pipeline in 9 steps"},{"url":"https://n8n.io/blog/how-to-get-started-with-crm-automation-and-no-code-workflow-ideas/","icon":"👥","label":"How to get started with CRM automation (with 3 no-code workflow ideas"},{"url":"https://n8n.io/blog/5-tasks-you-can-automate-with-notion-api/","icon":"⚡️","label":"5 tasks you can automate with the new Notion API "},{"url":"https://n8n.io/blog/automate-google-apps-for-productivity/","icon":"💡","label":"15 Google apps you can combine and automate to increase productivity"},{"url":"https://n8n.io/blog/automation-for-maintainers-of-open-source-projects/","icon":"🏷️","label":"How to automatically manage contributions to open-source projects"},{"url":"https://n8n.io/blog/how-uproc-scraped-a-multi-page-website-with-a-low-code-workflow/","icon":" 🕸️","label":"How uProc scraped a multi-page website with a low-code workflow"},{"url":"https://n8n.io/blog/5-workflow-automations-for-mattermost-that-we-love-at-n8n/","icon":"🤖","label":"5 workflow automations for Mattermost that we love at n8n"},{"url":"https://n8n.io/blog/why-this-product-manager-loves-workflow-automation-with-n8n/","icon":"🧠","label":"Why this Product Manager loves workflow automation with n8n"},{"url":"https://n8n.io/blog/sending-automated-congratulations-with-google-sheets-twilio-and-n8n/","icon":"🙌","label":"Sending Automated Congratulations with Google Sheets, Twilio, and n8n "},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/benefits-of-automation-and-n8n-an-interview-with-hubspots-hugh-durkin/","icon":"🎖","label":"Benefits of automation and n8n: An interview with HubSpot's Hugh Durkin"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.if/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Flow"]}}},"group":"[\"transform\"]","defaults":{"name":"If","color":"#408000"},"iconData":{"icon":"map-signs","type":"icon"},"displayName":"If","typeVersion":2,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":49,"icon":"file:telegram.svg","name":"n8n-nodes-base.telegram","codex":{"data":{"alias":["human","form","wait","hitl","approval"],"resources":{"generic":[{"url":"https://n8n.io/blog/why-business-process-automation-with-n8n-can-change-your-daily-life/","icon":"🧬","label":"Why business process automation with n8n can change your daily life"},{"url":"https://n8n.io/blog/create-a-toxic-language-detector-for-telegram/","icon":"🤬","label":"Create a toxic language detector for Telegram in 4 step"},{"url":"https://n8n.io/blog/automatically-adding-expense-receipts-to-google-sheets-with-telegram-mindee-twilio-and-n8n/","icon":"🧾","label":"Automatically Adding Expense Receipts to Google Sheets with Telegram, Mindee, Twilio, and n8n"},{"url":"https://n8n.io/blog/no-code-ecommerce-workflow-automations/","icon":"store","label":"6 e-commerce workflows to power up your Shopify s"},{"url":"https://n8n.io/blog/world-poetry-day-workflow/","icon":"📜","label":"Celebrating World Poetry Day with a daily poem in Telegram"},{"url":"https://n8n.io/blog/using-automation-to-boost-productivity-in-the-workplace/","icon":"💪","label":"Using Automation to Boost Productivity in the Workplace"},{"url":"https://n8n.io/blog/how-to-set-up-a-ci-cd-pipeline-with-no-code/","icon":"🎡","label":"How to set up a no-code CI/CD pipeline with GitHub and TravisCI"},{"url":"https://n8n.io/blog/creating-scheduled-text-affirmations-with-n8n/","icon":"🤟","label":"Creating scheduled text affirmations with n8n"},{"url":"https://n8n.io/blog/creating-telegram-bots-with-n8n-a-no-code-platform/","icon":"💬","label":"Creating Telegram Bots with n8n, a No-Code Platform"},{"url":"https://n8n.io/blog/aws-workflow-automation/","label":"7 no-code workflow automations for Amazon Web Services"}],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.telegram/"}],"credentialDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/credentials/telegram/"}]},"categories":["Communication","HITL"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"HITL":["Human in the Loop"]}}},"group":"[\"output\"]","defaults":{"name":"Telegram"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiB2aWV3Qm94PSIwIDAgNjYgNjYiPjx1c2UgeGxpbms6aHJlZj0iI2EiIHg9Ii41IiB5PSIuNSIvPjxzeW1ib2wgaWQ9ImEiIG92ZXJmbG93PSJ2aXNpYmxlIj48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iIHN0cm9rZT0ibm9uZSI+PHBhdGggZmlsbD0iIzM3YWVlMiIgZD0iTTAgMzJjMCAxNy42NzMgMTQuMzI3IDMyIDMyIDMyczMyLTE0LjMyNyAzMi0zMlM0OS42NzMgMCAzMiAwIDAgMTQuMzI3IDAgMzIiLz48cGF0aCBmaWxsPSIjYzhkYWVhIiBkPSJtMjEuNjYxIDM0LjMzOCAzLjc5NyAxMC41MDhzLjQ3NS45ODMuOTgzLjk4MyA4LjA2OC03Ljg2NCA4LjA2OC03Ljg2NGw4LjQwNy0xNi4yMzctMjEuMTE5IDkuODk4eiIvPjxwYXRoIGZpbGw9IiNhOWM2ZDgiIGQ9Im0yNi42OTUgMzcuMDM0LS43MjkgNy43NDZzLS4zMDUgMi4zNzMgMi4wNjggMGw0LjY0NC00LjIwMyIvPjxwYXRoIGQ9Im0yMS43MyAzNC43MTItNy44MDktMi41NDVzLS45MzItLjM3OC0uNjMzLTEuMjM3Yy4wNjItLjE3Ny4xODYtLjMyOC41NTktLjU4OCAxLjczMS0xLjIwNiAzMi4wMjgtMTIuMDk2IDMyLjAyOC0xMi4wOTZzLjg1Ni0uMjg4IDEuMzYxLS4wOTdjLjIzMS4wODguMzc4LjE4Ny41MDMuNTQ4LjA0NS4xMzIuMDcxLjQxMS4wNjguNjg5LS4wMDMuMjAxLS4wMjcuMzg2LS4wNDUuNjc4LS4xODQgMi45NzgtNS43MDYgMjUuMTk4LTUuNzA2IDI1LjE5OHMtLjMzIDEuMy0xLjUxNCAxLjM0NWMtLjQzMi4wMTYtLjk1Ni0uMDcxLTEuNTgyLS42MS0yLjMyMy0xLjk5OC0xMC4zNTItNy4zOTQtMTIuMTI2LTguNThhLjM0LjM0IDAgMCAxLS4xNDYtLjIzOWMtLjAyNS0uMTI1LjEwOC0uMjguMTA4LS4yOHMxMy45OC0xMi40MjcgMTQuMzUyLTEzLjczMWMuMDI5LS4xMDEtLjA3OS0uMTUxLS4yMjYtLjEwNy0uOTI5LjM0Mi0xNy4wMjUgMTAuNTA2LTE4LjgwMSAxMS42MjktLjEwNC4wNjYtLjM5NS4wMjMtLjM5NS4wMjMiLz48L2c+PC9zeW1ib2w+PC9zdmc+"},"displayName":"Telegram","typeVersion":1,"nodeCategories":[{"id":6,"name":"Communication"},{"id":28,"name":"HITL"}]},{"id":565,"icon":"fa:sticky-note","name":"n8n-nodes-base.stickyNote","codex":{"data":{"alias":["Comments","Notes","Sticky"],"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers"]}}},"group":"[\"input\"]","defaults":{"name":"Sticky Note","color":"#FFD233"},"iconData":{"icon":"sticky-note","type":"icon"},"displayName":"Sticky Note","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]},{"id":834,"icon":"file:code.svg","name":"n8n-nodes-base.code","codex":{"data":{"alias":["cpde","Javascript","JS","Python","Script","Custom Code","Function"],"details":"The Code node allows you to execute JavaScript in your workflow.","resources":{"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.code/"}]},"categories":["Development","Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0","subcategories":{"Core Nodes":["Helpers","Data Transformation"]}}},"group":"[\"transform\"]","defaults":{"name":"Code"},"iconData":{"type":"file","fileBuffer":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTEyIiBoZWlnaHQ9IjUxMiIgdmlld0JveD0iMCAwIDUxMiA1MTIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMTcxXzQ0MSkiPgo8cGF0aCBkPSJNMTcwLjI4MyA0OEgxOTYuNUMyMDMuMTI3IDQ4IDIwOC41IDQyLjYyNzQgMjA4LjUgMzZWMTJDMjA4LjUgNS4zNzI1OCAyMDMuMTI3IDAgMTk2LjUgMEgxNzAuMjgzQzEyNi4xIDAgOTAuMjgzIDM1LjgxNzIgOTAuMjgzIDgwVjE3NkM5MC4yODMgMjA2LjkyOCA2NS4yMTA5IDIzMiAzNC4yODMgMjMySDIzQzE2LjM3MjYgMjMyIDExIDIzNy4zNzIgMTEgMjQ0VjI2OEMxMSAyNzQuNjI3IDE2LjM3MjQgMjgwIDIyLjk5OTYgMjgwTDM0LjI4MyAyODBDNjUuMjEwOSAyODAgOTAuMjgzIDMwNS4wNzIgOTAuMjgzIDMzNlY0NDBDOTAuMjgzIDQ3OS43NjQgMTIyLjUxOCA1MTIgMTYyLjI4MyA1MTJIMTk2LjVDMjAzLjEyNyA1MTIgMjA4LjUgNTA2LjYyNyAyMDguNSA1MDBWNDc2QzIwOC41IDQ2OS4zNzMgMjAzLjEyNyA0NjQgMTk2LjUgNDY0SDE2Mi4yODNDMTQ5LjAyOCA0NjQgMTM4LjI4MyA0NTMuMjU1IDEzOC4yODMgNDQwVjMzNkMxMzguMjgzIDMwOS4wMjIgMTI4LjAxMSAyODQuNDQzIDExMS4xNjQgMjY1Ljk2MUMxMDYuMTA5IDI2MC40MTYgMTA2LjEwOSAyNTEuNTg0IDExMS4xNjQgMjQ2LjAzOUMxMjguMDExIDIyNy41NTcgMTM4LjI4MyAyMDIuOTc4IDEzOC4yODMgMTc2VjgwQzEzOC4yODMgNjIuMzI2OSAxNTIuNjEgNDggMTcwLjI4MyA0OFoiIGZpbGw9IiNGRjk5MjIiLz4KPHBhdGggZD0iTTMwNSAzNkMzMDUgNDIuNjI3NCAzMTAuMzczIDQ4IDMxNyA0OEgzNDIuOTc5QzM2MC42NTIgNDggMzc0Ljk3OCA2Mi4zMjY5IDM3NC45NzggODBWMTc2QzM3NC45NzggMjAyLjk3OCAzODUuMjUxIDIyNy41NTcgNDAyLjA5OCAyNDYuMDM5QzQwNy4xNTMgMjUxLjU4NCA0MDcuMTUzIDI2MC40MTYgNDAyLjA5OCAyNjUuOTYxQzM4NS4yNTEgMjg0LjQ0MyAzNzQuOTc4IDMwOS4wMjIgMzc0Ljk3OCAzMzZWNDMyQzM3NC45NzggNDQ5LjY3MyAzNjAuNjUyIDQ2NCAzNDIuOTc5IDQ2NEgzMTdDMzEwLjM3MyA0NjQgMzA1IDQ2OS4zNzMgMzA1IDQ3NlY1MDBDMzA1IDUwNi42MjcgMzEwLjM3MyA1MTIgMzE3IDUxMkgzNDIuOTc5QzM4Ny4xNjEgNTEyIDQyMi45NzggNDc2LjE4MyA0MjIuOTc4IDQzMlYzMzZDNDIyLjk3OCAzMDUuMDcyIDQ0OC4wNTEgMjgwIDQ3OC45NzkgMjgwSDQ5MEM0OTYuNjI3IDI4MCA1MDIgMjc0LjYyOCA1MDIgMjY4VjI0NEM1MDIgMjM3LjM3MyA0OTYuNjI4IDIzMiA0OTAgMjMyTDQ3OC45NzkgMjMyQzQ0OC4wNTEgMjMyIDQyMi45NzggMjA2LjkyOCA0MjIuOTc4IDE3NlY4MEM0MjIuOTc4IDM1LjgxNzIgMzg3LjE2MSAwIDM0Mi45NzkgMEgzMTdDMzEwLjM3MyAwIDMwNSA1LjM3MjU4IDMwNSAxMlYzNloiIGZpbGw9IiNGRjk5MjIiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xMTcxXzQ0MSI+CjxyZWN0IHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo="},"displayName":"Code","typeVersion":2,"nodeCategories":[{"id":5,"name":"Development"},{"id":9,"name":"Core Nodes"}]},{"id":839,"icon":"fa:clock","name":"n8n-nodes-base.scheduleTrigger","codex":{"data":{"alias":["Time","Scheduler","Polling","Cron","Interval"],"resources":{"generic":[],"primaryDocumentation":[{"url":"https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.scheduletrigger/"}]},"categories":["Core Nodes"],"nodeVersion":"1.0","codexVersion":"1.0"}},"group":"[\"trigger\",\"schedule\"]","defaults":{"name":"Schedule Trigger","color":"#31C49F"},"iconData":{"icon":"clock","type":"icon"},"displayName":"Schedule Trigger","typeVersion":1,"nodeCategories":[{"id":9,"name":"Core Nodes"}]}],"categories":[{"id":32,"name":"Market Research"},{"id":49,"name":"AI Summarization"}],"image":[]}}