Five files
Workers, clients, contacts, umbrella companies and placements. Each is an ordinary CSV, and each can be exported from a spreadsheet without editing.
Your headings, not ours
The importer maps common spelling variations to the fields it needs: a column headed "Surname", "Last name" or "Family name" all reach the same place. Where a heading is ambiguous it is left alone rather than guessed. "Company" on a workers file, for instance, is deliberately not mapped, because it might be the umbrella, the client or the worker's own limited company, and quietly picking one would produce a book that looks right and is wrong.
A dry run, always
Validation runs first and changes nothing: it reports how many rows would land, which rows would be refused and why, and what it renamed. Only then does the execute step write.
Rules are not relaxed for imported data. An umbrella placement still has to name a registered umbrella. A book that imports cleanly is a book that would have been accepted if it had been typed in.
Getting it back out
An offboarding bundle exports the whole tenant in the importer's own shape, with the documents and the audit chain, and the round trip is verified. It exists because your data being portable should be a property of the system rather than a favour. If you would rather not do the migration yourself, we do that too.
Try it on your own file
The importer's dry run changes nothing, so a real export from your spreadsheet is the fastest way to see whether this fits.