AutomationFlowsSlack & Telegram › Automated AI & LLM Newsletter with Browserai and Email/telegram Delivery

Automated AI & LLM Newsletter with Browserai and Email/telegram Delivery

ByAlex Gurinovich @alexg on n8n.io

Tired of shelling out big bucks for newsletters?

Cron / scheduled trigger★★★★☆ complexity13 nodesHTTP RequestTelegramEmail Send
Slack & Telegram Trigger: Cron / scheduled Nodes: 13 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #7975 — 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 →

Download .json
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "a0db787b-16a5-493f-9027-7ece55fd8202",
      "name": "Get yesterday's date",
      "type": "n8n-nodes-base.code",
      "position": [
        192,
        16
      ],
      "parameters": {
        "jsCode": "return $input.all().map(item => {\n    const timestamp = item.json.timestamp;\n\n    // Create a Date object using the timestamp\n    const triggerDate = new Date(timestamp);\n\n    // Subtract one day to find yesterday's date\n    const yesterday = new Date(triggerDate);\n    yesterday.setDate(triggerDate.getDate() - 1);\n\n    // Format the date as 'dd-MONTH-yyyy'\n    const day = String(yesterday.getDate()).padStart(2, '0');\n    const monthNames = [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\n                        \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"];\n    const month = monthNames[yesterday.getMonth()];\n    const year = yesterday.getFullYear();\n\n    const formattedYesterday = `${day}-${month}-${year}`;\n\n    // Return the result as an object\n    return {\n        json: {\n            formattedYesterday: formattedYesterday\n        }\n    };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "78689092-da85-4a8f-8e40-1c19a95b9a0e",
      "name": "Create a new task",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        448,
        16
      ],
      "parameters": {
        "url": "https://browser.ai/api/v1/tasks",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"instructions\": [\n    {\n      \"action\": \"Please summarize me all the latest news, articles and updates regarding AI and LLMs up to {{ $json.formattedYesterday }}, including title, description and source\"\n    }\n  ],\n  \"geoLocation\": {\n    \"country\": \"us\"\n  },\n  \"project\": \"Project_1\",\n  \"type\": \"crawler_automation\",\n  \"inspect\": true\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "872f6181-8fc5-4ff6-bd48-39459054c392",
      "name": "Get task's metadata",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        720,
        16
      ],
      "parameters": {
        "url": "=https://browser.ai/api/v1/tasks/{{ $('Create a new task').item.json.executionId }}",
        "options": {},
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBearerAuth"
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "215cfa34-249f-434e-aebf-f2e1e8901dee",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -32,
        16
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "9455a451-6ecd-4892-bf8f-2af2afcaf11e",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        1616,
        0
      ],
      "parameters": {
        "text": "={{ $json.cleanedText }}",
        "chatId": "DESTINATION_CHAT_ID",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fc810f85-dccf-41fb-8b3a-f123c143f473",
      "name": "Check if finished",
      "type": "n8n-nodes-base.switch",
      "position": [
        1168,
        16
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Finalized",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "1b4446d7-395e-4cfb-891c-ddbae56d261a",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $('Get task\\'s metadata').item.json.status }}",
                    "rightValue": "=finalized"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra"
        }
      },
      "typeVersion": 3.2
    },
    {
      "id": "4cf9780e-4443-43d7-b997-5175c28673cc",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -80,
        -176
      ],
      "parameters": {
        "color": 3,
        "width": 400,
        "height": 320,
        "content": "## Start the workflow at 8AM each day and get yesterday's date"
      },
      "typeVersion": 1
    },
    {
      "id": "635b9388-5f25-4ddb-a70a-593d861b4cda",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        336,
        -176
      ],
      "parameters": {
        "color": 5,
        "width": 320,
        "height": 320,
        "content": "## Create a BrowserAI task\nThis lets you easily create a new task by using simple instructions. Make sure to include your API key for access.\n\nSee [more](https://docs.browser.ai/api-reference/endpoint/tasks) how"
      },
      "typeVersion": 1
    },
    {
      "id": "1ff8d5cf-59c5-49c6-99f4-6ed2c3fe157c",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        672,
        -176
      ],
      "parameters": {
        "color": 6,
        "width": 656,
        "height": 320,
        "content": "## Wait for the task to be completed by checking its status\nThis allows you to retrieve data and status information for a specific task using its session ID. Authorization with an API token is required, and the session ID must be provided in the path parameters.\n\nSee [more](https://docs.browser.ai/api-reference/endpoint/taskMetadata) how"
      },
      "typeVersion": 1
    },
    {
      "id": "df2251e5-a31a-488c-9f2e-48bafdbf1683",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1344,
        -176
      ],
      "parameters": {
        "width": 448,
        "height": 496,
        "content": "## Send it to your email/Telegram\nFill in your telegram chat ID, your email credentials to successfully send the newsletter."
      },
      "typeVersion": 1
    },
    {
      "id": "524cded4-1535-4b0d-95fd-4e0e889113c9",
      "name": "Wait for BrowserAI status change",
      "type": "n8n-nodes-base.wait",
      "position": [
        944,
        -64
      ],
      "parameters": {
        "amount": 30
      },
      "typeVersion": 1.1
    },
    {
      "id": "ad801781-736e-4b37-9716-b83caa5949ca",
      "name": "Clean output",
      "type": "n8n-nodes-base.code",
      "position": [
        1392,
        0
      ],
      "parameters": {
        "jsCode": "const inputText = $input.first().json.result\n\nconst cleanedText = inputText.replace(/\\*\\*Title:\\*\\*\\s*/g, '')\n    .replace(/\\*\\*Description:\\*\\*\\s*/g, '');\n\nreturn {\n    json: {\n        cleanedText: cleanedText\n    }\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "ef0259fb-26c9-4442-b8f5-9c540be030b7",
      "name": "Send email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1616,
        176
      ],
      "parameters": {
        "text": "={{ $json.cleanedText }}",
        "options": {
          "appendAttribution": false
        },
        "subject": "Your daily AI & LLM newsletter is here!",
        "toEmail": "user@example.com",
        "fromEmail": "user@example.com",
        "emailFormat": "text"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    }
  ],
  "connections": {
    "Clean output": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get yesterday's date",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if finished": {
      "main": [
        [
          {
            "node": "Clean output",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get task's metadata",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a new task": {
      "main": [
        [
          {
            "node": "Get task's metadata",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get task's metadata": {
      "main": [
        [
          {
            "node": "Wait for BrowserAI status change",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get yesterday's date": {
      "main": [
        [
          {
            "node": "Create a new task",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait for BrowserAI status change": {
      "main": [
        [
          {
            "node": "Check if finished",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Tired of shelling out big bucks for newsletters?

Source: https://n8n.io/workflows/7975/ — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

Recover missed opportunities automatically with this n8n automation template. The workflow connects with Calendly, identifies no-show meetings, and instantly sends personalized Telegram messages encou

HTTP Request, Telegram, Email Send
Slack & Telegram

qualiopi. Uses airtable, telegram, emailSend, httpRequest. Webhook trigger; 51 nodes.

Airtable, Telegram, Email Send +3
Slack & Telegram

GNCA AI News Pipeline. Uses rssFeedRead, httpRequest, telegram, errorTrigger. Scheduled trigger; 29 nodes.

RSS Feed Read, HTTP Request, Telegram +1
Slack & Telegram

This workflow automates plant care reminders and records using Google Sheets, Telegram, and OpenWeather API.

Google Sheets, HTTP Request, Telegram
Slack & Telegram

Apollo Data Enrichment Using Company Id to automatically finds contacts for companies listed in your Google Sheet, enriches each person with emails and phone numbers via Apollo’s API, and writes verif

Google Sheets, HTTP Request, Error Trigger +1