Migration

Move your service history without animplementation project.

Export what you have, stage it for review, and approve what moves — a bounded process you control, not an all-or-nothing cutover. No fixed timeline or cost promised here; the four steps below are the whole story.

This page describes how bringing your existing customer, equipment, and service data into Thermal actually works today — record by record, staged and reviewed before anything commits. Where a capability isn't built yet, it's marked on the roadmap, not described as if it were live.

This is written for a shop that's worried about downtime and data loss during a cutover — 10 to 200 technicians, multi-branch common, with years of customer and equipment history that has to survive the move intact.

How it works

A staged process, not a black box.

Four steps, every one of them reviewable before the next. You decide what lands in Thermal — nothing imports itself.

  1. 01

    Export what you have

    A spreadsheet, a report out of your accounting system, or an export from whatever you're running today. No special format required — if it opens as a spreadsheet, we can usually work with it.

  2. 02

    Stage and map

    We structure it into customers, sites, equipment, service history, and agreements, and map each column to the right field. Nothing is written to your live records at this step.

  3. 03

    Review exceptions

    Every row carries a confidence score. Likely duplicates are flagged before you commit, and you can include or exclude individual customers or individual pieces of equipment.

  4. 04

    Approve and commit

    Nothing touches your live records until you approve it, row by row. Matching is done by your own record IDs, so re-running a corrected file merges in changes instead of creating duplicates.

What moves

Record by record, not a marketing promise.

This is the current, real state of the import path — not a projection. A record type marked Not supported isn't hidden here to make the page look better; it's stated plainly.

Record typeStatusWhat that means
CustomersAvailableUpload a spreadsheet or CSV export of your customer list; it's structured automatically, staged for review, and committed only after you approve it.
Service sitesAvailableA customer's service address imports and attaches as a site record alongside the customer.
Installed equipmentAvailableEquipment rows import typed against your org's active equipment types, deduplicated by external ID (or make/model/serial when there is none), and rejected — never guessed — if the type doesn't match.
Service historyAvailablePast service visits attach to the matching piece of equipment, deduplicated so a re-import doesn't create duplicate history rows.
Service agreementsAvailableMembership/maintenance-plan details (status, plan name, dates, price, cadence) import onto the customer's agreement.
Open workOn the roadmapOpen (unscheduled/scheduled/assigned) jobs are not part of the import flow yet.
InvoicesNot supportedOpen invoices and billing history are not part of this flow — your accounting system stays the source of truth for anything already invoiced.
AttachmentsNot supportedPhotos and documents attached to historical jobs don't carry over in this flow.

Closed job history that's already been through your books stays there — this flow imports the equipment record and its service history, not a re-creation of every past invoice.

Where it comes from

Whatever you already have — no special export required.

Most shops start from whatever's already on hand: a spreadsheet, a customer list exported from an accounting system, or a report pulled out of whatever field-service or ERP system they're on today. The import step doesn't require a specific vendor format — if you can get it into a spreadsheet or CSV, it's structured and mapped into Thermal's own record types, then held for your review before anything commits.

Every shop's export looks a little different — different columns, different naming, sometimes several files for customers, equipment, and history. That variation is expected, and it's exactly what the mapping and review steps are for.

Controls

The mechanics that make this safe to run.

Every control below is live in the product today — not a description of intent.

Live

Draft-only staging

Every parsed row is written to a draft/staging table (approval_queue) — never directly to customers, equipment, or agreements.
Live

Confidence scores & warnings

Every extracted row carries a 0-100 confidence score, and unresolvable or ambiguous rows are surfaced as warnings rather than silently guessed.
Live

Duplicate & exception review

A likely duplicate customer is flagged before you commit, and every row (and every piece of equipment on it) can be individually included or excluded.
Live

Safe to re-run

Re-running an import (a corrected file, or the same file twice) merges into existing records instead of duplicating them.
Live

Explicit human approval

Nothing is written to your live records without an explicit approve action, row by row.

The boundary

What this migration will not touch.

Thermal runs beside your accounting system, never inside it. This flow does not migrate a general ledger, payroll, retainage-heavy construction accounting, or a deep custom build inside an ERP — those stay exactly where they are. What moves is the service and equipment layer those systems don't carry: customers, sites, installed equipment, service history, and agreements.

See how Thermal connects to your accounting system
How long does a migration take?

It depends on how much data you're bringing over and how clean your export is, so we won't put a number on it here. What we can tell you is the shape of it: staged, reviewed, and approved in steps you control — not a fixed-price, fixed-timeline project.

Will this touch our live data before we're ready?

No. Every parsed row is written to a draft/staging table, never directly to your live customer, equipment, or agreement records. Nothing commits until you review it and explicitly approve it, row by row.

What if we run the import twice, or need to fix a file and re-upload it?

Matching is done by your own record IDs. Re-committing an already-imported customer updates it instead of creating a duplicate, and the same dedup logic applies to equipment, service history, and agreements — so a corrected re-upload is safe to run.

Do you migrate open work orders or invoices?

Not today. Open work orders are on the roadmap. Invoices and billing history aren't part of this flow at all — your accounting system stays the record of anything already invoiced.

Does this replace our accounting system?

No. Thermal runs beside QuickBooks, Xero, and — on the roadmap — Sage Intacct and Microsoft Dynamics 365 Business Central. It never implements inside an ERP, and this flow doesn't migrate general ledger, payroll, or retainage-heavy construction accounting.

Do you require a specific export format from our current system?

No. If you can get your data into a spreadsheet or CSV, we can usually work with it — the mapping and review steps exist specifically because every shop's export looks a little different.

Bring your export. We'll walk the first pass with you.

No commitment to see what your own data looks like staged in Thermal, reviewed row by row.