competitor follower scraper
Shared 11/13/2025
388 views
Visual Workflow
JSON Code
{
"id": "pJgB2QgMEmf4zLIe",
"meta": {
"instanceId": "f60330b05f7488b5b1d05388dafae39e4870f8337f359bf70a3b4c76201c7e88"
},
"name": "competitor follower scraper",
"tags": [],
"nodes": [
{
"id": "24b6fd0a-6c64-4466-aa29-a282d0289ffd",
"name": "When chat message received",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
-620,
0
],
"webhookId": "88b00f06-a90d-49cb-8999-1958650fa061",
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "f10f906e-c3e3-4677-9e9a-757553ae4a39",
"name": "Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
2620,
-20
],
"parameters": {
"columns": {
"value": {
"job": "={{ $('Profile Linkedin scraper').item.json.jobTitle }}",
"name": "={{ $('Profile Linkedin scraper').item.json.name }}",
"email": "={{ $('Profile Linkedin scraper').item.json.email }}",
"company": "={{ $('Profile Linkedin scraper').item.json.company }}",
"website": "={{ $('Profile Linkedin scraper').item.json.website }}",
"headline": "={{ $('Profile Linkedin scraper').item.json.headline }}",
"education": "={{ $('Profile Linkedin scraper').item.json.education }}",
"location ": "={{ $('Profile Linkedin scraper').item.json.location }}",
"linkedinurl": "={{ $('Profile Linkedin scraper').item.json.linkedinUrl }}",
"personnalized opener": "={{ $json.output }}"
},
"schema": [
{
"id": "name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "job",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "job",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "company",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "company",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "location ",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "location ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "website",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "education",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "education",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "headline",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "headline",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "linkedinurl",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "linkedinurl",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "personnalized opener",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "personnalized opener",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "company description",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "company description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "company size",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "company size",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "industry",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "industry",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false,
"ignoreTypeMismatchErrors": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VpRchxHWPO6BGcVHda9Zi2VMfEa2iSgnL-HcaNmbEXU/edit#gid=0",
"cachedResultName": "Feuille 1"
},
"documentId": {
"__rl": true,
"mode": "url",
"value": "https://docs.google.com/spreadsheets/d/1VpRchxHWPO6BGcVHda9Zi2VMfEa2iSgnL-HcaNmbEXU/edit?gid=0#gid=0"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "g9VmfGQduouZIgCI",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "6e804a84-baf0-4690-93e8-3f6d37cf5217",
"name": "AI Agent : personalization",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2000,
-20
],
"parameters": {
"text": "=Prospect name : {{ $('If').item.json.name }}\nProspect title: {{ $('If').item.json.jobTitle }}\nProspect company: {{ $('If').item.json.company }}\nProspect location {{ $('If').item.json.location }}\nProspect education : {{ $('If').item.json.education }}\nProspect headline: {{ $('If').item.json.headline }}\n\nCompany description : {{ $json.description }}\nCompany locaton : {{ $json.location }}\ncompany size : {{ $json.size }}",
"options": {
"systemMessage": "=<task>\nYou are an expert at writing personalized email opening lines for B2B outreach. Your goal is to create a compelling, natural, and relevant opening sentence that will capture the prospect's attention and encourage them to continue reading.\n</task>\n\n<instructions>\n1. Write ONE personalized opening sentence (15-25 words maximum)\n2. Reference at least ONE specific element from the prospect data (company, role, industry, or location)\n3. Use a professional yet conversational tone\n4. Avoid generic phrases like \"I hope this email finds you well\"\n5. Make it relevant to their current position and responsibilities\n6. Do NOT use overly flattering language or exaggeration\n7. Output ONLY the opening sentence, nothing else\n</instructions>\n\n<examples>\nExample 1 (for a VP of Sales): \"I noticed your work leading sales at [Company] in the [Industry] space and wanted to share something relevant to your team's growth.\"\n\nExample 2 (for a Marketing Director): \"Given your role scaling marketing efforts at [Company], I thought you'd be interested in how similar [Industry] companies are approaching [relevant topic].\"\n\nExample 3 (location-based): \"As someone driving [function] initiatives in [Location], you're likely seeing [relevant industry trend].\"\n</examples>\n\n<output_format>\nOutput only the personalized opening sentence with no additional text, explanations, or formatting.\n</output_format>"
},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "887011c6-ba07-4c17-8504-bf005124591c",
"name": "HTTP Request36",
"type": "n8n-nodes-base.httpRequest",
"position": [
520,
0
],
"parameters": {
"options": {},
"jsonBody": "={\n \"limit\": 10,\n \"username\": \"{{ $json.result }}\"\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.2
},
{
"id": "0b59031b-76bb-4e9b-b4e5-22633aa5e648",
"name": "OpenAI Chat Model9",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2020,
240
],
"parameters": {
"model": "=google/gemini-2.5-flash",
"options": {}
},
"credentials": {
"openAiApi": {
"id": "nUVy4a5bkNWpvrUp",
"name": "OpenAi account"
}
},
"typeVersion": 1.1
},
{
"id": "b4ddef68-a9b8-41b2-be60-b341e45c67bd",
"name": "Profile Linkedin scraper",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
1440,
0
],
"parameters": {
"url": "http://api.linkfinderai.com",
"method": "POST",
"options": {
"batching": {
"batch": {
"batchSize": 25,
"batchInterval": 25000
}
}
},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "type",
"value": "linkedin_post_to_reactions"
},
{
"name": "input_data",
"value": "={{ $json.url }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "8586d6b0-56d9-4a14-8d0b-0131ca9dca59",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
360,
-220
],
"parameters": {
"color": 5,
"width": 420,
"height": 600,
"content": "We use an Apify scraper to find all the posts from this user \nYOU MUST ADD THE GET CALL URL\n\nThe one to choose is RUN ACTOR AND GET DATASET from this apify actor : \n\nhttps://console.apify.com/actors/563JCPLOqM1kMmbbP/input"
},
"typeVersion": 1
},
{
"id": "4017aa27-4e6a-488d-abd7-53a996f4d840",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1300,
-240
],
"parameters": {
"color": 6,
"width": 380,
"height": 600,
"content": "Linkedin Post Reactions scrpaer :\n\nWe use Linfinder AI to scrapp all the poeple who reacted to a Linkedin post \n\nAdd you API key to this node, you can get it here after you create an account : https://linkfinderai.com/"
},
"typeVersion": 1
},
{
"id": "aaed6a15-e851-456a-80ba-652230dd7618",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-680,
-220
],
"parameters": {
"color": 5,
"width": 300,
"height": 600,
"content": "Enter a competitor name :\nDon't enter a company but a linkedin user \n\nExample : Sundar Pichai Google"
},
"typeVersion": 1
},
{
"id": "92e55030-af19-4ff7-885f-9bc2a1ac2eaf",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1840,
-240
],
"parameters": {
"width": 620,
"height": 640,
"content": "Personalized ice breaker :\n\nWe use an ai agent to create an personnalized Ice-breaker for each prospect"
},
"typeVersion": 1
},
{
"id": "5284179d-6fcb-4590-9d8c-782851ebc0ac",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2520,
-240
],
"parameters": {
"color": 3,
"width": 260,
"height": 640,
"content": "Add leads to google sheets or directly in your outbound tool."
},
"typeVersion": 1
},
{
"id": "500ff23e-9542-4ba4-b51f-055f25204893",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-200,
-220
],
"parameters": {
"color": 6,
"width": 380,
"height": 600,
"content": "Find Linkedin Url for the competitor :\n\nWe use Linfinder AI, a linkedin scraper which does not connect to your Linkedin account (so no ban risk for your Linkedin) \n\nAdd your API key to this node, you can get it here after you create an account : https://linkfinderai.com/"
},
"typeVersion": 1
},
{
"id": "9b769dd8-8124-4dfc-8c47-de043d9f165e",
"name": "Find Linkedin url",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
-60,
0
],
"parameters": {
"url": "http://api.linkfinderai.com",
"method": "POST",
"options": {},
"sendBody": true,
"sendHeaders": true,
"bodyParameters": {
"parameters": [
{
"name": "type",
"value": "lead_full_name_to_linkedin_url"
},
{
"name": "input_data",
"value": "={{ $json.chatInput }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "Authorization"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "4b98a7ca-3d63-4003-bb25-d00555400172",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1060,
0
],
"parameters": {
"options": {}
},
"typeVersion": 3
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "34608241-f994-421a-9383-79050800b363",
"connections": {
"Google Sheets": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"HTTP Request36": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Profile Linkedin scraper",
"type": "main",
"index": 0
}
]
]
},
"Find Linkedin url": {
"main": [
[
{
"node": "HTTP Request36",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model9": {
"ai_languageModel": [
[
{
"node": "AI Agent : personalization",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Profile Linkedin scraper": {
"main": [
[
{
"node": "AI Agent : personalization",
"type": "main",
"index": 0
}
]
]
},
"AI Agent : personalization": {
"main": [
[
{
"node": "Google Sheets",
"type": "main",
"index": 0
}
]
]
},
"When chat message received": {
"main": [
[
{
"node": "Find Linkedin url",
"type": "main",
"index": 0
}
]
]
}
}
}