RAW EXPORT THE CONDUIT PIPELINE YOUR SYSTEM ! ! RENAME CLEAN FILTER DEDUPE SELECT MIGRATED · 0 LOST MESSY DATA IN. CLEAN RECORDS OUT.

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.

For developers & agents

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.
RustSingle BinaryTOML config--dry-run firstIn-memoryInsert / UpsertRow-level validation

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.

Operations: Your clients, leads, and history land in Doon — populated, not empty.

Intelligence: Historical revenue and pipeline data give Signal a baseline to trend against.

Your database: Records write straight into the isolated Postgres behind your stack — no shared infrastructure.

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