Workflow: List Builder
Integrations: airtop, code, googleSheets, manualTrigger, set, stopAndError

{"id": "VwU1zMhcgzgPS9ak", "meta": {"instanceId": "workflow-25f50b70", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:50.131074", "updatedAt": "2025-09-29T07:07:50.131126", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "name": "List Builder", "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "nodes": [{"id": "1a6aa574-467d-40b0-a9a5-a5537bede3de", "name": "When clicking \u2018Test workflow\u2019", "type": "n8n-nodes-base.manualTrigger", "position": [0, 0], "parameters": {}, "typeVersion": 1, "notes": "This manualTrigger node performs automated tasks as part of the workflow."}, {"id": "62db9366-7e6f-4346-9de8-9fa730d059ed", "name": "Format results", "type": "n8n-nodes-base.code", "position": [660, 0], "parameters": {"jsCode": "// Get first input item\nconst input = $input.first().json.data.modelResponse\n// Parse list of links\nconst listOfLinks = JSON.parse(input).results\n// Format node's output\nconst output = listOfLinks.map((item) => ({\n  json: { url: item.url }\n}))\n\nreturn output;"}, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "fa960de3-8dd6-40a3-aa59-634ad250f5d1", "name": "Get urls", "type": "n8n-nodes-base.airtop", "position": [440, 0], "parameters": {"url": "{{ $env.BASE_URL }}", "prompt": "=Those are search results, return up to 10 non-sponsored results that lead to a web page with a list of {{$json.who}} on {{$json.where}}. For each return the title and URL.", "resource": "extraction", "operation": "query", "sessionMode": "new", "additionalFields": {"outputSchema": "{  \"type\": \"object\",  \"properties\": {    \"results\": {      \"type\": \"array\",      \"items\": {        \"type\": \"object\",        \"properties\": {          \"title\": {            \"type\": \"string\",            \"description\": \"The title of the search result.\"          },          \"url\": {            \"type\": \"string\",            \"description\": \"The URL of the webpage.\"          }        },        \"required\": [          \"title\",          \"url\"        ],        \"additionalProperties\": false      },      \"description\": \"A list of up to 10 non-sponsored search results.\"    }  },  \"required\": [    \"results\"  ],  \"additionalProperties\": false,  \"$schema\": \"{{ $env.WEBHOOK_URL }}\"}"}}, "credentials": {"airtopApi": {"id": "byhouJF8RLH5DkmY", "name": "Airtop"}}, "typeVersion": 1, "notes": "This airtop node performs automated tasks as part of the workflow."}, {"id": "d75dbdce-7a7e-4a30-81b0-6e8fa5221f55", "name": "Get people", "type": "n8n-nodes-base.airtop", "position": [880, 0], "parameters": {"url": "{{ $env.BASE_URL }}", "prompt": "=This is a list of {{ $('Parameters').item.json.who }} on {{ $('Parameters').item.json.where }}.\nExtract up to 20 items. For each person extract: \n- name \n- handle or ID \n- URL", "resource": "extraction", "operation": "query", "sessionMode": "new", "additionalFields": {"outputSchema": "{\n  \"$schema\": \"{{ $env.WEBHOOK_URL }}\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"items\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"name\": {\n            \"type\": \"string\",\n            \"description\": \"The name of the item.\"\n          },\n          \"identifier\": {\n            \"type\": \"string\",\n            \"description\": \"The unique identifier or handle for the item.\"\n          },\n          \"url\": {\n            \"type\": \"string\",\n            \"description\": \"The URL to access the item or its related resource.\"\n          }\n        },\n        \"required\": [\n          \"name\",\n          \"identifier\",\n          \"url\"\n        ],\n        \"additionalProperties\": false\n      }\n    }\n  },\n  \"required\": [\n    \"items\"\n  ],\n  \"additionalProperties\": false\n}"}}, "credentials": {"airtopApi": {"id": "byhouJF8RLH5DkmY", "name": "Airtop"}}, "typeVersion": 1, "notes": "This airtop node performs automated tasks as part of the workflow."}, {"id": "285ce6af-bda8-4025-872e-f5f8c4a56b3c", "name": "Dedupe results", "type": "n8n-nodes-base.code", "position": [1100, 0], "parameters": {"jsCode": "const allResults = []\n\nfor (const inputItem of $input.all()) {\n  // Parse input to JSON\n  const input = inputItem.json.data.modelResponse\n  const results = JSON.parse(input).items\n  // clean results\n  const cleanedResults = results\n    .filter((res) => res.name) // only those with name\n    .map((res) => ({\n      ...res,\n      url: res.url.split('?')[0] // clean url\n    }))\n  // add results to list\n  allResults.push(...cleanedResults)\n}\n\n// Dedupe urls\nconst uniqueList = allResults.filter((item, index, self) =>\n  index === self.findIndex((t) => (t.url === item.url))\n);\n\nreturn uniqueList.map((item) => ({\n  json: {...item}\n}));"}, "typeVersion": 2, "notes": "This code node performs automated tasks as part of the workflow."}, {"id": "fdc86d5c-4df3-48b9-9cf6-a5ddc3b45c90", "name": "Add to spreadsheet", "type": "n8n-nodes-base.googleSheets", "position": [1320, 0], "parameters": {"columns": {"value": {"URL": "{{ $env.BASE_URL }}", "Name": "={{ $json.name }}", "Who?": "={{ $('Parameters').first().json.who }}", "Where?": "={{ $('Parameters').first().json.where }}", "Added on": "={{ $now }}", "ID or Handle": "={{ $json.identifier }}"}, "schema": [{"id": "Who?", "type": "string", "display": true, "required": false, "displayName": "Who?", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Where?", "type": "string", "display": true, "required": false, "displayName": "Where?", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Name", "type": "string", "display": true, "required": false, "displayName": "Name", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "ID or Handle", "type": "string", "display": true, "required": false, "displayName": "ID or Handle", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "URL", "type": "string", "display": true, "required": false, "displayName": "URL", "defaultMatch": false, "canBeUsedToMatch": true}, {"id": "Added on", "type": "string", "display": true, "required": false, "displayName": "Added on", "defaultMatch": false, "canBeUsedToMatch": true}], "mappingMode": "defineBelow", "matchingColumns": [], "attemptToConvertTypes": false, "convertFieldsToString": false}, "options": {}, "operation": "append", "sheetName": {"__rl": true, "mode": "list", "value": "gid=0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "Sheet1"}, "documentId": {"__rl": true, "mode": "list", "value": "150eh4t5GyEBN_TcO5TDeNWpE2GzHR4hQWoNRbUpw7A0", "cachedResultUrl": "{{ $env.WEBHOOK_URL }}", "cachedResultName": "List Builder"}}, "credentials": {"googleSheetsOAuth2Api": {"id": "CwpCAR1HwgHZpRtJ", "name": "Google Drive"}}, "typeVersion": 4.5, "notes": "This googleSheets node performs automated tasks as part of the workflow."}, {"id": "44c54497-741c-4c48-b4f9-0c5c836d10ad", "name": "Parameters", "type": "n8n-nodes-base.set", "position": [220, 0], "parameters": {"options": {}, "assignments": {"assignments": [{"id": "bc2d3cb9-b7d0-4c3f-b392-53262d60441e", "name": "who", "type": "string", "value": "Top \"Build in Public\" influencers"}, {"id": "b2cfa361-c80a-4945-bc0e-23eac5edebd6", "name": "where", "type": "string", "value": "X"}]}}, "typeVersion": 3.4, "notes": "This set node performs automated tasks as part of the workflow."}, {"id": "error-4d5e9a0c", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "active": false, "pinData": {}, "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3, "retryDelay": 1000}, "versionId": "a2572aec-54cb-4bbb-b503-09d1d0beb64f", "connections": {"fdc86d5c-4df3-48b9-9cf6-a5ddc3b45c90": {"main": [[{"node": "error-handler-fdc86d5c-4df3-48b9-9cf6-a5ddc3b45c90-6438e129", "type": "main", "index": 0}]]}}, "description": "Automated workflow: List Builder. This workflow processes data and performs automated tasks.", "notes": "Excellent quality workflow: List Builder. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}