Moving the data is the easy half.
We join two systems, or move one into another, and then check that it actually landed — field by field, record by record, not by counting rows. You get the findings in writing, including what we could not check and why.
$11,500
One price, agreed in writing before anything runs.
The $3,250 holds when three things are true: the API is documented and we have read it, the list of fields is agreed before we start, and the data travels one way. If any of those is not true we will not quote a fixed price for it — we scope it and quote that instead, and we would rather say so now than argue about it in week three.
The $11,500 holds when four things are true: both APIs are documented and we have read them, the list of fields is agreed before we start, the rules for which record wins are agreed in writing, and it is up to three objects each way — for example contacts, companies and deals. More than three, or a system whose API we cannot read, and we scope it and quote that instead.
Three to four weeks, counted from the day the field map is signed.
If nothing needs joining and it is only customer records that have to move, that is a smaller job at $4,900 — and a check on records you are keeping where they are starts at $390. See the record work.
The tools move the data. Nobody proves it landed.
A Salesforce administrator, asking a room of 23 people how to do this, and getting no product named in reply:
“Running out of ideas to prove that migration actually worked… especially if I need to show it to business leaders.”
The best answer anyone gave was to compare row counts. Meanwhile the migration contracts themselves put the job on the customer. One published statement of work, word for word: “Acceptance testing is primarily the responsibility of the Client.”
The industry wrote the checking out of the supplier’s liability and into the buyer’s lap, and then shipped no tool for it. HubSpot now pulls data out of thirteen other systems into its own, free, and scans the source before the move — there is no reconciliation after it. The moving got given away. The proving did not.
Why counting is not checking.
In Salesforce, one attached file is three separate things: the file, its bytes, and the link that ties it to a record. Lose the third and the file is sitting in the new system, the file count matches, the byte total matches, and it is attached to nothing.
We have hit the same failure from the other side. In HubSpot the attachment ids are separated by semicolons; split them on a comma instead and the report says zero attachments, and looks perfectly clean doing it.
This is a test file we built to fail. Every count on it matches exactly.
| Counted | Source | Target | Diff |
|---|---|---|---|
| Contacts | 8 | 8 | 0 |
| Files | 6 | 6 | 0 |
| Bytes | 36,864 | 36,864 | 0 |
| Activities | 6 | 6 | 0 |
There are ten real faults underneath that table, each one typed in by hand. A check that compares counts passes this file and hands you a clean bill of health. The checks we run find the ten, and name each one.
What gets checked, after it lands.
Every record is present, matched on a key rather than a count.
Two records can go missing while one gets duplicated and the total never moves.
Every file is still attached to the record it belonged to.
Not that the file exists. That it is reachable from the thing it was attached to.
Field contents are compared, not just field names.
Each value is fingerprinted on both sides, so a truncated field or a mangled character set shows up as a difference rather than as a match.
Activity history, and whether it all landed on one day.
A date spike is the signature of timestamps being lost and replaced with the import date, which quietly destroys every report built on them.
Owners that point at people who no longer exist.
Asked of the users table, not of the records. A record still pointing at a deleted user is the failure that hides from a check asking the records who owns them.
Consent and marketing permissions.
The field that turns a migration into a regulatory problem if it arrives wrong.
What the matching scored, and what those numbers do not tell you.
Measured against a set where the right answer was known in advance, on data shaped by a live CRM’s own constraints.
100%
Precision, against 400 records that are different people by construction. No false positives, and no group merged two different people. What it does not say: how many real duplicates it never reached.
43.0%
Recall, at entity level. This is the one to hold us to, and it is the number nobody else in this category publishes at all.
On one real run the comparison covered 9,901 record pairs, of which four were duplicates. A tool that flagged nothing whatsoever would score 99.96% “accurate” on that run. That is why there is no accuracy figure anywhere on this page, and why there are two numbers above instead of one.
What happens the first time it breaks.
A join between two systems fails at the seam, and always will eventually.
A field gets renamed upstream, an account expires, a rate limit tightens. It is not a question of whether.
It stops rather than half-writing.
A sync that gives up cleanly leaves you with yesterday’s data, which is a problem you can see. One that half-writes leaves you with data that is wrong in a way nobody notices for a month.
You keep the snapshot from before the move.
The numbers the new system has to match, written down before anything is touched. Without it, “is this right?” has no answer six months later.
If you keep us on, we watch the seam.
From $549 a month. Most of what a broken sync costs is not the repair — it is the gap before anyone knows, and that gap runs on whether somebody happens to notice. We also watch what the two systems announce: a study of 1,368 public APIs found that when a breaking change ships, close to nine in ten arrive with no deprecation notice at all (Yasmin, Tian and Yang, ICSME 2020). Run it yourself instead and nothing changes about the system — it is the same system, and you own it.
It is the same plan whatever we built for you, and the seam is watched from the first rung upwards. The three levels, and what separates them, are below.
You own all of it, including the mapping.
The code, the credentials, the runbook and the field mapping are yours from the first delivery. The mapping matters more than people expect: it is the document that says what became what, and it is the only thing that makes the move reversible or repeatable.
No licence, no seat count, nothing that stops working if you stop paying us. Hand it to your own developer or to another firm whenever you like.
What we will not do.
The first two are walls, not preferences. The words matter because they carry meanings we are not entitled to claim.
-
We will not call this an audit, or issue a certificate.
Both words claim a level of assurance this work does not provide, and one of them is regulated. What you get is a findings report: what was checked, what was found, and what could not be settled from the data available.
-
We will not sign off on something we could not test.
If the export arrives without the object that links a file to its record, the honest output is file linkage not tested — never a clean pass, and never a false alarm either.
-
We will not quote a single accuracy figure.
On one real run we compared 9,901 record pairs of which 4 were duplicates. Flag nothing at all and that scores 99.96% accurate. We publish precision and recall instead, at pair level and entity level.
-
We will not move data we have not agreed a mapping for.
Every field goes in the scope document before anything runs, including the ones we intend to drop. A field nobody decided about is a field somebody loses.
The nearest thing to this that you can open right now.
None of these is a migration. Ledger Solutions is the closest in shape — taking on eighteen months of somebody else’s records and separating what can be settled from what only the client can answer. It runs in a browser, on invented records, with nothing to sign.
Three promises, all three written down.
Of the eighteen firms whose pages we read line by line, not one published a written guarantee of any kind.
You own all of it.
The code, the credentials, the field mapping and a written runbook. Yours to use from the first delivery, and yours outright the day the last invoice is paid. It runs without us, and you can hand it to anyone.
Money back if we miss the scope.
A full refund inside seven days of delivery, and free fixes for ninety days after that.
You get the findings even where they are unflattering.
Including what we could not check, and why. A report that only says what went well is a report nobody can act on.
When it is joined, somebody has to watch the seam.
A join is finished the day it works. Watching it afterwards is a different job, and it is the same job whatever we built for you — one ladder, and you pick how much of it you want.
Watch
$549 per month
“It runs. I do not want to be the one who notices when it stops.”
- We are told the moment a run fails, and we tell you
- A written note every month of what ran, what failed and what we did
- Broken things fixed by the next working day
- Your accounts stay yours — we hold access, not ownership
Guard
$849 per month
“I need to know about the runs that finish and quietly do nothing.”
- Everything in Watch, plus:
- We check the runs that finish but do nothing, where there is something to count
- Broken things fixed the same working day
- Changes are unlimited — they join a queue and we work through it in order
Managed
$1,200 per month
“I do not want to run it at all. I want somebody whose job it is.”
- Everything in Guard, plus:
- We operate it, not you
- A named person, and the name of their backup
- Reachable outside business hours when something is genuinely down
- Your changes are worked ahead of everyone else’s
Monthly, in advance. Thirty days’ notice either way, from either side. Offered after a build, never before — we will not sell you a plan to watch something we have not seen.
Not sure whether yours is one connection or the full job?
Write to us and describe the problem in your own words — no form, no call. We will tell you which one we would pick, what is good and bad about that choice, where it would be the wrong buy, and what it costs. If the honest answer is that you do not need any of it, we will say that instead.
If one of the two systems is a shop, the Shopify page works through the failure this job exists to prevent: a webhook retried after a timeout, and the same order shipped twice.
Tell us the two systems.
Which two, what has to move or stay in step, and what breaks today if it goes wrong. We will tell you what we would check and what we would not be able to — and if this is a smaller job than $11,500, we will say that too. We reply within one business day.