n8n Automation Development

Hire n8n developers who will tell you when n8n is the wrong answer.

This page assumes you’ve already chosen the tool. What you need next is somebody who’s run n8n in queue mode under load, written a custom node against an API with a badly behaved token refresh, and recovered a self-hosted instance whose encryption key vanished on a container restart. Custom nodes, self-hosted deployment, credential handling, error branches and retries, and the point at which a workflow should stop being a workflow.

If the tool question is still open and what you really want to know is which manual work should disappear first, start one level up with our AI automation service. That page is about the outcome. This one’s about the tooling.

What we build in n8n, and what you keep.

Seven artifacts rather than seven service categories. For the anatomy of one of these pipelines end to end, including where the human review queue belongs, we wrote up how to automate document processing separately.

A custom node for the API nobody else has integrated

Declarative style when the API is a well-behaved REST surface, programmatic when auth refresh, cursor pagination, or binary handling needs real code. Shipped as a versioned npm package under the n8n-nodes- convention, in your repository, installable without us in the room.

A self-hosted instance that survives its first busy Tuesday

Queue mode with Redis, worker containers you can scale on their own, Postgres instead of the default SQLite, binary data pushed to S3, and a pruning policy configured while the execution table is still small rather than the week it hits 40GB.

AI agent workflows with a tool list you can read

The Agent node wired to a named, bounded set of tools. Chat memory in Postgres rather than in process. A retrieval step that returns what it cited. A hard stop that hands the run to a person when confidence drops, rather than a model guessing fluently.

An error architecture, not an error message

A designated error workflow set at instance level, retry with backoff on every network-bound node, error output branches on the steps that fail predictably, and a dead-letter queue holding the original payload so you can replay a run instead of reconstructing it.

A rescue of the workflows you already have

The ninety-node canvas somebody built in a fortnight and nobody now dares touch. We split it into sub-workflows, get the JSON into git, add the checks a canvas can’t hold, and write down what each branch was actually for.

A migration off Zapier or Make

We rebuild them rather than transliterate them. Most Zap chains run linear because Zapier makes branching expensive. The n8n version is usually half the steps, does more, and stops billing you per step.

The interface n8n doesn’t give you

An exception dashboard or an approval screen in Next.js, reading the same Postgres. Your operations lead shouldn’t have to open a workflow editor to correct one record, and they’ll quietly stop doing it long before they tell you.

Engineering position

What decides whether a self-hosted instance is still standing in a year.

Start with the encryption key, because the most common way a self-hosted instance dies has nothing to do with workflows. On first boot n8n writes a key into its home directory and encrypts every stored credential with it. Run the container without a persistent volume mounted at that path and the next restart generates a fresh key, at which point every credential in the database is ciphertext nobody can read. We set N8N_ENCRYPTION_KEY explicitly from your secret manager on day one and treat it like a database password, because losing it costs about the same.

Second, know what the licence actually is before you commit to self-hosting. n8n is fair-code under the Sustainable Use Licence, not OSI open source. Internal business use is fine; reselling it as your own hosted product is not. And the features an enterprise tends to assume are included sit behind a paid licence: single sign-on, git-backed environments, external secrets, log streaming. Self-hosting saves you per-execution pricing. It does not automatically save you a licence fee, and a procurement team finding that out in month four is not a pleasant meeting.

Third, we start in queue mode rather than arriving at it later. Out of the box n8n executes workflows inside the same Node process that serves the editor. One workflow doing a synchronous transform over twenty thousand items will block the event loop, and the symptom your team reports isn’t “the workflow is slow,” it’s “the canvas has frozen.” Setting EXECUTIONS_MODE=queue with Redis in front and separate worker containers costs an hour in week one and is miserable to retrofit during an incident. Worker concurrency then becomes a real number with real consequences: set it high against a rate-limited API and you’ve built a distributed way to generate 429s.

Fourth, the execution table is what takes most instances down. Every run persists its per-node input and output data, on success as well as on failure, and by default into SQLite. A workflow firing every minute with a moderately fat payload will put tens of gigabytes in there inside a quarter, and by the time anyone looks, the pruning job is competing with live traffic on a database that can no longer breathe. So we run Postgres from the start, configure retention and max-age pruning before launch, turn saving on success down for high-frequency workflows, and move binary data to filesystem or S3 so a 40MB PDF isn’t copied through execution history at every node it passes.

Fifth, retry and recovery are different things, and n8n makes them easy to confuse. Per-node retry with a wait between attempts handles a flaky endpoint well. It does nothing about the case that hurts, which is a workflow failing at node nine after node four already created a record; re-running from the start creates it again. So anything that writes gets an idempotency key or a lookup-before-insert, and the steps nobody can make idempotent get isolated into their own sub-workflow with their own error branch. We set the error workflow at instance level rather than per workflow, so a new automation cannot ship silently unmonitored.

Sixth, most requests for a custom node don’t need one. The HTTP Request node with a generic credential will talk to your internal API today, costs nothing to maintain, and needs no republishing when that API changes. A custom node earns its keep when the integration goes to people who should never see a header, when auth or cursor pagination is fiddly enough that repeating it across a dozen workflows becomes a liability, or when you want the thing callable as a tool by an agent. When we do build one, declarative style suits a well-behaved REST surface because there’s far less to break, and programmatic style is for binary handling or a token refresh quirk that needs real control.

A last one, procedural rather than technical. A workflow living only on a canvas isn’t under source control, and the feature that fixes that properly sits on the paid tier. Where that licence isn’t in the budget, we export workflow JSON into your repository and review changes as diffs. It’s uglier than it sounds useful, and it means somebody can answer what changed on Tuesday. Either way the rule holds: you deploy to production, you do not edit in it. Two adjacent decisions come up on nearly every engagement, and settling them before kickoff saves a fortnight. Where the confidence threshold sits, and whether the retrieval step needs RAG or a fine-tune, which is almost always retrieval.

