Automation · n8n

n8n for ERP Migration Workflows

An ERP migration is a one-off with permanent consequences. n8n can orchestrate it, but only if you build it as an idempotent, resumable, reconciled pipeline — not a single big run.

John Kihiu12 min read

Migrating data into or between ERPs is a high-stakes, mostly one-time job where mistakes are expensive and hard to unwind. n8n is a capable orchestrator for it, but a migration is not a normal workflow — it is a batch pipeline that must survive interruption, avoid duplicates, and prove it moved everything correctly. Design it for those properties from the start.

Extract, transform, load — in waves

Structure the migration as clear stages: extract from the source, transform to the target's shape, load into the ERP. Run it in waves rather than one monolithic pass — batch the records so you can validate a wave, catch problems early, and never have a single failure that requires restarting the entire migration. Small, verified batches beat one big irreversible run every time.

Idempotent and resumable

A migration will be interrupted — by an error, a rate limit, or a discovered data problem — and you must be able to re-run it without duplicating what already loaded. Track which records have been migrated (a status per source record) so a re-run skips completed ones and picks up where it stopped. Key loads on a stable source identifier so re-processing a record updates rather than duplicates. Assume you will run the migration many times before it is done.

Text · a resumable migration pipeline
extract batch (status = pending)
   -> transform to target shape
   -> validate  (required fields, references resolve)
   -> load into ERP (upsert on source id)
   -> mark migrated + record target id
   -> reconcile counts per wave
# a re-run only re-touches records still marked pending or failed

Validate and reconcile

Validate before loading — check required fields are present and references resolve — so bad records are caught and quarantined instead of rejected mid-load or, worse, loaded wrong. After each wave and at the end, reconcile: compare source and target counts and spot-check values, so you can state with evidence that everything migrated correctly. "It ran without errors" is not the same as "every record arrived intact."

Rehearse against a copy first

Never let production be the first time your migration runs end to end. Rehearse against a sandbox or a copy of the target, measure how long it takes, surface the data problems you did not anticipate, and refine. A migration you have run once against real-shaped data is a controlled operation; one you are running for the first time on go-live is a gamble.

Run an ERP migration through n8n as an idempotent, resumable, wave-based pipeline with validation before every load and reconciliation after every wave — and rehearse it against a copy before go-live. The goal is a migration you can start, stop, resume, and re-run safely, and finish able to prove that every record made it. Anything less on financial data is a risk you do not want to be explaining afterwards.

John Kihiu
Acumatica ERP Developer · Laravel Engineer

Independent software engineer in Nairobi specialising in Acumatica customisations, Laravel backends, and tax fiscalisation integrations across East and Southern Africa.