Migrate to n8n

السجل الرسمي أخرى

Convert Make and Zapier automations into n8n workflows, with a report of what to check.

التثبيت

أضف هذا إلى إعدادات MCP في عميلك (Claude Desktop: claude_desktop_config.json، وCursor: ‏.cursor/mcp.json، ويستخدم VS Code وغيره الصيغة نفسها «mcpServers»).

NPM package migrate-to-n8n
Claude Code
claude mcp add migrate-to-n8n -e 'MIGRATE_OUTPUT_DIR=<MIGRATE_OUTPUT_DIR>' -e 'N8N_URL=<N8N_URL>' -e 'N8N_API_KEY=<your n8n_api_key>' -- npx -y migrate-to-n8n@0.2.0 serve
إعداد JSON (Claude Desktop وCursor وVS Code)
{
    "mcpServers": {
        "migrate-to-n8n": {
            "command": "npx",
            "args": [
                "-y",
                "migrate-to-n8n@0.2.0",
                "serve"
            ],
            "env": {
                "MIGRATE_OUTPUT_DIR": "<MIGRATE_OUTPUT_DIR>",
                "N8N_URL": "<N8N_URL>",
                "N8N_API_KEY": "<your n8n_api_key>"
            }
        }
    }
}

متغيرات البيئة

  • MIGRATE_OUTPUT_DIR Folder for converted workflows and reports (default: Documents/migrate-to-n8n)
  • N8N_URL Your n8n address, to upload results (optional)
  • N8N_API_KEY سري n8n API key, to upload results (optional)

التوثيق

مأخوذ من ملف README للمشروع على GitHub ويُحدَّث أسبوعيًا. تفتح الروابط على GitHub.

المحتويات
  1. migrate-to-n8n
  2. What you get
  3. Try it in one minute
  4. Step by step
  5. Tools
  6. What converts
  7. What does not convert, and why
  8. Command line
  9. Development
  10. Roadmap
  11. Contact
  12. License

migrate-to-n8n

Move your Make scenarios and Zapier zaps to n8n. Give it the export, get an n8n workflow you can import, plus a report on every step: what converted, what you should check, and how to finish the rest.

It works as an MCP server (ask Claude, Cursor, VS Code or any MCP client to "convert this to n8n") and as a plain command-line tool. Free and open source. Your scenarios stay on your computer.

What you get

Every step of your scenario ends up in one of three states, and the report lists them all:

What it meansExample
✅ convertedRuns after import. You only reconnect credentials.Webhook, HTTP request, router, iterator, Gmail send
⚠️ reviewConverted, with one named thing to check.A formula with no exact n8n twin, a sheet written by column letter
🛠 manualNo safe automatic equivalent. The step sits in place, disabled, with a sticky note that says what to do.A private Make app: you get a Code node that already collects its inputs

Nothing gets dropped. Manual steps keep the workflow connected, so it imports and runs while you finish them. This is the demo scenario after conversion, opened in n8n 2.44: the private CRM app has no n8n node, so its step waits disabled, with a note on what to do.

Formulas carry over too: {{formatDate(1.date; "DD.MM.YYYY")}} becomes {{ DateTime.fromISO(String($('Webhook').item.json.body.date)).toFormat('dd.LL.yyyy') }}.

Measured on 2026-10-22 on the public Make blueprints and Zapier exports found on GitHub:

SourceWorkflowsSteps✅ Converted⚠️ To review🛠 ManualBroken outputsTime (median)
Make1,43210,12942.7%40.5%16.7%00.7 ms
Zapier1489107%63.7%29.2%00.3 ms

"Broken outputs" counts workflows that n8n would reject. The test suite also imports a sample of these workflows into real n8n 2.44 and 1.123, and runs some of them through their webhooks to compare the answers with Make. Many public Zapier exports come without step settings or code, which keeps the Zapier numbers lower.

Try it in one minute

You need Node.js 22 or newer.

npx migrate-to-n8n convert my-scenario.blueprint.json

The workflow and the report go to Documents/migrate-to-n8n. Import the .n8n.json file in n8n: Workflows → Import from File.

