AutomationFlowsMarketing & Ads › Automated Youtube Channel Lead Generation & Email Outreach with Apify and…

Automated Youtube Channel Lead Generation & Email Outreach with Apify and…

Original n8n title: Automated Youtube Channel Lead Generation & Email Outreach with Apify and Zerobounce

ByYaron Been @yaron-nofluff on n8n.io

This sophisticated n8n automation is a powerful lead generation and outreach tool designed to transform YouTube channel research into actionable marketing opportunities. By intelligently connecting multiple services and APIs, this workflow: Discovers Targeted Channels: Scrapes…

Event trigger★★★★☆ complexity16 nodesHTTP RequestGmail
Marketing & Ads Trigger: Event Nodes: 16 Complexity: ★★★★☆ Added:

This workflow corresponds to n8n.io template #4582 — we link there as the canonical source.

This workflow follows the Gmail → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "xyq7qemab2OGGItB",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "YouTube Lead Scraper Automation",
  "tags": [],
  "nodes": [
    {
      "id": "23a2cfe7-16f0-4f7b-942e-b0de7b0059f7",
      "name": "Trigger Apify Scraper",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        220,
        0
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/actor-tasks/YOUR_TASK_ID/run-sync",
        "method": "POST",
        "options": {},
        "jsonBody": "{\n  \"input\": {\n    \"searchKeywords\": [\n      \"fitness\"\n    ],\n    \"maxResults\": 10,\n    \"scrapeEmails\": true\n  }\n}",
        "sendBody": true,
        "sendQuery": true,
        "specifyBody": "json",
        "queryParameters": {
          "parameters": [
            {
              "name": "token",
              "value": "YOUR_APIFY_TOKEN"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "02c53b04-7321-4d5f-be59-121536160236",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        0,
        0
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "c62a8f67-9636-4ddb-a639-1997d609446e",
      "name": "Get Apify Results",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        440,
        0
      ],
      "parameters": {
        "url": "=https://api.apify.com/v2/datasets/{{ $json.data.defaultDatasetId }}/items",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "token",
              "value": "YOUR_APIFY_TOKEN"
            },
            {
              "name": "clean",
              "value": "true"
            },
            {
              "name": "format",
              "value": "json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "e9f37f8b-1444-47a7-b134-1478ef5dbc9d",
      "name": "Extract Email & Channel",
      "type": "n8n-nodes-base.set",
      "position": [
        780,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "01c29690-9b43-41c5-9b88-a587c7e1e4b9",
              "name": "channelTitle",
              "type": "string",
              "value": "={{ $json.channelTitle }}"
            },
            {
              "id": "9ad0d2f1-5bb8-4af0-8633-a45a1ec36c20",
              "name": "email",
              "type": "string",
              "value": "={{ $json.email }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7f73ffd4-0a09-4287-948f-314e89a3e8fc",
      "name": "Email Exists?",
      "type": "n8n-nodes-base.if",
      "position": [
        1000,
        0
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "94741b49-6e09-438a-8de1-1b67379ba0c5",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.email }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "c8d8243e-7a15-48a1-9c69-1bb79009ab79",
      "name": "Verify Email (ZeroBounce)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1320,
        -120
      ],
      "parameters": {
        "url": "=https://api.zerobounce.net/v2/validate?api_key=YOUR_API_KEY&email={{ $json.email }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "59f7ab1e-4ac0-4cde-9eae-e3379ff6c669",
      "name": "Email is Valid?",
      "type": "n8n-nodes-base.if",
      "position": [
        1540,
        -120
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "d17ab221-1aea-4c4a-9ce0-923ef4a67585",
              "operator": {
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.status }}",
              "rightValue": "=valid"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9f4cc0e7-95e2-41cf-add7-b8c052377431",
      "name": "Send Cold Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1880,
        -240
      ],
      "parameters": {
        "sendTo": "={{ $json.address }}",
        "message": "=Hi,\n\nI just checked out your YouTube channel \u2013 awesome content on home workouts!  I'm reaching out because we help fitness creators like you grow their email lists and monetize content with premium guides and courses \u2013 with no up-front cost.  Would you be open to a quick chat next week? I\u2019d love to show you a couple of ways we could help.\n\nBest Alex",
        "options": {},
        "subject": "=Love your channel, {{ $('Email Exists?').item.json.channelTitle }} \u2013 Quick idea!"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "08af4ffa-b21e-4173-a0d3-1ea63439c348",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -60,
        -680
      ],
      "parameters": {
        "color": 5,
        "width": 660,
        "height": 900,
        "content": "## \ud83d\udd01 SECTION 1: **Start & Scrape YouTube Data**\n\n### \ud83d\udfe2 **Nodes Involved**\n\n* \u26a1 `Manual Trigger`\n* \ud83c\udf10 `Trigger Apify Scraper`\n* \ud83c\udf10 `Get Apify Results`\n\n---\n\n### \u2728 What This Section Does\n\n|Step                      |  Description                                                                                                                   |\n| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |\n| **Manual Trigger**         | Starts the workflow manually (great for testing or on-demand runs).                                                              |\n| **Trigger Apify Scraper** | Sends a `POST` request to Apify to run the YouTube Scraper Actor with your target keywords like `\"fitness\"` or `\"tech\"`.         |\n| **Get Apify Results**     | Waits for the scrape to complete and then fetches the dataset containing YouTube channel details, including emails if available. |\n\n### \ud83d\udce6 Output Example:\n\n```json\n{\n  \"channelTitle\": \"FitLife Hacks\",\n  \"channelUrl\": \"https://youtube.com/@fitlifehacks\",\n  \"email\": \"contact@fitlifehacks.com\"\n}\n```\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7acea3ed-cc26-4e39-879e-af2648eb52ce",
      "name": "No Operation, do nothing",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1320,
        200
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "2fc0ad18-040b-4da6-a83d-8e90be99889b",
      "name": "No Operation, do nothing1",
      "type": "n8n-nodes-base.noOp",
      "position": [
        1900,
        60
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "1b9c2db4-776f-4b9c-a60d-c44d873d8d46",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -660
      ],
      "parameters": {
        "color": 3,
        "width": 420,
        "height": 880,
        "content": "## \ud83d\udd0e SECTION 2: **Filter & Prepare Leads**\n\n### \ud83d\udfe2 **Nodes Involved**\n\n* \ud83e\uddee `Extract Email & Channel`\n* \ud83d\udea6 `Email Exists?`\n\n---\n\n### \u2728 What This Section Does\n\n| \ud83d\udd27 Step                        | \ud83e\uddfe Description                                                                                |\n| ------------------------------ | --------------------------------------------------------------------------------------------- |\n|  **Extract Email & Channel** | Uses the `Edit Fields` node to isolate the fields you need: `email` and `channelTitle`.       |\n|  **Email Exists?**           | An `IF` node that checks if `email` is not empty. Only leads with actual emails move forward. |\n\n### \ud83e\udde0 Why This Matters:\n\nFiltering out empty emails ensures you don\u2019t waste verification API calls or try to email blanks.\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b8c055f7-802a-4f97-bbff-908275e2a7e9",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1260,
        -840
      ],
      "parameters": {
        "color": 6,
        "width": 400,
        "height": 920,
        "content": "## \u2705 SECTION 3: **Verify Emails via ZeroBounce**\n\n### \ud83d\udfe2 **Nodes Involved**\n\n* \ud83c\udf10 `Verify Email (ZeroBounce)`\n* \ud83d\udea5 `Email is Valid?`\n\n---\n\n### \u2728 What This Section Does\n\n| \ud83d\udd27 Step                          | \ud83e\uddfe Description                                                                                             |\n| -------------------------------- | ---------------------------------------------------------------------------------------------------------- |\n| \ud83c\udf10 **Verify Email (ZeroBounce)** | Sends an API request to ZeroBounce to check if the email is `valid`, `catch-all`, `invalid`, `abuse`, etc. |\n| \ud83d\udea5 **Email is Valid?**           | An `IF` node filters out only those emails where the verification result is `\"valid\"` (or safe to send).   |\n\n### \u2705 Output Example:\n\n```json\n{\n  \"status\": \"valid\",\n  \"email\": \"contact@fitlifehacks.com\"\n}\n```\n\n---\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "39701534-2755-49b9-89cd-67e5c7d4a087",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1800,
        -720
      ],
      "parameters": {
        "color": 7,
        "width": 260,
        "height": 680,
        "content": "## \u2709\ufe0f SECTION 4: **Send Cold Email**\n\n### \ud83d\udfe2 **Nodes Involved**\n\n* \ud83d\udce7 `Send Cold Email` (Gmail)\n\n---\n\n### \u2728 What This Section Does\n\n|  Step           |  Description                                                                                                         |\n| ----------------- | ---------------------------------------------------------------------------------------------------------------------- |\n|  **Gmail Node** | Sends a customized cold email to the lead using Gmail. You can personalize the email using fields like `channelTitle`. |\n\n---\n"
      },
      "typeVersion": 1
    },
    {
      "id": "728b1e9e-ca99-4d9a-90df-7d12468b285d",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1720,
        -660
      ],
      "parameters": {
        "color": 4,
        "width": 1300,
        "height": 320,
        "content": "=======================================\n            WORKFLOW ASSISTANCE\n=======================================\nFor any questions or support, please contact:\n    Yaron@nofluff.online\n\nExplore more tips and tutorials here:\n   - YouTube: https://www.youtube.com/@YaronBeen/videos\n   - LinkedIn: https://www.linkedin.com/in/yaronbeen/\n=======================================\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7599233b-b1d5-48a8-b47b-95730a5a2732",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1720,
        -320
      ],
      "parameters": {
        "color": 4,
        "width": 1289,
        "height": 3238,
        "content": "# \ud83e\udde0 YouTube Lead Scraper Automation \u2013 n8n Workflow Breakdown\n\nThis automation scrapes YouTube for channels in your niche, extracts emails, validates them, and sends personalized cold emails via Gmail.\n\n---\n\n## \ud83d\udd01 SECTION 1: **Start & Scrape YouTube Data**\n\n### \ud83d\udfe2 **Nodes Involved**\n\n* \u26a1 `Manual Trigger`\n* \ud83c\udf10 `Trigger Apify Scraper`\n* \ud83c\udf10 `Get Apify Results`\n\n---\n\n### \u2728 What This Section Does\n\n| \ud83d\udd27 Step                      | \ud83e\uddfe Description                                                                                                                   |\n| ---------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |\n|  **Manual Trigger**         | Starts the workflow manually (great for testing or on-demand runs).                                                              |\n|  **Trigger Apify Scraper** | Sends a `POST` request to Apify to run the YouTube Scraper Actor with your target keywords like `\"fitness\"` or `\"tech\"`.         |\n|  **Get Apify Results**     | Waits for the scrape to complete and then fetches the dataset containing YouTube channel details, including emails if available. |\n\n### \ud83d\udce6 Output Example:\n\n```json\n{\n  \"channelTitle\": \"FitLife Hacks\",\n  \"channelUrl\": \"https://youtube.com/@fitlifehacks\",\n  \"email\": \"contact@fitlifehacks.com\"\n}\n```\n\n---\n\n## \ud83d\udd0e SECTION 2: **Filter & Prepare Leads**\n\n### \ud83d\udfe2 **Nodes Involved**\n\n* \ud83e\uddee `Extract Email & Channel`\n* \ud83d\udea6 `Email Exists?`\n\n---\n\n### \u2728 What This Section Does\n\n| \ud83d\udd27 Step                        | \ud83e\uddfe Description                                                                                |\n| ------------------------------ | --------------------------------------------------------------------------------------------- |\n|  **Extract Email & Channel** | Uses the `Edit Fields` node to isolate the fields you need: `email` and `channelTitle`.       |\n| **Email Exists?**           | An `IF` node that checks if `email` is not empty. Only leads with actual emails move forward. |\n\n### \ud83e\udde0 Why This Matters:\n\nFiltering out empty emails ensures you don\u2019t waste verification API calls or try to email blanks.\n\n---\n\n## \u2705 SECTION 3: **Verify Emails via ZeroBounce**\n\n### \ud83d\udfe2 **Nodes Involved**\n\n* \ud83c\udf10 `Verify Email (ZeroBounce)`\n* \ud83d\udea5 `Email is Valid?`\n\n---\n\n### \u2728 What This Section Does\n\n| \ud83d\udd27 Step                          | \ud83e\uddfe Description                                                                                             |\n| -------------------------------- | ---------------------------------------------------------------------------------------------------------- |\n| \ud83c\udf10 **Verify Email (ZeroBounce)** | Sends an API request to ZeroBounce to check if the email is `valid`, `catch-all`, `invalid`, `abuse`, etc. |\n| \ud83d\udea5 **Email is Valid?**           | An `IF` node filters out only those emails where the verification result is `\"valid\"` (or safe to send).   |\n\n### \u2705 Output Example:\n\n```json\n{\n  \"status\": \"valid\",\n  \"email\": \"contact@fitlifehacks.com\"\n}\n```\n\n---\n\n## \u2709\ufe0f SECTION 4: **Send Cold Email**\n\n### \ud83d\udfe2 **Nodes Involved**\n\n* \ud83d\udce7 `Send Cold Email` (Gmail)\n\n---\n\n### \u2728 What This Section Does\n\n| \ud83d\udd27 Step           | \ud83e\uddfe Description                                                                                                         |\n| ----------------- | ---------------------------------------------------------------------------------------------------------------------- |\n|  **Gmail Node** | Sends a customized cold email to the lead using Gmail. You can personalize the email using fields like `channelTitle`. |\n\n---\n\n### \ud83d\udc8c Sample Email Content:\n\n```html\nSubject: Quick idea for {{$json[\"channelTitle\"]}}\n\nHi there,\n\nLoved your channel {{$json[\"channelTitle\"]}}! I had a quick idea on how you could grow your audience and monetize better.\n\nWould love to share \u2014 open to a quick call next week?\n\nBest,  \n[Your Name]  \n[Your Website]\n```\n\n---\n\n## \ud83c\udfaf Overall Flow Summary\n\n| Section               | Purpose                                                 |\n| --------------------- | ------------------------------------------------------- |\n|  **Start & Scrape** | Launches the Apify scraper and gets lead data           |\n|  **Filter Leads**   | Extracts relevant info and removes leads without emails |\n|  **Verify Emails**   | Checks email validity via ZeroBounce                    |\n|  **Send Emails**    | Sends cold emails to the filtered, verified leads       |\n\n---\n\n## \ud83d\ude80 Suggestions for Next Level\n\n* \u23f1\ufe0f Add `Wait` or `Delay` nodes to avoid hitting Gmail rate limits\n* \ud83d\udcca Log results to Airtable or Google Sheets\n* \ud83d\udd01 Loop with batch processing for large lead lists\n* \ud83e\udde0 Add AI-generated personalized messages with OpenAI API\n\n---\n\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "0146b023-e54a-4476-9adc-20d5bdfcd89f",
  "connections": {
    "Email Exists?": {
      "main": [
        [
          {
            "node": "Verify Email (ZeroBounce)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Trigger Apify Scraper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Email is Valid?": {
      "main": [
        [
          {
            "node": "Send Cold Email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Apify Results": {
      "main": [
        [
          {
            "node": "Extract Email & Channel",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Trigger Apify Scraper": {
      "main": [
        [
          {
            "node": "Get Apify Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Email & Channel": {
      "main": [
        [
          {
            "node": "Email Exists?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify Email (ZeroBounce)": {
      "main": [
        [
          {
            "node": "Email is Valid?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

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

About this workflow

This sophisticated n8n automation is a powerful lead generation and outreach tool designed to transform YouTube channel research into actionable marketing opportunities. By intelligently connecting multiple services and APIs, this workflow: Discovers Targeted Channels: Scrapes…

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

More Marketing & Ads workflows → · Browse all categories →

Related workflows

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

Marketing & Ads

This template enables fully automated lead enrichment using Surfe’s bulk API. Simply drop a Google Spreadsheet into your Google Drive, and n8n will handle everything — from reading the leads, enrichin

Google Sheets, Google Drive Trigger, HTTP Request +2
Marketing & Ads

My workflow 11. Uses manualTrigger, splitOut, httpRequest, splitInBatches. Event-driven trigger; 14 nodes.

HTTP Request, OpenAI, Google Sheets +2
Marketing & Ads

This workflow automates bulk email campaigns with built-in validation, deliverability protection, and smart send-time optimization.

HTTP Request, Postgres, Gmail
Marketing & Ads

Maximize your conversion rates with this end-to-end automated outreach and lead nurturing system. This workflow manages the entire sales lifecycle—from instant contact enrollment via WhatsApp to AI-pe

N8N Nodes Wati, Airtable, HTTP Request
Marketing & Ads

This workflow is designed to take user inputs in order to generate an image using the Riverflow 2.0 model through the Replicate API. It can handle both image generation as well as image editing. Addit

Form Trigger, Data Table, HTTP Request +1