← All Newsletter & ESP Workflows
BillionVerifyBrevo

Generate daily tech, manga & movies newsletter from RSS feeds with Brevo

Pull contacts, verify each address with BillionVerify, and continue to Brevo — only deliverable addresses get through.

Why verify before the send

Sending to invalid, risky, catch-all, or disposable addresses spikes your bounce rate and erodes sender reputation. A verification gate before the Brevo step removes that risk automatically — only deliverable addresses continue, the rest are flagged.

The workflow

BillionVerify — verification sits right before the send.

+21
n8n steps
+2
n8n steps

Node by node

  1. 1
    Schedule TriggerTrigger· n8n

    Starts the workflow — on a schedule, a webhook, or manually while you test.

  2. 2
    Category RssSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  3. 3
    Split Out2Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  4. 4
    Rss databaseSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  5. 5
    SwitchLogic· n8n

    Routes items based on the workflow logic.

  6. 6
    Loop Over Items3Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  7. 7
    Loop Over Items4Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  8. 8
    Loop Over Items5Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  9. 9
    Code in Python (Beta)Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  10. 10
    RSS Read1Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  11. 11
    Code in Python (Beta)1Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  12. 12
    RSS Read2Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  13. 13
    Code in Python (Beta)2Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  14. 14
    RSS Read3Source· n8n

    Provides or transforms the contact data flowing through the workflow.

  15. 15
    MangaSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  16. 16
    MovieSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  17. 17
    Jeu videoSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  18. 18
    MergeSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  19. 19
    AggregateSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  20. 20
    HTML TemplateSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  21. 21
    Mail CampaignSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  22. 22
    Verify Email (BillionVerify)Verify· billionverify

    The BillionVerify node verifies the address — status (valid / invalid / risky / catch-all / role / disposable), is_deliverable, and a confidence score — before anything is sent.

  23. 23
    IF deliverableLogic· n8n

    Branches on the verification result: only deliverable addresses continue to the send; the rest are skipped and flagged.

  24. 24
    Send a MailSend· n8n

    Sends only to verified, deliverable addresses. Swap in your own provider node if you send elsewhere.

Workflow JSON

Copy or download this workflow, then import it in n8n (Workflows → Import from File / Paste). Install the BillionVerify community node first, then add your API key credential.

