Import your data
Data import brings customers, their equipment, service agreements, and service history into Thermal from a spreadsheet or another system's export. It's a four-step wizard: upload, map columns, review, import.
Where to start
New companies reach this screen from setup. The Bring your records step of the setup wizard asks you to pick one way in: Accounting software (QuickBooks Online), Another field-service app (upload an export file), Spreadsheets, or Starting fresh. The app and spreadsheet tiles each have an upload button that opens Import, and you can come back to it any time to bring more in later. The rest of this page covers the Import screen itself.
Prepare your file
Upload .csv, .tsv, .iif, .qbo, .ofx, or .xlsx files. Spreadsheets
must be the modern .xlsx format — the older .xls binary format is not supported;
save it as .xlsx or CSV and upload again.
You can drop up to 5 files at once, totalling up to
25 MB across the files selected for one pass. Thermal imports along the spine:
customer → their equipment → that unit's history. Bring all three in your
file and they link automatically; a customer-only file still works, it just
won't create equipment or history rows.
Large files: a customer list whose columns you map to Thermal fields is read in full, up to the 25 MB upload size. Files that need the automated structuring step, such as service history, are read in requests of up to 150 lines each, with the sheet's header row repeated, and at most 8 requests per pass. If the review screen says that source lines were not read, split the export into smaller files, repeat the header row at the top of each file, and import each file as a separate pass.
No file ready yet? Download template opens the import screen. Download the customer workbook for Customers, Equipment, Service history, and Agreements sheets plus a Guide, or choose an individual CSV for any data sheet.
Connect a source on that screen marks ServiceTitan, Housecall Pro,
Jobber, and QuickBooks as Export upload. That is not a live login
to those systems. Export the file from the other product, then Choose file
(or drop the file) under or upload files. Thermal recognizes common vendor
headers the generic guess cannot place — ServiceTitan companyName,
Location ID, Equipment Name, and Asset #; Housecall Pro Mobile number,
Item ID, and Assigned employees; Jobber J_ID (maps to Customer ·
External ID, so a second upload of the same client file updates those
customers).
Jobber's card reads Client and property export files. Upload the client export and the property export together so each site lands on the right customer. Jobber has no equipment export. A jobs export is accepted as completed work only: each job with a completed date becomes service history on one unassigned unit at the property named by that job's service address. Move that history onto the real unit once you record it. A job with no completed date is skipped and named on the review. It does not create an open job in Thermal.
Open jobs and open invoices
Two more kinds of sheet can be imported: open jobs and open invoices (a customer's outstanding balance is the same kind of sheet, one row per customer). What each export must contain:
- ServiceTitan — open invoices: the Accounts Receivable (Detail) report with Invoice, Date, Customer, Total, and Balance. Open jobs: map the columns by hand.
- Housecall Pro — open invoices: the exported invoice report, where Amount is the total and Due is the balance. Open jobs: map the columns by hand.
- Jobber — open invoices: the Invoices Report with the optional Total ($) and Balance ($) columns. Customer balances: the Client Balance Summary Report. Open jobs: map the columns by hand.
- FieldEdge and BuildOps — map the columns by hand for both kinds.
When you map by hand, open jobs need a job ID, a customer ID, and a status, with an optional site, date, and description. Open invoices need a customer ID, an invoice number, a date, a total, and a balance.
Open invoices import as a starting balance. Your accounting system stays the system of record for QuickBooks: an imported invoice is not sent to QuickBooks, and payments taken in Thermal on an imported invoice are not sent to QuickBooks until your company turns pushing on, so record them in QuickBooks too until then. Run the import again with the same file and nothing new is created. An invoice number repeated in the file or already imported goes to review. Delete this import removes the jobs and invoices the run created, unless a payment has been taken on one of those invoices since.
There is no live API connection to ServiceTitan, Housecall Pro, Jobber, or Workiz. Workiz still starts from a CSV export (below). QuickBooks Online connects separately under Settings → Integrations.
What you can import
| Data | Available today | How | Template |
|---|---|---|---|
| Customers, service sites, and primary contact fields | Yes | Use the Import wizard. Records are staged for review and approval before they are committed. | Customer workbook — Customers sheet, or its individual CSV. |
| Equipment | Yes | Use the Import wizard. Equipment is imported under its customer. | Customer workbook — Equipment sheet, or its individual CSV. |
| Service history | Yes | Use the Import wizard. History is imported under the related customer and equipment. | Customer workbook — Service history sheet, or its individual CSV. |
| Service agreements | Yes | Use the Import wizard. Agreements are imported under their customer. | Customer workbook — Agreements sheet, or its individual CSV. |
| Price book services and materials | Yes | Use the separate CSV importer on Price book. Each row needs a code and name, and valid rows are written directly. | Price-book CSV template. Template coming. |
| Open jobs | Yes | Use the Import wizard with an open-jobs sheet. Each row needs a job ID, a customer ID, and a status, and may carry a site, a date, and a description. A status Thermal cannot place as open work goes to review and is not created. | Export open jobs from your old system and map the columns. |
| Open invoices and customer balances | Yes | Use the Import wizard with an open-invoices sheet. Each row needs a customer ID, an invoice number, a date, a total, and a balance. A customer-level balance imports as one opening-balance invoice. Open invoices come in as a starting balance. A zero balance is skipped, a credit (negative) balance goes to review, and payment history is not imported. | Export open invoices or balances from your old system and map the columns. |
| Payments | Not yet | Payment history cannot be imported yet. | No template is available. |
| Staff and technicians | Not yet | Bulk import is not available. Add each person from Staff so Thermal can send their account invitation. | No template is available. |
| Inventory | Not yet | Inventory records cannot be imported yet. | No template is available. |
| Vendors | Not yet | Vendor records cannot be imported yet. | No template is available. |
| Attachments | Not yet | File attachments cannot be imported yet. | No template is available. |
Export your customers from Workiz
Workiz does not have a direct connector to Thermal yet. Use a CSV export as the starting point. The Workiz steps below could not be checked against the live Workiz screen:
- Sign in to Workiz with an account that can access customer records. Unverified — confirm before sending to customers.
- Open the customer list and look for its export action. Unverified — confirm before sending to customers.
- Choose CSV if Workiz asks for a file type, then download the export. Unverified — confirm before sending to customers.
- Open the file and confirm that it has one header row followed by the customer records you expect. Unverified — confirm before sending to customers.
Keep an untouched copy of the export. If the review screen says that source lines were not read, make smaller copies with the header row repeated in each one, then upload them to Thermal one pass at a time.
Map columns
After upload, each column from your file gets a guessed destination field —
Thermal recognizes common header names (email, phone, zip, make,
model, serial, Client ID / Customer ID / Account ID, Region /
Province, Company, and similar) automatically. A Client ID-style
column maps to Customer · External ID so a second import of the same
file updates those customers instead of creating new ones. Region and
Province map to Customer · State. A Company column names the
account; the person's name becomes the primary contact. Review the
guesses and correct any that are wrong, or set a column to Don't import
to leave it out.
Four tabs track mapping coverage separately: Customers, Equipment, Agreements, and Service history, each showing how many of that entity's fields are currently mapped. A column left unmapped for an entity just means that field won't be filled in — it doesn't block the import.
A lone Address cell is split into street, city, and state when the shape is clear. When it isn't, review names the dropped parts instead of quietly losing the address. Extra address rows on the same customer (same External ID), or a sheet whose name looks like sites / locations / properties, import as additional service sites.
Review and fix errors
Once mapped, Thermal structures your rows into customer, equipment, agreement, and service-history records and shows a review screen with four peer counts — Ready to import, Needs checking, Company accounts, and Excluded. A record can be ready and still need checking, so the meters are not a stacked total. If any customer is missing a complete service address, the review names how many will import without one.
Each extracted record carries a confidence score:
- Below 50% is an error — automatically excluded from the import so nothing questionable gets written by default.
- 50–79% is a warning — included, but worth a quick check.
- 80% and up is included with no flag.
Potential duplicates lists rows that match another row in this file or a customer already on file. If no External ID column is mapped, a banner warns Re-importing this file will create new customers.
The Records needing attention table lists every warning and error with the record and the issue. For an error row, Exclude record / Include record toggles whether it's part of the import; a warning is informational only. You can also browse every parsed row directly under the Customers / Equipment tabs and toggle inclusion there. A customer with more than one imported site shows {N} service sites.
Import
Import commits only the included rows. Thermal matches against existing customers (by external ID or name) rather than creating duplicates — if a customer already exists, its equipment, agreements, and service history are merged in and anything that already matches is skipped, not overwritten. The completion screen breaks out how many customers, service sites, equipment records, agreements, and service-history entries were actually inserted versus skipped as already-on-file, plus how many error rows were excluded so you can download and fix them for a follow-up import.
Undo an import
Every import pass is recorded. On the Import screen, the Import history tab lists each one — when it ran, which file it came from, who ran it, and how many customers it added — with a Delete this import action.
Deleting an import removes the customers and service sites that pass created, and nothing else:
- A row that matched a customer you already had was merged into that customer, not created by the import, so it is never removed.
- The delete is all-or-nothing. If any customer from that pass — or a service site the pass added onto an existing customer — has since picked up a service agreement, a job, or an unpaid invoice, Thermal refuses the whole thing and names every record that blocked it. Nothing is deleted. Remove the attached work first, or delete those customers individually from the Customers list.
This undoes the import only — it does not roll back edits made to those customers afterwards. Every deletion is recorded with who did it, when, and how many records it removed.
Reference
- Who can reach Import — Owners and Office users who still have both Customers and Settings. Dispatchers and technicians cannot. A custom role that removes either area cannot open Import, even from a direct link. See Roles & permissions.
- Service agreement status values used during import — in Status & domain values.