No export at hand? Try the demo scenario: download it and run the same command on it.

Step by step

1. Export from Make or Zapier
  • Make: open the scenario, click ⋯ at the bottom of the editor, choose Export Blueprint.
  • Zapier: Settings → Security and data → Download my Zap workflows. You get one file with all your zaps. Pick the ones you want with list_zaps (or migrate-to-n8n list-zaps <file>).
2. Connect it to your AI client

Claude Desktop: download migrate-to-n8n.mcpb and open it. Claude Desktop installs it in one click. The settings are optional: an output folder, and your n8n address and API key if you want uploads.

Claude Code:

claude mcp add migrate-to-n8n -- npx -y migrate-to-n8n serve

Cursor, VS Code, Windsurf and other clients: add this to the client's MCP config (.cursor/mcp.json, .vscode/mcp.json, …):

{
  "mcpServers": {
    "migrate-to-n8n": {
      "command": "npx",
      "args": ["-y", "migrate-to-n8n", "serve"],
      "env": { "N8N_URL": "", "N8N_API_KEY": "" }
    }
  }
}

VS Code uses "servers" instead of "mcpServers".

3. Convert

Attach the file in the chat (or give its path) and ask:

Convert this Make scenario to n8n and help me finish what doesn't convert.

The assistant gets the report and walks you through every step marked ⚠️ or 🛠.

4. Import into n8n

Import the .n8n.json file (Workflows → Import from File), pick your credentials in the nodes the report lists, point webhook senders to the new URL, run it once with test data, then activate it.

With N8N_URL and N8N_API_KEY set (n8n → Settings → n8n API), the assistant can upload the workflow for you. It creates a new, inactive workflow named "… (migrated)" and never touches existing ones.

Tools

ToolWhat it does
convert_makeMake blueprint → n8n workflow file + report
convert_zapierZapier export → one workflow file + report per zap
list_zapsThe zaps in a Zapier export: title, steps, apps, on/off
suggest_replacementHow one module or step is handled, and what to use instead
supported_modulesSearch what converts automatically
check_n8n_workflowProblems left in a workflow file: broken links, disabled steps, placeholders, credentials
upload_to_n8nCreate the workflow in your n8n, inactive (only when N8N_URL and N8N_API_KEY are set)

What converts

Flow control converts in full on both sides: routers and paths (every matching route runs, as in Make and Zapier), filters with AND/OR groups, iterators and aggregators, error handlers, schedules, variables, webhooks and responses, HTTP requests, JSON, Formatter, Code, Delay, Storage. About 50 Make formula functions, Make date formats, operators and 25 Zapier Formatter transforms translate to n8n expressions.

Make: 135 modules and steps convert automatically

