This workflow corresponds to n8n.io template #13380 — we link there as the canonical source.
This workflow follows the Agent → Google Sheets 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 →
{
"id": "7xCdl21dCjUX9qu6",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Monitor Clutch categories for new agencies to Slack With BrowserAct and Gemini",
"tags": [],
"nodes": [
{
"id": "da5e1b17-c51f-42df-bfc4-08a2ddcd0874",
"name": "Splitting Items",
"type": "n8n-nodes-base.code",
"position": [
1008,
400
],
"parameters": {
"jsCode": "// Get the JSON string using the exact path provided by the user.\nconst jsonString = $input.first().json.output.string;\n\nlet parsedData;\n\n// Check if the string exists before attempting to parse\nif (!jsonString) {\n // Return an empty array or throw an error if no string is found\n // Throwing an error is usually better to stop the workflow if data is missing.\n throw new Error(\"Input string is empty or missing at the specified path: $input.first().json.output.string\");\n}\n\ntry {\n // 1. Parse the JSON string into a JavaScript array of objects\n parsedData = JSON.parse(jsonString);\n} catch (error) {\n // Handle JSON parsing errors (e.g., if the string is malformed)\n throw new Error(`Failed to parse JSON string: ${error.message}`);\n}\n\n// 2. Ensure the parsed data is an array\nif (!Array.isArray(parsedData)) {\n throw new Error('Parsed data is not an array. It cannot be split into multiple items.');\n}\n\n// 3. Map the array of objects into the n8n item format { json: object }\n// Each element in this array will be treated as a new item by n8n, achieving the split.\nconst outputItems = parsedData.map(item => ({\n json: item,\n}));\n\n// 4. Return the new array of items\nreturn outputItems;"
},
"typeVersion": 2
},
{
"id": "8730a07a-4045-4cab-a0ad-704b69177c1e",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1232,
400
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "4e9c9a70-5565-4e19-a2dc-6ec137789ad2",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1728,
752
],
"parameters": {
"autoFix": true,
"jsonSchemaExample": "{\n \"company_name\": \"String\",\n \"website_url\": \"String\",\n \"min_project_value_usd\": 100,\n \"hourly_rate_low\": 10,\n \"hourly_rate_high\": 20,\n \"employees_range\": \"String\",\n \"city\": \"String\",\n \"country\": \"String\",\n \"short_description\": \"String\"\n}"
},
"typeVersion": 1.3
},
{
"id": "d7bab813-929f-4edf-8e78-444e525f6bfd",
"name": "OpenRouter Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
1600,
752
],
"parameters": {
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "42653844-70dd-4832-b8a0-896753a90b2c",
"name": "Aggregate",
"type": "n8n-nodes-base.aggregate",
"position": [
1904,
0
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "Old_Data"
},
"typeVersion": 1
},
{
"id": "c9e38712-ea4e-4254-8a4d-48189ed9e9fb",
"name": "Aggregate1",
"type": "n8n-nodes-base.aggregate",
"position": [
1904,
192
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "New_Data"
},
"typeVersion": 1
},
{
"id": "e3dd1445-dc25-4426-82b2-f56d16b33284",
"name": "Structured Output Parser1",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2432,
320
],
"parameters": {
"autoFix": true,
"jsonSchemaExample": "{\n \"status\": \"success\",\n \"new_leads_found\": true,\n \"count\": 1,\n \"slack_message_text\": \"String (The formatted message for Slack)\",\n \"leads\": [ \n {\n \"name\": \"String\",\n \"website\": \"String\",\n \"match_reason\": \"String (Why is this a good lead?)\"\n }\n ]\n}"
},
"typeVersion": 1.3
},
{
"id": "c1ea4642-4e89-4e9a-abce-56bb6600b043",
"name": "OpenRouter Chat Model1",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
2320,
320
],
"parameters": {
"model": "google/gemini-2.5-pro",
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "220ea1a2-fe0f-4b15-a6e6-0d623e1d819b",
"name": "Loop Over Items1",
"type": "n8n-nodes-base.splitInBatches",
"position": [
3440,
96
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "8ee7a9f5-7ee0-4c20-b8e5-577a210b25b0",
"name": "Weekly Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
112,
400
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks"
}
]
}
},
"typeVersion": 1.3
},
{
"id": "97acdfe5-a3dc-48fc-a12e-a0f817a527d4",
"name": "Clear Database",
"type": "n8n-nodes-base.googleSheets",
"position": [
336,
400
],
"parameters": {
"operation": "clear",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1374703848,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit#gid=1374703848",
"cachedResultName": "Second Extraction"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit?usp=drivesdk",
"cachedResultName": "The New Entrant Asset Finder"
},
"keepFirstRow": true
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "646f4696-ab8a-4d7c-825f-618475a5f25a",
"name": "Clutch Category Link",
"type": "n8n-nodes-base.set",
"position": [
560,
400
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "e992c103-e165-4173-b520-e73a31785d9f",
"name": "Target_Category_Link",
"type": "string",
"value": "https://clutch.co/developers"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "858f57ff-4aa6-499a-8985-365719327a0a",
"name": "Scrape page funding data",
"type": "n8n-nodes-browseract.browserAct",
"position": [
784,
400
],
"parameters": {
"type": "WORKFLOW",
"workflowId": "76190590932330027",
"workflowConfig": {
"value": {
"input-Clutch_Target_Category": "={{ $json.Target_Category_Link }}"
},
"schema": [
{
"id": "input-Clutch_Target_Category",
"type": "string",
"display": true,
"removed": false,
"required": false,
"description": "If left blank, the default value defined in BrowserAct will be used.",
"displayName": "Clutch_Target_Category",
"defaultMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"input-Clutch_Target_Category"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
}
},
"credentials": {
"browserActApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "d43c5c90-f460-4b52-bb4c-2d71d826ea62",
"name": "Analyze the extracted funds for each company",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
1632,
576
],
"parameters": {
"text": "={{ $json }}",
"options": {
"systemMessage": "You are a Data Cleaning & Formatting Agent for a lead generation pipeline.\nYour goal is to receive raw, unstructured scraped JSON and output a flat, clean JSON object optimized for Google Sheets.\n\n### INPUT DATA:\nYou will receive a JSON object with fields: \"Company Name\", \"Website URL\", \"Min Project Size\", \"Hourly Rate\", \"Employee Count\", \"Location\", \"Description\".\n\n### PROCESSING RULES:\n1. **Company Name**: Keep as is.\n2. **Website URL**: \n - Identify if the URL is a \"clutch.co/redirect\" link. \n - If it is, output the link as is (do not try to \"guess\" the real domain unless explicitly visible).\n - If the URL contains dirty parameters (utm_source, etc.), remove them to keep it clean.\n3. **Min Project Size**: \n - Convert \"$10,000+\" to a pure integer: 10000.\n - If \"Undisclosed\", set to 0.\n4. **Hourly Rate**: \n - Split \"$50 - $99 / hr\" into two fields: \"Hourly_Rate_Low\" (50) and \"Hourly_Rate_High\" (99).\n - If it is a single value like \"< $25\", set Low to 0 and High to 25.\n5. **Location**: \n - Split \"Warszawa, Poland\" into two fields: \"City\" (Warszawa) and \"Country\" (Poland).\n6. **Description**: \n - Keep the text but remove newlines (\\n) or excessive whitespace.\n\n### OUTPUT FORMAT:\nReturn ONLY a valid JSON object with the following structure. Do not include markdown formatting or conversational text.\n\n{\n \"company_name\": \"String\",\n \"website_url\": \"String\",\n \"min_project_value_usd\": Number,\n \"hourly_rate_low\": Number,\n \"hourly_rate_high\": Number,\n \"employees_range\": \"String\",\n \"city\": \"String\",\n \"country\": \"String\",\n \"short_description\": \"String\"\n}"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3
},
{
"id": "9e128f1d-7051-4d22-a3dc-0a2f80c05e08",
"name": "Upsert new records",
"type": "n8n-nodes-base.googleSheets",
"position": [
2192,
688
],
"parameters": {
"columns": {
"value": {
"city": "={{ $json.output.city }}",
"country": "={{ $json.output.country }}",
"website_url": "={{ $json.output.website_url }}",
"company_name": "={{ $json.output.company_name }}",
"employees_range": "={{ $json.output.employees_range }}",
"hourly_rate_low": "={{ $json.output.hourly_rate_low }}",
"hourly_rate_high": "={{ $json.output.hourly_rate_high }}",
"short_description": "={{ $json.output.short_description }}",
"min_project_value_usd": "={{ $json.output.min_project_value_usd }}"
},
"schema": [
{
"id": "company_name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "company_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "website_url",
"type": "string",
"display": true,
"required": false,
"displayName": "website_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "min_project_value_usd",
"type": "string",
"display": true,
"required": false,
"displayName": "min_project_value_usd",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "hourly_rate_low",
"type": "string",
"display": true,
"required": false,
"displayName": "hourly_rate_low",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "hourly_rate_high",
"type": "string",
"display": true,
"required": false,
"displayName": "hourly_rate_high",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "employees_range",
"type": "string",
"display": true,
"required": false,
"displayName": "employees_range",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "city",
"type": "string",
"display": true,
"required": false,
"displayName": "city",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "country",
"type": "string",
"display": true,
"required": false,
"displayName": "country",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "short_description",
"type": "string",
"display": true,
"required": false,
"displayName": "short_description",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"company_name"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1374703848,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit#gid=1374703848",
"cachedResultName": "Second Extraction"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit?usp=drivesdk",
"cachedResultName": "The New Entrant Asset Finder"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "2493b3f0-c6d3-4c0c-94ae-eb83487bedcb",
"name": "Get old extraction data",
"type": "n8n-nodes-base.googleSheets",
"position": [
1568,
0
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit#gid=0",
"cachedResultName": "Database (First Extarction)"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit?usp=drivesdk",
"cachedResultName": "The New Entrant Asset Finder"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.7
},
{
"id": "4d90d3c3-e9ea-4a85-a85c-6071348e5c68",
"name": "Get fresh extracted data",
"type": "n8n-nodes-base.googleSheets",
"position": [
1568,
192
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1374703848,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit#gid=1374703848",
"cachedResultName": "Second Extraction"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit?usp=drivesdk",
"cachedResultName": "The New Entrant Asset Finder"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.7
},
{
"id": "c5877f76-07da-4615-9473-f8295a79bc8e",
"name": "Sync parallel paths",
"type": "n8n-nodes-base.merge",
"position": [
2128,
96
],
"parameters": {
"mode": "chooseBranch"
},
"typeVersion": 3.2
},
{
"id": "d2d3e883-6b7f-4c51-8460-627c0418b650",
"name": "Detect data changes",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2352,
96
],
"parameters": {
"text": "=EXISTING_DB : {{ JSON.stringify($('Aggregate').first().json.Old_Data, null, 2) }}\nFRESH_SCRAPE : {{ JSON.stringify($('Aggregate1').first().json.New_Data, null, 2) }}",
"options": {
"systemMessage": "You are a Reporting Bot.\nyou will be given Aggregated array \"EXISTING_DB\" and \"FRESH_SCRAPE\"\nCompare the \"FRESH_SCRAPE\" list against the \"EXISTING_DB\" list.\nIdentify unique companies (where website URL or Company Name is not in EXISTING_DB).\n\n### OUTPUT REQUIREMENT:\nYou must return a valid JSON object. Do NOT return markdown text outside the JSON.\n\n### JSON STRUCTURE:\n{\n \"status\": \"success\",\n \"new_leads_found\": true/false,\n \"count\": Number,\n \"slack_message_text\": \"String (The formatted message for Slack)\",\n \"leads\": [ // Array of the new companies found\n {\n \"name\": \"String\",\n \"website\": \"String\",\n \"match_reason\": \"String (Why is this a good lead?)\"\n }\n ]\n}\n\n### CONTENT RULES FOR \"slack_message_text\":\n1. If count > 0: Use this format:\n \"\ud83d\ude80 *Hot 7 Alert: {COUNT} New Assets Detected*\n \n *1. {Company Name}* | {Location}\n \ud83d\udcb0 {Rate} | \ud83d\udd17 <{URL}|Link>\n _{One sentence summary}_\"\n\n2. If count = 0: Use this format:\n \"\ud83d\udca4 *New Entry Workflow Report:* No new leads found in this scan.\""
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 3
},
{
"id": "7bf64a6b-926c-4ce4-aa60-0abe09e328fa",
"name": "Notify team",
"type": "n8n-nodes-base.slack",
"position": [
2880,
96
],
"parameters": {
"text": "={{ $json.output.slack_message_text }} ,\n{{ $json.output.leads }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KLV9DJSX",
"cachedResultName": "all-browseract-workflow-test"
},
"otherOptions": {}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.4
},
{
"id": "6ac3e7dd-8c75-42b5-b882-9d316ffb37d1",
"name": "Clear Old data",
"type": "n8n-nodes-base.googleSheets",
"position": [
3072,
96
],
"parameters": {
"operation": "clear",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit#gid=0",
"cachedResultName": "Database (First Extarction)"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit?usp=drivesdk",
"cachedResultName": "The New Entrant Asset Finder"
},
"keepFirstRow": true
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.7
},
{
"id": "aea1c8b5-8254-4d4b-af8f-7a0d7594629b",
"name": "Retrieve latest data",
"type": "n8n-nodes-base.googleSheets",
"position": [
3248,
96
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1374703848,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit#gid=1374703848",
"cachedResultName": "Second Extraction"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit?usp=drivesdk",
"cachedResultName": "The New Entrant Asset Finder"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.7
},
{
"id": "e0e099e1-0985-45a4-a6f0-b389a74576ab",
"name": "Prevent rate limits",
"type": "n8n-nodes-base.wait",
"position": [
1968,
576
],
"parameters": {
"amount": 3
},
"typeVersion": 1.1
},
{
"id": "d11baeee-2629-49e4-b59f-391def1f4180",
"name": "Avoid rate limits",
"type": "n8n-nodes-base.wait",
"position": [
3664,
32
],
"parameters": {
"amount": 3
},
"typeVersion": 1.1
},
{
"id": "e3720bf3-b315-440c-a03e-031d1b2f2929",
"name": "Replace old data with new",
"type": "n8n-nodes-base.googleSheets",
"position": [
3888,
96
],
"parameters": {
"columns": {
"value": {
"city": "={{ $json.city }}",
"country": "={{ $json.country }}",
"website_url": "={{ $json.website_url }}",
"company_name": "={{ $json.company_name }}",
"employees_range": "={{ $json.employees_range }}",
"hourly_rate_low": "={{ $json.hourly_rate_low }}",
"hourly_rate_high": "={{ $json.hourly_rate_high }}",
"short_description": "={{ $json.short_description }}",
"min_project_value_usd": "={{ $json.min_project_value_usd }}"
},
"schema": [
{
"id": "company_name",
"type": "string",
"display": true,
"required": false,
"displayName": "company_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "website_url",
"type": "string",
"display": true,
"required": false,
"displayName": "website_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "min_project_value_usd",
"type": "string",
"display": true,
"required": false,
"displayName": "min_project_value_usd",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "hourly_rate_low",
"type": "string",
"display": true,
"required": false,
"displayName": "hourly_rate_low",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "hourly_rate_high",
"type": "string",
"display": true,
"required": false,
"displayName": "hourly_rate_high",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "employees_range",
"type": "string",
"display": true,
"required": false,
"displayName": "employees_range",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "city",
"type": "string",
"display": true,
"required": false,
"displayName": "city",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "country",
"type": "string",
"display": true,
"required": false,
"displayName": "country",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "short_description",
"type": "string",
"display": true,
"required": false,
"displayName": "short_description",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit#gid=0",
"cachedResultName": "Database (First Extarction)"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1XFbcnBlO5W4MNqao1yHux3FNxew1GtqzxzLSqWNOYOc/edit?usp=drivesdk",
"cachedResultName": "The New Entrant Asset Finder"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "3352d982-2e78-47d3-8293-479e07bbfc3a",
"name": "Documentation",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
-176
],
"parameters": {
"width": 380,
"height": 536,
"content": "## \u26a1 The New Entrant Asset Finder\n\n**Summary:** This automation continuously scouts for new B2B service providers (e.g., development agencies) entering the market. It scrapes Clutch.co, compares the findings against an existing database, identifies fresh leads, and alerts your team via Slack.\n\n### Requirements\n* **Credentials:** BrowserAct, OpenRouter (GPT-4), Google Sheets, Slack.\n* **Mandatory:** BrowserAct API (Template: **The New Entrant Asset Finder**)\n\n### How to Use\n1. **Credentials:** Set up API keys for all services.\n2. **BrowserAct Template:** Ensure the **The New Entrant Asset Finder** template is active.\n3. **Google Sheet:** Prepare two sheets: one for the live database (`Database`) and one for the latest extraction (`Second Extraction`).\n4. **Target:** Configure the **Clutch Category Link** node with the specific service category you want to monitor (e.g., `clutch.co/developers`).\n\n### Need Help?\n[How to Find Your BrowserAct API Key & Workflow ID](https://docs.browseract.com)\n[How to Connect n8n to BrowserAct](https://docs.browseract.com)\n[How to Use & Customize BrowserAct Templates](https://docs.browseract.com)"
},
"typeVersion": 1
},
{
"id": "be73d738-0163-4c31-a7f5-5946f0d5428b",
"name": "Step 1 Explanation",
"type": "n8n-nodes-base.stickyNote",
"position": [
112,
240
],
"parameters": {
"color": 7,
"width": 1004,
"height": 124,
"content": "### \ud83d\udd75\ufe0f Step 1: Market Scanning\n\nThe workflow triggers weekly to visit a target category on Clutch.co. BrowserAct scrapes the latest list of companies, capturing key data points like project size, hourly rates, and team size."
},
"typeVersion": 1
},
{
"id": "6a320296-c2ae-4c47-8827-31f7681e84d5",
"name": "Step 2 Explanation",
"type": "n8n-nodes-base.stickyNote",
"position": [
1344,
912
],
"parameters": {
"color": 7,
"width": 1004,
"height": 156,
"content": "### \ud83e\uddf9 Step 2: Data Cleaning\n\nRaw scraped data is often messy. An AI agent processes each entry to standardize currency formats, split location strings (City/Country), and clean up descriptions before any further analysis."
},
"typeVersion": 1
},
{
"id": "489eac97-4370-4920-b056-cdbe8b4ba2e2",
"name": "Step 3 Explanation",
"type": "n8n-nodes-base.stickyNote",
"position": [
1520,
-160
],
"parameters": {
"color": 7,
"width": 1036,
"height": 140,
"content": "### \ud83d\udd0d Step 3: Change Detection\n\nThe system compares the newly scraped list against the existing database. An AI agent identifies companies that are *new* to the list or have significant updates, filtering out stale data."
},
"typeVersion": 1
},
{
"id": "03c831f5-afce-4246-aedf-669887a1f7dc",
"name": "Step 4 Explanation",
"type": "n8n-nodes-base.stickyNote",
"position": [
2896,
-160
],
"parameters": {
"color": 7,
"width": 1128,
"height": 136,
"content": "### \ud83d\udce2 Step 4: Alert & Archive\n\nIf new entrants are found, a \"Hot Alert\" is sent to Slack with details on the new companies. Finally, the main database is updated to include the fresh leads for the next cycle."
},
"typeVersion": 1
},
{
"id": "e0cd598a-9040-4c32-9976-974432cfeb3c",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
112,
-176
],
"parameters": {
"color": 6,
"width": 688,
"height": 400,
"content": "@[youtube](LTNHYvObTtc)"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "0baa6c96-412a-4a2e-8189-abf7f451e346",
"connections": {
"Aggregate": {
"main": [
[
{
"node": "Sync parallel paths",
"type": "main",
"index": 0
}
]
]
},
"Aggregate1": {
"main": [
[
{
"node": "Sync parallel paths",
"type": "main",
"index": 1
}
]
]
},
"Notify team": {
"main": [
[
{
"node": "Clear Old data",
"type": "main",
"index": 0
}
]
]
},
"Clear Database": {
"main": [
[
{
"node": "Clutch Category Link",
"type": "main",
"index": 0
}
]
]
},
"Clear Old data": {
"main": [
[
{
"node": "Retrieve latest data",
"type": "main",
"index": 0
}
]
]
},
"Weekly Trigger": {
"main": [
[
{
"node": "Clear Database",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Get old extraction data",
"type": "main",
"index": 0
},
{
"node": "Get fresh extracted data",
"type": "main",
"index": 0
}
],
[
{
"node": "Analyze the extracted funds for each company",
"type": "main",
"index": 0
}
]
]
},
"Splitting Items": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items1": {
"main": [
[],
[
{
"node": "Avoid rate limits",
"type": "main",
"index": 0
}
]
]
},
"Avoid rate limits": {
"main": [
[
{
"node": "Replace old data with new",
"type": "main",
"index": 0
}
]
]
},
"Upsert new records": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Detect data changes": {
"main": [
[
{
"node": "Notify team",
"type": "main",
"index": 0
}
]
]
},
"Prevent rate limits": {
"main": [
[
{
"node": "Upsert new records",
"type": "main",
"index": 0
}
]
]
},
"Sync parallel paths": {
"main": [
[
{
"node": "Detect data changes",
"type": "main",
"index": 0
}
]
]
},
"Clutch Category Link": {
"main": [
[
{
"node": "Scrape page funding data",
"type": "main",
"index": 0
}
]
]
},
"Retrieve latest data": {
"main": [
[
{
"node": "Loop Over Items1",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "Analyze the extracted funds for each company",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Structured Output Parser",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenRouter Chat Model1": {
"ai_languageModel": [
[
{
"node": "Detect data changes",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Structured Output Parser1",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Get old extraction data": {
"main": [
[
{
"node": "Aggregate",
"type": "main",
"index": 0
}
]
]
},
"Get fresh extracted data": {
"main": [
[
{
"node": "Aggregate1",
"type": "main",
"index": 0
}
]
]
},
"Scrape page funding data": {
"main": [
[
{
"node": "Splitting Items",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Analyze the extracted funds for each company",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Replace old data with new": {
"main": [
[
{
"node": "Loop Over Items1",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser1": {
"ai_outputParser": [
[
{
"node": "Detect data changes",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Analyze the extracted funds for each company": {
"main": [
[
{
"node": "Prevent rate limits",
"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.
browserActApigoogleSheetsOAuth2ApiopenRouterApislackApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow automates the discovery of new B2B service providers entering the market. It scrapes a specific category on Clutch.co weekly, standardizes the data using AI, and compares it against a historical database to identify only the fresh "new entrants." These leads are…
Source: https://n8n.io/workflows/13380/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow automates competitive intelligence by continuously monitoring competitor websites for pricing and feature updates. It scrapes current data using BrowserAct, compares it against historica
This workflow automates Generative Engine Optimization (GEO) tracking by monitoring how your company appears in AI search results. It generates strategic queries, simulates searches on AI engines like
This workflow acts as an automated marketing analyst. It runs weekly to scrape competitor landing pages, compare them against historical data to detect changes in pricing, messaging, or offers, and de
This workflow performs a comprehensive security audit on your web scraping infrastructure to detect potential IP leaks or bot detection flags. It iterates through a list of fingerprinting services and
This workflow automates the process of market research by generating high-quality, curated digests of Medium articles for specific topics. It scrapes recent content, uses AI to filter out spam and dup