AutomationFlowsAI & RAG › Linkedin Lead Finder & Gemini-powered Personalized Outreach with Google Sheets

Linkedin Lead Finder & Gemini-powered Personalized Outreach with Google Sheets

ByCong Nguyen @cong-nguyen on n8n.io

This workflow automates the process of finding LinkedIn leads and writing personalized outreach messages. It takes user input (keywords + purpose), generates a Boolean LinkedIn search query with Gemini, fetches up to 20 results via Google Custom Search API, logs them into Google…

Event trigger★★★★☆ complexityAI-powered13 nodesForm TriggerGoogle GeminiHTTP RequestGoogle SheetsEmail Send
AI & RAG Trigger: Event Nodes: 13 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Emailsend → Form Trigger 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "75d06417-5d15-4372-9aa5-bc9bf008cf37",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        3472,
        -1072
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "items"
      },
      "typeVersion": 1
    },
    {
      "id": "bfcd5fd4-3ab1-44ed-ade4-c39ce5fca1e4",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        3696,
        -1072
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "7d25973b-07b0-43b3-a067-85dc340b4d8d",
      "name": "Form submit",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        2768,
        -1072
      ],
      "parameters": {
        "options": {},
        "formTitle": "1.0 S_LG_Find LinkedIn Accounts by keywords and Write personal message for contact",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Keywords to find Company / Professional"
            },
            {
              "fieldLabel": "Purpose of Contact"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "4106578e-1721-4da3-8ec0-a85584d32c0d",
      "name": "Create boolean search strings",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        2960,
        -1072
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-2.5-flash",
          "cachedResultName": "models/gemini-2.5-flash"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are a tool that generates Boolean search strings for Google, in order to search for companies or professionals on LinkedIn.  \n\n# Task:\n- Based on the keyword and the purpose, generate a suitable keyword string for searching on LinkedIn.  \n- Only return the keyword string, without any explanation or additional information.  \n- Always add site:linkedin.com to the keyword string.  \n\n# Input:\nKeyword: {{ $json['Keywords to find Company / Professional'] }}\nPurpose: {{ $json['Purpose of Contact'] }}"
            }
          ]
        }
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e64562e8-dd4c-448d-8c8c-0d1e3cc00c87",
      "name": "Get Linkedin Company",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        3264,
        -1072
      ],
      "parameters": {
        "url": "https://www.googleapis.com/customsearch/v1",
        "options": {},
        "sendQuery": true,
        "queryParameters": {
          "parameters": [
            {
              "name": "key",
              "value": "xxxxxxxxx"
            },
            {
              "name": "cx",
              "value": "xxxxx"
            },
            {
              "name": "q",
              "value": "={{ $json.content.parts[0].text }}"
            },
            {
              "name": "num",
              "value": "20"
            },
            {
              "name": "hl",
              "value": "vi"
            },
            {
              "name": "gl",
              "value": "vn"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a69b91dd-72c7-4050-82c7-418175c21d10",
      "name": "Writing message",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        4176,
        -1056
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemini-1.5-flash",
          "cachedResultName": "models/gemini-1.5-flash"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are an AI that drafts outreach messages.\n\n# Requirements\nBased on the purpose: {{ $('Form submit').item.json['Purpose of Contact'] }}\nand the company information:  \nname: {{ $json.name }}  \ndescription: {{ $json.des }}  \n\nWrite a suitable and personalized outreach message for that specific company.  \n\nOnly return the outreach message, without any explanation or additional text.  \nIf some information is missing, use placeholders.  "
            }
          ]
        }
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "f5eefcd1-cfb8-45fc-bc4a-67f88500b2c4",
      "name": "Update sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        4496,
        -1056
      ],
      "parameters": {
        "columns": {
          "value": {
            "message": "={{ $json.content.parts[0].text }}",
            "row_number": 0,
            "linkedin_url": "={{ $('Append row in sheet').item.json.linkedin_url }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "linkedin_url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "linkedin_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "des",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "des",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "message",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "linkedin_url"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TlZ5uDYJAWm_hx_wkI7HXvXwuOL5WBdxRIMwjQ1kpEU/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "=xxxxx"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "5159d49c-52fb-43c6-bb1e-9becc104fdcf",
      "name": "Send email",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        3952,
        -1232
      ],
      "parameters": {
        "html": "[Link to sheet]",
        "options": {},
        "subject": "Your auto writing message be completed",
        "toEmail": "info@example.com",
        "fromEmail": "admin@example.com"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "1d35af31-c2cf-42c9-8e5b-e6796990925b",
      "name": "Append row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3952,
        -1056
      ],
      "parameters": {
        "columns": {
          "value": {
            "des": "={{ $json.pagemap.metatags[0][\"og:description\"] }}",
            "name": "={{ $json.title }}",
            "linkedin_url": "={{ $json.link }}"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "id",
              "defaultMatch": true,
              "canBeUsedToMatch": true
            },
            {
              "id": "name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "linkedin_url",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "linkedin_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "des",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "des",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "message",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "message",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "linkedin_url"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1TlZ5uDYJAWm_hx_wkI7HXvXwuOL5WBdxRIMwjQ1kpEU/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "=xxxxx"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "e7a90a44-a1bb-4727-9cbd-7d86e6a7a5d0",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3840,
        -864
      ],
      "parameters": {
        "width": 352,
        "content": "## Google Sheets Mapping\n- **name** \u2192 Company/Person name  \n- **linkedin_url** \u2192 LinkedIn profile/company URL  \n- **des** \u2192 Description or tagline  \n- **message** \u2192 AI-generated outreach text  \n"
      },
      "typeVersion": 1
    },
    {
      "id": "8bf56071-28f3-4b9d-81dc-c425695ee7a0",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3200,
        -1168
      ],
      "parameters": {
        "width": 224,
        "height": 272,
        "content": "### Update hl & gl to fit with your location"
      },
      "typeVersion": 1
    },
    {
      "id": "414c16fb-3015-489e-bbb5-f51272f45d2a",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2768,
        -832
      ],
      "parameters": {
        "color": 3,
        "width": 448,
        "height": 240,
        "content": "## Overview\n1. Collect keywords & purpose from a form  \n2. Generate Boolean LinkedIn search queries with AI  \n3. Search LinkedIn profiles/companies via Google Custom Search  \n4. Save results (name, URL, description) into Google Sheets  \n5. Generate personalized outreach messages with AI  \n6. Update the sheet with the message and send notification email  \n"
      },
      "typeVersion": 1
    },
    {
      "id": "bbc5b875-1b07-406c-b856-ca285a73770e",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2768,
        -560
      ],
      "parameters": {
        "color": 6,
        "width": 448,
        "height": 176,
        "content": "## Setup Required\n1. Configure Google Sheets OAuth2 credentials  \n2. Configure Gemini API credentials  \n3. Configure SMTP credentials (for email notifications)  \n4. Update Custom Search Engine ID (`cx`) and API Key  \n5. Adjust `hl` & `gl` parameters for your location  \n"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Split Out": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Form submit": {
      "main": [
        [
          {
            "node": "Create boolean search strings",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update sheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Send email",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Append row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Writing message": {
      "main": [
        [
          {
            "node": "Update sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append row in sheet": {
      "main": [
        [
          {
            "node": "Writing message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Linkedin Company": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create boolean search strings": {
      "main": [
        [
          {
            "node": "Get Linkedin Company",
            "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 workflow automates the process of finding LinkedIn leads and writing personalized outreach messages. It takes user input (keywords + purpose), generates a Boolean LinkedIn search query with Gemini, fetches up to 20 results via Google Custom Search API, logs them into Google…

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

More AI & RAG workflows → · Browse all categories →

Related workflows

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

AI & RAG

Understand your customers before you build for them. This workflow, Market Segmentation: Buyer Persona Pain Point Report, automates the grueling process of primary market research. By scraping real-wo

Form Trigger, Google Gemini, N8N Nodes Olostep +3
AI & RAG

Grain Real Estate Land Showcase v1. Uses formTrigger, httpRequest, openAi, emailSend. Event-driven trigger; 13 nodes.

Form Trigger, HTTP Request, OpenAI +3
AI & RAG

Turns a simple form submission into a polished, priced PDF quote—automatically. Captures lead details via Form: Request a Quote. Loads your Google Sheets catalog (SKUs, price, stock, min qty, etc.). U

Form Trigger, Google Sheets, OpenAI +3
AI & RAG

Note: Now includes an Apify alternative for Rapid API (Some users can't create new accounts on Rapid API, so I have added an alternative for you. But immediately you are able to get access to Rapid AP

Form Trigger, Google Sheets Trigger, OpenAI +2
AI & RAG

This system automates LinkedIn lead generation and enrichment in six clear stages: Lead Collection (via Apollo.io) Automatically pulls leads based on keywords, roles, or industries using Apollo’s API.

Form Trigger, OpenAI, Google Sheets Trigger +2