{
  "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
          }
        ]
      ]
    }
  }
}