← All Productivity Workflows
BillionVerifyMicrosoft Outlook

Automatic Microsoft Outlook attachment storage to OneDrive with Excel logging

Pull contacts, verify each address with BillionVerify, and continue to Microsoft Outlook — 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 Microsoft Outlook step removes that risk automatically — only deliverable addresses continue, the rest are flagged.

The workflow

BillionVerify — verification sits right before the send.

Node by node

  1. 1
    On Mail ReceivedTrigger· n8n

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

  2. 2
    Get Message IDSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  3. 3
    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.

  4. 4
    IF deliverableLogic· n8n

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

  5. 5
    Get AttachmentsSend· n8n

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

  6. 6
    Loop Over ItemsSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  7. 7
    Notify UserSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  8. 8
    Get Folder IDSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  9. 9
    Verify Email (BillionVerify) 2Verify· 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.

  10. 10
    IF deliverable 2Logic· n8n

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

  11. 11
    Download AttachmentSend· n8n

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

  12. 12
    Upload to OneDriveSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  13. 13
    Set FilenameSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  14. 14
    Append to Excel LogSource· n8n

    Provides or transforms the contact data flowing through the workflow.

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-microsoft-outlook.json
{
  "name": "Automatic Microsoft Outlook attachment storage to OneDrive with Excel logging + BillionVerify",
  "nodes": [
    {
      "id": "2",
      "name": "Get Attachments",
      "type": "n8n-nodes-base.microsoftOutlook",
      "position": [
        432,
        0
      ],
      "parameters": {
        "resource": "messageAttachment",
        "messageId": "={{ $json.messageId }}",
        "operation": "getAll",
        "returnAll": true,
        "additionalFields": {}
      },
      "credentials": {
        "microsoftOutlookOAuth2Api": {
          "id": "0J1PXL4u3KlXxSdm",
          "name": "Microsoft Outlook account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4",
      "name": "Upload to OneDrive",
      "type": "n8n-nodes-base.microsoftOneDrive",
      "position": [
        1328,
        16
      ],
      "parameters": {
        "fileName": "={{ $json.name }}",
        "parentId": "={{ $('Get Folder ID').item.json.id }}",
        "binaryData": true
      },
      "credentials": {
        "microsoftOneDriveOAuth2Api": {
          "id": "e6XB76qoACE7B11l",
          "name": "Microsoft Drive account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5",
      "name": "Append to Excel Log",
      "type": "n8n-nodes-base.microsoftExcel",
      "position": [
        1712,
        16
      ],
      "parameters": {
        "table": "{D43EA299-40EE-4A34-87F6-9E927433D04F}",
        "resource": "table",
        "workbook": "01P4ZWQG4WSZOW2LY7FFD2DORNAFD6GUYR",
        "worksheet": "{00000000-0001-0000-0000-000000000000}",
        "additionalFields": {}
      },
      "credentials": {
        "microsoftExcelOAuth2Api": {
          "id": "LrnHjIHURfzDACey",
          "name": "Microsoft Excel account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "2b17a075-4c2d-4988-ab30-6b8da0e89d84",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        640,
        0
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "5fd3ff1e-1a3c-4456-a39d-b0009095f58a",
      "name": "Get Message ID",
      "type": "n8n-nodes-base.set",
      "position": [
        240,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "456d9aff-42d5-4d62-8b42-8b4c50aedbd9",
              "name": "messageId",
              "type": "string",
              "value": "={{$json[\"id\"]}}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "cda46c7a-97d3-495a-8450-464ce59033a0",
      "name": "On Mail Received",
      "type": "n8n-nodes-base.microsoftOutlookTrigger",
      "position": [
        32,
        0
      ],
      "parameters": {
        "output": "fields",
        "filters": {},
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        }
      },
      "credentials": {
        "microsoftOutlookOAuth2Api": {
          "id": "J11T8f8mMdP3LOZj",
          "name": "Microsoft Outlook account 3"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7",
      "name": "Notify User",
      "type": "n8n-nodes-base.microsoftTeams",
      "position": [
        928,
        -192
      ],
      "parameters": {
        "chatId": "19:1a6a7e2d-7f6b-40f2-b982-30a1af96e5bc_cf28171e-fcfd-47e4-a1d6-79460b0b3ca0@unq.gbl.spaces",
        "message": "Attachment has been uploaded",
        "options": {},
        "resource": "chatMessage"
      },
      "credentials": {
        "microsoftTeamsOAuth2Api": {
          "id": "EIvRUfEMfZZoE9QG",
          "name": "Microsoft Teams account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5a5f0f1e-11cc-48c9-a88c-1f9ac705d69a",
      "name": "Get Folder ID",
      "type": "n8n-nodes-base.microsoftOneDrive",
      "position": [
        928,
        16
      ],
      "parameters": {
        "query": "Testn8n",
        "resource": "folder",
        "operation": "search"
      },
      "credentials": {
        "microsoftOneDriveOAuth2Api": {
          "id": "e6XB76qoACE7B11l",
          "name": "Microsoft Drive account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "898ecd52-4b26-4963-af73-7a3140881335",
      "name": "Download Attachment",
      "type": "n8n-nodes-base.microsoftOutlook",
      "position": [
        1120,
        16
      ],
      "webhookId": "f5153b20-4fbf-4221-b712-dd989d3d43a4",
      "parameters": {
        "resource": "messageAttachment",
        "messageId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Get Message ID').item.json.messageId }}"
        },
        "operation": "download",
        "attachmentId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Loop Over Items').item.json.id }}"
        }
      },
      "credentials": {
        "microsoftOutlookOAuth2Api": {
          "id": "J11T8f8mMdP3LOZj",
          "name": "Microsoft Outlook account 3"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "36a5d459-5b6d-48eb-9a06-2019fc0521b7",
      "name": "Set Filename",
      "type": "n8n-nodes-base.set",
      "position": [
        1520,
        16
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "83ef74a8-15df-4bf7-8f36-bd9d4d6c1bb1",
              "name": "Filename",
              "type": "string",
              "value": "={{ $json.name }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "f0f1d810-6045-425e-9716-8ce8f555f701",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1184,
        256
      ],
      "parameters": {
        "color": 4,
        "width": 448,
        "height": 176,
        "content": "## 💾 File Processing\nEach attachment is handled one by one:\n- “Download Attachment” fetches it from Outlook.  \n- “Get Folder ID” finds the correct OneDrive folder.  \n- “Upload to OneDrive” saves the file there.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "600f99de-c6c7-461d-8ee3-01a17bfd6b9e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -720,
        -560
      ],
      "parameters": {
        "width": 960,
        "height": 480,
        "content": "# 📥 Save Email Attachments to OneDrive & Log in Excel\n\nThis workflow watches your Outlook inbox and saves every file attachment into a OneDrive folder, then adds the filename to an Excel log. It helps finance or operations teams store invoices automatically and keep records up to date.\n\n**How it works**\n1. Outlook trigger starts when a new email arrives.\n2. Attachments are fetched and looped through.\n3. Each file is downloaded, uploaded to OneDrive, and logged in Excel.\n4. A Teams message confirms success (optional).\n\n**Setup**\n- Connect Outlook, OneDrive, Excel, and optionally Teams.\n- Adjust the folder name in “Get Folder ID”.\n- Make sure your Excel table has a `Filename` column.\n- Activate the workflow — new attachments will be processed automatically.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "847765b5-01c9-42f0-b808-764be7959f20",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        224
      ],
      "parameters": {
        "color": 5,
        "width": 448,
        "height": 144,
        "content": "## 📧 Email Trigger\nStarts the flow when a new email is received in Outlook.  \nThe “Get Message ID” node extracts the message ID, and  \n“Get Attachments” lists all files attached to that message.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "dccb657c-d4bc-4bf6-89fe-165e888b5a88",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1248,
        -256
      ],
      "parameters": {
        "color": 3,
        "width": 416,
        "height": 144,
        "content": "## 📊 Logging & Alerts\n- “Set Filename” prepares the Excel row.  \n- “Append to Excel Log” records the file name.  \n- “Notify User” (optional) sends a Teams message.\n"
      },
      "typeVersion": 1
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $json.email || $json.Email }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        72,
        0
      ],
      "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": [
        252,
        0
      ],
      "name": "IF deliverable"
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $json.email || $json.Email }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        760,
        16
      ],
      "name": "Verify Email (BillionVerify) 2",
      "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": [
        940,
        16
      ],
      "name": "IF deliverable 2"
    }
  ],
  "connections": {
    "Set Filename": {
      "main": [
        [
          {
            "node": "Append to Excel Log",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Folder ID": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify) 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Message ID": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Attachments": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Notify User",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Get Folder ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On Mail Received": {
      "main": [
        [
          {
            "node": "Get Message ID",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload to OneDrive": {
      "main": [
        [
          {
            "node": "Set Filename",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append to Excel Log": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Attachment": {
      "main": [
        [
          {
            "node": "Upload to OneDrive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Email (BillionVerify)": {
      "main": [
        [
          {
            "node": "IF deliverable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable": {
      "main": [
        [
          {
            "node": "Get Attachments",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Verify Email (BillionVerify) 2": {
      "main": [
        [
          {
            "node": "IF deliverable 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable 2": {
      "main": [
        [
          {
            "node": "Download Attachment",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  },
  "settings": {
    "executionOrder": "v1",
    "businessContext": {
      "data_flow": "Linear",
      "complexity": "Low",
      "department": "Finance/Accounting",
      "workflow_type": "Automation",
      "key_components": [
        "Email Processing"
      ],
      "integration_points": []
    }
  }
}

When to use this

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

FAQ

Why verify before sending in Microsoft Outlook?

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