Module / stepBecomes in n8n
*:makeApiCallHTTP Request (the app's API)
airtable:ActionCreateRecordAirtable: Create
airtable:ActionGetRecordAirtable: Get
airtable:ActionSearchRecordsAirtable: Search
airtable:ActionUpdateRecordsAirtable: Update
airtable:TriggerWatchRecordsAirtable Trigger
anthropic-claude:createAMessageAnthropic: Message a Model
anthropic-claude:simpleTextPromptAnthropic: Message a Model
apify:fetchDatasetItemsHTTP Request (Apify API)
apify:finishedActorRunsWebhook (Apify)
apify:runActorHTTP Request (Apify API)
apify:runActorNewHTTP Request (Apify API)
builtin:BasicAggregatorAggregate
builtin:BasicFeederSplit Out
builtin:BasicFilterNo Operation
builtin:BasicIteratorSplit Out
builtin:BasicRepeaterCode (repeat)
builtin:BasicRouterNo Operation (fan-out)
code:ExecuteCodeCode
csv:ParseCSVCode (parse CSV) + Split Out
datastore:AddRecordData Table: Insert Row
datastore:DeleteRecordData Table: Delete Rows
datastore:ExistRecordData Table: If Row Exists
datastore:GetRecordData Table: Get Rows
datastore:SearchRecordData Table: Get Rows
datastore:UpdateRecordData Table: Update / Upsert
discord:createMessageDiscord: Send Message
dropbox:createShareLinkHTTP Request (Dropbox API)
dropbox:uploadLargeFileDropbox: Upload
email:ActionSendEmailSend Email (SMTP)
email:TriggerNewEmailEmail Trigger (IMAP)
facebook-pages:CreatePostFacebook Graph API: Page Post
facebook-pages:CreatePostWithPhotosFacebook Graph API: Page Photo Post
gateway:CustomWebHookWebhook
gateway:WebhookRespondRespond to Webhook
gemini-ai:createACompletionGeminiProGoogle Gemini: Message a Model
gmail:ActionSendEmailGmail: Send
gmail:sendAnEmailGmail: Send
gmail:TriggerNewEmailGmail Trigger
google-calendar:createAnEventGoogle Calendar: Create Event
google-calendar:deleteAnEventGoogle Calendar: Delete Event
google-calendar:searchEventsGoogle Calendar: Get Many Events
google-docs:createADocumentGoogle Docs: Create
google-docs:createADocumentFromTemplateGoogle Drive: Copy (template)
google-docs:getADocumentGoogle Docs: Get
google-drive:createAFolderGoogle Drive: Create Folder
google-drive:getAFileGoogle Drive: Download
google-drive:moveAFileIntoAFolderGoogle Drive: Move
google-drive:searchForFilesFoldersGoogle Drive: Search
google-drive:shareAFileFolderGoogle Drive: Share
google-drive:uploadAFileGoogle Drive: Upload
google-drive:watchFilesInAFolderGoogle Drive Trigger
google-email:ActionCreateDraftGmail: Create Draft
google-email:ActionSendEmailGmail: Send
google-email:createADraftGmail: Create Draft
google-email:sendAnEmailGmail: Send
google-email:TriggerNewEmailGmail Trigger
google-email:TriggerWatchEmailsGmail Trigger
google-email:triggerWatchNewEmailsGmail Trigger
google-sheets:addRowGoogle Sheets: Append Row
google-sheets:createSpreadsheetGoogle Sheets: Create Spreadsheet
google-sheets:deleteRowGoogle Sheets: Delete Rows
google-sheets:filterRowsGoogle Sheets: Get Rows (+ Filter)
google-sheets:getCellHTTP Request (Sheets API, read a cell)
google-sheets:getSheetContentGoogle Sheets: Get Rows (+ Filter)
google-sheets:searchRowsGoogle Sheets: Get Rows (+ Filter)
google-sheets:searchRowsAdvancedGoogle Sheets: Get Rows (+ Filter)
google-sheets:updateCellHTTP Request (Sheets API, write a cell)
google-sheets:updateRowGoogle Sheets: Update Row
google-sheets:watchRowsGoogle Sheets Trigger (row added)
http:ActionGetFileHTTP Request (file)
http:ActionSendDataHTTP Request
http:ActionSendDataAPIKeyAuthHTTP Request (API key)
http:ActionSendDataBasicAuthHTTP Request (basic auth)
http:DownloadFileHTTP Request (file)
http:MakeRequestHTTP Request
instagram-business:CreateAReelPostFacebook Graph API: Instagram reel + publish
instagram-business:CreatePostPhotoFacebook Graph API: Instagram media + publish
json:AggregateToJSONAggregate + Edit Fields
json:CreateJSONEdit Fields
json:ParseJSONEdit Fields (JSON)
json:TransformToJSONEdit Fields
linkedin:CreateCompanyImagePostLinkedIn: Create Post
linkedin:CreateCompanyPostLinkedIn: Create Post
linkedin:CreatePostLinkedIn: Create Post
linkedin:ShareImageLinkedIn: Create Post
manychat:SetSubscriberCustomFieldHTTP Request (ManyChat API)
markdown:CompileMarkdown → HTML
notion:createAPageNotion: Create Database Page
notion:updateADatabaseItemNotion: Update Database Page
open-router:createAChatCompletionHTTP Request (OpenRouter API)
openai-gpt-3:askAnythingOpenAI: Message a Model
openai-gpt-3:CreateCompletionOpenAI: Message a Model
openai-gpt-3:createModelResponseOpenAI: Message a Model
openai-gpt-3:GenerateImageOpenAI: Generate an Image
openai-gpt-3:messageAssistantAdvancedOpenAI: Message a Model (instructions)
openai-gpt-3:transformTextToStructuredDataOpenAI: Message a Model (JSON)
perplexity-ai:createAChatCompletionHTTP Request (Perplexity API)
placeholder:PlaceholderNo Operation
regexp:HTMLToTextEdit Fields
regexp:ParserCode
regexp:ReplaceEdit Fields
resend:sendAnEmailHTTP Request (Resend API)
rss:ActionReadArticlesRSS Read
rss:TriggerNewArticleRSS Feed Trigger
scenario-service:ReturnDataEdit Fields (sub-workflow output)
slack:CreateMessageSlack: Send Message
slack:InviteUsersSlack: Invite to Channel
supabase:ActionCreateARecordSupabase: Create Row
supabase:createARowSupabase: Create Row
supabase:searchRowsSupabase: Get Many Rows
supabase:upsertARecordSupabase: Create Row
telegram:DownloadFileTelegram: Get File
telegram:SendReplyMessageTelegram: Send Message
telegram:WatchUpdatesTelegram Trigger
twilio:SendSMSTwilio: Send SMS
twitter:createATweetX (Twitter): Create Tweet
typeform:ListResponsesHTTP Request (Typeform API)
typeform:WatchEventsWithResponsesTypeform Trigger
util:ComposeTransformerEdit Fields
util:FunctionAggregator2Aggregate + Edit Fields
util:FunctionIncrementCode (counter)
util:FunctionSleepWait
util:GetVariable2Edit Fields
util:GetVariablesEdit Fields
util:SetMultipleVariablesEdit Fields
util:SetVariable2Edit Fields
util:SetVariablesEdit Fields
util:SleepWait
util:SwitcherEdit Fields
util:TextAggregatorAggregate + Edit Fields
webflow:publishAnItemHTTP Request (Webflow API)
webflow:updateItemWebflow: Update Item
whatsapp-business-cloud:sendMessageWhatsApp: Send Message
xml:ParseXMLXML (to JSON)

Zapier: 98 modules and steps convert automatically

Module / stepBecomes in n8n
AICLIAPI:get_completionOpenAI: Message a Model
AirtableCLIAPI:create_or_update_recordAirtable: Upsert
AirtableCLIAPI:createRecordAirtable: Create
AirtableCLIAPI:newRecordInViewAirtable Trigger
AirtableCLIAPI:updateRecordAirtable: Update
BranchingAPI:branchNo Operation (fan-out)
ChatGPTCLIAPI:chat_completionOpenAI: Message a Model
ChatGPTCLIAPI:chat_completion_memoryOpenAI: Message a Model
ChatGPTCLIAPI:conversationOpenAI: Message a Model
CodeCLIAPI:*Code
DelayAPI:delay_forWait
DelayAPI:delay_untilWait
DelayCLIAPI:delay_forWait
DelayCLIAPI:delay_untilWait
EmailCLIAPI:*Send Email
ExcelCLIAPI:add_rowMicrosoft Excel: Append to Table
ExcelCLIAPI:add_rowsMicrosoft Excel: Append to Table
FilterAPI:filterFilter
FilterCLIAPI:filterFilter
FilterCLIAPI:zapier_filterFilter
GmailAPI:messageGmail: Send (or Gmail Trigger as the first step)
GmailV2API:messageGmail: Send (or Gmail Trigger as the first step)
GoogleMailCLIAPI:messageGmail: Send (or Gmail Trigger as the first step)
GoogleMailV2CLIAPI:messageGmail: Send (or Gmail Trigger as the first step)
GoogleSheetsAPI:add_rowGoogle Sheets: Append Row
GoogleSheetsAPI:add_rowsGoogle Sheets: Append Row
GoogleSheetsCLIAPI:add_rowGoogle Sheets: Append Row
GoogleSheetsCLIAPI:add_rowsGoogle Sheets: Append Row
GoogleSheetsV2API:add_rowGoogle Sheets: Append Row
GoogleSheetsV2API:add_rowsGoogle Sheets: Append Row
GoogleSheetsV2API:new_or_updated_rowGoogle Sheets Trigger
GoogleSheetsV2API:new_rowGoogle Sheets Trigger
GoogleSheetsV2API:new_row_notify_hookGoogle Sheets Trigger
GoogleSheetsV2API:updated_row_notify_hookGoogle Sheets Trigger
GoogleSheetsV2CLIAPI:add_rowGoogle Sheets: Append Row
GoogleSheetsV2CLIAPI:add_rowsGoogle Sheets: Append Row
GoogleSheetsV2CLIAPI:new_or_updated_rowGoogle Sheets Trigger
GoogleSheetsV2CLIAPI:new_rowGoogle Sheets Trigger
GoogleSheetsV2CLIAPI:new_row_notify_hookGoogle Sheets Trigger
GoogleSheetsV2CLIAPI:updated_row_notify_hookGoogle Sheets Trigger
HubSpotCLIAPI:_zap_raw_requestHTTP Request (HubSpot API: API request)
HubSpotCLIAPI:company_crmSearchHTTP Request (HubSpot API: Search companies)
HubSpotCLIAPI:contact_crmSearchHTTP Request (HubSpot API: Search contacts)
HubSpotCLIAPI:create_associationsHTTP Request (HubSpot API: Create an association between two records)
HubSpotCLIAPI:deal_crmSearchHTTP Request (HubSpot API: Search deals)
HubSpotCLIAPI:find_associationsHTTP Request (HubSpot API: Find the associations of a record)
HubSpotCLIAPI:update_crm_dealHTTP Request (HubSpot API: Update a deal)
HubSpotCLIAPI:upsert_contactHubSpot: Create or Update Contact
InterfacesCLIAPI:new_form_submissionn8n Form Trigger
LinearCLIAPI:create_issueLinear: Create Issue
LoopingCLIAPI:*Split Out
NotionCLIAPI:create_database_itemNotion: Create Database Page
OpenAiCLIAPI:send_promptOpenAI: Message a Model
S3API:fileAWS S3: Upload
ScheduleAPI:*Schedule Trigger
SlackAPI:channel_messageSlack: Send Message (or Slack Trigger as the first step)
SlackAPI:direct_messageSlack: Send Message (to a user)
SlackAPI:send_channel_messageSlack: Send Message (or Slack Trigger as the first step)
SlackCLIAPI:channel_messageSlack: Send Message (or Slack Trigger as the first step)
SlackCLIAPI:direct_messageSlack: Send Message (to a user)
SlackCLIAPI:send_channel_messageSlack: Send Message (or Slack Trigger as the first step)
StorageCLIAPI:get_all_valuesCode (static data)
StorageCLIAPI:get_valueCode (static data)
StorageCLIAPI:increment_valueCode (static data)
StorageCLIAPI:remove_valueCode (static data)
StorageCLIAPI:set_valueCode (static data)
TableCLIAPI:create_recordData Table: Insert Row
TableCLIAPI:find_recordData Table: Get Rows
TableCLIAPI:increment_valueCode (increment a Data Table value)
TableCLIAPI:new_or_updated_recordSchedule + Data Table (watch rows)
TableCLIAPI:new_recordSchedule + Data Table (watch rows)
TableCLIAPI:update_recordData Table: Update Row
TableCLIAPI:updated_recordSchedule + Data Table (watch rows)
TallyCLIAPI:responseWebhook (Tally)
TelegramCLIAPI:send_messageTelegram: Send Message
TodoistV2DevAPI:new_taskTodoist: Create Task
WebHookCLIAPI:catch_hookWebhook
WebHookCLIAPI:catch_raw_hookWebhook
WebHookCLIAPI:custom_requestHTTP Request
WebHookCLIAPI:getHTTP Request
WebHookCLIAPI:hookWebhook
WebHookCLIAPI:hook_rawWebhook
WebHookCLIAPI:hook_v2Webhook
WebHookCLIAPI:patchHTTP Request
WebHookCLIAPI:postHTTP Request
WebHookCLIAPI:putHTTP Request
WebhooksCLIAPI:catch_hookWebhook
WebhooksCLIAPI:catch_raw_hookWebhook
WebhooksCLIAPI:custom_requestHTTP Request
WebhooksCLIAPI:getHTTP Request
WebhooksCLIAPI:hookWebhook
WebhooksCLIAPI:hook_rawWebhook
WebhooksCLIAPI:hook_v2Webhook
WebhooksCLIAPI:patchHTTP Request
WebhooksCLIAPI:postHTTP Request
WebhooksCLIAPI:putHTTP Request
ZapierFormatterCLIAPI:*Edit Fields
ZapierMailCLIAPI:outboundSend Email

Anything else still gets a place in the workflow: the closest of 362 n8n app nodes, an HTTP request to the app's API, or a Code node with the inputs already wired, each disabled with a note on how to finish it.

What does not convert, and why

  • Credentials. Make and Zapier never export them. Create them in n8n; the report lists which nodes need one.
  • Data. Make data stores and Zapier Tables become n8n Data Tables (n8n 1.113 or newer) with the same fields, but the rows stay behind.
  • Webhook URLs. n8n gives each webhook a new address. The report names them so you can update the senders.
  • Python code from Zapier or Make. n8n runs Python, but reads inputs differently in 1.x and 2.x: the code is placed in a Code node for you to adapt.
  • Output field names of apps. n8n's app nodes sometimes name results differently. Steps that read them are marked ⚠️ so you can check the field once after a test run.

Command line

migrate-to-n8n convert <file> [-o <folder>] [--zap <id or title>]...
migrate-to-n8n list-zaps <file>
migrate-to-n8n supported [text] [--source make|zapier]
migrate-to-n8n check <workflow.json>
migrate-to-n8n upload <workflow.json>      # needs N8N_URL and N8N_API_KEY
migrate-to-n8n serve                       # MCP server over stdio

Development

npm install
npm run n8n-types     # n8n's node catalogs, for the tests (kept out of the package)
npm test              # unit tests, golden conversions, checks against n8n's own node descriptions
npm run corpus -- download && npm run corpus -- stats    # measure on public exports (needs gh)
docker compose -f docker-compose.e2e.yml up -d && npm run e2e   # real n8n 2.x and 1.x

Every node the converter writes is checked against the parameter descriptions of n8n 2.44 and 1.123: names, allowed values and display rules. The n8n catalogs are downloaded for tests only and never ship.

Roadmap

  • Routers inside Make error-handler routes (today the modules of a handler are placed in one line on the error output).
  • More apps, driven by what people convert. Tell me which ones you need.

Contact

Feedback, ideas, job offers or custom projects (n8n, MCP, AI automation): kotiniiqq@gmail.com. Bug reports and feature requests are welcome in Issues.

License

MIT. Make, Zapier and n8n are trademarks of their owners; this project is not affiliated with them.

الأسئلة الشائعة

ما هو Migrate to n8n؟

Convert Make and Zapier automations into n8n workflows, with a report of what to check.

كيف أثبّت Migrate to n8n؟

يعمل على جهازك. في Claude Code: claude mcp add migrate-to-n8n -e 'MIGRATE_OUTPUT_DIR=<MIGRATE_OUTPUT_DIR>' -e 'N8N_URL=<N8N_URL>' -e 'N8N_API_KEY=<your n8n_api_key>' -- npx -y migrate-to-n8n@0.2.0 serve. وفي العملاء الآخرين، الصق إعداد JSON من هذه الصفحة في إعدادات MCP الخاصة بهم.

هل يحتاج Migrate to n8n إلى مفتاح API؟

نعم. يتطلب N8N_API_KEY، وتضبطها في إعداداته.

هل Migrate to n8n مفتوح المصدر؟

نعم. شيفرته متاحة على GitHub بترخيص MIT.

من يصون Migrate to n8n؟

ينشره kotiniiqq. يدرجه AI.tn لكنه لا يصونه ولا يوصي به.

من سجل MCP الرسمي. الإدراج ليس توصية: راجع شيفرة الخادم وصلاحياته قبل منحه الوصول إلى بياناتك.