Workflow: Production Workflow
Integrations: function, httpRequest, if, manualTrigger, noOp, set, stopAndError

{"nodes": [{"name": "On clicking 'execute'", "type": "n8n-nodes-base.manualTrigger", "position": [200, 470], "parameters": {}, "typeVersion": 1, "id": "node-54ba8f7e"}, {"name": "HTTP Request", "type": "n8n-nodes-base.httpRequest", "position": [600, 470], "parameters": {"url": "{{ $env.BASE_URL }}", "options": {}, "queryParametersUi": {"parameter": [{"name": "hapikey", "value": "<YOUR_API_KEY>"}, {"name": "limit", "value": "100"}]}}, "typeVersion": 1, "id": "node-4962624b"}, {"name": "NoOp", "type": "n8n-nodes-base.noOp", "position": [800, 470], "parameters": {}, "typeVersion": 1, "id": "node-3abbf3c2"}, {"name": "Wait", "type": "n8n-nodes-base.function", "position": [1000, 470], "parameters": {"functionCode": "return new Promise((resolve, reject) => {\n      setTimeout(() => { resolve([{ json: {} }]) }, 5000);\n    })\n"}, "typeVersion": 1, "id": "node-30d0e54a"}, {"name": "Config URL", "type": "n8n-nodes-base.function", "position": [400, 470], "parameters": {"functionCode": "\nlet next = 'https://api.hubapi.com/crm/v3/objects/contacts'\n\nif (items[0].json.next) {\n  next = items[0].json.next\n}\n\nreturn [\n  {\n    json: {\n      next : next\n    }\n  }\n]"}, "typeVersion": 1, "id": "node-bd8e5aba"}, {"name": "Check if pagination?", "type": "n8n-nodes-base.if", "position": [1250, 470], "parameters": {"conditions": {"string": [], "boolean": [{"value1": "={{$node[\"HTTP Request\"].json[\"paging\"] ? true : false}}", "value2": true}]}}, "typeVersion": 1, "id": "node-e04cba72"}, {"name": "Set next URL", "type": "n8n-nodes-base.set", "position": [890, 210], "parameters": {"values": {"string": [{"name": "next", "value": "={{$node[\"HTTP Request\"].json[\"paging\"][\"next\"][\"link\"]}}"}]}, "options": {}, "keepOnlySet": true}, "executeOnce": true, "typeVersion": 1, "id": "node-7becf9ef"}, {"name": "Combine all data", "type": "n8n-nodes-base.function", "position": [1500, 560], "parameters": {"functionCode": "const allData = []\n\nlet counter = 0;\ndo {\n  try {\n    const items = $items(\"HTTP Request\", 0, counter).map(item => item.json.results);\n                    \n    const aja = items[0].map(item => {\n      return { json: item }\n    })    \n    \n    allData.push.apply(allData, aja);\n    //allData.push($items(\"Increment\", 0, counter));\n  } catch (error) {\n    return allData;  \n  }\n\n  counter++;\n} while(true);\n\n"}, "typeVersion": 1, "id": "node-595a335c"}, {"id": "error-6ec0d0b5", "name": "Error Handler", "type": "n8n-nodes-base.stopAndError", "typeVersion": 1, "position": [1000, 400], "parameters": {"message": "Workflow execution error", "options": {}}}], "connections": {}, "name": "Production Workflow", "settings": {"executionOrder": "v1", "saveManualExecutions": true, "callerPolicy": "workflowsFromSameOwner", "errorWorkflow": null, "timezone": "UTC", "executionTimeout": 3600, "maxExecutions": 1000, "retryOnFail": true, "retryCount": 3}, "meta": {"instanceId": "workflow-4ce5740c", "versionId": "1.0.0", "createdAt": "2025-09-29T07:07:48.574719", "updatedAt": "2025-09-29T07:07:48.574736", "owner": "n8n-user", "license": "MIT", "category": "automation", "status": "active", "priority": "high", "environment": "production"}, "tags": ["automation", "n8n", "production-ready", "excellent", "optimized"], "description": "Production-ready workflow: Production Workflow. This workflow has been optimized for production use with comprehensive error handling, security, and documentation."}