← All AI Workflows
BillionVerifyDeepl

Translate documents to multiple languages with Google Drive and DeepL

Pull contacts, verify each address with BillionVerify, and continue to DeepL — 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 DeepL 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
    Google Drive TriggerTrigger· n8n

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

  2. 2
    Error HandlerSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  3. 3
    Merge ConfigurationSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  4. 4
    Configuration (Edit Here)Source· n8n

    Provides or transforms the contact data flowing through the workflow.

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

  6. 6
    Detect File FormatLogic· n8n

    Routes items based on the workflow logic.

  7. 7
    IF deliverable 2Logic· n8n

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

  8. 8
    Download PDFSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  9. 9
    Download DOCXSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  10. 10
    Download TXTSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  11. 11
    Download MarkdownSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  12. 12
    Send Error NotificationSend· n8n

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

  13. 13
    Extract Text from PDFSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  14. 14
    Extract Text from DOCXSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  15. 15
    Read TXT FileSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  16. 16
    Read Markdown FileSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  17. 17
    Format Text DataSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  18. 18
    Split by LanguageSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  19. 19
    Translate a languageSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  20. 20
    Generate FilenameSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  21. 21
    Code in JavaScriptSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  22. 22
    Create Translated FileSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  23. 23
    Save to Google DriveSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  24. 24
    Check if Notion EnabledLogic· n8n

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

  25. 25
    Record in NotionSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  26. 26
    Merge ResultsSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  27. 27
    Aggregate TranslationsSource· n8n

    Provides or transforms the contact data flowing through the workflow.

  28. 28
    Prepare NotificationSource· n8n

    Provides or transforms the contact data flowing through the workflow.

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

  30. 30
    IF deliverableLogic· n8n

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

  31. 31
    Send Gmail NotificationSend· 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-deepl.json
{
  "name": "Translate documents to multiple languages with Google Drive and DeepL + BillionVerify",
  "nodes": [
    {
      "id": "83cdf376-b378-4a69-926d-29790f0c5053",
      "name": "Google Drive Trigger",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        384,
        240
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_SOURCE_FOLDER_ID_HERE"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5a1fd22d-b09a-4bfc-8260-557ea3ccf7c1",
      "name": "Configuration (Edit Here)",
      "type": "n8n-nodes-base.set",
      "notes": "翻訳先言語、フォルダID、通知先メールアドレスをここで設定",
      "position": [
        608,
        320
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "source_folder_id",
              "name": "sourceFolderId",
              "type": "string",
              "value": "YOUR_SOURCE_FOLDER_ID_HERE"
            },
            {
              "id": "destination_folder_id",
              "name": "destinationFolderId",
              "type": "string",
              "value": "YOUR_DESTINATION_FOLDER_ID_HERE"
            },
            {
              "id": "target_languages",
              "name": "targetLanguages",
              "type": "array",
              "value": "=[\"EN\", \"ZH\", \"KO\", \"ES\", \"FR\", \"DE\"]"
            },
            {
              "id": "notification_email",
              "name": "notificationEmail",
              "type": "string",
              "value": "user@example.com"
            },
            {
              "id": "enable_notion",
              "name": "enableNotion",
              "type": "boolean",
              "value": "=false"
            },
            {
              "id": "notion_database_id",
              "name": "notionDatabaseId",
              "type": "string",
              "value": "YOUR_NOTION_DATABASE_ID_HERE"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "ae46edbf-2890-46e1-b771-96e3b869b95e",
      "name": "Detect File Format",
      "type": "n8n-nodes-base.switch",
      "position": [
        1040,
        224
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "PDF",
              "conditions": {
                "options": {
                  "version": 1,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "pdf_check",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.mimeType }}",
                    "rightValue": "application/pdf"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "DOCX",
              "conditions": {
                "options": {
                  "version": 1,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "or",
                "conditions": [
                  {
                    "id": "docx_check",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.mimeType }}",
                    "rightValue": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
                  },
                  {
                    "id": "gdoc_check",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.mimeType }}",
                    "rightValue": "application/vnd.google-apps.document"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "TXT",
              "conditions": {
                "options": {
                  "version": 1,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "txt_check",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.mimeType }}",
                    "rightValue": "text/plain"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Markdown",
              "conditions": {
                "options": {
                  "version": 1,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "or",
                "conditions": [
                  {
                    "id": "md_check",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.mimeType }}",
                    "rightValue": "text/markdown"
                  },
                  {
                    "id": "md_ext_check",
                    "operator": {
                      "type": "string",
                      "operation": "endsWith"
                    },
                    "leftValue": "={{ $json.name }}",
                    "rightValue": ".md"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "2c694bdd-9d2c-4812-998f-ec9f02840a03",
      "name": "Download PDF",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1280,
        96
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {
          "googleFileConversion": {
            "conversion": {}
          }
        },
        "operation": "download"
      },
      "typeVersion": 3
    },
    {
      "id": "bc2dbb61-1fa5-47f9-a31c-64271a3c2566",
      "name": "Download DOCX",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1280,
        240
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {
          "googleFileConversion": {
            "conversion": {}
          }
        },
        "operation": "download"
      },
      "typeVersion": 3
    },
    {
      "id": "4a72a576-533f-4ebb-bacf-1bb320e3fb37",
      "name": "Download TXT",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1280,
        384
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "typeVersion": 3
    },
    {
      "id": "9aee4e13-7167-4ec3-a58e-2cb4335304a1",
      "name": "Download Markdown",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        1280,
        544
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "typeVersion": 3
    },
    {
      "id": "acce4e6b-5e61-47e2-bce0-9ab7e3ada23e",
      "name": "Extract Text from PDF",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        1504,
        96
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "b53b7314-5093-48ef-abf8-5dcf95671b03",
      "name": "Extract Text from DOCX",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        1504,
        240
      ],
      "parameters": {
        "options": {},
        "operation": "text",
        "destinationKey": "text"
      },
      "typeVersion": 1
    },
    {
      "id": "a5a5fb92-b2d0-4e54-90d8-ea3b8774e9ea",
      "name": "Format Text Data",
      "type": "n8n-nodes-base.set",
      "position": [
        1728,
        240
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "extracted_text",
              "name": "extractedText",
              "type": "string",
              "value": "YOUR_FOLDER_ID_HERE"
            },
            {
              "id": "original_filename",
              "name": "originalFilename",
              "type": "string",
              "value": "YOUR_FOLDER_ID_HERE"
            },
            {
              "id": "file_extension",
              "name": "fileExtension",
              "type": "string",
              "value": "YOUR_FOLDER_ID_HERE"
            },
            {
              "id": "da59a266-c54d-4465-8861-e0a9a0653c58",
              "name": "targetLanguages",
              "type": "array",
              "value": "YOUR_FOLDER_ID_HERE"
            },
            {
              "id": "a89d12ba-2143-483a-95b2-3478e4b9aa98",
              "name": "destinationFolderId",
              "type": "string",
              "value": "YOUR_FOLDER_ID_HERE"
            },
            {
              "id": "d3252026-1b16-4ebd-a3d0-8c69bc4c8cbb",
              "name": "notificationEmail",
              "type": "string",
              "value": "YOUR_FOLDER_ID_HERE"
            },
            {
              "id": "e75b9594-07de-456d-84ca-305b051a0574",
              "name": "enableNotion",
              "type": "boolean",
              "value": "YOUR_FOLDER_ID_HERE"
            },
            {
              "id": "a79fefa4-8682-4919-b3ed-b2d4c07fdf4c",
              "name": "notionDatabaseId",
              "type": "string",
              "value": "YOUR_FOLDER_ID_HERE"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.3
    },
    {
      "id": "558fedb8-9449-45cc-a33c-d55801b585e2",
      "name": "Split by Language",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1936,
        240
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "=targetLanguages"
      },
      "typeVersion": 1,
      "alwaysOutputData": false
    },
    {
      "id": "dae4d4f7-9246-4797-bb73-52aea5aef0aa",
      "name": "Generate Filename",
      "type": "n8n-nodes-base.set",
      "position": [
        2384,
        224
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "translated_text",
              "name": "translatedText",
              "type": "string",
              "value": "={{ $json.text }}"
            },
            {
              "id": "language_code",
              "name": "languageCode",
              "type": "string",
              "value": "YOUR_FOLDER_ID_HERE"
            },
            {
              "id": "new_filename",
              "name": "newFilename",
              "type": "string",
              "value": "YOUR_FOLDER_ID_HERE"
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "2b2331bc-4f3f-4cee-9fa0-0a5c33ace38f",
      "name": "Create Translated File",
      "type": "n8n-nodes-base.writeBinaryFile",
      "position": [
        2816,
        224
      ],
      "parameters": {
        "options": {},
        "fileName": "={{ $json.newFilename }}",
        "dataPropertyName": "=data"
      },
      "typeVersion": 1
    },
    {
      "id": "4d893749-ce0a-404c-ad21-aef61c3183dd",
      "name": "Save to Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        3040,
        224
      ],
      "parameters": {
        "name": "={{ $json.newFilename }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_FOLDER_ID_HERE"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_FOLDER_ID_HERE",
          "cachedResultName": "翻訳済み"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "de276bf8-db41-4ee9-89a8-12a7a986fdd4",
      "name": "Check if Notion Enabled",
      "type": "n8n-nodes-base.if",
      "position": [
        3264,
        224
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 1,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "notion_enabled",
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.enableNotion }}",
              "rightValue": true
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "c1498c5a-fd1a-4d61-a5e5-5433cc88dabc",
      "name": "Record in Notion",
      "type": "n8n-nodes-base.notion",
      "position": [
        3488,
        96
      ],
      "parameters": {
        "title": "={{ $json.originalFilename }}",
        "options": {},
        "resource": "databasePage",
        "databaseId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_FOLDER_ID_HERE"
        },
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "=={{ $json.originalFilename }}"
            },
            {
              "key": "=={{ $json.languageCode }}"
            },
            {
              "key": "=={{ $now.toISO() }}"
            },
            {
              "key": "=={{ $json.webViewLink }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "ae061349-3976-44bb-81f8-a7ae53b283f9",
      "name": "Merge Results",
      "type": "n8n-nodes-base.merge",
      "position": [
        3744,
        224
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combinationMode": "mergeByPosition"
      },
      "typeVersion": 2.1
    },
    {
      "id": "bce4bc57-8a20-4b53-b470-c8fe0df34d33",
      "name": "Aggregate Translations",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        3936,
        224
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "a4898c8f-8fdc-4374-b8e4-eb0e1870bdb1",
      "name": "Prepare Notification",
      "type": "n8n-nodes-base.set",
      "position": [
        4128,
        224
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "summary",
              "name": "summary",
              "type": "object",
              "value": {
                "timestamp": "={{ $now.toISO() }}",
                "originalFile": "={{ $('テキスト整形').item.json.originalFilename }}",
                "totalTranslations": "={{ $('設定(ここを編集)').item.json.targetLanguages.length }}",
                "translatedLanguages": "={{ $('設定(ここを編集)').item.json.targetLanguages }}"
              }
            }
          ]
        }
      },
      "typeVersion": 3.3
    },
    {
      "id": "afb71078-f6ce-487d-b096-11bafbbfa533",
      "name": "Send Gmail Notification",
      "type": "n8n-nodes-base.gmail",
      "position": [
        4320,
        224
      ],
      "webhookId": "42da0974-1b42-48b9-be7c-eef321c1a0b4",
      "parameters": {
        "sendTo": "=変更後: {{ $('設定(ここを編集)').item.json.notificationEmail }}",
        "message": "=<h2>🎉 翻訳が完了しました!</h2>\n\n<p><strong>元ファイル:</strong> {{ $('通知内容準備').item.json.summary.originalFile }}</p>\n<p><strong>翻訳した言語:</strong> {{ $('通知内容準備').item.json.summary.translatedLanguages.join(', ') }}</p>\n<p><strong>合計翻訳数:</strong> {{ $('通知内容準備').item.json.summary.totalTranslations }}件</p>\n<p><strong>翻訳日時:</strong> {{ $('通知内容準備').item.json.summary.timestamp }}</p>\n\n<p>翻訳済みファイルはGoogle Driveの指定フォルダに保存されています。</p>",
        "options": {},
        "subject": "翻訳完了: {{ $json.summary.originalFile }}"
      },
      "typeVersion": 2.1
    },
    {
      "id": "982fd89f-4ad5-4f95-b8fd-4e3bb3834067",
      "name": "Error Handler",
      "type": "n8n-nodes-base.code",
      "disabled": true,
      "position": [
        2384,
        384
      ],
      "parameters": {
        "jsCode": "// エラーハンドリングとログ記録\nconst errorInfo = {\n  timestamp: new Date().toISOString(),\n  error: $input.item.json.error || 'Unknown error',\n  fileName: $('Google Drive Trigger').item.json.name,\n  step: $node.name\n};\n\nconsole.error('Translation workflow error:', errorInfo);\n\nreturn { json: errorInfo };"
      },
      "typeVersion": 2
    },
    {
      "id": "347d3afa-5afc-47be-a5f1-d2e157016368",
      "name": "Send Error Notification",
      "type": "n8n-nodes-base.gmail",
      "disabled": true,
      "position": [
        2608,
        384
      ],
      "webhookId": "7f553df2-d150-42df-b406-58e914f97ea2",
      "parameters": {
        "sendTo": "={{ $('設定(ここを編集)').item.json.notificationEmail }}",
        "message": "翻訳処理中にエラーが発生しました。\n\nファイル: {{ $json.fileName }}\nエラー内容: {{ $json.error }}\n発生時刻: {{ $json.timestamp }}",
        "options": {},
        "subject": "❌ 翻訳エラー発生",
        "emailType": "text"
      },
      "typeVersion": 2.1
    },
    {
      "id": "c90b4bcf-596d-46e5-b699-8c674240d07b",
      "name": "Translate a language",
      "type": "n8n-nodes-base.deepL",
      "position": [
        2160,
        240
      ],
      "parameters": {
        "text": "={{ $('テキスト整形').item.json.extractedText }}",
        "translateTo": "={{ $json.targetLanguages }}",
        "additionalFields": {}
      },
      "typeVersion": 1
    },
    {
      "id": "71df147c-e32b-482d-b566-d571b278fb2f",
      "name": "Merge Configuration",
      "type": "n8n-nodes-base.merge",
      "position": [
        816,
        256
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combinationMode": "mergeByPosition"
      },
      "typeVersion": 2.1
    },
    {
      "id": "d5caf454-8f37-4f92-a475-7f5739c9c138",
      "name": "Read Markdown File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        1504,
        576
      ],
      "parameters": {
        "options": {},
        "operation": "text",
        "destinationKey": "text"
      },
      "typeVersion": 1
    },
    {
      "id": "d5c8bef8-7b69-4e79-beae-a7e5184e1069",
      "name": "Read TXT File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        1504,
        416
      ],
      "parameters": {
        "options": {},
        "operation": "text",
        "destinationKey": "text"
      },
      "typeVersion": 1
    },
    {
      "id": "6b2e9567-aabb-4935-b712-ed697da1ec2b",
      "name": "Code in JavaScript",
      "type": "n8n-nodes-base.code",
      "position": [
        2592,
        224
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// テキストをバイナリに変換\nconst text = $input.item.json.translatedText;\nconst fileName = $input.item.json.newFilename;\nconst buffer = Buffer.from(text, 'utf-8');\n\n// JSONデータとバイナリデータの両方を返す\nreturn {\n  json: {\n    ...$input.item.json,  // すべてのJSONフィールドを引き継ぐ\n    newFilename: fileName,\n    translatedText: text\n  },\n  binary: {\n    data: {\n      data: buffer,\n      mimeType: 'text/plain',\n      fileName: fileName\n    }\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "8a5557f5-95cf-424d-9e1f-39ce96de98a7",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "# 🌍 Multi-Language Document Translation Workflow\n\n## What this workflow does:\nAutomatically translates documents uploaded to Google Drive into multiple languages using DeepL API.\n\n## Supported file types:\n✅ PDF\n✅ DOCX (Microsoft Word)\n✅ Google Docs\n✅ TXT\n✅ Markdown (.md)\n\n## How to set up:\n1. **Edit the \"Configuration (Edit Here)\" node** (yellow node below)\n   - Set your Google Drive folder IDs\n   - Choose target languages\n   - Set your notification email\n\n2. **Add credentials** for:\n   - Google Drive OAuth2\n   - DeepL API\n   - Gmail OAuth2\n   - Notion API (optional)\n\n3. **Activate the workflow** and upload a file!\n\n## Default target languages:\nEN, ZH, KO, ES, FR, DE (can be customized)\n\n## Output:\nTranslated files saved with language codes:\n- document_en.pdf\n- document_zh.pdf\n- document_ko.pdf\netc.\n\n## Note:\nDeepL free tier: 500,000 characters/month",
      "position": [
        -256,
        -272
      ],
      "parameters": {
        "width": 560,
        "height": 1064,
        "content": "# 🌍 Multi-Language Document Translation Workflow\n\n## What this workflow does:\nAutomatically translates documents uploaded to Google Drive into multiple languages using DeepL API.\n\n## Supported file types:\n✅ PDF\n✅ DOCX (Microsoft Word)\n✅ Google Docs\n✅ TXT\n✅ Markdown (.md)\n\n## How to set up:\n1. **Edit the \"Configuration (Edit Here)\" node** (yellow node below)\n   - Set your Google Drive folder IDs\n   - Choose target languages\n   - Set your notification email\n\n2. **Add credentials** for:\n   - Google Drive OAuth2\n   - DeepL API\n   - Gmail OAuth2\n   - Notion API (optional)\n\n3. **Activate the workflow** and upload a file!\n\n## Default target languages:\nEN, ZH, KO, ES, FR, DE (can be customized)\n\n## Output:\nTranslated files saved with language codes:\n- document_en.pdf\n- document_zh.pdf\n- document_ko.pdf\netc.\n\n## Note:\nDeepL free tier: 500,000 characters/month"
      },
      "typeVersion": 1
    },
    {
      "id": "348dcb93-7d41-4749-b6c2-ef5a58e024d8",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "## 1️⃣ Configuration\n\n**EDIT THIS NODE** to customize:\n- Source folder ID (where to monitor)\n- Destination folder ID (where to save)\n- Target languages (default: 6 languages)\n- Notification email\n- Notion integration (optional)\n\nAll settings are in one place for easy setup!",
      "position": [
        896,
        -64
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 256,
        "content": "## 2️⃣ File Format Detection & Text Extraction\n\nDetects file type (PDF/DOCX/TXT/MD) and routes to appropriate extraction method.\n\nEach format requires different extraction logic:\n- PDF: OCR-enabled text extraction\n- DOCX: Structure-aware parsing\n- TXT/MD: Direct text reading"
      },
      "typeVersion": 1
    },
    {
      "id": "0a1a8c7c-2e8f-49df-95e7-6e1be44e45a4",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "## 2️⃣ File Format Detection & Text Extraction\n\nDetects file type (PDF/DOCX/TXT/MD) and routes to appropriate extraction method.\n\nEach format requires different extraction logic:\n- PDF: OCR-enabled text extraction\n- DOCX: Structure-aware parsing\n- TXT/MD: Direct text reading",
      "position": [
        480,
        480
      ],
      "parameters": {
        "color": 7,
        "width": 328,
        "height": 200,
        "content": "## 1️⃣ Configuration\n\n**EDIT THIS NODE** to customize:\n- Source folder ID (where to monitor)\n- Destination folder ID (where to save)\n- Target languages (default: 6 languages)\n- Notification email\n- Notion integration (optional)\n\nAll settings are in one place for easy setup!"
      },
      "typeVersion": 1
    },
    {
      "id": "a6351ae3-f679-4135-b53c-06f631abe384",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "## 3️⃣ Translation Loop\n\nSplits into one item per language, then FOR EACH:\n1. Translates text with DeepL API\n2. Generates filename with language code\n3. Creates binary file\n4. Uploads to Google Drive\n\nThis loop runs for all target languages in parallel.",
      "position": [
        1776,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 440,
        "height": 232,
        "content": "## 3️⃣ Translation Loop\n\nSplits into one item per language, then FOR EACH:\n1. Translates text with DeepL API\n2. Generates filename with language code\n3. Creates binary file\n4. Uploads to Google Drive\n\nThis loop runs for all target languages in parallel."
      },
      "typeVersion": 1
    },
    {
      "id": "f2fd7b4b-e246-4cef-b3d9-bad0832e4a30",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "notes": "## 4️⃣ Completion & Notification\n\nAfter all translations complete:\n1. Aggregates all results\n2. Prepares summary data\n3. Sends email notification\n\nOptional: Records translation history in Notion database for tracking.",
      "position": [
        3856,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 216,
        "content": "## 4️⃣ Completion & Notification\n\nAfter all translations complete:\n1. Aggregates all results\n2. Prepares summary data\n3. Sends email notification\n\nOptional: Records translation history in Notion database for tracking."
      },
      "typeVersion": 1
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "=変更後: {{ $('設定(ここを編集)').item.json.notificationEmail }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        3960,
        224
      ],
      "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": [
        4140,
        224
      ],
      "name": "IF deliverable"
    },
    {
      "parameters": {
        "operation": "verify",
        "email": "={{ $('設定(ここを編集)').item.json.notificationEmail }}",
        "additionalOptions": {}
      },
      "type": "n8n-nodes-billionverify.billionVerify",
      "typeVersion": 1,
      "position": [
        2248,
        384
      ],
      "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": [
        2428,
        384
      ],
      "name": "IF deliverable 2"
    }
  ],
  "connections": {
    "Download PDF": {
      "main": [
        [
          {
            "node": "Extract Text from PDF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download TXT": {
      "main": [
        [
          {
            "node": "Read TXT File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download DOCX": {
      "main": [
        [
          {
            "node": "Extract Text from DOCX",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Error Handler": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify) 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Results": {
      "main": [
        [
          {
            "node": "Aggregate Translations",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read TXT File": {
      "main": [
        [
          {
            "node": "Format Text Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Format Text Data": {
      "main": [
        [
          {
            "node": "Split by Language",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Record in Notion": {
      "main": [
        [
          {
            "node": "Merge Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download Markdown": {
      "main": [
        [
          {
            "node": "Read Markdown File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Filename": {
      "main": [
        [
          {
            "node": "Code in JavaScript",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split by Language": {
      "main": [
        [
          {
            "node": "Translate a language",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code in JavaScript": {
      "main": [
        [
          {
            "node": "Create Translated File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Detect File Format": {
      "main": [
        [
          {
            "node": "Download PDF",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Download DOCX",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Download TXT",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Download Markdown",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Markdown File": {
      "main": [
        [
          {
            "node": "Format Text Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Configuration": {
      "main": [
        [
          {
            "node": "Detect File Format",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive Trigger": {
      "main": [
        [
          {
            "node": "Merge Configuration",
            "type": "main",
            "index": 0
          },
          {
            "node": "Configuration (Edit Here)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Notification": {
      "main": [
        [
          {
            "node": "Verify Email (BillionVerify)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save to Google Drive": {
      "main": [
        [
          {
            "node": "Check if Notion Enabled",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Translate a language": {
      "main": [
        [
          {
            "node": "Generate Filename",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Text from PDF": {
      "main": [
        [
          {
            "node": "Format Text Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate Translations": {
      "main": [
        [
          {
            "node": "Prepare Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Translated File": {
      "main": [
        [
          {
            "node": "Save to Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Text from DOCX": {
      "main": [
        [
          {
            "node": "Format Text Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check if Notion Enabled": {
      "main": [
        [
          {
            "node": "Record in Notion",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge Results",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Configuration (Edit Here)": {
      "main": [
        [
          {
            "node": "Merge Configuration",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Verify Email (BillionVerify)": {
      "main": [
        [
          {
            "node": "IF deliverable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable": {
      "main": [
        [
          {
            "node": "Send Gmail Notification",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Verify Email (BillionVerify) 2": {
      "main": [
        [
          {
            "node": "IF deliverable 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "IF deliverable 2": {
      "main": [
        [
          {
            "node": "Send Error Notification",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    }
  },
  "settings": {
    "executionOrder": "v1"
  }
}

When to use this

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

FAQ

Why verify before sending in DeepL?

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