Migrating from n8n to Cloudflare Durable Workflows

n8n is a solid entry point for RevOps automation. It has a visual canvas, a large library of prebuilt nodes and the option to self-host for full control of your data. But once a workflow handles real production volume, RevOps and sales ops teams doing lead routing, CRM enrichment or invoice reconciliation tend to hit the same wall: execution state that does not survive a restart, retry logic that has to be configured node by node, and hosting costs that climb in step with the number of active workflows. This post explains why that wall appears, what Cloudflare Workflows actually change about the underlying execution model, a migration path that does not require ripping everything out in one go, and the tradeoffs worth weighing before committing to the move.

Why Teams Outgrow n8n for RevOps Automation

n8n’s execution model is built around workflow runs that hold their state in memory while active, then write execution data to a database (Postgres or SQLite by default) once a run finishes or fails. That works well at low to moderate volume. Once a self-hosted instance is handling a high daily trigger volume (lead form submissions, HubSpot property changes, Stripe webhooks), the single-instance queue backs up, and the standard fix is to move to n8n’s queue mode, which adds Redis and separate worker processes to the stack. That is a legitimate scaling path, documented in n8n’s own documentation, but it turns what started as a lightweight automation tool into infrastructure you now have to patch, monitor and pay for around the clock.

Retry logic compounds the problem. Each node has a “Retry On Fail” option with a fixed wait time, but there is no shared retry policy across a workflow. If a HubSpot API call fails partway through a multi-step enrichment flow, whether the whole run resumes cleanly or has to be manually re-triggered depends on how carefully each individual node was configured to fail safely. On a self-hosted instance, a server restart during a deploy or an out-of-memory event can drop an in-flight execution entirely, with no automatic way to pick it back up from the last successful step.

None of this makes n8n a bad tool. It makes it a tool whose execution model was built for orchestrating calls between services, not for holding state across days or weeks of a long-running process. That distinction is the entire reason Cloudflare Workflows exist.

What Cloudflare Workflows Actually Changes

Cloudflare Workflows are a durable execution service built on top of Cloudflare Durable Objects, run inside a Worker and deployed with Wrangler like any other Cloudflare Workers project. This is why the product is often described as “durable workflows”: a workflow is written as code (JavaScript or TypeScript), broken into named steps, and the platform handles checkpointing, retries and resumption for you rather than leaving it to individual node settings.

Durable Execution and Step-Level Retries

Each unit of work is wrapped in a step call (step.do in the SDK). Once a step completes, its output is checkpointed, so if a later step fails and the workflow retries, Cloudflare does not re-run the steps that already succeeded; it resumes from the failed step. Retry behaviour (maximum attempts, backoff strategy, per-step timeout) is declared in code alongside the step itself, rather than being a checkbox buried in each node’s settings. Workflows can also sleep for extended periods (step.sleep) without holding any compute, which is the mechanism that makes a multi-day contract approval or a delayed nurture sequence practical to run natively rather than bolted on with an external scheduler.

How This Differs from n8n’s Execution Model

The practical difference shows up during failure. In n8n, recovering a failed run cleanly depends on how the specific node where it broke was configured for retries and error handling, and on whether the execution data was still available to re-run from. In Cloudflare Workflows, the instance’s state already includes the output of every step that completed successfully; the failed step simply retries according to its own policy, and the earlier steps never execute again. That difference matters most where a step has an external side effect, such as creating a record in a CRM or issuing a refund, because re-running an already-completed step is the single most common way a migration introduces duplicate data, a problem covered in more detail below.

Migration path from n8n to Cloudflare Workflows in four stages 1. Audit and Categorise Sort by event-driven, scheduled, long-running 2. Rebuild Around Steps Each step idempotent, not node by node 3. Run in Parallel Shadow mode against live n8n workflow 4. Cutover Repoint webhook, retire n8n flow
The four-stage path for moving a single workflow from n8n to Cloudflare Workflows

Where n8n Still Wins

It is worth being honest about what gets lost in this migration, because Cloudflare Workflows are not a straight upgrade for every team. n8n’s visual canvas means a RevOps analyst who is comfortable with logic but not code can build, read and adjust a workflow without a developer in the loop. Cloudflare Workflows are written in TypeScript; there is no drag-and-drop canvas, and changing a workflow means writing code, testing it and deploying it through a release pipeline. For teams where the person maintaining automations is not an engineer, that is a real loss of autonomy, not a minor inconvenience.

n8n’s node library also removes a lot of integration work that Cloudflare Workflows leave to you. Pulling data from HubSpot, Salesforce, Slack or a spreadsheet is a prebuilt node in n8n; in Cloudflare Workflows, each of those integrations is an API call you write and maintain yourself. Self-hosting n8n also gives teams a straightforward answer to data residency questions, since the instance and its data live on infrastructure the team controls directly, which some regulated industries still prefer over relying on a third-party edge network. If a workflow is simple, low-volume and mostly maintained by non-engineers, migrating it to Cloudflare Workflows is very likely trading a working system for maintenance overhead with no real benefit.

A Practical Migration Path from n8n to Cloudflare Workflows

The workflows worth migrating first are the ones n8n is actually straining under: high-volume event-driven flows, or long-running processes that currently rely on external scheduling and manual re-triggers to survive a failure. Low-volume workflows maintained by non-technical staff are usually better left alone. Approach the rest as a series of independent migrations, not one cutover.

Audit and Categorise Existing Workflows

