This workflow corresponds to n8n.io template #9945 — we link there as the canonical source.
This workflow follows the Google Sheets → Slack 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": "d2wBhCQb4NmmVxvP",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "GitHub User Activity & Data Scraper (Data Enrichment Engine)",
"tags": [],
"nodes": [
{
"id": "9622f349-2793-4b86-8cf4-0892dc420273",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
64,
-16
],
"parameters": {},
"typeVersion": 1
},
{
"id": "6920fa53-2dd0-4e7c-8c7c-59eda7951047",
"name": "Get row(s) in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
192,
-16
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1185614504,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0/edit#gid=1185614504",
"cachedResultName": "Source Top GitHub Contributors by Language & Location"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/18sw7io0yJOTDzvcknGmjBBqtK154CLk3k0FoWJZbfI0/edit?usp=drivesdk",
"cachedResultName": "Test For BrowserAct"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "c5998bf0-55a7-4837-a6c2-fc2da9d63729",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
336,
-16
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "9ffc5569-0d41-48ff-a3b0-9bd73a89d011",
"name": "Run a workflow task",
"type": "n8n-nodes-browseract-workflows.browserAct",
"position": [
496,
0
],
"parameters": {
"workflowId": "57481883835648378",
"inputParameters": {
"parameters": [
{
"name": "Target_Page",
"value": "={{ $json.URL }}"
}
]
},
"additionalFields": {}
},
"credentials": {
"browserActApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "d1ec986d-a88c-4cfe-8657-8d66bd12ec54",
"name": "Get details of a workflow task",
"type": "n8n-nodes-browseract-workflows.browserAct",
"position": [
656,
0
],
"parameters": {
"taskId": "={{ $json.id }}",
"operation": "getTask",
"maxWaitTime": 900,
"waitForFinish": true,
"pollingInterval": 20
},
"credentials": {
"browserActApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "769ae773-ce8c-4f47-b06f-4b7fc8a420e4",
"name": "Code in JavaScript",
"type": "n8n-nodes-base.code",
"position": [
832,
0
],
"parameters": {
"jsCode": "// This code fixes malformed JSON strings and merges the contents into a single object.\n\n// 1. Get the raw, potentially broken string from the previous node.\nconst rawJsonString = $input.first().json.output.string;\n\n// 2. **CRITICAL FIX STEP**: Add missing quotes around keys.\n// This regex finds keys like {key: or ,key: and changes them to {\"key\":\n// This repairs the common error made by the agent.\nconst fixedJsonString = rawJsonString.replace(/([{,])\\s*([a-zA-Z0-9_]+)\\s*:/g, '$1\"$2\":');\n\nconst mergedObject = {};\n\ntry {\n // 3. Parse the *fixed* string into a real JavaScript array.\n const dataArray = JSON.parse(fixedJsonString);\n\n // 4. Loop through the array and merge all objects into one.\n for (const item of dataArray) {\n Object.assign(mergedObject, item);\n }\n\n // 5. **Handle Nested Strings**: After merging, check all values.\n // If any value is a string that looks like JSON, parse it too.\n for (const key in mergedObject) {\n const value = mergedObject[key];\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n if ((trimmedValue.startsWith('[') && trimmedValue.endsWith(']')) || (trimmedValue.startsWith('{') && trimmedValue.endsWith('}'))) {\n try {\n // If it looks like JSON, parse it and replace the string.\n mergedObject[key] = JSON.parse(trimmedValue);\n } catch (e) {\n // If parsing fails, it's not valid JSON. Leave it as a string.\n }\n }\n }\n }\n\n} catch (error) {\n // If the string is still not valid JSON after the fix, this will prevent a crash.\n throw new Error('The input text could not be parsed as JSON, even after attempting a fix. Error: ' + error.message);\n}\n\n// 6. Return the final, single, merged item.\nreturn [{\n json: mergedObject\n}];"
},
"typeVersion": 2
},
{
"id": "6a78e820-11aa-430b-8e42-b61a13604fbb",
"name": "Create sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
992,
-144
],
"parameters": {
"title": "={{ $json.Name }}",
"options": {},
"operation": "create",
"documentId": {
"__rl": true,
"mode": "list",
"value": "1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs/edit?usp=drivesdk",
"cachedResultName": "Github User Extracted Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.7,
"alwaysOutputData": true
},
{
"id": "9e702ed4-c37a-40d2-9745-48d386fdda92",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
1504,
-16
],
"parameters": {
"mode": "chooseBranch",
"useDataOfInput": 2
},
"typeVersion": 3.2
},
{
"id": "bcf8c1b2-4e65-4449-9975-9185061734d5",
"name": "Split Out",
"type": "n8n-nodes-base.splitOut",
"position": [
1712,
-96
],
"parameters": {
"options": {},
"fieldToSplitOut": "Links"
},
"typeVersion": 1
},
{
"id": "504c3e1f-e3ce-46df-b576-2bc7c785a45a",
"name": "Split Out1",
"type": "n8n-nodes-base.splitOut",
"position": [
1712,
-240
],
"parameters": {
"include": "selectedOtherFields",
"options": {},
"fieldToSplitOut": "Name",
"fieldsToInclude": "Username, Summary, Location"
},
"typeVersion": 1
},
{
"id": "07cca20e-cf62-466d-8318-324c9ddfe3a3",
"name": "Split Out2",
"type": "n8n-nodes-base.splitOut",
"position": [
1712,
64
],
"parameters": {
"options": {},
"fieldToSplitOut": "Repositories"
},
"typeVersion": 1
},
{
"id": "2a344e96-bea8-4829-b272-8ae9c1c53f11",
"name": "Clear sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1216,
-144
],
"parameters": {
"operation": "clear",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "={{ $('Code in JavaScript').item.json.Name }}"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs/edit?usp=drivesdk",
"cachedResultName": "Github User Extracted Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.7
},
{
"id": "b0e73398-0477-49c7-bb74-955f22c1aebb",
"name": "Edit Fields",
"type": "n8n-nodes-base.set",
"position": [
1104,
-144
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "871bd1a1-b2fd-447b-a50b-bddd7e5bd296",
"name": "Name",
"type": "string",
"value": ""
},
{
"id": "3fc833ec-3565-4a2e-9deb-db97cd53c883",
"name": "Username",
"type": "string",
"value": ""
},
{
"id": "431a0193-09b7-4bd5-9bb4-126a707823e6",
"name": "Location",
"type": "string",
"value": ""
},
{
"id": "80c0fff6-a932-488a-97ca-1731a115cc60",
"name": "Site",
"type": "string",
"value": ""
},
{
"id": "a031b9b9-0ba6-4816-ad53-1d894be77098",
"name": "link",
"type": "string",
"value": ""
},
{
"id": "2fa0be7b-a90c-4e94-a155-ed858a079bc3",
"name": "Title",
"type": "string",
"value": ""
},
{
"id": "f6179556-b5da-447f-bd9d-fa4f4fec010b",
"name": "Summary",
"type": "string",
"value": ""
},
{
"id": "181129b3-5bd9-4dec-8631-0f13efccd069",
"name": "Date",
"type": "string",
"value": ""
},
{
"id": "1de86602-919d-48e3-9d65-1e6e9157461a",
"name": "Programing Language",
"type": "string",
"value": ""
},
{
"id": "13a6a2db-41f7-4033-aafa-aff41eea112b",
"name": "Stars",
"type": "string",
"value": ""
}
]
}
},
"executeOnce": true,
"typeVersion": 3.4
},
{
"id": "0429c95a-48d5-415e-b7e8-f3bf381a2258",
"name": "Append row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1344,
-144
],
"parameters": {
"columns": {
"value": {
"Name": "={{ $('Edit Fields').item.json.Name }}",
"Summary": "=",
"Username": "={{ $('Edit Fields').item.json.Username }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Username",
"type": "string",
"display": true,
"required": false,
"displayName": "Username",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"type": "string",
"display": true,
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Location",
"type": "string",
"display": true,
"required": false,
"displayName": "Location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link",
"type": "string",
"display": true,
"required": false,
"displayName": "Link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Repositories_Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Repositories_Name",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "={{ $('Code in JavaScript').item.json.Name }}"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs/edit?usp=drivesdk",
"cachedResultName": "Github User Extracted Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": true,
"typeVersion": 4.7
},
{
"id": "7138b038-224a-44a9-ab25-833d8a51efa3",
"name": "Merge1",
"type": "n8n-nodes-base.merge",
"position": [
2176,
16
],
"parameters": {
"numberInputs": 3
},
"typeVersion": 3.2
},
{
"id": "bcb7fd00-f127-4d41-a16f-932b476f35c2",
"name": "Send a message",
"type": "n8n-nodes-base.slack",
"position": [
656,
-160
],
"parameters": {
"text": "Users Data Scrapped from Github",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09KLV9DJSX",
"cachedResultName": "all-browseract-workflow-test"
},
"otherOptions": {},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "caa62914-30ea-44f9-943a-f5fb6c692bd4",
"name": "Sticky Note - Intro",
"type": "n8n-nodes-base.stickyNote",
"position": [
304,
224
],
"parameters": {
"width": 832,
"height": 428,
"content": "## Try It Out!\n### This template is a sophisticated data enrichment tool that scrapes detailed GitHub user profiles and organizes the information into dedicated, structured reports.\n### How it works\n* The workflow is triggered **manually** or on a **schedule**.\n* It reads a list of target GitHub user profiles from a master **Google Sheet**.\n* It then **loops** through each user, processing them one at a time.\n* A **Slack** notification is sent to announce the start of each user scrape.\n* A **BrowserAct** node visits the user's GitHub page and scrapes all available data, including profile info, repositories, and social links.\n* A **Code** node parses and consolidates the scraped data into a single object.\n* The workflow then dynamically **creates and formats a new sheet** for that user in a separate Google Sheets file.\n* Finally, it **splits and writes** the user's data (Profile, Repositories, Links) into the newly created sheet, creating a clean report.\n### Requirements\n* **BrowserAct** API account for web scraping.\n* **BrowserAct** n8n Community Node -> ([n8n Nodes BrowserAct](https://www.npmjs.com/package/n8n-nodes-browseract-workflows))\n* **Google Sheets** credentials for input and output.\n* **Slack** credentials for sending notifications.\n* A BrowserAct template named **\u201cScraping GitHub Users Activity & Data (Based on Source Top GitHub Contributors by Language & Location)\u201d**.\n\n### Need Help?\nJoin the [Discord](https://discord.com/invite/UpnCKd7GaU) or Visit Our [Blog](https://www.browseract.com/blog)!\n"
},
"typeVersion": 1
},
{
"id": "df0792c8-a299-4d62-9514-8168de2f7558",
"name": "Sticky Note - How to Use",
"type": "n8n-nodes-base.stickyNote",
"position": [
1152,
224
],
"parameters": {
"width": 592,
"height": 260,
"content": "## How to use\n\n1. **Set up Credentials:** Add your credentials for **BrowserAct**, **Google Sheets**, and **Slack**.\n\n2. **Set up BrowserAct Template:** Ensure you Use the **\u201cScraping GitHub Users Activity & Data (Based on Source Top GitHub Contributors by Language & Location)\u201d** template in your BrowserAct account.\n\n3. **Prepare Your Input Sheet:** In the first 'Get row(s) in sheet' node, point it to your master list of candidates. This sheet must have a column named `URL` containing the link to each GitHub profile. You can use **\"Source Top GitHub Contributors by Language & Location\"** to Get User Data and Save it TO Google Sheet\n\n4. **Set Slack Channel:** Update the **Channel ID** in the **Slack** node to your desired alerts channel.\n\n5. **Activate Workflow:** Manually trigger the workflow or activate it to run on the defined schedule."
},
"typeVersion": 1
},
{
"id": "2e7e3eae-b57f-4fd7-8cd2-5c7efa7607bd",
"name": "Sticky Note - Need Help",
"type": "n8n-nodes-base.stickyNote",
"position": [
1152,
496
],
"parameters": {
"width": 592,
"height": 152,
"content": "### Need Help?\n* #### [How to Find Your BrowseAct API Key & Workflow ID](https://www.youtube.com/watch?v=pDjoZWEsZlE)\n* #### [How to Connect n8n to Browseract](https://www.youtube.com/watch?v=RoYMdJaRdcQ)\n* #### [How to Use & Customize BrowserAct Templates](https://www.youtube.com/watch?v=CPZHFUASncY)\n* #### [How to Use the BrowserAct N8N Community Node](https://youtu.be/j0Nlba2pRLU)\n* #### [GitHub Data Mining: Extracting User Profiles & Repositories with N8N](https://youtu.be/YjINoZgqx0M)"
},
"typeVersion": 1
},
{
"id": "542bbb49-18d1-4588-a64b-467f8072ee55",
"name": "Sticky Note - Input & Loop",
"type": "n8n-nodes-base.stickyNote",
"position": [
48,
-272
],
"parameters": {
"color": 6,
"width": 384,
"height": 184,
"content": "### \ud83d\udccb 1. Input & Loop\n\n* **Trigger:** The workflow starts either manually or on a schedule.\n* **Google Sheets:** Fetches your master list of GitHub profiles to be processed.\n* **Loop Over Items:** This node processes each GitHub user one by one, ensuring a clean and organized execution for each profile."
},
"typeVersion": 1
},
{
"id": "f4270a43-0996-4478-9b12-470bb5c044cc",
"name": "Sticky Note - Scrape & Process",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
-368
],
"parameters": {
"color": 5,
"width": 496,
"height": 184,
"content": "### \ud83e\udd16 2. Scrape & Consolidate Data\n\nThis section runs for each user in the loop.\n\n* **Slack:** Sends a notification that a new user scrape has begun.\n\n* **BrowserAct Nodes:** These execute the scraping task on the user's profile URL Link The Profile URL.\n\n* **Code Node:** This is a critical step. It takes the raw text output from the scraper, parses it, and merges all the data points into a single, structured object."
},
"typeVersion": 1
},
{
"id": "7d7a78cb-1ea6-444e-9932-06eaaf495358",
"name": "Sticky Note - Dynamic Sheet Creation",
"type": "n8n-nodes-base.stickyNote",
"position": [
976,
-368
],
"parameters": {
"color": 4,
"width": 480,
"height": 184,
"content": "### \ud83e\udd16 3. Dynamic Sheet Management\n\nThis is an advanced pattern for creating reports.\n\n* **Create sheet:** Dynamically creates a new tab in your output spreadsheet, named after the user being scraped.\n\n* **Edit/Clear/Append:** This chain of nodes prepares the new sheet by clearing it and adding a clean set of headers. This ensures a fresh report is generated every time the workflow runs."
},
"typeVersion": 1
},
{
"id": "86ed956c-5e9d-4989-9127-a60f9e848ddb",
"name": "Sticky Note - Data Output",
"type": "n8n-nodes-base.stickyNote",
"position": [
1680,
-448
],
"parameters": {
"color": 3,
"width": 400,
"height": 184,
"content": "### \ud83d\udcca 4. Split & Write Data\n\nThis final section formats the output.\n\n* **Split Out Nodes:** The consolidated data is split into three distinct categories: main profile info, social links, and repositories.\n\n* **Append row... Nodes:** Each category of data is then written to the user's dedicated sheet. This structures the final report with clear sections for easy reading."
},
"typeVersion": 1
},
{
"id": "bd72ba82-be38-4f7e-8e9a-a76d9dca9587",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
-176
],
"parameters": {
"color": 5,
"width": 496,
"height": 320,
"content": ""
},
"typeVersion": 1
},
{
"id": "238200a7-18cb-4cd5-a921-8e8e07aa9f01",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
976,
-176
],
"parameters": {
"color": 4,
"width": 480,
"height": 176,
"content": ""
},
"typeVersion": 1
},
{
"id": "71588de8-adde-4e39-92ce-a911cb5c2b37",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
48,
-80
],
"parameters": {
"color": 6,
"width": 384,
"height": 224,
"content": ""
},
"typeVersion": 1
},
{
"id": "49b8e675-7f59-4b55-a1f3-0f2c541e956c",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1680,
-256
],
"parameters": {
"color": 3,
"width": 400,
"height": 464,
"content": ""
},
"typeVersion": 1
},
{
"id": "62e4d5ab-196b-481f-9f72-bb3144945372",
"name": "User Data",
"type": "n8n-nodes-base.googleSheets",
"position": [
1968,
-240
],
"parameters": {
"columns": {
"value": {
"Name": "={{ $json.Name }}",
"Summary": "={{ $json.Summary }}",
"Location": "={{ $json.Location }}",
"Username": "={{ $json.Username }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Username",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Username",
"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": true,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Repositories_Name",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Repositories_Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Programming Lang",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Programming Lang",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stars",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Stars",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"Name"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "={{ $('Code in JavaScript').item.json.Name }}"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs/edit?usp=drivesdk",
"cachedResultName": "Github User Extracted Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "cba49174-9022-42a8-9bc4-7ccede5035e9",
"name": "User Links",
"type": "n8n-nodes-base.googleSheets",
"position": [
1968,
-96
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Username",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Username",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Location",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Site",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Site",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "link",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Repositories_Name",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Repositories_Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Programming Lang",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Programming Lang",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stars",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Stars",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"Site"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "={{ $('Code in JavaScript').item.json.Name }}"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs/edit?usp=drivesdk",
"cachedResultName": "Github User Extracted Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "cae70e9b-8f35-4f86-b975-5e00a3b52311",
"name": "User Repositories",
"type": "n8n-nodes-base.googleSheets",
"position": [
1968,
64
],
"parameters": {
"columns": {
"value": {
"Date": "={{ $json.Date }}",
"Stars": "={{ $json.Stars }}",
"Programming Lang": "={{ $json[\"Programing Language\"] }}",
"Repositories_Name": "={{ $json.Title }}"
},
"schema": [
{
"id": "Name",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Username",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Username",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Location",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Location",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Website",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Summary",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Summary",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Link",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Link",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Repositories_Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Repositories_Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Programming Lang",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Programming Lang",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Stars",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Stars",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [
"Repositories_Name"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "={{ $('Code in JavaScript').item.json.Name }}"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1OPN-GHxA1jhulioo0v-x63ZiVhGjl-ed-QBIxH8KlVs/edit?usp=drivesdk",
"cachedResultName": "Github User Extracted Data"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "5887ba01-4132-42b0-81d6-cd47cde2cc5a",
"connections": {
"Merge": {
"main": [
[
{
"node": "Split Out1",
"type": "main",
"index": 0
},
{
"node": "Split Out",
"type": "main",
"index": 0
},
{
"node": "Split Out2",
"type": "main",
"index": 0
}
]
]
},
"Merge1": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Split Out": {
"main": [
[
{
"node": "User Links",
"type": "main",
"index": 0
}
]
]
},
"User Data": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 0
}
]
]
},
"Split Out1": {
"main": [
[
{
"node": "User Data",
"type": "main",
"index": 0
}
]
]
},
"Split Out2": {
"main": [
[
{
"node": "User Repositories",
"type": "main",
"index": 0
}
]
]
},
"User Links": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 1
}
]
]
},
"Clear sheet": {
"main": [
[
{
"node": "Append row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Clear sheet",
"type": "main",
"index": 0
}
]
]
},
"Create sheet": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
],
[
{
"node": "Run a workflow task",
"type": "main",
"index": 0
}
]
]
},
"User Repositories": {
"main": [
[
{
"node": "Merge1",
"type": "main",
"index": 2
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "Create sheet",
"type": "main",
"index": 0
},
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Append row in sheet": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Get row(s) in sheet": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Run a workflow task": {
"main": [
[
{
"node": "Get details of a workflow task",
"type": "main",
"index": 0
}
]
]
},
"Get details of a workflow task": {
"main": [
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Get row(s) in sheet",
"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.
browserActApigoogleSheetsOAuth2ApislackOAuth2Api
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow is essential for technical recruiters, talent acquisition teams, and business intelligence analysts who need to dive deep into a pre-qualified list of developers to understand their recent activity, repositories, and technical footprint.
Source: https://n8n.io/workflows/9945/ — 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 is essential for dropshippers, e-commerce store owners, and anyone looking to quickly import product catalogs from specific websites into their Shopify store.
This workflow is perfect for HR teams, recruiters, and hiring managers who want to streamline their hiring process by posting jobs to multiple boards from a single source of truth.
Transform your lead list into an AI-powered calling machine. This workflow automates your entire cold calling process using Vapi's conversational AI to initiate calls, qualify leads, capture detailed
Type in Slack. Walk away. Get a professional PDF report and a structured Excel fix sheet delivered to Google Drive and posted back in your Slack thread — fully automated, zero manual work.
This workflow is essential for e-commerce store owners, product strategists, and marketing teams who need real-time insight into what their competitors are selling.