verify-emails-in-brevo.json
{
  "name": "Generate daily tech, manga & movies newsletter from RSS feeds with Brevo + BillionVerify",
  "nodes": [
    {
      "id": "42ba72ef-afc0-4789-9a74-4d1a1ac0e424",
      "name": "Sticky Note - Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1696,
        896
      ],
      "parameters": {
        "width": 696,
        "height": 612,
        "content": "# 📬 Personal Daily Tech/Manga/Movies Newsletter\n\n**What it does:**\nAutomatically curates and emails a personalized daily newsletter with the latest tech news, manga, movies tailored to your interests.\n\n**How it works:**\n\n1. Triggers daily at 12 PM\n2. Fetches RSS feeds from your favorite tech, manga, movies sources\n3. Make HTML template for mail based on your interests\n4. Sends a beautifully formatted newsletter to your inbox\n\n**Set up steps**\n\n1. Update the RSS feed URLs inside the Set nodes to match your preferred sources.\n2. Replace the email address in the Send Email node with your own.\n3. Modify the execution time in the Cron Trigger node if you want the newsletter to be sent at a different time.\n4. Enable the workflow to start receiving your personalized daily newsletter automatically.\n\n**Customize:**\n- Change RSS sources in the \"Set\" nodes\n- Update your email address in \"Send email\" node\n- Adjust schedule time in trigger node"
      },
      "typeVersion": 1
    },
    {
      "id": "a01df542-f863-4eee-adbe-6cbb148f539c",
      "name": "Split Out2",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -336,
        1792
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "cat"
      },
      "typeVersion": 1
    },
    {
      "id": "f5771190-5f35-45ef-934d-9759d8bbf38a",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -784,
        1792
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 5,
              "triggerAtMinute": 30
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7cd18a12-6656-4a38-99cc-4e7ccd4cb6c3",
      "name": "RSS Read1",
      "type": "n8n-nodes-base.rssFeedRead",
      "onError": "continueErrorOutput",
      "position": [
        752,
        1568
      ],
      "parameters": {
        "url": "={{ $json[\"Lien RSS\"] }}",
        "options": {}
      },
      "typeVersion": 1.2,
      "alwaysOutputData": true
    },
    {
      "id": "40b5b6b5-c1e4-411d-a29d-e976ec9b86f9",
      "name": "Loop Over Items3",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        464,
        1552
      ],
      "parameters": {
        "options": {},
        "batchSize": 2
      },
      "typeVersion": 3
    },
    {
      "id": "509f8c1d-5f27-44df-b43c-4a09d4623a72",
      "name": "Rss database",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -96,
        1792
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "={{ $json.cat }}",
              "lookupColumn": "Catégorie"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1anl-6-nbOfrsXJc7fhAAZ0yIONrqkg7qB7MXrqK37pw/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1anl-6-nbOfrsXJc7fhAAZ0yIONrqkg7qB7MXrqK37pw",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1anl-6-nbOfrsXJc7fhAAZ0yIONrqkg7qB7MXrqK37pw/edit?usp=drivesdk",
          "cachedResultName": "Rss Database 2"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "credential-id",
          "name": "googleSheetsOAuth2Api Credential"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "e792e4b5-3b49-478e-822c-f959a8fda9f1",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        96,
        1776
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "73f7daf4-8a2d-4ce1-9099-1595e0eb3c23",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json[\"Catégorie\"] }}",
                    "rightValue": "=Manga"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "4d7598e1-9e5e-413e-ae6d-1c17c61254a7",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json[\"Catégorie\"] }}",
                    "rightValue": "Cinéma"
                  }
                ]
              }
            },
            {
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "b559253b-235e-4994-8814-69031f9510e3",
                    "operator": {
                      "name": "filter.operator.equals",
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json[\"Catégorie\"] }}",
                    "rightValue": "Jeux Vidéo"
                  }
                ]
              }
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3.3
    },
    {
      "id": "07e8483f-a58f-44ba-8ead-25a85fa74370",
      "name": "Code in Python (Beta)",
      "type": "n8n-nodes-base.code",
      "position": [
        992,
        1536
      ],
      "parameters": {
        "language": "python",
        "pythonCode": "# Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor item in _input.all():\n  #item.json.myNewField = 1\n  pass\nreturn _input.all()[:3]"
      },
      "typeVersion": 2
    },
    {
      "id": "20848a57-917f-40e4-9d1e-a7bcfb92f966",
      "name": "RSS Read2",
      "type": "n8n-nodes-base.rssFeedRead",
      "onError": "continueErrorOutput",
      "position": [
        736,
        1808
      ],
      "parameters": {
        "url": "={{ $json[\"Lien RSS\"] }}",
        "options": {}
      },
      "typeVersion": 1.2,
      "alwaysOutputData": true
    },
    {
      "id": "8d5ab523-ffb2-4355-89c6-db103f2ba799",
      "name": "Loop Over Items4",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        448,
        1792
      ],
      "parameters": {
        "options": {},
        "batchSize": 2
      },
      "typeVersion": 3
    },
    {
      "id": "194568dc-aaef-4099-bb1f-b2934f89e600",
      "name": "Code in Python (Beta)1",
      "type": "n8n-nodes-base.code",
      "position": [
        992,
        1776
      ],
      "parameters": {
        "language": "python",
        "pythonCode": "# Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor item in _input.all():\n  #item.json.myNewField = 1\n  pass\nreturn _input.all()[:3]"
      },
      "typeVersion": 2
    },
    {
      "id": "9dc31c66-06de-4b15-b4b6-d6ed15cab225",
      "name": "RSS Read3",
      "type": "n8n-nodes-base.rssFeedRead",
      "onError": "continueErrorOutput",
      "position": [
        784,
        2080
      ],
      "parameters": {
        "url": "={{ $json[\"Lien RSS\"] }}",
        "options": {}
      },
      "typeVersion": 1.2,
      "alwaysOutputData": true
    },
    {
      "id": "c48c1fc6-7296-4fcf-bf0a-e04feac8f6a9",
      "name": "Loop Over Items5",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        448,
        2064
      ],
      "parameters": {
        "options": {},
        "batchSize": 2
      },
      "typeVersion": 3
    },
    {
      "id": "f238d60e-a702-4f81-a8e4-30a7e7bea01d",
      "name": "Code in Python (Beta)2",
      "type": "n8n-nodes-base.code",
      "position": [
        992,
        2048
      ],
      "parameters": {
        "language": "python",
        "pythonCode": "# Loop over input items and add a new field called 'myNewField' to the JSON of each one\nfor item in _input.all():\n  #item.json.myNewField = 1\n  pass\nreturn _input.all()[:3]"
      },
      "typeVersion": 2
    },
    {
      "id": "6315fdbc-9ede-4ab0-adb5-bc0a6152f768",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        2224,
        1760
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "HTML"
      },
      "typeVersion": 1
    },
    {
      "id": "2e3f8bf2-4ccf-4eab-bfa2-0d77174acafc",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        1920,
        1744
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3.2
    },
    {
      "id": "77c4f730-c84e-4121-a63f-31c8efd22667",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -880,
        1712
      ],
      "parameters": {
        "color": 3,
        "width": 256,
        "height": 240,
        "content": "## Daily trigger\n"
      },
      "typeVersion": 1
    },
    {
      "id": "593f18ec-5bf8-495d-9646-b35e1d9fd6d5",
      "name": "Sticky Note - Processing1",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        352,
        1472
      ],
      "parameters": {
        "color": 6,
        "width": 820,
        "height": 812,
        "content": "## 🔄 RSS Feed Processing\nSplit, loop through feeds in batches, and fetch content"
      },
      "typeVersion": 1
    },
    {
      "id": "7d6dfe67-658c-4a8c-a7a6-4417a874df40",
      "name": "Sticky Note - Sources1",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        -592,
        1680
      ],
      "parameters": {
        "color": 4,
        "width": 824,
        "height": 280,
        "content": "## 📰 RSS Feed Sources\nDefine which RSS feeds to monitor for tech news and tools"
      },
      "typeVersion": 1
    },
    {
      "id": "eaf42c4f-b5d1-40bc-9505-c3d9b7f90b8b",
      "name": "Sticky Note - Combine1",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        1264,
        1472
      ],
      "parameters": {
        "color": 2,
        "width": 356,
        "height": 744,
        "content": "## Set HTML part \n#Add information in HTML code part"
      },
      "typeVersion": 1
    },
    {
      "id": "6b2c7f0a-111f-4b85-9de0-3d044d6c63cc",
      "name": "Sticky Note - Combine2",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        1808,
        1632
      ],
      "parameters": {
        "color": 5,
        "width": 644,
        "height": 312,
        "content": "## 📦 Combine & Convert\nMerge all feeds and convert to CSV for AI"
      },
      "typeVersion": 1
    },
    {
      "id": "ac0a0d8a-021f-463d-a522-939675299898",
      "name": "Sticky Note - Email1",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        2560,
        1616
      ],
      "parameters": {
        "color": 7,
        "width": 696,
        "height": 472,
        "content": "## 📧 Set HTML FileNewsletter Delivery\n\nFormat and send the personalized newsletter.\n\n**Note:**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "18fc3e68-0e5a-42f3-bd40-069666aa7204",
      "name": "Send a Mail",
      "type": "n8n-nodes-base.gmail",
      "onError": "continueRegularOutput",
      "position": [
        3024,
        1760
      ],
      "webhookId": "6aebeaec-a503-4029-8b5d-853abac74b54",
      "parameters": {
        "sendTo": "user@example.com",
        "message": "={{ $json.html }}",
        "options": {},
        "subject": "Newsletter"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "credential-id",
          "name": "gmailOAuth2 Credential"
        }
      },
      "typeVersion": 2.1,
      "alwaysOutputData": true
    },
    {
      "id": "4909e681-f87e-47bd-8cf9-f7e629620fec",
      "name": "Mail Campaign",
      "type": "n8n-nodes-base.sendInBlue",
      "position": [
        3024,
        1936
      ],
      "parameters": {
        "sender": "user@example.com",
        "subject": "Newsletter",
        "sendHTML": true,
        "htmlContent": "={{ $json.html }}",
        "receipients": "user@example.com",
        "requestOptions": {},
        "additionalFields": {}
      },
      "credentials": {
        "sendInBlueApi": {
          "id": "credential-id",
          "name": "sendInBlueApi Credential"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "3e0bc1ab-3b99-4250-8246-3f6024ddeaaf",
      "name": "HTML Template",
      "type": "n8n-nodes-base.html",
      "position": [
        2608,
        1760
      ],
      "parameters": {
        "html": "<!DOCTYPE html>\n<html lang=\"fr\">\n<head>\n  <meta charset=\"UTF-8\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n  <title>Newsletter Unthynk</title>\n  <style>\n    :root {\n      --primary: #2b2b2b;\n      --secondary: #6f6f6f;\n      --accent: #d4a574;\n      --dark: #1e1e1e;\n      --light: #f4f4f2;\n      --border: #e8e8e6;\n      --text: #333;\n      --muted: #888;\n    }\n\n    * { box-sizing: border-box; margin: 0; padding: 0; }\n\n    body {\n      font-family: 'Segoe UI', 'Trebuchet MS', sans-serif;\n      background: linear-gradient(135deg, #f8f7f5 0%, #f1f1ef 100%);\n      padding: 20px;\n      color: var(--text);\n      line-height: 1.7;\n      min-height: 100vh;\n    }\n\n    .container {\n      max-width: 900px;\n      margin: 0 auto;\n      background: #fff;\n      border-radius: 16px;\n      overflow: hidden;\n      box-shadow: 0 12px 40px rgba(0,0,0,.1);\n    }\n\n    /* ===== HEADER ===== */\n    .header {\n      background: linear-gradient(135deg, var(--dark) 0%, var(--primary) 100%);\n      padding: 60px 32px 45px;\n      text-align: center;\n      color: #fff;\n      border-bottom: 3px solid var(--accent);\n    }\n\n    .header h1 {\n      font-family: 'Georgia', serif;\n      font-size: 2.8rem;\n      font-weight: 700;\n      letter-spacing: 3px;\n      margin-bottom: 8px;\n      text-transform: uppercase;\n      text-shadow: 2px 2px 4px rgba(0,0,0,.2);\n    }\n\n    .header p {\n      opacity: 0.92;\n      font-size: 1rem;\n      font-weight: 300;\n      letter-spacing: 1px;\n    }\n\n    /* ===== TABS ===== */\n    .tabs {\n      display: flex;\n      background: var(--light);\n      border-bottom: 2px solid var(--border);\n      flex-wrap: wrap;\n      gap: 0;\n    }\n\n    .tab {\n      flex: 1;\n      min-width: 120px;\n      padding: 18px 16px;\n      background: none;\n      border: none;\n      font-size: 1rem;\n      font-weight: 500;\n      cursor: pointer;\n      color: var(--muted);\n      transition: all .3s cubic-bezier(.4, 0, .2, 1);\n      position: relative;\n      text-transform: uppercase;\n      letter-spacing: 1px;\n    }\n\n    .tab:hover {\n      background: rgba(43, 43, 43, .05);\n      color: var(--primary);\n    }\n\n    .tab.active {\n      background: #fff;\n      color: var(--primary);\n      font-weight: 700;\n    }\n\n    .tab.active::after {\n      content: '';\n      position: absolute;\n      bottom: -2px;\n      left: 0;\n      right: 0;\n      height: 3px;\n      background: linear-gradient(90deg, var(--primary), var(--accent));\n    }\n\n    /* ===== CONTENT ===== */\n    .content {\n      padding: 40px 32px;\n      min-height: 500px;\n    }\n\n    .tab-content {\n      display: none;\n      animation: fadeIn .5s ease;\n    }\n\n    .tab-content.active {\n      display: block;\n    }\n\n    @keyframes fadeIn {\n      from {\n        opacity: 0;\n        transform: translateY(10px);\n      }\n      to {\n        opacity: 1;\n        transform: translateY(0);\n      }\n    }\n\n    /* ===== ARTICLE CARD ===== */\n    .article {\n      background: #fafaf8;\n      border: 1px solid var(--border);\n      border-radius: 12px;\n      padding: 28px;\n      margin-bottom: 24px;\n      transition: all .35s cubic-bezier(.4, 0, .2, 1);\n      border-left: 4px solid var(--accent);\n    }\n\n    .article:hover {\n      box-shadow: 0 14px 32px rgba(0,0,0,.12);\n      transform: translateY(-4px);\n      border-left-color: var(--primary);\n    }\n\n    .article h2 {\n      font-size: 1.5rem;\n      font-weight: 700;\n      margin-bottom: 10px;\n      color: var(--primary);\n      line-height: 1.4;\n    }\n\n    .article .author {\n      font-size: .9rem;\n      color: var(--secondary);\n      font-style: italic;\n      margin-bottom: 14px;\n      display: flex;\n      align-items: center;\n      gap: 6px;\n    }\n\n    .article .author::before {\n      content: '✎';\n      color: var(--accent);\n    }\n\n    .article .summary {\n      color: #666;\n      margin-bottom: 18px;\n      font-size: .95rem;\n      line-height: 1.8;\n    }\n\n    .meta {\n      display: flex;\n      justify-content: space-between;\n      align-items: center;\n      border-top: 1px solid var(--border);\n      padding-top: 16px;\n      margin-top: 16px;\n      flex-wrap: wrap;\n      gap: 12px;\n    }\n\n    .source {\n      font-size: .85rem;\n      color: var(--muted);\n      font-weight: 500;\n    }\n\n    .read {\n      background: linear-gradient(135deg, var(--primary), var(--secondary));\n      color: #fff;\n      padding: 10px 22px;\n      border-radius: 24px;\n      font-size: .9rem;\n      font-weight: 600;\n      text-decoration: none;\n      transition: all .3s ease;\n      border: 2px solid transparent;\n      cursor: pointer;\n      display: inline-block;\n    }\n\n    .read:hover {\n      background: linear-gradient(135deg, var(--secondary), var(--primary));\n      transform: translateX(2px);\n      box-shadow: 0 6px 16px rgba(43, 43, 43, .25);\n    }\n\n    /* ===== EMPTY STATE ===== */\n    .empty-state {\n      text-align: center;\n      padding: 60px 40px;\n      color: var(--muted);\n    }\n\n    .empty-state h3 {\n      font-size: 1.3rem;\n      margin-bottom: 10px;\n      color: var(--secondary);\n    }\n\n    .empty-state p {\n      font-size: .95rem;\n      opacity: .8;\n    }\n\n    /* ===== FOOTER ===== */\n    .footer {\n      background: linear-gradient(135deg, var(--dark) 0%, var(--primary) 100%);\n      color: #ccc;\n      text-align: center;\n      padding: 28px;\n      font-size: .85rem;\n      border-top: 3px solid var(--accent);\n    }\n\n    .footer a {\n      color: var(--accent);\n      text-decoration: none;\n      font-weight: 600;\n      transition: opacity .3s ease;\n    }\n\n    .footer a:hover {\n      opacity: 0.8;\n      text-decoration: underline;\n    }\n  /*  .article {\n  background: #ffffff;\n  border-radius: 14px;\n  padding: 1.5rem;\n  margin-bottom: 1.5rem;\n  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.06);\n  transition: transform 0.25s ease, box-shadow 0.25s ease;\n}\n\n.article:hover {\n  transform: translateY(-4px);\n  box-shadow: 0 14px 40px rgba(0, 0, 0, 0.1);\n}\n\n.article-title {\n  font-size: 1.25rem;\n  font-weight: 600;\n  color: #1f2933;\n  margin-bottom: 0.75rem;\n  line-height: 1.4;\n}\n\n.article-summary {\n  color: #4b5563;\n  font-size: 0.95rem;\n  line-height: 1.6;\n  margin-bottom: 1.2rem;\n}\n\n.article-footer {\n  display: flex;\n  justify-content: flex-end;\n}\n\n.article-read {\n  text-decoration: none;\n  font-weight: 500;\n  font-size: 0.9rem;\n  color: #2563eb;\n  padding: 0.45rem 0.9rem;\n  border-radius: 8px;\n  transition: background 0.2s ease, color 0.2s ease;\n}\n\n.article-read:hover {\n  background: rgba(37, 99, 235, 0.1);\n  color: #1e40af;\n}\n*/\n\n    /* ===== RESPONSIVE ===== */\n    @media (max-width: 640px) {\n      .header h1 {\n        font-size: 2rem;\n        letter-spacing: 2px;\n      }\n\n      .content {\n        padding: 24px 18px;\n      }\n\n      .article {\n        padding: 18px;\n      }\n\n      .tab {\n        padding: 14px 10px;\n        font-size: .85rem;\n        min-width: 100px;\n      }\n\n      .tabs {\n        flex-wrap: wrap;\n      }\n\n      .meta {\n        flex-direction: column;\n        align-items: flex-start;\n      }\n    }\n    \n  </style>\n</head>\n<body>\n\n<div class=\"container\">\n\n  <header class=\"header\">\n    <h1>NEWSLETTER</h1>\n    <p>Veille thématique par Unthynk</p>\n  </header>\n\n  <nav class=\"tabs\">\n    <button class=\"tab active\" onclick=\"openTab(event, 'news')\">📺 Anime</button>\n    <button class=\"tab\" onclick=\"openTab(event, 'game')\">🎮 Game</button>\n    <button class=\"tab\" onclick=\"openTab(event, 'school')\">🎬 Movies</button>\n    <button class=\"tab\" onclick=\"openTab(event, 'science')\">🔬 Science</button>\n  </nav>\n\n  <main class=\"content\">\n\n    <!-- ANIME SECTION -->\n    <section id=\"news\" class=\"tab-content active\">\n      {{ $json.HTML[0].HTML.html1 }}\n    </section>\n\n    <!-- GAME SECTION -->\n    <section id=\"game\" class=\"tab-content\">\n      {{ $json.HTML[2].HTML.html3 }}\n    </section>\n\n    <!-- MOVIES SECTION -->\n    <section id=\"school\" class=\"tab-content\">\n {{ $json.HTML[1].HTML.html2 }}\n    </section>\n\n    <!-- SCIENCE SECTION -->\n    <section id=\"science\" class=\"tab-content\">\n      <article class=\"article\">\n        <h2>Découvertes Scientifiques Récentes</h2>\n        <p class=\"author\">Par Auteur</p>\n        <p class=\"summary\">Les avancées majeures en science et recherche. De la physique quantique à la biologie, découvrez comment la science façonne notre futur.</p>\n        <div class=\"meta\">\n          <span class=\"source\">Source: Nature Science</span>\n          <a href=\"#\" class=\"read\">Lire l'article</a>\n        </div>\n      </article>\n\n      <article class=\"article\">\n        <h2>Innovations Technologiques</h2>\n        <p class=\"author\">Par Auteur</p>\n        <p class=\"summary\">Explorez les innovations technologiques qui révolutionnent le monde. Intelligence artificielle, biotechnologie, énergie verte et bien d'autres domaines clés.</p>\n        <div class=\"meta\">\n          <span class=\"source\">Source: MIT Technology Review</span>\n          <a href=\"#\" class=\"read\">Lire l'article</a>\n        </div>\n      </article>\n    </section>\n\n  </main>\n\n  <footer class=\"footer\">\n    © 2025 Unthynk · <a href=\"#\">Se désabonner</a>\n  </footer>\n</div>\n\n<script>\n  function openTab(evt, id) {\n    const contents = document.querySelectorAll('.tab-content');\n    const tabs = document.querySelectorAll('.tab');\n\n    contents.forEach(content => content.classList.remove('active'));\n    tabs.forEach(tab => tab.classList.remove('active'));\n\n    document.getElementById(id).classList.add('active');\n    evt.currentTarget.classList.add('active');\n  }\n</script>\n\n</body>\n</html>"
      },
      "typeVersion": 1.2
    },
    {
      "id": "cbf2b31e-b460-49cc-aa3f-8ab155863811",
      "name": "Category Rss",
      "type": "n8n-nodes-base.set",
      "position": [
        -560,
        1792
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "{ \"cat\":[\n  \"Actualités Générales\",\n \"Technologie\",\n  \"Science\",\n  \"Économie & Finance\",\n  \"Sports\",\n   \"Culture & Divertissement\",\n  \"Santé\",\n   \"Environnement\",\n   \"Politique\",\n  \"Éducation\",\n  \"Jeux Vidéo\",\n  \"Cinéma\",\n \"Manga\"\n  ]\n}\n"
      },
      "typeVersion": 3.4
    },
    {
      "id": "4cfc76d1-9bf7-446c-8a1b-a34322f63870",
      "name": "Jeu video",
      "type": "n8n-nodes-base.code",
      "position": [
        1360,
        2048
      ],
      "parameters": {
        "language": "python",
        "pythonCode": "m = \"\"\n\nfor item in _input.all():\n  t = item.json.title\n  l = item.json.link\n  c = item.json.content\n  a = item.json.creator\n  \n  m += f\"\"\"<article class=\"article\">\n  <header class=\"article-header\">\n    <h2 class=\"article-title\">{t}</h2>\n  </header>\n\n  <p class=\"summary\">{c}</p>\n\n  <footer class=\"article-footer\">\n    <a href=\"{l}\" class=\"article-read\">\n      Lire l’article →\n    </a>\n  </footer>\n</article>\n\"\"\"\n\nreturn [{\"HTML\":{'html3': m}}]"
      },
      "typeVersion": 2
    },
    {
      "id": "04401689-6544-4fea-ba0e-fbcf4a52fc09",
      "name": "Movie",
      "type": "n8n-nodes-base.code",
      "position": [
        1360,
        1776
      ],
      "parameters": {
        "language": "python",
        "pythonCode": "m = \"\"\n\nfor item in _input.all():\n  t = item.json.title\n  l = item.json.link\n  c = item.json.content\n  a = item.json.creator\n  \n  m += f\"\"\"<article class=\"article\">\n  <header class=\"article-header\">\n    <h2 class=\"article-title\">{t}</h2>\n  </header>\n\n  <p class=\"summary\">{c}</p>\n\n  <footer class=\"article-footer\">\n    <a href=\"{l}\" class=\"article-read\">\n      Lire l’article →\n    </a>\n  </footer>\n</article>\n\"\"\"\n\nreturn [{\"HTML\":{'html2': m}}]"
      },
      "typeVersion": 2
    },
    {
      "id": "4ec09358-01bb-4488-80fe-e2624351c956",
      "name": "Manga",
      "type": "n8n-nodes-base.code",
      "position": [
        1376,
        1536
      ],
      "parameters": {
        "language": "python",
        "pythonCode": "m = \"\"\n\nfor item in _input.all():\n  t = item.json.title\n  l = item.json.link\n  c = item.json.content\n  \n  m += f\"\"\"<article class=\"article\">\n  <header class=\"article-header\">\n    <h2 class=\"article-title\">{t}</h2>\n  </header>\n\n  <p class=\"summary\">{c}</p>\n\n  <footer class=\"article-footer\">\n    <a href=\"{l}\" class=\"article-read\">\n      Lire l’article →\n    </a>\n  </footer>\n</article>\n\"\"\"\n\n  \n\nreturn [{\"HTML\":{'html1': m}}]"
      },
      "typeVersion": 2
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $json.email || $json.Email }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        2664,
        1760
      ],
      "name": "Verify Email (BillionVerify)",
      "credentials": {
        "billionVerifyApi": {
          "id": "",
          "name": "BillionVerify account"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "is-deliverable",
              "leftValue": "={{ $json.is_deliverable }}",
              "rightValue": "",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              }
            }
          ]
        }
      },
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        2844,
        1760
      ],
      "name": "IF deliverable"
    }
  ],
  "connections": {
    "Manga": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Movie": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Switch": {
      "main": [
        [
          {
            "node": "Loop Over Items3",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items4",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "HTML Template",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Jeu video": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "RSS Read1": {
      "main": [
        [
          {
            "node": "Loop Over Items3",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "RSS Read2": {
      "main": [
        [
          {
            "node": "Loop Over Items4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "RSS Read3": {
      "main": [
        [
          {
            "node": "Loop Over Items5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out2": {
      "main": [
        [
          {
            "node": "Rss database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send a Mail": {
      "main": [
        []
      ]
    },
    "Category Rss": {
      "main": [
        [
          {
            "node": "Split Out2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rss database": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML Template": {
      "main": [
        [
          {
            "node": "Mail Campaign",
            "type": "main",
            "index": 0
          },
          {
            "node": "Verify Email (BillionVerify)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items3": {
      "main": [
        [
          {
            "node": "Code in Python (Beta)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "RSS Read1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items4": {
      "main": [
        [
          {
            "node": "Code in Python (Beta)1",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "RSS Read2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items5": {
      "main": [
        [
          {
            "node": "Code in Python (Beta)2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "RSS Read3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Category Rss",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in Python (Beta)": {
      "main": [
        [
          {
            "node": "Manga",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in Python (Beta)1": {
      "main": [
        [
          {
            "node": "Movie",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in Python (Beta)2": {
      "main": [
        [
          {
            "node": "Jeu video",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Email (BillionVerify)": {
      "main": [
        [
          {
            "node": "IF deliverable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable": {
      "main": [
        [
          {
            "node": "Send a Mail",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}

When to use this

  • Cleaning a list before a Brevo send or sync.
  • Protecting Brevo deliverability and sender reputation.
  • Keeping bounce rates low so your sending is never throttled.

FAQ

Why verify before sending in Brevo?

Verifying first keeps your bounce rate low, which protects your sender reputation and your results.

How do I import this workflow?

Download the JSON, then in n8n go to Workflows → Import from File (or paste it). Install the BillionVerify community node and add your API key credential.

What happens to risky or catch-all addresses?

They are routed to the false branch and excluded from the send. You decide whether to retry, review, or drop them.

Add verification to your workflow

Create a free account, grab your API key, and stop bounces before they happen.

Get started free