Google Search - LinkedIn Lead Gen

    Uses Google Search API to get upto 1000 linkedIn Leads per day - Adds it to a google sheet

    Shared 10/6/2025

    489 views

    Visual Workflow

    JSON Code

    {
      "meta": {
        "instanceId": "784633b34b946c52696f8bcee5aa5878daa3acd944446e0b6ac2ec35a27f3ec1",
        "templateCredsSetupCompleted": true
      },
      "nodes": [
        {
          "id": "3c669910-a295-4b14-80eb-fa728771efe4",
          "name": "Schedule Trigger",
          "type": "n8n-nodes-base.scheduleTrigger",
          "position": [
            -608,
            -976
          ],
          "parameters": {
            "rule": {
              "interval": [
                {}
              ]
            }
          },
          "typeVersion": 1.2
        },
        {
          "id": "ef5434be-dd3a-4fa7-a78c-2e0385a46014",
          "name": "Add to Sheet",
          "type": "n8n-nodes-base.googleSheets",
          "position": [
            512,
            -1040
          ],
          "parameters": {
            "columns": {
              "value": null,
              "schema": [],
              "mappingMode": "autoMapInputData",
              "matchingColumns": [],
              "attemptToConvertTypes": false,
              "convertFieldsToString": false
            },
            "options": {},
            "operation": "append",
            "sheetName": {
              "__rl": true,
              "mode": "list",
              "value": 2094797344,
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mLzrKkvKr-RrGRzGBa2XtAoUiPwcy5i6DATlQbwW0BI/edit#gid=2094797344",
              "cachedResultName": "fouders_dubai"
            },
            "documentId": {
              "__rl": true,
              "mode": "list",
              "value": "1mLzrKkvKr-RrGRzGBa2XtAoUiPwcy5i6DATlQbwW0BI",
              "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mLzrKkvKr-RrGRzGBa2XtAoUiPwcy5i6DATlQbwW0BI/edit?usp=drivesdk",
              "cachedResultName": "linkedin_leads"
            },
            "authentication": "serviceAccount"
          },
          "credentials": {
            "googleApi": {
              "id": "H4QBs8rB8FP7PZBN",
              "name": "Google Sheets account"
            }
          },
          "typeVersion": 4.5,
          "alwaysOutputData": true
        },
        {
          "id": "1066a45d-1c7b-485f-b23d-8f4a740750b7",
          "name": "Search Google",
          "type": "n8n-nodes-base.httpRequest",
          "position": [
            -160,
            -1056
          ],
          "parameters": {
            "url": "https://customsearch.googleapis.com/customsearch/v1",
            "options": {},
            "sendQuery": true,
            "sendHeaders": true,
            "queryParameters": {
              "parameters": [
                {
                  "name": "key",
                  "value": "AIzaSyB4KMi5T67hl7vzY6LuCes44UjzyLC7ozw"
                },
                {
                  "name": "cx",
                  "value": "854982e4b45874332"
                },
                {
                  "name": "q",
                  "value": "Founder OR CEO OR Project Manager OR CTO Tech Dubai site:linkedin.com dubai"
                },
                {
                  "name": "start",
                  "value": "={{ ($runIndex*10)+1 }}"
                }
              ]
            },
            "headerParameters": {
              "parameters": [
                {}
              ]
            }
          },
          "typeVersion": 4.2
        },
        {
          "id": "7513e547-893f-46d3-9759-c88e6b99ce3c",
          "name": "Wait",
          "type": "n8n-nodes-base.wait",
          "position": [
            288,
            -1040
          ],
          "webhookId": "7931db91-e6e7-46cb-b097-419a32dfa3c3",
          "parameters": {
            "amount": 2.5
          },
          "typeVersion": 1.1
        },
        {
          "id": "cf256ce2-7147-474c-9555-182c0d5e4d02",
          "name": "Pagination Check",
          "type": "n8n-nodes-base.if",
          "position": [
            960,
            -1040
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "faef2862-80a4-465b-9e0b-be5b9753dcbd",
                  "operator": {
                    "type": "boolean",
                    "operation": "true",
                    "singleValue": true
                  },
                  "leftValue": "={{ $json.continueLoop }}",
                  "rightValue": "true"
                }
              ]
            }
          },
          "typeVersion": 2.2
        },
        {
          "id": "7e933840-e10b-40a3-b6bb-9ef4f59a059a",
          "name": "Pagination",
          "type": "n8n-nodes-base.code",
          "position": [
            736,
            -1040
          ],
          "parameters": {
            "jsCode": "const inputItems = $input.all();\n\n\n// let nextStartIndex = 1;\n// let hasMoreResults = false;\n\n// if (inputItems && inputItems.length > 0) {\n//   const firstItem = inputItems[0].json;\n\n//   if (firstItem.startIndex !== undefined) {\n//     nextStartIndex = firstItem.startIndex;\n//   }\n\n//   if (firstItem.hasMoreResults !== undefined) {\n//     hasMoreResults = firstItem.hasMoreResults;\n//   }\n// }\n\nreturn {\n  json: {\n    continueLoop:inputItems[inputItems.length-1].json.hasMoreResults,\n    startIndex: inputItems[inputItems.length-1].json.itemIndex+1 ,\n    pageNumber: inputItems[inputItems.length-1].json.pageNumber,\n  }\n};\n"
          },
          "typeVersion": 2
        },
        {
          "id": "2e77eac0-f4bf-4bd3-ad0f-d382b17e4f1e",
          "name": "Extract Results",
          "type": "n8n-nodes-base.code",
          "position": [
            64,
            -1040
          ],
          "parameters": {
            "jsCode": "// Get the response data\nconst response = $input.first().json;\nconst items = response.items || [];\nconst item_count = response.queries.request[0].count;\nconst startIndex = response.queries.request[0].startIndex;\nconst pageNumber_ = Math.floor((response.queries.request[0].startIndex - 1) / 10) + 1;\n// Track pagination info\nlet nextStartIndex = 1;\n\nif (response.queries.nextPage[0]) {\nnextStartIndex = response.queries.nextPage[0].startIndex;\n} //Get the start index of the next page if any. \n\n// Calculate if we should continue (Google only allows up to 100 results)\nconst hasMoreResults = nextStartIndex <= 100;\n\n// Process the items and include pagination info in each item\nconst results = items.map((item,index) => {\n  const titleParts = item.title.split(\" - \");\n  return {\n    name: titleParts[0] || null,\n    title: titleParts.slice(1).join(\" - \") || null,\n    link: item.link || null,\n    snippet: item.snippet || null,\n    image: item.pagemap?.cse_thumbnail?.[0]?.src || null,\n    // Add pagination info to each item\n    itemIndex: startIndex+index,\n    hasMoreResults: hasMoreResults,\n    totalSet: item_count,\n     pageNumber:pageNumber_,\n  };\n});\n\n// If there are no results, return at least one item with pagination info\nif (results.length === 0) {\n  return [{ \n    json: {\n      name: null,\n      title: null,\n      link: null,\n      snippet: null,\n      image: null,\n      startIndex: 101,\n      hasMoreResults: false,\n      pageNumber:pageNumber_,\n    }\n  }];\n}\n\n// Return the processed results\nreturn results.map(r => ({ json: r }));"
          },
          "typeVersion": 2
        },
        {
          "id": "00b0ec01-e51f-447d-b25f-3023540192c9",
          "name": "Set Fields",
          "type": "n8n-nodes-base.set",
          "position": [
            -384,
            -976
          ],
          "parameters": {
            "options": {},
            "assignments": {
              "assignments": [
                {
                  "id": "cc27b2d9-8de7-43ca-a741-2d150084f78e",
                  "name": "currentStartIndex",
                  "type": "number",
                  "value": "=1"
                },
                {
                  "id": "fc552c57-4510-4f04-aa09-2294306d0d9f",
                  "name": "maxPages",
                  "type": "number",
                  "value": 10
                }
              ]
            }
          },
          "typeVersion": 3.4
        },
        {
          "id": "59193a13-6719-4944-9013-0ef37f991a59",
          "name": "If",
          "type": "n8n-nodes-base.if",
          "position": [
            1184,
            -992
          ],
          "parameters": {
            "options": {},
            "conditions": {
              "options": {
                "version": 2,
                "leftValue": "",
                "caseSensitive": true,
                "typeValidation": "strict"
              },
              "combinator": "and",
              "conditions": [
                {
                  "id": "05ee7d79-62bd-4fed-9a08-4c0f7b445f75",
                  "operator": {
                    "type": "number",
                    "operation": "lte"
                  },
                  "leftValue": "={{ $json.startIndex+ 9 }}",
                  "rightValue": 1000
                }
              ]
            }
          },
          "typeVersion": 2.2
        }
      ],
      "pinData": {},
      "connections": {
        "If": {
          "main": [
            [
              {
                "node": "Search Google",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Wait": {
          "main": [
            [
              {
                "node": "Add to Sheet",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Pagination": {
          "main": [
            [
              {
                "node": "Pagination Check",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Set Fields": {
          "main": [
            [
              {
                "node": "Search Google",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Add to Sheet": {
          "main": [
            [
              {
                "node": "Pagination",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Search Google": {
          "main": [
            [
              {
                "node": "Extract Results",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Extract Results": {
          "main": [
            [
              {
                "node": "Wait",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Pagination Check": {
          "main": [
            [
              {
                "node": "If",
                "type": "main",
                "index": 0
              }
            ]
          ]
        },
        "Schedule Trigger": {
          "main": [
            [
              {
                "node": "Set Fields",
                "type": "main",
                "index": 0
              }
            ]
          ]
        }
      }
    }