Start by listing every active n8n workflow and sorting it into one of three buckets: event-driven and short-lived (a webhook triggers a handful of API calls and finishes in seconds), scheduled batch (a cron-triggered sync that runs on a timer), and long-running or stateful (anything that waits on a human approval, a delayed follow-up, or a multi-day retry window). The third bucket is where Cloudflare Workflows earn their keep, because that is exactly the state-across-time problem n8n was never built to hold cleanly. The first two buckets may not be worth migrating at all unless they are also hitting n8n’s throughput ceiling.

Rebuild Around Steps, Not Nodes

Do not translate the n8n canvas node by node. Group related nodes into a single step where they logically belong together, and treat each step as if it might run twice, because under a retry it might. That means any step with a side effect (sending an email, creating a HubSpot deal, charging a card) needs its own idempotency guard: a check for an existing record, an idempotency key passed to the downstream API, or a lookup before write. This is where most migration bugs originate, and they rarely show up in testing because they only bite when a step genuinely fails and retries in production.

Run Both Systems in Parallel Before Cutover

Leave the n8n workflow live and pointed at production, and stand up the Cloudflare Workflows version alongside it in shadow mode: the same trigger fires both, but only n8n’s output is actually acted on (the webhook still goes to n8n, and n8n forwards a copy of the event to the new workflow). Compare the two systems’ outputs for real trigger volume, over days rather than hours, before repointing the live webhook or CRM automation to the new workflow and retiring the n8n version. Cutting over before you have compared outputs under real traffic is how a subtle mismatch (a missing field, a different rounding rule, a timezone offset) ends up in production CRM data instead of a test log.

Common Failure Modes During Migration

Duplicated side effects on retry is the most damaging failure mode, and the one covered above: a step that sends an email or creates a CRM record without an idempotency guard will eventually fire twice, because Cloudflare’s retry is doing exactly what it is designed to do. Test this deliberately by forcing a step to fail after its side effect has already run, and confirming the retry does not repeat it.

Secrets management is a smaller but common surprise. n8n stores OAuth tokens and API keys in its own credential store, editable through the UI by anyone with access. Cloudflare Workflows read secrets from Worker environment bindings, set through Wrangler or the Cloudflare dashboard, which means rotating a HubSpot API key becomes a deploy rather than a form submission. Teams that had RevOps staff rotating credentials directly need a new process, and usually engineering involvement, for this.

Losing the visual audit trail catches teams by surprise during the first production incident after migration. n8n’s execution log lets anyone open a failed run and see exactly which node failed and with what error, in the UI, without touching code. Cloudflare gives you logs and step-level status through the dashboard and Wrangler tail, but it is not the same point-and-click replay experience, so teams that relied on non-engineers debugging failed syncs themselves need to build or buy an equivalent observability layer before they migrate, not after.

Data residency is worth checking rather than assuming. Cloudflare Workflows run on Cloudflare’s global network, so a workflow processing UK or EU customer data (names, emails, deal values) should be reviewed against the organisation’s obligations under UK GDPR before migration, not discovered afterwards. The Information Commissioner’s Office publishes guidance for organisations on data protection obligations that is worth checking against any workflow moving customer data onto new infrastructure.

Cost and Operational Tradeoffs to Weigh Before Migrating

Self-hosted n8n has a fixed cost floor: the server, or cluster once queue mode is needed, costs roughly the same whether it processes a handful of workflows a day or a very large number, which is wasteful at low volume and constraining at high volume. n8n Cloud shifts that to a cost that scales with execution volume, which removes the infrastructure burden but means a busy quarter shows up directly on the invoice.

Cloudflare Workflows are billed as part of the Workers platform, so cost scales with requests and compute time rather than with the number of workflows you have running, and there is no server to patch or resize. That is not automatically cheaper. A handful of very low-volume workflows can cost more in engineering time to maintain as code than they ever cost to run on a shared n8n instance, and teams that are not already on the Workers platform take on a new vendor relationship and a new billing line to track. The honest way to evaluate this is workflow by workflow, using its real trigger volume and average run length, rather than assuming the migration itself produces savings.

If you are weighing this migration as part of a wider RevOps automation strategy, these cover related ground: RevOps Consultancy, AI Deployment, and Case Studies.

For more on this, see our automation and n8n coverage, including Advanced Sales Pipeline Automation with N8N for Predictable SaaS Growth, Top n8n Workflows for Automating Sales Operations and CRM Efficiency, and Automating SaaS Demo Bookings with Webflow, n8n, and Calendly.

Book your free AI audit

Do I need to migrate every n8n workflow to Cloudflare Workflows at once?

No. Migrate workflow by workflow, starting with the ones straining under n8n’s execution model (high-volume event-driven flows or long-running stateful processes), and run each one in parallel with its n8n equivalent before cutting over.

Does Cloudflare Workflows replace n8n’s visual builder?

No. Cloudflare Workflows are written in TypeScript with no drag-and-drop canvas, so non-technical staff who used to build or adjust workflows themselves in n8n lose that ability unless an engineer is involved in every change.

Why do steps in Cloudflare Workflows need to be idempotent?

Because a failed workflow retries from the failed step, and any step with a side effect, such as sending an email or creating a CRM record, will run again on retry unless it includes its own check for an existing record or an idempotency key.

Does moving automation onto Cloudflare’s edge network create data protection issues for UK customer data?

Do not assume there is no issue. A workflow processing UK or EU customer data should be reviewed against the organisation’s obligations under UK GDPR, using guidance such as the Information Commissioner’s Office’s resources for organisations, before the migration goes live.


Leave a Reply

Discover more from Equanax

Subscribe now to keep reading and get access to the full archive.

Continue reading