Conduit — The Migration Engine
The migration engine — your data, moved cleanly into your new system.
Move your data cleanly into your new system — old CRM, spreadsheets, databases, or APIs. Config-driven pipelines, dry-run preview, zero lost records.
A messy export isn't a migration. Conduit reads your data, cleans it in flight, and lands it in your new system — previewed first, nothing lost.
Switching Systems Shouldn't Mean Starting Over
Years of clients, orders, contacts, and history live in your old tools — a CRM you're leaving, a stack of spreadsheets, an export from a platform you've outgrown. Moving to a new system is where most of that gets lost, mangled, or re-typed by hand.
Conduit is how your data moves. It reads from wherever your records live, cleans and standardizes them along the way, and lands them in your new system exactly right — so your history comes with you, intact.
How It Works
01
Read
We pull your data from wherever it lives — an export from your old CRM, spreadsheets, a live database, or an API.
02
Transform
Fields get renamed and mapped, whitespace trimmed, required values validated, and duplicates dropped — so what lands is consistent, not chaos.
03
Write
Clean records land in your new system — inserted or upserted on a key, so re-running never creates doubles.
Nothing moves until you've seen it. Every migration runs as a --dry-run first — we read, transform, and preview every row while writing nothing. You approve the result, then we run it for real.
What We Can Move — And Where To
Every format works both ways: it can be the source you're moving from or the destination you're moving to.
Spreadsheets & CSV
The classic export from almost any tool.
Excel workbooks
Reads the first row as headers; pick a sheet.
JSON & JSONL feeds
Whole arrays or one record per line.
SQLite databases
Query in, table out — insert or upsert.
Postgres & Supabase
Straight into your isolated database.
REST APIs
Pull from — or push into — a live endpoint.
What Happens In Flight
Between reading and writing, your records pass through a pipeline of transforms. Each is optional, and they run top-to-bottom — so order is intentional, not accidental.
Rename
Map old field names to the new ones. user_email → email.
Clean
Trim whitespace, fix casing, fill missing defaults, and require the fields that can't be blank.
Filter
Keep only the rows that belong — active clients, valid emails, the right roles.
Dedupe
Collapse duplicates on a key so the same person doesn't land three times.
Select
Keep only the columns your new system needs, in the order it wants them.
Validated
Required-but-missing values stop the migration with a clear error — no silent bad data.
Under the Hood
Conduit is a single Rust binary, driven by one TOML file that describes a pipeline: [source] → [[transform]]… → [destination]. Built for correctness on one-off migrations — the whole dataset is loaded in memory and previewed before anything is written.
pipeline.toml
[source]
type = "csv"
path = "users_export.csv"
[[transform]]
type = "rename"
fields = { user_email = "email", display_name = "name" }
[[transform]]
type = "clean"
trim = true
lowercase = ["email"]
require = ["email"] # error if missing
[[transform]]
type = "dedupe"
on = ["email"] # first row per key wins
[destination]
type = "sqlite"
path = "clients.db"
table = "clients"
mode = "upsert"
key = ["email"] # re-runs never double up conduit run pipeline.toml --dry-run # preview, write nothing
| Connector | Source | Dest | Notes |
|---|---|---|---|
| csv | Values read as strings. | ||
| json | Array of objects, or point to a nested array. | ||
| jsonl | One JSON object per line. | ||
| xlsx | First row = headers; optional sheet name. | ||
| sqlite | Query in; table / upsert / key out. | ||
| postgres | Supabase over TLS. Cast exotic types in your query. | ||
| http | REST / JSON. Bearer token from an env var. |
Where It Fits
Conduit is the on-ramp to your ecosystem — the layer that gets your existing data in so every other engine has something real to work with from day one.
Switching Systems? Bring Your Data.
Send us your export — old CRM, spreadsheets, a database dump. We'll map it, clean it, preview it, and move it. Your history, intact.
Book a Consultation