Where we’d tell you not to use n8n.

Everyone selling n8n hours has an incentive to say it fits. It has edges, you can know them in advance, and finding them in month five is expensive for both of us. Five of them are below, with what we’d build instead.

Volume in the millions of records a day

n8n holds the items of an execution in memory. Fan out to a million records in one run and you haven’t scaled a workflow, you’ve written a memory leak with a pleasant interface. Past a few thousand items in a single execution you want a real queue and application code: SQS and Lambda, or Temporal, with n8n demoted to the trigger and the notification.

Anything sitting in a user-facing request path

A webhook workflow makes a fine integration endpoint and a poor API. Node initialisation, queue wait and per-node persistence put your tail latency somewhere you wouldn’t enjoy defending. If a human is watching a spinner, write an endpoint.

Long-running processes with genuine state

Multi-week approval chains, compensation logic, saga patterns where step six failing means unwinding steps one through five. The Wait node offloads to the database past roughly a minute and resumes correctly, but n8n has no durable state model beyond the execution itself. Temporal exists for exactly this, and its learning curve costs less than the workarounds.

When the workflow has quietly become an application

Node count isn’t quite the tell, though past forty we start asking. The real one is when the thing has its own permissions model, its own multi-tenant data, or a second workflow depending on its internal shape. At that point you’re maintaining an application in a format with no tests, no code review and no type checking.

When nobody on your side will operate it

A self-hosted instance needs an owner: someone who applies upgrades, watches the database and rotates credentials. If that person doesn’t exist and you don’t want us on a retainer, n8n Cloud or Zapier is the better answer even at a worse price per run. You’d be buying uptime you do not have to staff.

What replaces it in that fourth case

A service with a job queue, tests and types: ordinary Next.js and TypeScript web development, which costs less to own across five years than an application hiding inside a workflow canvas. n8n usually stays in the picture afterwards as the trigger, the notification layer, and the integrations your operations team edits without calling us.

How the engagement runs, and what it costs.

Pricing follows the rates already published across our automation work, because n8n is a tool we use rather than a separate business line. AI pilots start at $7,500. One production workflow, monitored, with error handling and a review queue, starts at $12,000. Ongoing support starts at $2,500 a month, which covers upgrades, database health, credential rotation and a set number of changes each month. Those figures are estimates in US dollars, not quotations; the quote that follows scoping is fixed in writing before kickoff. Scope is fixed in the same document.

A running instance in week one

A deployed n8n you can open, trigger and break, sitting in your infrastructure, with the first workflow already firing against real data. Nobody hands you a diagram and calls it progress.

Your repo, your cloud, your keys

The instance runs in your account. Workflow JSON lives in your repository. The encryption key sits in your secret manager from the first commit, and we never hold the only copy of anything.

Decisions in writing

Every choice somebody could reasonably argue with gets a short note in the repo with the reasoning attached. Queue mode or single process, custom node or HTTP Request, and where the human sits in the loop.

Fixed scope, quoted before kickoff

You approve a scope and a price before anyone writes a node. A change that adds more than a day gets estimated in writing and either approved or deferred. Nothing turns up later as a surprise on an invoice.

Four hours of overlap with the US East Coast, and the full working day with Europe. The person on the call is the person writing the nodes. Judge the standard of the work from our published case studies, or skip ahead and send us the workflow you want built.

FAQ

The questions that decide it

The same published rates as the rest of our automation work. AI pilots start at $7,500, one production workflow starts at $12,000, and ongoing support starts at $2,500 a month. Those figures are estimates in US dollars, not quotations; the quote that follows scoping is fixed in writing before kickoff. What moves the number is integration surface. A documented REST API with sane pagination is a day of work. A legacy SOAP endpoint with a PDF spec is a week. Scope is fixed with the price, in the same document.

Self-host when the data legally can’t leave your network, when you need worker capacity you control, or when execution volume makes per-execution pricing hurt. Otherwise Cloud is cheaper than it looks once you count the hours somebody spends patching containers and watching the execution table grow. Self-hosting is an operational commitment, and it won’t save you a licence fee on its own.

Usually not. The HTTP Request node with a generic credential will talk to your internal API today and costs nothing to maintain. A custom node earns its place in three cases: non-engineers have to use the integration, the auth or pagination is fiddly enough that repeating it across a dozen workflows becomes a liability, or you want it callable as a tool by an AI agent.

For anything with branching, retries or real logic, yes. Zapier bills per task, so a thirty-step automation costs thirty tasks every run. n8n bills per execution, and self-hosted it bills nothing. The tradeoff is operations. Zapier stays up without you. Self-hosted n8n stays up because somebody owns the database, the queue and the upgrades.

You do. Workflow JSON lives in your repository, n8n runs in your cloud account under your credentials, and the encryption key sits in your secret manager. There’s no wrapper, no proprietary node you keep licensing from us, and no hosting arrangement you cannot exit. If you stop working with us tomorrow, everything keeps running.

Every workflow we ship has a designated error workflow, retry with backoff on anything network-bound, and error output branches on the steps that fail predictably. Failures land in a queue with the original payload attached, so once the upstream system recovers you replay the run rather than reconstructing it by hand from a log line.

Send us the workflow. Get a straight answer.

Describe what has to happen, how often, and what it touches. You get a fixed scope, a fixed price, and a straight note if n8n isn’t the right home for it. Email edgebrainstudios@gmail.com or call the number below.