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 →
{
"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.
httpBearerAuthsmtptelegramApi
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
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
qualiopi. Uses airtable, telegram, emailSend, httpRequest. Webhook trigger; 51 nodes.
GNCA AI News Pipeline. Uses rssFeedRead, httpRequest, telegram, errorTrigger. Scheduled trigger; 29 nodes.
This workflow automates plant care reminders and records using Google Sheets, Telegram, and OpenWeather API.
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