AutomationFlowsSocial Media › Create a Searchable Youtube Educator Directory with Smart Keyword Matching

Create a Searchable Youtube Educator Directory with Smart Keyword Matching

ByDavid Olusola @dae221 on n8n.io

This workflow demonstrates how to use n8n Data Tables to create a searchable database of educational YouTube content. Users can search for videos by topic (e.g., "voice", "scraping", "lead gen") and receive formatted recommendations from top n8n educators. Receives search…

Webhook trigger★★★★☆ complexity13 nodesData Table
Social Media Trigger: Webhook Nodes: 13 Complexity: ★★★★☆ Added:

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

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
{
  "nodes": [
    {
      "id": "a547a1f6-8c4d-41dc-8fb0-61f94b882533",
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "position": [
        576,
        416
      ],
      "parameters": {
        "path": "1799531d-7245-422a-b069-c76ca29bdda2",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "lastNode"
      },
      "typeVersion": 2.1
    },
    {
      "id": "562d6892-cdfa-4670-9f61-333f090587ef",
      "name": "Get row(s)",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        1024,
        416
      ],
      "parameters": {
        "filters": {
          "conditions": [
            {
              "keyName": "Description",
              "keyValue": "={{ $json[\"topic\"] }}",
              "condition": "like"
            }
          ]
        },
        "matchType": "allConditions",
        "operation": "get",
        "dataTableId": {
          "__rl": true,
          "mode": "list",
          "value": "SsbDaSjBiIsUNxQA",
          "cachedResultUrl": "/projects/NkfS7q6flnrTbJ9e/datatables/SsbDaSjBiIsUNxQA",
          "cachedResultName": "n8n_Educator_Videos"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e0078b00-477e-4df5-99f2-b24428903309",
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1392,
        416
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.4
    },
    {
      "id": "7ff4e2fc-78ea-414b-a957-910590055016",
      "name": "Set Message",
      "type": "n8n-nodes-base.set",
      "position": [
        1232,
        416
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "f9cd1364-e892-4289-949f-ecb0893eade4",
              "name": "Message",
              "type": "string",
              "value": "={{  $json[\"data\"]   .map(v =>      `\ud83c\udfa5 *${v[\"Video Title\"]}*   \ud83d\udc64 ${v[\"Educator\"]}   \ud83e\udde9 Difficulty: ${v[\"Difficulty\"]}   \ud83d\udd17 ${v[\"YouTube Link\"]}   \ud83d\udcdd ${v[\"Description\"]}`   )   .join(\"\\n\\n\") }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b5289988-ae88-4875-a8cb-cc6608a969b2",
      "name": "When clicking 'Execute workflow'",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        576,
        720
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "6b95ed0f-35f7-486a-a6ed-9087b3e5dc50",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        1008,
        720
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "def3f50d-5702-4dbb-89be-1b09f0893748",
      "name": "Main Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        32,
        240
      ],
      "parameters": {
        "color": 4,
        "width": 400,
        "height": 700,
        "content": "## \ud83c\udf93 n8n Learning Hub - YouTube Educator Search\n\nSearch a curated database of n8n tutorial videos by topic using Data Tables and webhooks.\n\n## How it works\n\n**Search API** (top branch): Webhook receives search queries \u2192 normalizes keywords \u2192 queries Data Table \u2192 formats results \u2192 returns matching videos\n\n**Database Setup** (bottom branch): Manual trigger \u2192 loads 10 video records \u2192 loops through each \u2192 inserts into Data Table\n\n## Setup steps\n\n1. Create a Data Table named \"n8n_Educator_Videos\" with columns: Educator, video_title, Difficulty, YouTubeLink, Description\n2. Run the bottom branch first by clicking \"Execute workflow\" on the manual trigger node\n3. Verify 10 videos inserted into your Data Table\n4. Activate the workflow and copy the webhook Production URL\n5. Test with POST request: `{\"topic\": \"voice\"}` or `{\"topic\": \"scraping\"}`\n\nConnect your own frontend or use tools like Postman to query the API."
      },
      "typeVersion": 1
    },
    {
      "id": "214bad22-5d24-41b9-8667-343fa9276289",
      "name": "Insert row",
      "type": "n8n-nodes-base.dataTable",
      "position": [
        1264,
        736
      ],
      "parameters": {
        "columns": {
          "value": {
            "Educator": "={{ $json.Educator }}",
            "Difficulty": "={{ $json.Difficulty }}",
            "Description": "={{ $json.Description }}",
            "YouTubeLink": "={{ $json['YouTube Link'] }}",
            "video_title": "={{ $json['Video Title'] }}"
          },
          "schema": [
            {
              "id": "Educator",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Educator",
              "defaultMatch": false
            },
            {
              "id": "video_title",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "video_title",
              "defaultMatch": false
            },
            {
              "id": "Difficulty",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Difficulty",
              "defaultMatch": false
            },
            {
              "id": "YouTubeLink",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "YouTubeLink",
              "defaultMatch": false
            },
            {
              "id": "Description",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Description",
              "defaultMatch": false
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "dataTableId": {
          "__rl": true,
          "mode": "list",
          "value": "SsbDaSjBiIsUNxQA",
          "cachedResultUrl": "/projects/NkfS7q6flnrTbJ9e/datatables/SsbDaSjBiIsUNxQA",
          "cachedResultName": "n8n_Educator_Videos"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a37f689d-27e9-4692-bd9e-7482b5d44704",
      "name": "Section 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        256
      ],
      "parameters": {
        "width": 256,
        "height": 144,
        "content": "## Search API\n\nReceives POST requests with search topic, normalizes keywords, queries the Data Table, and returns formatted results."
      },
      "typeVersion": 1
    },
    {
      "id": "c97717c5-fadd-4293-b8dd-d61473f320d7",
      "name": "Section 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1120,
        272
      ],
      "parameters": {
        "width": 256,
        "height": 128,
        "content": "## Format Response\n\nTransforms query results into user-friendly format with emojis and returns via webhook."
      },
      "typeVersion": 1
    },
    {
      "id": "8275cf1a-fa9d-4f2f-9920-2fdb7df994eb",
      "name": "Section 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1408,
        736
      ],
      "parameters": {
        "width": 256,
        "height": 176,
        "content": "## Database Initialization\n\nOne-time setup to populate the Data Table with video records. Run this before using the search API."
      },
      "typeVersion": 1
    },
    {
      "id": "236def7b-93a6-41ed-9150-86f516860706",
      "name": "Load Video Database",
      "type": "n8n-nodes-base.code",
      "position": [
        800,
        720
      ],
      "parameters": {
        "jsCode": "// Define your YouTube videos data here\nconst videos = [\n  {\n    Educator: \"Nate Herk\",\n    \"Video Title\": \"Eleven Labs Voice Agent\",\n    Difficulty: \"Intermediate\",\n    \"YouTube Link\": \"https://www.youtube.com/watch?v=Je4EAscnKK0\",\n    Description: \"Build a voice-powered AI agent in n8n using ElevenLabs.\"\n  },\n  {\n    Educator: \"Jack Roberts\",\n    \"Video Title\": \"The Most Profitable AI Skill in 2026 (RAG Masterclass)\",\n    Difficulty: \"Advanced\",\n    \"YouTube Link\": \"https://www.youtube.com/watch?v=dxeCH2duhMo\",\n    Description: \"Learn how to build advanced RAG workflows inside n8n.\"\n  },\n  {\n    Educator: \"Nate Herk\",\n    \"Video Title\": \"Run ALL Your AI Locally in Minutes (LLMs, RAG, and more)\",\n    Difficulty: \"Advanced\",\n    \"YouTube Link\": \"https://www.youtube.com/watch?v=V_0dNE-H2gw\",\n    Description: \"Tutorial on local AI setup with n8n, covering LLMs and RAG.\"\n  },\n  {\n    Educator: \"Cole Medin\",\n    \"Video Title\": \"n8n + Crawl4AI - Scrape ANY Website in Minutes with NO Code\",\n    Difficulty: \"Intermediate\",\n    \"YouTube Link\": \"https://www.youtube.com/watch?v=c5dw_jsGNBk\",\n    Description: \"Use Crawl4AI with n8n to scrape any website easily.\"\n  },\n  {\n    Educator: \"Nick Saraev\",\n    \"Video Title\": \"The 9 Best Ways to Scrape Any Website in N8N\",\n    Difficulty: \"Intermediate\",\n    \"YouTube Link\": \"https://www.youtube.com/watch?v=y-eEbmNeFZo\",\n    Description: \"Discover top scraping strategies for n8n workflows.\"\n  },\n  {\n    Educator: \"Nick Saraev\",\n    \"Video Title\": \"Every N8N JavaScript Function Explained (106 + 7 Extras)\",\n    Difficulty: \"Advanced\",\n    \"YouTube Link\": \"https://www.youtube.com/watch?v=Ksr_H30Oris\",\n    Description: \"Full breakdown of n8n's JavaScript function capabilities.\"\n  },\n  {\n    Educator: \"Sabrina Romanov\",\n    \"Video Title\": \"This n8n AI Agent Avatar will AUTOMATE your Social Media\",\n    Difficulty: \"Beginner\",\n    \"YouTube Link\": \"https://www.youtube.com/watch?v=8sPYxqU1SoQ\",\n    Description: \"Create an AI avatar automation system for social media with n8n.\"\n  },\n  {\n    Educator: \"Sabrina Romanov\",\n    \"Video Title\": \"n8n AI Avatar System for TikTok, Reels, and Shorts\",\n    Difficulty: \"Intermediate\",\n    \"YouTube Link\": \"https://www.youtube.com/watch?v=0T3FjaxDISI\",\n    Description: \"Build a full video automation workflow for TikTok and Reels using n8n.\"\n  },\n  {\n    Educator: \"n8n Team (Max Tkacz)\",\n    \"Video Title\": \"Making n8n AI Agents Reliable (Human-in-the-Loop Demo)\",\n    Difficulty: \"Advanced\",\n    \"YouTube Link\": \"https://www.youtube.com/watch?v=NG9bFFNNmQg\",\n    Description: \"Demonstration of human-in-the-loop reliability features for n8n AI agents.\"\n  },\n  {\n    Educator: \"David Olusola\",\n    \"Video Title\": \"Automate Lead Import from Google Sheets to Instantly Using N8N Data Table\",\n    Difficulty: \"Intermediate\",\n    \"YouTube Link\": \"https://youtu.be/c8iv1u_jxDY\",\n    Description: \"Learn how to automate lead generation workflows using n8n Data Tables, Google Sheets, and Instantly for email outreach.\"\n  }\n];\n\n// Convert each video to an individual item so n8n loops them automatically\nreturn videos.map(v => ({ json: v }));"
      },
      "typeVersion": 2
    },
    {
      "id": "080ca0fd-af0a-4770-b692-6b31bef7fe86",
      "name": "Process Search Term",
      "type": "n8n-nodes-base.code",
      "position": [
        800,
        416
      ],
      "parameters": {
        "jsCode": "let topic = $json.topic || \"\";\ntopic = topic.trim().toLowerCase();\n\n// Optional simple keyword logic\nif (topic.includes(\"talk\") || topic.includes(\"audio\") || topic.includes(\"voice\")) {\n  topic = \"voice\";\n} else if (topic.includes(\"lead\")) {\n  topic = \"lead gen\";\n} else if (topic.includes(\"scrape\") || topic.includes(\"data\")) {\n  topic = \"scraping\";\n}\n\nreturn [{ topic }];\n"
      },
      "typeVersion": 2
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Process Search Term",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s)": {
      "main": [
        [
          {
            "node": "Set Message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Insert row": {
      "main": [
        [
          {
            "node": "Load Video Database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Message": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Insert row",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Load Video Database": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Search Term": {
      "main": [
        [
          {
            "node": "Get row(s)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking 'Execute workflow'": {
      "main": [
        [
          {
            "node": "Load Video Database",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

This workflow demonstrates how to use n8n Data Tables to create a searchable database of educational YouTube content. Users can search for videos by topic (e.g., "voice", "scraping", "lead gen") and receive formatted recommendations from top n8n educators. Receives search…

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

More Social Media workflows → · Browse all categories →

Related workflows

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

Social Media

Instagram - Fluxo de mensagens. Uses rabbitmq, rabbitmqTrigger, googleSheets, httpRequest. Webhook trigger; 74 nodes.

Rabbitmq, Rabbitmq Trigger, Google Sheets +1
Social Media

Automatically backup all your Instagram videos to Google Drive with a searchable metadata catalog in JSON format.

Google Drive, HTTP Request, Data Table
Social Media

📺 Full walkthrough video: https://youtu.be/Me4d4BILvHk

Gmail, Data Table, HTTP Request
Social Media

Automated n8n workflow: Receives videos via form, dubs/translates them to the selected languages, and—upon completion—uploads them to multiple social media channels and cloud drives, including Box, Dr

HTTP Request, Telegram, Box +3
Social Media

Automatically upload your Instagram videos to YouTube with configurable time gaps between each upload, using n8n Tables for deduplication. Fetches recent Instagram posts via the Meta Graph API and fil

HTTP Request, Data Table, YouTube