{"id":"636ba473-07a4-461c-8dd0-15716b59e82e","shortId":"BZdXq9","kind":"skill","title":"n8n-code-python","tagline":"Write Python code in n8n Code nodes. Use when writing Python in n8n, using _input/_json/_node syntax, working with standard library, or need to understand Python limitations in n8n Code nodes.","description":"# Python Code Node (Beta)\n\nExpert guidance for writing Python code in n8n Code nodes.\n\n---\n\n## ⚠️ Important: JavaScript First\n\n**Recommendation**: Use **JavaScript for 95% of use cases**. Only use Python when:\n- You need specific Python standard library functions\n- You're significantly more comfortable with Python syntax\n- You're doing data transformations better suited to Python\n\n**Why JavaScript is preferred:**\n- Full n8n helper functions ($helpers.httpRequest, etc.)\n- Luxon DateTime library for advanced date/time operations\n- No external library limitations\n- Better n8n documentation and community support\n\n---\n\n## Quick Start\n\n```python\n# Basic template for Python Code nodes\nitems = _input.all()\n\n# Process data\nprocessed = []\nfor item in items:\n    processed.append({\n        \"json\": {\n            **item[\"json\"],\n            \"processed\": True,\n            \"timestamp\": datetime.now().isoformat()\n        }\n    })\n\nreturn processed\n```\n\n### Essential Rules\n\n1. **Consider JavaScript first** - Use Python only when necessary\n2. **Access data**: `_input.all()`, `_input.first()`, or `_input.item`\n3. **CRITICAL**: Must return `[{\"json\": {...}}]` format\n4. **CRITICAL**: Webhook data is under `_json[\"body\"]` (not `_json` directly)\n5. **CRITICAL LIMITATION**: **No external libraries** (no requests, pandas, numpy)\n6. **Standard library only**: json, datetime, re, base64, hashlib, urllib.parse, math, random, statistics\n\n---\n\n## Mode Selection Guide\n\nSame as JavaScript - choose based on your use case:\n\n### Run Once for All Items (Recommended - Default)\n\n**Use this mode for:** 95% of use cases\n\n- **How it works**: Code executes **once** regardless of input count\n- **Data access**: `_input.all()` or `_items` array (Native mode)\n- **Best for**: Aggregation, filtering, batch processing, transformations\n- **Performance**: Faster for multiple items (single execution)\n\n```python\n# Example: Calculate total from all items\nall_items = _input.all()\ntotal = sum(item[\"json\"].get(\"amount\", 0) for item in all_items)\n\nreturn [{\n    \"json\": {\n        \"total\": total,\n        \"count\": len(all_items),\n        \"average\": total / len(all_items) if all_items else 0\n    }\n}]\n```\n\n### Run Once for Each Item\n\n**Use this mode for:** Specialized cases only\n\n- **How it works**: Code executes **separately** for each input item\n- **Data access**: `_input.item` or `_item` (Native mode)\n- **Best for**: Item-specific logic, independent operations, per-item validation\n- **Performance**: Slower for large datasets (multiple executions)\n\n```python\n# Example: Add processing timestamp to each item\nitem = _input.item\n\nreturn [{\n    \"json\": {\n        **item[\"json\"],\n        \"processed\": True,\n        \"processed_at\": datetime.now().isoformat()\n    }\n}]\n```\n\n---\n\n## Python Modes: Beta vs Native\n\nn8n offers two Python execution modes:\n\n### Python (Beta) - Recommended\n- **Use**: `_input`, `_json`, `_node` helper syntax\n- **Best for**: Most Python use cases\n- **Helpers available**: `_now`, `_today`, `_jmespath()`\n- **Import**: `from datetime import datetime`\n\n```python\n# Python (Beta) example\nitems = _input.all()\nnow = _now  # Built-in datetime object\n\nreturn [{\n    \"json\": {\n        \"count\": len(items),\n        \"timestamp\": now.isoformat()\n    }\n}]\n```\n\n### Python (Native) (Beta)\n- **Use**: `_items`, `_item` variables only\n- **No helpers**: No `_input`, `_now`, etc.\n- **More limited**: Standard Python only\n- **Use when**: Need pure Python without n8n helpers\n\n```python\n# Python (Native) example\nprocessed = []\n\nfor item in _items:\n    processed.append({\n        \"json\": {\n            \"id\": item[\"json\"].get(\"id\"),\n            \"processed\": True\n        }\n    })\n\nreturn processed\n```\n\n**Recommendation**: Use **Python (Beta)** for better n8n integration.\n\n---\n\n## Data Access Patterns\n\n### Pattern 1: _input.all() - Most Common\n\n**Use when**: Processing arrays, batch operations, aggregations\n\n```python\n# Get all items from previous node\nall_items = _input.all()\n\n# Filter, transform as needed\nvalid = [item for item in all_items if item[\"json\"].get(\"status\") == \"active\"]\n\nprocessed = []\nfor item in valid:\n    processed.append({\n        \"json\": {\n            \"id\": item[\"json\"][\"id\"],\n            \"name\": item[\"json\"][\"name\"]\n        }\n    })\n\nreturn processed\n```\n\n### Pattern 2: _input.first() - Very Common\n\n**Use when**: Working with single objects, API responses\n\n```python\n# Get first item only\nfirst_item = _input.first()\ndata = first_item[\"json\"]\n\nreturn [{\n    \"json\": {\n        \"result\": process_data(data),\n        \"processed_at\": datetime.now().isoformat()\n    }\n}]\n```\n\n### Pattern 3: _input.item - Each Item Mode Only\n\n**Use when**: In \"Run Once for Each Item\" mode\n\n```python\n# Current item in loop (Each Item mode only)\ncurrent_item = _input.item\n\nreturn [{\n    \"json\": {\n        **current_item[\"json\"],\n        \"item_processed\": True\n    }\n}]\n```\n\n### Pattern 4: _node - Reference Other Nodes\n\n**Use when**: Need data from specific nodes in workflow\n\n```python\n# Get output from specific node\nwebhook_data = _node[\"Webhook\"][\"json\"]\nhttp_data = _node[\"HTTP Request\"][\"json\"]\n\nreturn [{\n    \"json\": {\n        \"combined\": {\n            \"webhook\": webhook_data,\n            \"api\": http_data\n        }\n    }\n}]\n```\n\n**See**: DATA_ACCESS.md for comprehensive guide\n\n---\n\n## Critical: Webhook Data Structure\n\n**MOST COMMON MISTAKE**: Webhook data is nested under `[\"body\"]`\n\n```python\n# ❌ WRONG - Will raise KeyError\nname = _json[\"name\"]\nemail = _json[\"email\"]\n\n# ✅ CORRECT - Webhook data is under [\"body\"]\nname = _json[\"body\"][\"name\"]\nemail = _json[\"body\"][\"email\"]\n\n# ✅ SAFER - Use .get() for safe access\nwebhook_data = _json.get(\"body\", {})\nname = webhook_data.get(\"name\")\n```\n\n**Why**: Webhook node wraps all request data under `body` property. This includes POST data, query parameters, and JSON payloads.\n\n**See**: DATA_ACCESS.md for full webhook structure details\n\n---\n\n## Return Format Requirements\n\n**CRITICAL RULE**: Always return list of dictionaries with `\"json\"` key\n\n### Correct Return Formats\n\n```python\n# ✅ Single result\nreturn [{\n    \"json\": {\n        \"field1\": value1,\n        \"field2\": value2\n    }\n}]\n\n# ✅ Multiple results\nreturn [\n    {\"json\": {\"id\": 1, \"data\": \"first\"}},\n    {\"json\": {\"id\": 2, \"data\": \"second\"}}\n]\n\n# ✅ List comprehension\ntransformed = [\n    {\"json\": {\"id\": item[\"json\"][\"id\"], \"processed\": True}}\n    for item in _input.all()\n    if item[\"json\"].get(\"valid\")\n]\nreturn transformed\n\n# ✅ Empty result (when no data to return)\nreturn []\n\n# ✅ Conditional return\nif should_process:\n    return [{\"json\": processed_data}]\nelse:\n    return []\n```\n\n### Incorrect Return Formats\n\n```python\n# ❌ WRONG: Dictionary without list wrapper\nreturn {\n    \"json\": {\"field\": value}\n}\n\n# ❌ WRONG: List without json wrapper\nreturn [{\"field\": value}]\n\n# ❌ WRONG: Plain string\nreturn \"processed\"\n\n# ❌ WRONG: Incomplete structure\nreturn [{\"data\": value}]  # Should be {\"json\": value}\n```\n\n**Why it matters**: Next nodes expect list format. Incorrect format causes workflow execution to fail.\n\n**See**: ERROR_PATTERNS.md #2 for detailed error solutions\n\n---\n\n## Critical Limitation: No External Libraries\n\n**MOST IMPORTANT PYTHON LIMITATION**: Cannot import external packages\n\n### What's NOT Available\n\n```python\n# ❌ NOT AVAILABLE - Will raise ModuleNotFoundError\nimport requests  # ❌ No\nimport pandas  # ❌ No\nimport numpy  # ❌ No\nimport scipy  # ❌ No\nfrom bs4 import BeautifulSoup  # ❌ No\nimport lxml  # ❌ No\n```\n\n### What IS Available (Standard Library)\n\n```python\n# ✅ AVAILABLE - Standard library only\nimport json  # ✅ JSON parsing\nimport datetime  # ✅ Date/time operations\nimport re  # ✅ Regular expressions\nimport base64  # ✅ Base64 encoding/decoding\nimport hashlib  # ✅ Hashing functions\nimport urllib.parse  # ✅ URL parsing\nimport math  # ✅ Math functions\nimport random  # ✅ Random numbers\nimport statistics  # ✅ Statistical functions\n```\n\n### Workarounds\n\n**Need HTTP requests?**\n- ✅ Use **HTTP Request node** before Code node\n- ✅ Or switch to **JavaScript** and use `$helpers.httpRequest()`\n\n**Need data analysis (pandas/numpy)?**\n- ✅ Use Python **statistics** module for basic stats\n- ✅ Or switch to **JavaScript** for most operations\n- ✅ Manual calculations with lists and dictionaries\n\n**Need web scraping (BeautifulSoup)?**\n- ✅ Use **HTTP Request node** + **HTML Extract node**\n- ✅ Or switch to **JavaScript** with regex/string methods\n\n**See**: STANDARD_LIBRARY.md for complete reference\n\n---\n\n## Common Patterns Overview\n\nBased on production workflows, here are the most useful Python patterns:\n\n### 1. Data Transformation\nTransform all items with list comprehensions\n\n```python\nitems = _input.all()\n\nreturn [\n    {\n        \"json\": {\n            \"id\": item[\"json\"].get(\"id\"),\n            \"name\": item[\"json\"].get(\"name\", \"Unknown\").upper(),\n            \"processed\": True\n        }\n    }\n    for item in items\n]\n```\n\n### 2. Filtering & Aggregation\nSum, filter, count with built-in functions\n\n```python\nitems = _input.all()\ntotal = sum(item[\"json\"].get(\"amount\", 0) for item in items)\nvalid_items = [item for item in items if item[\"json\"].get(\"amount\", 0) > 0]\n\nreturn [{\n    \"json\": {\n        \"total\": total,\n        \"count\": len(valid_items)\n    }\n}]\n```\n\n### 3. String Processing with Regex\nExtract patterns from text\n\n```python\nimport re\n\nitems = _input.all()\nemail_pattern = r'\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b'\n\nall_emails = []\nfor item in items:\n    text = item[\"json\"].get(\"text\", \"\")\n    emails = re.findall(email_pattern, text)\n    all_emails.extend(emails)\n\n# Remove duplicates\nunique_emails = list(set(all_emails))\n\nreturn [{\n    \"json\": {\n        \"emails\": unique_emails,\n        \"count\": len(unique_emails)\n    }\n}]\n```\n\n### 4. Data Validation\nValidate and clean data\n\n```python\nitems = _input.all()\nvalidated = []\n\nfor item in items:\n    data = item[\"json\"]\n    errors = []\n\n    # Validate fields\n    if not data.get(\"email\"):\n        errors.append(\"Email required\")\n    if not data.get(\"name\"):\n        errors.append(\"Name required\")\n\n    validated.append({\n        \"json\": {\n            **data,\n            \"valid\": len(errors) == 0,\n            \"errors\": errors if errors else None\n        }\n    })\n\nreturn validated\n```\n\n### 5. Statistical Analysis\nCalculate statistics with statistics module\n\n```python\nfrom statistics import mean, median, stdev\n\nitems = _input.all()\nvalues = [item[\"json\"].get(\"value\", 0) for item in items if \"value\" in item[\"json\"]]\n\nif values:\n    return [{\n        \"json\": {\n            \"mean\": mean(values),\n            \"median\": median(values),\n            \"stdev\": stdev(values) if len(values) > 1 else 0,\n            \"min\": min(values),\n            \"max\": max(values),\n            \"count\": len(values)\n        }\n    }]\nelse:\n    return [{\"json\": {\"error\": \"No values found\"}}]\n```\n\n**See**: COMMON_PATTERNS.md for 10 detailed Python patterns\n\n---\n\n## Error Prevention - Top 5 Mistakes\n\n### #1: Importing External Libraries (Python-Specific!)\n\n```python\n# ❌ WRONG: Trying to import external library\nimport requests  # ModuleNotFoundError!\n\n# ✅ CORRECT: Use HTTP Request node or JavaScript\n# Add HTTP Request node before Code node\n# OR switch to JavaScript and use $helpers.httpRequest()\n```\n\n### #2: Empty Code or Missing Return\n\n```python\n# ❌ WRONG: No return statement\nitems = _input.all()\n# Processing...\n# Forgot to return!\n\n# ✅ CORRECT: Always return data\nitems = _input.all()\n# Processing...\nreturn [{\"json\": item[\"json\"]} for item in items]\n```\n\n### #3: Incorrect Return Format\n\n```python\n# ❌ WRONG: Returning dict instead of list\nreturn {\"json\": {\"result\": \"success\"}}\n\n# ✅ CORRECT: List wrapper required\nreturn [{\"json\": {\"result\": \"success\"}}]\n```\n\n### #4: KeyError on Dictionary Access\n\n```python\n# ❌ WRONG: Direct access crashes if missing\nname = _json[\"user\"][\"name\"]  # KeyError!\n\n# ✅ CORRECT: Use .get() for safe access\nname = _json.get(\"user\", {}).get(\"name\", \"Unknown\")\n```\n\n### #5: Webhook Body Nesting\n\n```python\n# ❌ WRONG: Direct access to webhook data\nemail = _json[\"email\"]  # KeyError!\n\n# ✅ CORRECT: Webhook data under [\"body\"]\nemail = _json[\"body\"][\"email\"]\n\n# ✅ BETTER: Safe access with .get()\nemail = _json.get(\"body\", {}).get(\"email\", \"no-email\")\n```\n\n**See**: ERROR_PATTERNS.md for comprehensive error guide\n\n---\n\n## Standard Library Reference\n\n### Most Useful Modules\n\n```python\n# JSON operations\nimport json\ndata = json.loads(json_string)\njson_output = json.dumps({\"key\": \"value\"})\n\n# Date/time\nfrom datetime import datetime, timedelta\nnow = datetime.now()\ntomorrow = now + timedelta(days=1)\nformatted = now.strftime(\"%Y-%m-%d\")\n\n# Regular expressions\nimport re\nmatches = re.findall(r'\\d+', text)\ncleaned = re.sub(r'[^\\w\\s]', '', text)\n\n# Base64 encoding\nimport base64\nencoded = base64.b64encode(data).decode()\ndecoded = base64.b64decode(encoded)\n\n# Hashing\nimport hashlib\nhash_value = hashlib.sha256(text.encode()).hexdigest()\n\n# URL parsing\nimport urllib.parse\nparams = urllib.parse.urlencode({\"key\": \"value\"})\nparsed = urllib.parse.urlparse(url)\n\n# Statistics\nfrom statistics import mean, median, stdev\naverage = mean([1, 2, 3, 4, 5])\n```\n\n**See**: STANDARD_LIBRARY.md for complete reference\n\n---\n\n## Best Practices\n\n### 1. Always Use .get() for Dictionary Access\n\n```python\n# ✅ SAFE: Won't crash if field missing\nvalue = item[\"json\"].get(\"field\", \"default\")\n\n# ❌ RISKY: Crashes if field doesn't exist\nvalue = item[\"json\"][\"field\"]\n```\n\n### 2. Handle None/Null Values Explicitly\n\n```python\n# ✅ GOOD: Default to 0 if None\namount = item[\"json\"].get(\"amount\") or 0\n\n# ✅ GOOD: Check for None explicitly\ntext = item[\"json\"].get(\"text\")\nif text is None:\n    text = \"\"\n```\n\n### 3. Use List Comprehensions for Filtering\n\n```python\n# ✅ PYTHONIC: List comprehension\nvalid = [item for item in items if item[\"json\"].get(\"active\")]\n\n# ❌ VERBOSE: Manual loop\nvalid = []\nfor item in items:\n    if item[\"json\"].get(\"active\"):\n        valid.append(item)\n```\n\n### 4. Return Consistent Structure\n\n```python\n# ✅ CONSISTENT: Always list with \"json\" key\nreturn [{\"json\": result}]  # Single result\nreturn results  # Multiple results (already formatted)\nreturn []  # No results\n```\n\n### 5. Debug with print() Statements\n\n```python\n# Debug statements appear in browser console (F12)\nitems = _input.all()\nprint(f\"Processing {len(items)} items\")\nprint(f\"First item: {items[0] if items else 'None'}\")\n```\n\n---\n\n## When to Use Python vs JavaScript\n\n### Use Python When:\n- ✅ You need `statistics` module for statistical operations\n- ✅ You're significantly more comfortable with Python syntax\n- ✅ Your logic maps well to list comprehensions\n- ✅ You need specific standard library functions\n\n### Use JavaScript When:\n- ✅ You need HTTP requests ($helpers.httpRequest())\n- ✅ You need advanced date/time (DateTime/Luxon)\n- ✅ You want better n8n integration\n- ✅ **For 95% of use cases** (recommended)\n\n### Consider Other Nodes When:\n- ❌ Simple field mapping → Use **Set** node\n- ❌ Basic filtering → Use **Filter** node\n- ❌ Simple conditionals → Use **IF** or **Switch** node\n- ❌ HTTP requests only → Use **HTTP Request** node\n\n---\n\n## Integration with Other Skills\n\n### Works With:\n\n**n8n Expression Syntax**:\n- Expressions use `{{ }}` syntax in other nodes\n- Code nodes use Python directly (no `{{ }}`)\n- When to use expressions vs code\n\n**n8n MCP Tools Expert**:\n- How to find Code node: `search_nodes({query: \"code\"})`\n- Get configuration help: `get_node_essentials(\"nodes-base.code\")`\n- Validate code: `validate_node_operation()`\n\n**n8n Node Configuration**:\n- Mode selection (All Items vs Each Item)\n- Language selection (Python vs JavaScript)\n- Understanding property dependencies\n\n**n8n Workflow Patterns**:\n- Code nodes in transformation step\n- When to use Python vs JavaScript in patterns\n\n**n8n Validation Expert**:\n- Validate Code node configuration\n- Handle validation errors\n- Auto-fix common issues\n\n**n8n Code JavaScript**:\n- When to use JavaScript instead\n- Comparison of JavaScript vs Python features\n- Migration from Python to JavaScript\n\n---\n\n## Quick Reference Checklist\n\nBefore deploying Python Code nodes, verify:\n\n- [ ] **Considered JavaScript first** - Using Python only when necessary\n- [ ] **Code is not empty** - Must have meaningful logic\n- [ ] **Return statement exists** - Must return list of dictionaries\n- [ ] **Proper return format** - Each item: `{\"json\": {...}}`\n- [ ] **Data access correct** - Using `_input.all()`, `_input.first()`, or `_input.item`\n- [ ] **No external imports** - Only standard library (json, datetime, re, etc.)\n- [ ] **Safe dictionary access** - Using `.get()` to avoid KeyError\n- [ ] **Webhook data** - Access via `[\"body\"]` if from webhook\n- [ ] **Mode selection** - \"All Items\" for most cases\n- [ ] **Output consistent** - All code paths return same structure\n\n---\n\n## Additional Resources\n\n### Related Files\n- DATA_ACCESS.md - Comprehensive Python data access patterns\n- COMMON_PATTERNS.md - 10 Python patterns for n8n\n- ERROR_PATTERNS.md - Top 5 errors and solutions\n- STANDARD_LIBRARY.md - Complete standard library reference\n\n### n8n Documentation\n- Code Node Guide: https://docs.n8n.io/code/code-node/\n- Python in n8n: https://docs.n8n.io/code/builtin/python-modules/\n\n---\n\n**Ready to write Python in n8n Code nodes - but consider JavaScript first!** Use Python for specific needs, reference the error patterns guide to avoid common mistakes, and leverage the standard library effectively.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["n8n","code","python","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-n8n-code-python","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/n8n-code-python","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34666 github stars · SKILL.md body (17,678 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T06:51:36.726Z","embedding":null,"createdAt":"2026-04-18T21:41:11.339Z","updatedAt":"2026-04-23T06:51:36.726Z","lastSeenAt":"2026-04-23T06:51:36.726Z","tsv":"'/code/builtin/python-modules/':2081 '/code/code-node/':2075 '0':277,300,1089,1106,1107,1228,1259,1287,1626,1635,1738 '1':146,484,763,1037,1285,1316,1513,1573,1585 '10':1307,2052 '2':155,540,768,864,1069,1150,1354,1574,1617 '3':162,575,1116,1386,1575,1651 '4':168,611,1187,1409,1576,1687 '5':179,1237,1314,1438,1577,1712,2059 '6':189 '9':1138,1143 '95':56,225,1799 'a-z':1144,1147 'a-za-z0':1134,1139 'access':156,240,324,481,699,1413,1417,1431,1445,1464,1591,1993,2012,2020,2049 'activ':521,1671,1684 'add':351,1340 'addit':2041 'advanc':102,1790 'aggreg':249,494,1071 'all_emails.extend':1168 'alreadi':1707 'alway':738,1372,1586,1693 'amount':276,1088,1105,1629,1633 'analysi':978,1239 'api':550,648 'appear':1720 'array':244,491 'ask':2147 'auto':1930 'auto-fix':1929 'avail':396,885,888,914,918 'averag':291,1571 'avoid':2016,2105 'b':1133,1151 'base':209,1026 'base64':196,935,936,1534,1537 'base64.b64decode':1543 'base64.b64encode':1539 'basic':118,985,1814 'batch':251,492 'beautifulsoup':907,1003 'best':247,330,389,1583 'beta':38,371,381,407,427,475 'better':84,109,477,1462,1795 'bodi':175,668,685,688,692,703,715,1440,1457,1460,1469,2022 'boundari':2155 'browser':1722 'bs4':905 'built':414,1077 'built-in':413,1076 'calcul':263,995,1240 'cannot':878 'case':59,213,228,311,394,1802,2032 'caus':857 'check':1637 'checklist':1955 'choos':208 'clarif':2149 'clean':1192,1528 'clear':2122 'code':3,7,10,33,36,44,47,122,232,316,967,1345,1356,1848,1859,1867,1872,1881,1906,1923,1935,1959,1970,2036,2070,2088 'combin':644 'comfort':75,1763 'common':487,543,661,1023,1932,2106 'common_patterns.md':1305,2051 'communiti':113 'comparison':1942 'complet':1021,1581,2064 'comprehens':654,772,1045,1478,1654,1660,1773,2046 'condit':800,1820 'configur':1874,1887,1925 'consid':147,1804,1962,2091 'consist':1689,1692,2034 'consol':1723 'correct':680,746,1333,1371,1401,1426,1453,1994 'count':238,287,420,1074,1112,1183,1294 'crash':1418,1596,1607 'criteria':2158 'critic':163,169,180,656,736,869 'current':591,599,604 'd':1518,1526 'data':82,127,157,171,239,323,480,560,568,569,619,632,637,647,650,658,664,682,701,713,720,764,769,796,808,841,977,1038,1188,1193,1202,1224,1374,1448,1455,1492,1540,1992,2019,2048 'data.get':1210,1217 'data_access.md':652,727,2045 'dataset':346 'date/time':103,928,1501,1791 'datetim':99,194,402,404,416,927,1503,1505,2007 'datetime.now':140,367,572,1508 'datetime/luxon':1792 'day':1512 'debug':1713,1718 'decod':1541,1542 'default':220,1605,1624 'depend':1902 'deploy':1957 'describ':2126 'detail':732,866,1308 'dict':1393 'dictionari':742,816,999,1412,1590,1985,2011 'direct':178,1416,1444,1852 'docs.n8n.io':2074,2080 'docs.n8n.io/code/builtin/python-modules/':2079 'docs.n8n.io/code/code-node/':2073 'document':111,2069 'doesn':1610 'duplic':1171 'effect':2113 'els':299,809,1233,1286,1297,1741 'email':677,679,690,693,1130,1153,1163,1165,1169,1173,1177,1180,1182,1186,1211,1213,1449,1451,1458,1461,1467,1471,1474 'empti':792,1355,1973 'encod':1535,1538,1544 'encoding/decoding':937 'environ':2138 'environment-specif':2137 'error':867,1205,1227,1229,1230,1232,1300,1311,1479,1928,2060,2101 'error_patterns.md':863,1476,2057 'errors.append':1212,1219 'essenti':144,1878 'etc':97,438,2009 'exampl':262,350,408,455 'execut':233,260,317,348,378,859 'exist':1612,1980 'expect':852 'expert':39,1863,1921,2143 'explicit':1621,1640 'express':933,1520,1840,1842,1857 'extern':106,183,872,880,1318,1328,2001 'extract':1009,1121 'f':1728,1734 'f12':1724 'fail':861 'faster':255 'featur':1947 'field':822,830,1207,1598,1604,1609,1616,1809 'field1':754 'field2':756 'file':2044 'filter':250,505,1070,1073,1656,1815,1817 'find':1866 'first':51,149,554,557,561,765,1735,1964,2093 'fix':1931 'forgot':1368 'format':167,734,748,813,854,856,1389,1514,1708,1988 'found':1303 'full':92,729 'function':70,95,941,949,957,1079,1779 'get':275,466,496,519,553,626,696,788,1054,1059,1087,1104,1161,1257,1428,1435,1466,1470,1588,1603,1632,1644,1670,1683,1873,1876,2014 'good':1623,1636 'guid':204,655,1480,2072,2103 'guidanc':40 'handl':1618,1926 'hash':940,1545,1548 'hashlib':197,939,1547 'hashlib.sha256':1550 'help':1875 'helper':94,387,395,434,451 'helpers.httprequest':96,975,1353,1787 'hexdigest':1552 'html':1008 'http':636,639,649,960,963,1005,1335,1341,1785,1826,1830 'id':463,467,529,532,762,767,775,778,1051,1055 'import':49,400,403,875,879,892,895,898,901,906,909,922,926,930,934,938,942,946,950,954,1126,1248,1317,1327,1330,1490,1504,1521,1536,1546,1555,1567,2002 'includ':718 'incomplet':838 'incorrect':811,855,1387 'independ':336 'input':237,321,384,436,2152 'input.all':125,158,241,270,410,485,504,784,1048,1082,1129,1196,1253,1366,1376,1726,1996 'input.first':159,541,559,1997 'input.item':161,325,358,576,601,1999 'input/_json/_node':19 'instead':1394,1941 'integr':479,1797,1833 'isoformat':141,368,573 'issu':1933 'item':124,130,132,135,218,243,258,267,269,273,279,282,290,295,298,305,322,327,333,340,356,357,361,409,422,429,430,458,460,464,498,503,510,512,515,517,524,530,534,555,558,562,578,588,592,596,600,605,607,776,782,786,1042,1047,1052,1057,1066,1068,1081,1085,1091,1093,1095,1096,1098,1100,1102,1115,1128,1155,1157,1159,1195,1199,1201,1203,1252,1255,1261,1263,1267,1365,1375,1380,1383,1385,1601,1614,1630,1642,1662,1664,1666,1668,1677,1679,1681,1686,1725,1731,1732,1736,1737,1740,1891,1894,1990,2029 'item-specif':332 'javascript':50,54,89,148,207,972,990,1014,1339,1350,1748,1781,1899,1916,1936,1940,1944,1952,1963,2092 'jmespath':399 'json':134,136,166,174,177,193,274,284,360,362,385,419,462,465,518,528,531,535,563,565,603,606,635,641,643,675,678,687,691,724,744,753,761,766,774,777,787,806,821,827,845,923,924,1050,1053,1058,1086,1103,1109,1160,1179,1204,1223,1256,1268,1272,1299,1379,1381,1398,1406,1422,1450,1459,1488,1491,1494,1496,1602,1615,1631,1643,1669,1682,1696,1699,1991,2006 'json.dumps':1498 'json.get':702,1433,1468 'json.loads':1493 'key':745,1499,1559,1697 'keyerror':673,1410,1425,1452,2017 'languag':1895 'larg':345 'len':288,293,421,1113,1184,1226,1283,1295,1730 'leverag':2109 'librari':24,69,100,107,184,191,873,916,920,1319,1329,1482,1778,2005,2066,2112 'limit':30,108,181,440,870,877,2114 'list':740,771,818,825,853,997,1044,1174,1396,1402,1653,1659,1694,1772,1983 'logic':335,1768,1977 'loop':594,1674 'luxon':98 'lxml':910 'm':1517 'manual':994,1673 'map':1769,1810 'match':1523,2123 'math':199,947,948 'matter':849 'max':1291,1292 'mcp':1861 'mean':1249,1273,1274,1568,1572 'meaning':1976 'median':1250,1276,1277,1569 'method':1017 'migrat':1948 'min':1288,1289 'miss':1358,1420,1599,2160 'mistak':662,1315,2107 'mode':202,223,246,308,329,370,379,579,589,597,1888,2026 'modul':983,1244,1486,1755 'modulenotfounderror':891,1332 'multipl':257,347,758,1705 'must':164,1974,1981 'n8n':2,9,17,32,46,93,110,374,450,478,1796,1839,1860,1885,1903,1919,1934,2056,2068,2078,2087 'n8n-code-python':1 'name':533,536,674,676,686,689,704,706,1056,1060,1218,1220,1421,1424,1432,1436 'nativ':245,328,373,426,454 'necessari':154,1969 'need':26,65,446,508,618,959,976,1000,1753,1775,1784,1789,2098 'nest':666,1441 'next':850 'no-email':1472 'node':11,34,37,48,123,386,501,612,615,622,630,633,638,709,851,965,968,1007,1010,1337,1343,1346,1806,1813,1818,1825,1832,1847,1849,1868,1870,1877,1883,1886,1907,1924,1960,2071,2089 'nodes-base.code':1879 'none':1234,1628,1639,1649,1742 'none/null':1619 'now.isoformat':424 'now.strftime':1515 'number':953 'numpi':188,899 'object':417,549 'offer':375 'oper':104,337,493,929,993,1489,1758,1884 'output':627,1497,2033,2132 'overview':1025 'packag':881 'panda':187,896 'pandas/numpy':979 'param':1557 'paramet':722 'pars':925,945,1554,1561 'path':2037 'pattern':482,483,539,574,610,1024,1036,1122,1131,1166,1310,1905,1918,2050,2054,2102 'payload':725 'per':339 'per-item':338 'perform':254,342 'permiss':2153 'plain':833 'post':719 'practic':1584 'prefer':91 'prevent':1312 'previous':500 'print':1715,1727,1733 'process':126,128,137,143,252,352,363,365,456,468,471,490,522,538,567,570,608,779,804,807,836,1063,1118,1367,1377,1729 'processed.append':133,461,527 'product':1028 'proper':1986 'properti':716,1901 'pure':447 'python':4,6,15,29,35,43,62,67,77,87,117,121,151,261,349,369,377,380,392,405,406,425,442,448,452,453,474,495,552,590,625,669,749,814,876,886,917,981,1035,1046,1080,1125,1194,1245,1309,1321,1323,1360,1390,1414,1442,1487,1592,1622,1657,1658,1691,1717,1746,1750,1765,1851,1897,1914,1946,1950,1958,1966,2047,2053,2076,2085,2095 'python-specif':1320 'queri':721,1871 'quick':115,1953 'r':1132,1525,1530 'rais':672,890 'random':200,951,952 're':72,80,195,931,1127,1522,1760,2008 're.findall':1164,1524 're.sub':1529 'readi':2082 'recommend':52,219,382,472,1803 'refer':613,1022,1483,1582,1954,2067,2099 'regardless':235 'regex':1120 'regex/string':1016 'regular':932,1519 'relat':2043 'remov':1170 'request':186,640,712,893,961,964,1006,1331,1336,1342,1786,1827,1831 'requir':735,1214,1221,1404,2151 'resourc':2042 'respons':551 'result':566,751,759,793,1399,1407,1700,1702,1704,1706,1711 'return':142,165,283,359,418,470,537,564,602,642,733,739,747,752,760,790,798,799,801,805,810,812,820,829,835,840,1049,1108,1178,1235,1271,1298,1359,1363,1370,1373,1378,1388,1392,1397,1405,1688,1698,1703,1709,1978,1982,1987,2038 'review':2144 'riski':1606 'rule':145,737 'run':214,301,584 'safe':698,1430,1463,1593,2010 'safer':694 'safeti':2154 'scipi':902 'scope':2125 'scrape':1002 'search':1869 'second':770 'see':651,726,862,1018,1304,1475,1578 'select':203,1889,1896,2027 'separ':318 'set':1175,1812 'signific':73,1761 'simpl':1808,1819 'singl':259,548,750,1701 'skill':1836,2117 'skill-n8n-code-python' 'slower':343 'solut':868,2062 'source-sickn33' 'special':310 'specif':66,334,621,629,1322,1776,2097,2139 'standard':23,68,190,441,915,919,1481,1777,2004,2065,2111 'standard_library.md':1019,1579,2063 'start':116 'stat':986 'statement':1364,1716,1719,1979 'statist':201,955,956,982,1238,1241,1243,1247,1564,1566,1754,1757 'status':520 'stdev':1251,1279,1280,1570 'step':1910 'stop':2145 'string':834,1117,1495 'structur':659,731,839,1690,2040 'substitut':2135 'success':1400,1408,2157 'suit':85 'sum':272,1072,1084 'support':114 'switch':970,988,1012,1348,1824 'syntax':20,78,388,1766,1841,1844 'task':2121 'templat':119 'test':2141 'text':1124,1158,1162,1167,1527,1533,1641,1645,1647,1650 'text.encode':1551 'timedelta':1506,1511 'timestamp':139,353,423 'today':398 'tomorrow':1509 'tool':1862 'top':1313,2058 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'total':264,271,285,286,292,1083,1110,1111 'transform':83,253,506,773,791,1039,1040,1909 'treat':2130 'tri':1325 'true':138,364,469,609,780,1064 'two':376 'understand':28,1900 'uniqu':1172,1181,1185 'unknown':1061,1437 'upper':1062 'url':944,1553,1563 'urllib.parse':198,943,1556 'urllib.parse.urlencode':1558 'urllib.parse.urlparse':1562 'use':12,18,53,58,61,150,212,221,227,306,383,393,428,444,473,488,544,581,616,695,962,974,980,1004,1034,1334,1352,1427,1485,1587,1652,1745,1749,1780,1801,1811,1816,1821,1829,1843,1850,1856,1913,1939,1965,1995,2013,2094,2115 'user':1423,1434 'valid':341,509,526,789,1094,1114,1189,1190,1197,1206,1225,1236,1661,1675,1880,1882,1920,1922,1927,2140 'valid.append':1685 'validated.append':1222 'valu':823,831,842,846,1254,1258,1265,1270,1275,1278,1281,1284,1290,1293,1296,1302,1500,1549,1560,1600,1613,1620 'value1':755 'value2':757 'variabl':431 'verbos':1672 'verifi':1961 'via':2021 'vs':372,1747,1858,1892,1898,1915,1945 'w':1531 'want':1794 'web':1001 'webhook':170,631,634,645,646,657,663,681,700,708,730,1439,1447,1454,2018,2025 'webhook_data.get':705 'well':1770 'without':449,817,826 'won':1594 'work':21,231,315,546,1837 'workaround':958 'workflow':624,858,1029,1904 'wrap':710 'wrapper':819,828,1403 'write':5,14,42,2084 'wrong':670,815,824,832,837,1324,1361,1391,1415,1443 'y':1516 'z':1146,1149 'z0':1137,1142 'za':1136,1141","prices":[{"id":"213b776e-7c5a-4f5d-913b-44b49827403a","listingId":"636ba473-07a4-461c-8dd0-15716b59e82e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:41:11.339Z"}],"sources":[{"listingId":"636ba473-07a4-461c-8dd0-15716b59e82e","source":"github","sourceId":"sickn33/antigravity-awesome-skills/n8n-code-python","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/n8n-code-python","isPrimary":false,"firstSeenAt":"2026-04-18T21:41:11.339Z","lastSeenAt":"2026-04-23T06:51:36.726Z"}],"details":{"listingId":"636ba473-07a4-461c-8dd0-15716b59e82e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"n8n-code-python","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34666,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-23T06:41:03Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"c4bda3407868de98ea642b3ddc2e7c2bfead5daf","skill_md_path":"skills/n8n-code-python/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/n8n-code-python"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"n8n-code-python","description":"Write Python code in n8n Code nodes. Use when writing Python in n8n, using _input/_json/_node syntax, working with standard library, or need to understand Python limitations in n8n Code nodes."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/n8n-code-python"},"updatedAt":"2026-04-23T06:51:36.726Z"}}