Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

n8n Workflow to Python Converter

Python License n8n

Convert n8n automation workflow JSON files into clean, executable Python scripts — instantly.


What it does

You have an n8n workflow like this:

[Schedule] → [HTTP Request] → [Send Slack Message]

Run one command:

python converter.py my_workflow.json

And get a ready-to-run Python file:

import schedule, time, requests
from slack_sdk import WebClient

def run_every_day_at_9am():
    response = requests.get("https://api.example.com/data")
    data = response.json()

    client = WebClient(token=os.getenv('SLACK_TOKEN'))
    client.chat_postMessage(channel="#general", text=str(data))

schedule.every().hour.do(run_every_day_at_9am)
while True:
    schedule.run_pending()
    time.sleep(60)

Supported Node Types

Category Nodes
Triggers Manual, Schedule, Webhook
Logic IF, Switch, Merge, Set
HTTP HTTP Request
Code Code, Function
Services Slack, Gmail, Airtable, PostgreSQL, MySQL, Notion
AI / LLM OpenAI, Anthropic/Claude
Everything else Generic fallback with TODO comments

Installation

git clone https://github.com/yourusername/n8n-workflow-to-python
cd n8n-workflow-to-python
pip install -r requirements.txt

No external libraries are needed for the converter itself — only for the generated scripts (e.g. requests, slack-sdk, etc.).


Usage

Basic:

python converter.py workflow.json

Custom output filename:

python converter.py workflow.json -o my_automation.py

Verbose mode (shows all nodes and connections before converting):

python converter.py workflow.json --verbose

Help:

python converter.py --help

Quick Start Example

  1. Try the included example:
python converter.py examples/slack_alert.json --verbose
  1. This produces slack_daily_alert.py — open it, fill in your credentials, run it.

How It Works

The converter has 6 steps:

  1. Load — reads the JSON file with json.load()
  2. Extract nodes — parses each node's name, type, and parameters
  3. Extract connections — builds the execution flow from node to node
  4. Map types — looks up each node type in a templates dictionary
  5. Generate code — calls the matching generator function per node
  6. Write file — outputs a complete, formatted Python script

Each n8n node type has its own generator function (e.g. _gen_http_request, _gen_slack_node). Adding support for a new node type means adding one function.


Environment Variables

Generated scripts use os.getenv() for credentials. Create a .env file:

SLACK_TOKEN=xoxb-your-token
OPENAI_API_KEY=sk-your-key
ANTHROPIC_API_KEY=sk-ant-your-key
GMAIL_USER=you@gmail.com
GMAIL_PASSWORD=your-app-password
AIRTABLE_TOKEN=pat-your-token
DATABASE_URL=postgresql://user:pass@localhost/db
NOTION_TOKEN=secret_your-token

Install python-dotenv and the script loads it automatically:

pip install python-dotenv

Project Structure

n8n-workflow-to-python/
├── converter.py        ← Main converter (single file, no dependencies)
├── requirements.txt    ← Optional packages for generated scripts
├── examples/
│   └── slack_alert.json  ← Sample n8n workflow to test with
└── README.md

Contributing

Want to add support for more node types? It's easy:

  1. Add a new function _gen_yournode(node) that returns a list of Python code lines
  2. Add it to the NODE_TEMPLATES dict with the node's type string

Example:

def _gen_telegram_node(node):
    return [
        "# Telegram — send message",
        "import requests",
        f"requests.post(f'https://api.telegram.org/bot{{os.getenv(\"TELEGRAM_TOKEN\")}}/sendMessage', ...)",
    ]

NODE_TEMPLATES["n8n-nodes-base.telegram"] = _gen_telegram_node

License

MIT © 2024


Built to make 2055+ n8n workflows accessible as Python code.

About

Convert n8n workflow JSON files to Python scripts

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages