This workflow corresponds to n8n.io template #7556 — we link there as the canonical source.
This workflow follows the Emailsend → HTTP Request 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": "iGZE7vnpUkEvf9us",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Plex Newsletter template",
"tags": [],
"nodes": [
{
"id": "cab21c74-3d37-487f-a031-97a6a6fb09c5",
"name": "Note: Schedule",
"type": "n8n-nodes-base.stickyNote",
"position": [
-784,
240
],
"parameters": {
"content": "### \u23f0 Schedule Trigger\nRuns weekly (Friday 08:00). Adjust day/hour to your liking."
},
"typeVersion": 1
},
{
"id": "2f749618-c51f-4b21-ab24-29ede323205b",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-720,
416
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtDay": [
5
],
"triggerAtHour": 8
}
]
}
},
"typeVersion": 1.2
},
{
"id": "55ed3b79-9f4d-48d0-853a-c230531ec31a",
"name": "Note: Movies",
"type": "n8n-nodes-base.stickyNote",
"position": [
-528,
128
],
"parameters": {
"content": "### \ud83c\udfac Fetch Recent Movies (Tautulli)\nReplace placeholders in the URL: `YOUR_TAUTULLI_URL`, `YOUR_API_KEY`."
},
"typeVersion": 1
},
{
"id": "c2e3658a-27b1-4bbf-87a1-474e2233393b",
"name": "Fetch Recent Movies",
"type": "n8n-nodes-base.httpRequest",
"position": [
-464,
304
],
"parameters": {
"url": "https://YOUR_TAUTULLI_URL/api/v2?apikey=YOUR_TOKEN_HERE&cmd=get_recently_added&count=10&media_type=movie",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "8887eda3-8948-4285-8d33-9772ffbcbb08",
"name": "Note: TV Shows",
"type": "n8n-nodes-base.stickyNote",
"position": [
-528,
672
],
"parameters": {
"content": "### \ud83d\udcfa Fetch Recent TV Shows (Tautulli)\nReplace placeholders in the URL: `YOUR_TAUTULLI_URL`, `YOUR_API_KEY`."
},
"typeVersion": 1
},
{
"id": "34dd3ee8-a8da-44b4-9434-c10110ed985b",
"name": "Fetch Recent TV Shows",
"type": "n8n-nodes-base.httpRequest",
"position": [
-464,
496
],
"parameters": {
"url": "https://YOUR_TAUTULLI_URL/api/v2?apikey=YOUR_TOKEN_HERE&cmd=get_recently_added&count=10&media_type=show",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "d5a85fe0-4252-4954-b24f-55387553e5cf",
"name": "Note: Merge",
"type": "n8n-nodes-base.stickyNote",
"position": [
-224,
208
],
"parameters": {
"content": "### \ud83d\udd17 Merge\nJust combines Movies (input 1) and TV (input 2) before building the email."
},
"typeVersion": 1
},
{
"id": "1115cde1-64e4-4827-8f47-c0f4d2c79fbc",
"name": "Combine Movie & TV Data",
"type": "n8n-nodes-base.merge",
"position": [
-160,
400
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "11ad0211-6ca4-4583-929c-3ab22edb53b8",
"name": "Note: HTML",
"type": "n8n-nodes-base.stickyNote",
"position": [
48,
208
],
"parameters": {
"content": "### \ud83d\udcf0 Build HTML Newsletter\nEdit the code and set:\n- `YOUR_TAUTULLI_URL`\n- `YOUR_PLEX_TOKEN`\n- `YOUR_PLEX_SERVER_ID`\nEverything else is template-safe."
},
"typeVersion": 1
},
{
"id": "a4713613-3047-4522-b771-ee91e793ad19",
"name": "Generate HTML Newsletter",
"type": "n8n-nodes-base.code",
"position": [
128,
400
],
"parameters": {
"jsCode": "// === HELPER FUNCTIONS (email-safe) ===\nfunction formatDuration(ms){ if(!ms||ms<=0) return ''; const m=Math.floor(ms/60000),h=Math.floor(m/60),r=m%60; return h>0?`${h}h ${r}m`:`${r}m`; }\nfunction pill(text){ if(!text) return ''; return `<span style=\\\"background:#2a4a6a;color:#ffffff;border:1px solid #4a6a8a;border-radius:999px;padding:4px 10px;font-size:12px;line-height:1;display:inline-block;margin:0 6px 6px 0;\\\">${String(text).toUpperCase()}</span>`; }\nfunction sectionHeader(label, emoji){ return `\\n <tr>\\n <td align=\\\"center\\\" style=\\\"padding:4px 24px 14px 24px;\\\">\\n <table role=\\\"presentation\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" style=\\\"background:#0f385b;border:1px solid #2a4a6a;border-radius:999px;\\\">\\n <tr>\\n <td style=\\\"padding:10px 18px;\\\">\\n <span style=\\\"font:600 18px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#ffffff;\\\">\\n ${emoji} ${label}\\n </span>\\n </td>\\n </tr>\\n </table>\\n </td>\\n </tr>`; }\n\n// === PLACEHOLDERS (replace these) ===\nconst tautulliUrl = 'https://YOUR_TAUTULLI_URL';\nconst plexApiToken = 'YOUR_PLEX_TOKEN';\nconst plexServerId = 'YOUR_PLEX_SERVER_ID';\n\n// === DATA (be tolerant to slightly different shapes) ===\nconst allRecentlyAdded = $input.all().flatMap(i => i.json?.response?.data?.recently_added || i.json?.data?.recently_added || []);\nconst movies = allRecentlyAdded.filter(i => i.media_type === 'movie');\nconst tvItems = allRecentlyAdded.filter(i => ['episode','show','season'].includes(i.media_type));\n\n// === RENDERERS ===\nfunction movieRow(item){\n const title=item.title||'Untitled';\n const year=item.year?` (${item.year})`:'';\n const rating=item.audience_rating?`\u2b50 ${item.audience_rating}`:'';\n const dur=item.duration?` \ud83d\udd52 ${formatDuration(item.duration)}`:'';\n const genres=Array.isArray(item.genres)?item.genres:[];\n const contentRating=item.content_rating?pill(item.content_rating):'';\n const summary=item.summary||'No description provided.';\n const directors=Array.isArray(item.directors)?item.directors:[];\n const actors=Array.isArray(item.actors)?item.actors:[];\n const plexLink=`https://app.plex.tv/desktop/#!/server/${plexServerId}/details?key=YOUR_TOKEN_HERE\n const thumbUrl=item.thumb?`${tautulliUrl}/pms_image_proxy?img=${encodeURIComponent(item.thumb)}&X-Plex-Token=${plexApiToken}`:'https://placehold.co/120x180/333333/ffffff?text=NO+IMAGE';\n return `\\n <tr>\\n <td style=\\\"padding:0 24px 22px 24px;\\\">\\n <table role=\\\"presentation\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\" style=\\\"background:#0f385b;border:1px solid #2a4a6a;border-radius:12px;\\\">\\n <tr>\\n <td class=\\\"stack t-center\\\" width=\\\"120\\\" valign=\\\"top\\\" style=\\\"padding:18px;\\\">\\n <a href=\\\"${plexLink}\\\">\\n <img class=\\\"img-resp\\\" src=\\\"${thumbUrl}\\\" alt=\\\"${title}\\\" width=\\\"120\\\" style=\\\"display:block;width:120px;height:auto;border-radius:10px;\\\">\\n </a>\\n </td>\\n <td class=\\\"stack\\\" valign=\\\"top\\\" style=\\\"padding:18px 18px 18px 0;\\\">\\n <h4 style=\\\"margin:0 0 8px 0;font:700 18px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;\\\">\\n <a href=\\\"${plexLink}\\\" style=\\\"color:#ffffff;text-decoration:none;\\\">${title}${year}</a>\\n </h4>\\n <p style=\\\"margin:0 0 10px 0;font:13px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#cccccc;\\\">${rating}${dur}</p>\\n <div style=\\\"margin:0 0 12px 0;\\\">${contentRating}${genres.map(g=>pill(g)).join('')}</div>\\n <p style=\\\"margin:0 0 12px 0;font:14px/1.6 -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#dddddd;\\\">${summary}</p>\\n <p style=\\\"margin:0 0 14px 0;font:12px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#bbbbbb;border-top:1px solid #2a4a6a;padding-top:8px;\\\">\\n ${directors.length?`<strong style=\\\\\\\"color:#cccccc;\\\\\\\">Director:</strong> ${directors.join(', ')}<br>`:''}\\n ${actors.length?`<strong style=\\\\\\\"color:#cccccc;\\\\\\\">Starring:</strong> ${actors.slice(0,3).join(', ')}`:''}\\n </p>\\n <table role=\\\"presentation\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr><td bgcolor=\\\"#e5a00d\\\" style=\\\"border-radius:10px;\\\"><a href=\\\"${plexLink}\\\" style=\\\"display:inline-block;padding:12px 18px;font:700 14px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#ffffff;text-decoration:none;border-radius:10px;\\\">Watch on Plex</a></td></tr></table>\\n </td>\\n </tr>\\n </table>\\n </td>\\n </tr>`;\n}\n\nfunction tvRow(item){\n let displayTitle=item.title||'Untitled', displaySubtitle='', thumb=item.thumb, key=item.rating_key;\n if(item.media_type==='episode'){\n displayTitle=item.grandparent_title||displayTitle;\n const s=item.parent_media_index?String(item.parent_media_index).padStart(2,'0'):'';\n const e=item.media_index?String(item.media_index).padStart(2,'0'):'';\n displaySubtitle=`S${s} E${e}${item.title?': '+item.title:''}`;\n thumb=item.grandparent_thumb||item.parent_thumb||item.thumb;\n key=item.grandparent_rating_key||key;\n } else if(item.media_type==='season'){\n displayTitle=item.parent_title||displayTitle;\n displaySubtitle=item.title||'';\n thumb=item.parent_thumb||item.thumb;\n key=item.parent_rating_key||key;\n }\n const year=item.year?` (${item.year})`:'';\n const rating=item.audience_rating?`\u2b50 ${item.audience_rating}`:'';\n const dur=(item.media_type==='episode'&&item.duration)?` \ud83d\udd52 ${formatDuration(item.duration)}`:'';\n const genres=Array.isArray(item.genres)?item.genres:[];\n const contentRating=item.content_rating?pill(item.content_rating):'';\n const summary=item.summary||'No description provided.';\n const plexLink=`https://app.plex.tv/desktop/#!/server/${plexServerId}/details?key=YOUR_TOKEN_HERE\n const thumbUrl=thumb?`${tautulliUrl}/pms_image_proxy?img=${encodeURIComponent(thumb)}&X-Plex-Token=${plexApiToken}`:'https://placehold.co/120x180/333333/ffffff?text=NO+IMAGE';\n return `\\n <tr>\\n <td style=\\\"padding:0 24px 22px 24px;\\\">\\n <table role=\\\"presentation\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\" style=\\\"background:#0f385b;border:1px solid #2a4a6a;border-radius:12px;\\\">\\n <tr>\\n <td class=\\\"stack t-center\\\" width=\\\"120\\\" valign=\\\"top\\\" style=\\\"padding:18px;\\\">\\n <a href=\\\"${plexLink}\\\">\\n <img class=\\\"img-resp\\\" src=\\\"${thumbUrl}\\\" alt=\\\"${displayTitle}\\\" width=\\\"120\\\" style=\\\"display:block;width:120px;height:auto;border-radius:10px;\\\">\\n </a>\\n </td>\\n <td class=\\\"stack\\\" valign=\\\"top\\\" style=\\\"padding:18px 18px 18px 0;\\\">\\n <h4 style=\\\"margin:0 0 6px 0;font:700 18px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;\\\">\\n <a href=\\\"${plexLink}\\\" style=\\\"color:#ffffff;text-decoration:none;\\\">${displayTitle}${year}</a>\\n </h4>\\n ${displaySubtitle?`<p style=\\\\\\\"margin:0 0 8px 0;font:13px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#cccccc;\\\\\\\">${displaySubtitle}</p>`:''}\\n <p style=\\\"margin:0 0 10px 0;font:13px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#cccccc;\\\">${rating}${dur}</p>\\n <div style=\\\"margin:0 0 12px 0;\\\">${contentRating}${genres.map(g=>pill(g)).join('')}</div>\\n <p style=\\\"margin:0 0 12px 0;font:14px/1.6 -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#dddddd;\\\">${summary}</p>\\n <table role=\\\"presentation\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\"><tr><td bgcolor=\\\"#e5a00d\\\" style=\\\"border-radius:10px;\\\"><a href=\\\"${plexLink}\\\" style=\\\"display:inline-block;padding:12px 18px;font:700 14px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#ffffff;text-decoration:none;border-radius:10px;\\\">Watch on Plex</a></td></tr></table>\\n </td>\\n </tr>\\n </table>\\n </td>\\n </tr>`;\n}\n\n// === LIGHT CSS ===\nconst css = `@media only screen and (max-width:600px){ .w-650{width:100% !important} .stack{display:block !important;width:100% !important} .img-resp{width:55% !important;height:auto !important;max-width:200px !important;margin:0 auto !important} .t-center{text-align:center !important} }`;\n\n// === BUILD HTML ===\nlet html = `<!doctype html>\\n<html lang=\\\"en\\\">\\n<head>\\n<meta http-equiv=\\\"x-ua-compatible\\\" content=\\\"ie=edge\\\">\\n<meta charset=\\\"utf-8\\\">\\n<meta name=\\\"viewport\\\" content=\\\"width=device-width,initial-scale=1\\\">\\n<title>Plex Newsletter</title>\\n<style type=\\\"text/css\\\">${css}</style>\\n</head>\\n<body style=\\\"margin:0;padding:0;background:#001f3f;\\\">\\n <center style=\\\"width:100%;background:#001f3f;\\\">\\n <table role=\\\"presentation\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\">\\n <tr>\\n <td align=\\\"center\\\" style=\\\"padding:20px 10px;\\\">\\n <table role=\\\"presentation\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"650\\\" class=\\\"w-650\\\" style=\\\"width:650px;max-width:650px;\\\">\\n <tr><td style=\\\"padding:0;\\\"><img src=\\\"https://placehold.co/1200x300/001f3f/ffffff?text=Plex+Newsletter\\\" alt=\\\"Plex Weekly Newsletter\\\" width=\\\"650\\\" style=\\\"display:block;width:100%;height:auto;border-radius:12px;\\\"></td></tr>\\n <tr><td style=\\\"height:20px;font-size:1px;line-height:1px;\\\"> </td></tr>\\n <tr><td align=\\\"center\\\" style=\\\"padding:18px;border:1px solid #2a4a6a;background:#0d2c4a;border-radius:12px;\\\"><p style=\\\"margin:0;font:16px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#ffffff;\\\">Best Movies and Shows in one place!</p></td></tr>\\n <tr><td style=\\\"height:12px;font-size:1px;line-height:1px;\\\"> </td></tr>\\n <tr><td align=\\\"center\\\"><p style=\\\"margin:0;font:13px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#a9a9a9;\\\">Last Updated: ${new Date().toLocaleDateString('en-GB')}</p></td></tr>\\n <tr><td style=\\\"height:26px;font-size:1px;line-height:1px;\\\"> </td></tr>\\n <tr><td>\\n <table role=\\\"presentation\\\" cellpadding=\\\"0\\\" cellspacing=\\\"0\\\" border=\\\"0\\\" width=\\\"100%\\\" style=\\\"background:#0d2c4a;border-radius:15px;border:1px solid #2a4a6a;\\\">\\n <tr><td style=\\\"padding:22px 24px 6px 24px;\\\"><h2 style=\\\"margin:0 0 6px 0;text-align:center;font:700 22px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#ffffff;\\\">\ud83c\udd95 New This Week</h2><p style=\\\"margin:0 0 8px 0;text-align:center;font:14px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#a9a9a9;\\\">Freshly added Movies & TV from your Plex.</p></td></tr>\\n ${movies.length?sectionHeader('New Movies','\ud83c\udf9e\ufe0f'):''}\\n ${movies.map(movieRow).join('')}\\n ${tvItems.length?sectionHeader('New TV Shows','\ud83d\udcfa'):''}\\n ${tvItems.map(tvRow).join('')}\\n ${!movies.length && !tvItems.length ? `<tr><td style=\\\\\\\"padding:0 24px 24px 24px;\\\\\\\"><p style=\\\\\\\"margin:0;text-align:center;font:14px/-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;color:#dddddd;\\\\\\\">No new items were added recently. Check back soon!</p></td></tr>`:``}\\n <tr><td style=\\\"height:10px;font-size:1px;line-height:1px;\\\"> </td></tr>\\n </table>\\n </td></tr>\\n <tr><td style=\\\"height:28px;font-size:1px;line-height:1px;\\\"> </td></tr>\\n </table>\\n </td>\\n </tr>\\n </table>\\n </center>\\n</body>\\n</html>`;\n\nreturn [{ json: { htmlBody: html } }];"
},
"typeVersion": 2
},
{
"id": "01812e45-e2ec-4aaa-a0ef-21cb2cd0e796",
"name": "Note: Recipients",
"type": "n8n-nodes-base.stickyNote",
"position": [
320,
208
],
"parameters": {
"content": "### \ud83d\udce7 Prepare Recipients\nReplace the example emails below with your list."
},
"typeVersion": 1
},
{
"id": "76b727c6-111f-40bd-8e54-a485353e365f",
"name": "Prepare Emails for Recipients",
"type": "n8n-nodes-base.code",
"position": [
384,
400
],
"parameters": {
"jsCode": "const recipients = [\\n 'user@example.com',\\n 'user@example.com'\\n];\\n\\nconst htmlBody = $input.item.json.htmlBody;\\nconst items = [];\\nfor (const email of recipients) {\\n items.push({ json: { htmlBody, recipientEmail: email } });\\n}\\nreturn items;"
},
"typeVersion": 2
},
{
"id": "6f583cb4-bcf5-4fac-8caa-0a099411ca00",
"name": "Note: Send",
"type": "n8n-nodes-base.stickyNote",
"position": [
592,
208
],
"parameters": {
"content": "### \ud83d\udce4 Send via SMTP\nSet `fromEmail` and attach your SMTP credentials in this node."
},
"typeVersion": 1
},
{
"id": "569fcce4-8129-4665-8efc-784c486eb45e",
"name": "Send Newsletter Emails",
"type": "n8n-nodes-base.emailSend",
"position": [
672,
400
],
"parameters": {
"html": "={{ $json.htmlBody }}",
"options": {
"appendAttribution": false
},
"subject": "New Plex Content",
"toEmail": "={{ $json.recipientEmail }}",
"fromEmail": "Your Newsletter <user@example.com>"
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "671519fc-9662-42fd-baa2-13204d68c3e7",
"name": "Note: Finish",
"type": "n8n-nodes-base.stickyNote",
"position": [
864,
208
],
"parameters": {
"content": "### \u2705 Finish\nTiny summary of how many emails were sent."
},
"typeVersion": 1
},
{
"id": "dd329307-eb1a-489a-bc80-6767d55b42b2",
"name": "Finish",
"type": "n8n-nodes-base.code",
"position": [
944,
400
],
"parameters": {
"jsCode": "const sent = $input.all().length;\\nreturn [{ json: { status: 'OK', sentCount: sent, note: 'Newsletter sent successfully' } }];"
},
"typeVersion": 2
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "1a3e382c-6ca8-40af-8205-a88f262f897a",
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "Fetch Recent Movies",
"type": "main",
"index": 0
}
]
]
},
"Fetch Recent Movies": {
"main": [
[
{
"node": "Combine Movie & TV Data",
"type": "main",
"index": 0
}
]
]
},
"Fetch Recent TV Shows": {
"main": [
[
{
"node": "Combine Movie & TV Data",
"type": "main",
"index": 1
}
]
]
},
"Send Newsletter Emails": {
"main": [
[
{
"node": "Finish",
"type": "main",
"index": 0
}
]
]
},
"Combine Movie & TV Data": {
"main": [
[
{
"node": "Generate HTML Newsletter",
"type": "main",
"index": 0
}
]
]
},
"Generate HTML Newsletter": {
"main": [
[
{
"node": "Prepare Emails for Recipients",
"type": "main",
"index": 0
}
]
]
},
"Prepare Emails for Recipients": {
"main": [
[
{
"node": "Send Newsletter Emails",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
smtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
📬 Plex Recently Added → Responsive Email Newsletter (Tautulli Alternative)
Source: https://n8n.io/workflows/7556/ — 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.
Birthday Automation - Production (Fixed). Uses stopAndError, httpRequest, emailSend, bannerbear. Scheduled trigger; 86 nodes.
This workflow is an improvement of this workflow by Greg Brzezinka.
N8N-Self-Updater. Uses ssh, emailSend, httpRequest. Scheduled trigger; 27 nodes.
> An automated n8n workflow originally built for DigitalOcean-based n8n deployments, but fully compatible with any VPS or cloud hosting (e.g., AWS, Google Cloud, Hetzner, Linode, etc.) where n8n ru
What if you could spot a major sales problem—or a winning campaign—the very next morning, instead of weeks later? Imagine receiving a beautiful, data-rich alert directly in your inbox the moment your