Dropping an export file — how the per-vendor upload works
Each vendor in the imports inbox shows up as an upload panel with whatever export-file slots that vendor needs. The shape of the panel is driven by a per-vendor adapter — the import goes through a real parser, not a generic "throw a CSV in" handler.
What you'll see per vendor:
• Step-by-step instructions for getting the export from that tool (where in their UI, what format to pick, any settings that matter).
• One or more file slots — most vendors are one file (a single CSV / XML), some need two (e.g. QuickBooks: customers + bills + chart of accounts).
• A dropzone per slot, plus a "Choose file" button as fallback. Drag the file from your desktop, or click and browse.
• A "Run import" button at the bottom that lights up only after every required slot has a file.
What happens after you click "Run import":
1. Each file is uploaded directly to your org's storage at orgs/{orgId}/migrations/{requestId}/{slot} — the file never proxies through Turtini's servers in transit.
2. Turtini calls the processMigrationUpload server function, which loads the right vendor adapter and parses each file.
3. The parser writes records into the matching Turtini collections (Contacts, Accounts, Opportunities, Products, etc.) under your active org.
4. The migrationRequest flips to imported with a summary count ("Imported 142 contacts, 8 deals").
5. The cancellation reminder for that vendor unpauses — Turtini will email you on the original reminder date with the savings + cancel script.
Live importers today:
QuickBooks Online, Toast, Klaviyo, Squarespace. Each has its own walkthrough article — see "Migrating from {Vendor} to Turtini" for the per-vendor specifics (what to export, where it lands, what doesn't carry over).
Vendors without a live importer:
Adapters roll out one at a time. If a vendor is queued but not live yet, the upload panel shows "{Vendor} importer is rolling out next — we'll email you the moment the upload form is live. Until then your cancellation reminder is paused so you don't get nudged to cancel before your data is over."
If the parser rejects a file:
The slot shows the validation error inline ("missing column 'Email'", "couldn't find <Customers> root in this XML", etc.). Re-export from the source tool with the right format/options and re-drop. Your other slots stay intact — you don't have to re-upload everything.
Cross-vendor matching:
When the same logical record (e.g. a customer email) shows up in two imports, Turtini merges into the existing Contact rather than creating a duplicate. So importing QuickBooks customers and then HubSpot contacts is safe — the second import enriches the first.
File limits:
• Max file size per slot: 100 MB (most exports are well under this).
• Total time to parse: usually seconds for small exports, up to a minute or two for very large ones. The page shows a progress chip while it runs.
Re-running an import:
If you want to re-import (e.g. you exported again from the source tool with more data), the row's three-dot menu has "Re-upload". The previous parse stays in your org — no rollback — so re-importing is additive, not destructive.