⚡The verdict up front
These three options are not really competitors — they are the same decision at three different points on the volume-and-complexity curve, and most companies should expect to use at least two of them at the same time. The failure mode is forcing one tool to cover the whole curve.
Choose Zapier when the people building the automation are not engineers, the workflows are linear (trigger, one or two actions, done), and monthly volume is modest. Choose n8n when you have at least one technical person, workflows have real branching and error handling, volume is climbing, or self-hosting matters for cost or data control. Choose custom code when a workflow runs at high volume with stable logic, when it is part of the product itself, or when the platform bill for that one workflow would fund an engineer instead.
The rest of this article defends those sentences, with the pricing mechanics, the scale limits and the migration path between all three.
| Dimension | Zapier | n8n | Custom code |
|---|---|---|---|
| Pricing model | Per task (each action step counts) | Per execution (cloud) or self-hosted licence | Engineering time + infrastructure |
| Best at volume | Low to moderate | Moderate to high | High |
| Logic complexity | Linear, light branching | Branching, loops, error paths, sub-workflows | Anything you can express |
| Who builds it | Operations and business users | Technical ops or one engineer | Engineers |
| AI capabilities | AI steps, agents, copilot assistance | AI Agent node with tools and memory, LangChain-based | Full control — any model, any architecture |
| Data control | Vendor cloud | Self-host option puts it in your boundary | Entirely yours |
| Maintenance burden | Low until zaps sprawl | Moderate — you operate the instance if self-hosted | High — you own everything |
💳Three pricing models, three different breaking points
Zapier charges per task, and the definition of a task is the part people miss: every successful action step in a workflow counts as a task. A five-step Zap running a thousand times a month consumes roughly four thousand tasks (triggers are typically not billed, each action is). Multi-step workflows multiply the meter, which is exactly why Zapier feels cheap in the demo and expensive in the spreadsheet.
n8n cloud charges per workflow execution — one run of the whole workflow counts once, regardless of how many steps it contains. For branchy, many-step automations this is structurally cheaper than per-task billing, and it is the single biggest reason teams migrate from Zapier to n8n. The self-hosted option removes the execution meter entirely: n8n is source-available under its Sustainable Use License, which permits internal business use (including commercial use inside your own company) but restricts offering it as a competing hosted service. Verify the current licence terms before building a business process on top of them.
Custom code has the simplest model and the scariest one: you pay in engineering time up front and infrastructure forever, and there is no meter — the ten-thousandth run costs the same as the tenth. That is exactly why custom wins at high volume: the cost curve is flat while both platforms charge per unit of your success.
| Cost behaviour | Zapier (per task) | n8n cloud (per execution) | n8n self-hosted | Custom code |
|---|---|---|---|---|
| 1K runs/mo, 5-step flow | Cheap | Cheap | Server + minimal time | Overkill |
| 50K runs/mo, 5-step flow | Expensive — tasks multiply by steps | Moderate — steps do not multiply | Server cost barely moves | Worth modelling |
| 500K runs/mo, stable logic | Often the most expensive option | Meaningful monthly bill | Still mostly server cost | Frequently cheapest |
| Logic changes weekly | Fast to change, no deploy | Fast to change, no deploy | Fast to change | Slow — every change is engineering |
🧱Where each option breaks at scale
Zapier breaks first on cost and second on logic. The cost break is arithmetic — per-task billing punishes multi-step workflows at volume. The logic break is subtler: Zapier is optimized for linear flows, and while it has added paths, loops and filters, a workflow with genuine branching, retries and state starts to feel like assembling a program from form fields. Teams at that point are writing software in the wrong medium.
n8n breaks later and differently. Self-hosted, the break is operational: you now run a service — updates, backups, queue workers, scaling executions, and the quiet moment at 2 a.m. when the instance is down and the order sync has not run for six hours. On n8n cloud, the operational burden disappears but the execution meter returns, and heavy high-frequency workflows need the same cost modelling as Zapier. In both cases, versioning, testing and multi-environment discipline are possible but require more engineering hygiene than the visual canvas suggests.
Custom code breaks on change frequency and ownership. If the business logic changes weekly, deploying code for every tweak is the wrong latency. And a custom automation with no named owner rots silently — the worst failure mode of the three, because nothing alerts you until the data is wrong. The honest summary: Zapier breaks on your invoice, n8n breaks on your operations, custom code breaks on your roadmap.
🤖The AI capabilities, honestly assessed
Both platforms have invested heavily in AI, and both should be understood as orchestration with AI steps rather than full agent platforms. Zapier offers AI-powered steps, copilot-style assistance for building workflows, and an agents feature for creating assistants that can act across its app ecosystem. These are strong for what they are: giving business users model-powered steps — classify this, summarize that, draft a reply — inside workflows they can build themselves.
n8n goes deeper for builders. Its AI Agent node is built on LangChain under the hood and supports the actual agent loop: a model with tool-calling, memory, and chains of sub-nodes for retrieval and vector stores. You can build a real retrieval-augmented support agent or a multi-tool research workflow visually, self-host it, and keep the data in your own boundary. For many internal agent use cases this is the fastest legitimate path to production.
The honest ceiling on both: when the agent logic itself becomes the product — custom planning loops, sophisticated eval gates, fine-grained control over context and retries — the visual node model starts to constrain you, and the same investment in code gives you full control with better testing. Use the platforms for the 80 percent of automation that is plumbing; write code for the 20 percent that is product.
A useful heuristic: if the AI step is one node in a larger business workflow, a platform is right. If the workflow exists to serve the AI logic, that is an agent, and agents deserve code — or at minimum a self-hosted n8n you control.
💻When custom code is cheaper than both
The crossover is arithmetic, not ideology. Take the workflow with the highest monthly execution count, look at the platform bill for it, and compare that run-rate against building it as a small service: a webhook receiver or queue consumer, the business logic, and a cron or event trigger. For stable, high-volume workflows, the build is often a few engineering weeks against an annual platform bill in the tens of thousands — labelled ranges from market observation, not a benchmark, so run your own numbers.
Custom also wins when the workflow needs things platforms make awkward: heavy data transformation, transactions across systems that must succeed or fail together, latency budgets under a second, or integration with internal systems that have no prebuilt connector. Every "we will just add a code step to work around this" is a signal that the workflow wants to be code.
The mistake is going custom for everything. Automations that change weekly, connect five SaaS tools with living APIs, and are owned by operations teams belong on a platform — the connector maintenance alone justifies the subscription. Custom code is the answer for the stable, high-volume, high-value core, not for the long tail.
One more consideration that tips the arithmetic: error handling and observability. A platform gives you run histories and failure alerts out of the box. A custom service gives you nothing unless you build it, so the honest custom estimate includes logging, alerting and a retry strategy from day one — still frequently cheaper at volume, but only if you count the whole build and not just the happy path.
👤The ownership question that decides more than features do
Automation fails organizationally before it fails technically, and the three options imply three different owners. Zapier assumes a business-user owner: someone in operations or marketing who builds and maintains the zaps alongside their day job. That works until the number of zaps crosses the point where one person can hold the map — at which point undocumented automations become shadow infrastructure that nobody fully understands.
Self-hosted n8n assumes a technical owner. Not necessarily a full-time engineer, but someone who treats the instance as a service: updates, backups, credentials, monitoring. The platform is forgiving of sloppy workflow design in a demo and unforgiving of it in production, so the owner needs enough engineering hygiene to version workflows and test changes before they touch live data.
Custom code assumes an engineering owner with an on-call story. That is a real cost and it is why the custom column should only contain workflows that justify one. The governance rule we give clients: every automation, on any platform, gets a named owner, a one-line description of what it does, and an alert that reaches a human when it stops running. The tool matters less than those three lines.
| Governance need | Zapier | n8n self-hosted | Custom code |
|---|---|---|---|
| Typical owner | Business or ops user | Technical ops or platform engineer | Engineering team |
| Sprawl risk | High — undocumented zaps accumulate | Moderate — central instance helps | Low — code review is the gate |
| Change discipline | Edit live, no versioning by default | Versioning possible, needs hygiene | Pull requests and deploys |
| Failure alerting | Built-in, per-zap | Built-in, plus your own monitoring | You build it — budget for it |
🛤️The migration path that avoids a rewrite cliff
The path that works treats the three options as stages, not rivals. Prototype on Zapier or n8n — speed matters more than architecture when you are still learning what the workflow should do. Then instrument: which workflows run most, which change most, which carry the most business value.
Migrate by exception, not by project plan. Move a workflow to self-hosted n8n when its volume makes the per-task or per-execution bill hurt or when data control demands it. Move a workflow to custom code when it is simultaneously high-volume, stable and business-critical — the three conditions together, not any one alone. Leave everything else on the platform, and resist the urge to consolidate for tidiness.
Keep the interfaces boring throughout: webhooks in, webhooks or queue messages out. Boring interfaces are what let you re-platform a single workflow in a week without touching its neighbours, and they are the difference between a migration path and a migration project.
n8n AI agent development servicesAgentic workflow automation services
The practical rule: prototype everything on a platform, self-host the volume drivers, and write code only for workflows that are high-volume, stable and critical at the same time. That combination, and only that combination, is where custom beats both.
