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 →
{
"name": "External Modules Verification",
"nodes": [
{
"parameters": {},
"type": "n8n-nodes-base.manualTrigger",
"typeVersion": 1,
"position": [
0,
0
],
"id": "77cc75a6-c7a6-48b1-83c1-7eb17243d3f2",
"name": "When clicking \u2018Execute workflow\u2019"
},
{
"parameters": {
"jsCode": "const results = {};\n\n// cheerio\ntry {\n const cheerio = require(\"cheerio\");\n const $ = cheerio.load(\"<p>ok</p>\");\n results.cheerio = $(\"p\").text() === \"ok\";\n} catch (e) {\n results.cheerio = e.message;\n}\n\n// csv-parse (allowed entry)\ntry {\n const { parse } = require(\"csv-parse\");\n results.csv_parse = typeof parse === \"function\";\n} catch (e) {\n results.csv_parse = e.message;\n}\n\n// form-data\ntry {\n const FormData = require(\"form-data\");\n const f = new FormData();\n f.append(\"a\", \"1\");\n results.form_data = true;\n} catch (e) {\n results.form_data = e.message;\n}\n\n// node-fetch (require only)\ntry {\n const fetchPkg = require(\"node-fetch\");\n results.node_fetch =\n typeof fetchPkg === \"function\" || typeof fetchPkg.default === \"function\";\n} catch (e) {\n results.node_fetch = e.message;\n}\n\n// axios\ntry {\n const axios = require(\"axios\");\n results.axios = typeof axios === \"function\";\n} catch (e) {\n results.axios = e.message;\n}\n\n// moment\ntry {\n const moment = require(\"moment\");\n results.moment = moment(\"2025-01-01\").year() === 2025;\n} catch (e) {\n results.moment = e.message;\n}\n\n// uuid\ntry {\n const { v4: uuidv4 } = require(\"uuid\");\n const id = uuidv4();\n results.uuid = typeof id === \"string\" && id.length > 0;\n} catch (e) {\n results.uuid = e.message;\n}\n\nreturn [{ json: results }];\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
208,
0
],
"id": "28469a25-cace-4cf6-8ab7-121d67432b82",
"name": "Node Modules Test"
},
{
"parameters": {
"language": "pythonNative",
"pythonCode": "# Script for old version n8n, for new n8n do not import numpy\n# results = {}\n\n# # numpy\n# try:\n# import numpy as np\n# arr = np.array([1, 2, 3])\n# results[\"numpy\"] = int(arr.sum()) == 6\n# except Exception as e:\n# results[\"numpy\"] = str(e)\n\n# # pandas\n# try:\n# import pandas as pd\n# df = pd.DataFrame({\"a\": [1, 2], \"b\": [3, 4]})\n# results[\"pandas\"] = int(df[\"a\"].sum()) == 3\n# except Exception as e:\n# results[\"pandas\"] = str(e)\n\n# return results\n\n\n\nresults = {}\n\n# numpy (simulated)\ntry:\n arr = [1, 2, 3]\n results[\"numpy\"] = sum(arr) == 6\nexcept Exception as e:\n results[\"numpy\"] = str(e)\n\n# pandas\ntry:\n import pandas as pd\n df = pd.DataFrame({\"a\": [1, 2], \"b\": [3, 4]})\n results[\"pandas\"] = int(df[\"a\"].sum()) == 3\nexcept Exception as e:\n results[\"pandas\"] = str(e)\n\nreturn results"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
416,
0
],
"id": "8f1fcfdc-836f-4324-9fb6-eb4234bd2bbb",
"name": "Python Modules Test"
}
],
"connections": {
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Node Modules Test",
"type": "main",
"index": 0
}
]
]
},
"Node Modules Test": {
"main": [
[
{
"node": "Python Modules Test",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1",
"binaryMode": "separate",
"availableInMCP": false
},
"versionId": "37ff808d-226b-4263-8e49-54d5e7b748eb",
"id": "kx5JTfcNEM8D1Cj-q2QBR",
"tags": []
}
About this workflow
External Modules Verification. Uses manualTrigger. Event-driven trigger; 3 nodes.
Source: https://github.com/tobing/n8n-v2-with-numpy-pandas/blob/main/verify-external-modules/n8n-workflow.json — original creator credit. Request a take-down →