Data import
Data import creates customers and jobs from a CSV file. Use it when you are moving from another system or a spreadsheet, or when a client sends you a list of work orders.
Open Settings > Data Import, under Data & monitoring. There is one card for Customers and one for Jobs. You see a card only if your role can create that kind of record.
People are not imported. Each person signs in with their own account, so they still join by invitation. See Members.
The five steps
Section titled “The five steps”Both importers work the same way.
- Upload. Choose the Brand the records go into first. Every row in the file is added to that brand, and matching only looks at records already in it. You see only the brands where your role can create that kind of record, and if there is just one it is chosen for you. Changing the brand starts the import again. Then drop a CSV file on the upload area, click to choose one, or paste the text of a CSV file into the box below it. The first row must name each column. A file can hold 5,000 rows at most. For a longer list, split it into several files. A cell can hold 5,000 characters at most, or 512 for a custom field or a field from the job type. A row with a longer value is marked as an error in the preview, with the column named, and the rest of the file still imports.
- Map columns. WorkWing guesses where each column goes from its heading. Check each guess and change any that are wrong. A column set to Don’t import is left out. A field marked (required) needs a column.
- Preview. WorkWing checks every row and tells you what would happen to it.
- Import. Click Import. A progress bar shows how many rows are done. Stop import lets the batch in progress finish and keeps the rows already imported.
- Results. You get four counts: Created, Updated, Skipped and Failed.
From step 2 onwards the page shows which brand you are importing into.
If you start from a spreadsheet, save it as a CSV (comma separated) file first.
Importing customers
Section titled “Importing customers”A customer needs only a name. The columns you can map are:
| Field | What goes in it |
|---|---|
| Name | Required. The person or company |
| Last name | For a person, when the first name is in Name |
| Customer type | person or company. Empty means person |
| Email, Phone | The customer’s own contact details |
| Contact first name, last name, email, phone | A named contact at the customer |
| Address line 1 and 2, Town or city, County or region, Postcode, Country | The customer’s address |
| Customer reference | The ID from your old system. WorkWing stores it as the External CRM ID |
| SMS opt-in, Email opt-in | yes or no. true and false, y and n, and 1 and 0 also work |
Every custom field you have set up for customers is offered as a column too. See Custom fields.
Matching existing customers
Section titled “Matching existing customers”Under Match existing records on, choose which column says that a row is a customer you already have: Customer reference, Email or Name. Choose Never match (always create) to create every row as a new customer. When you map a Customer reference column, WorkWing matches on it unless you choose otherwise; without one, it starts on Never match.
Then choose what happens when a row matches:
- Skip the row leaves the existing customer alone.
- Update the existing customer writes the row’s values onto it. Only cells that have something in them are written, so an empty cell never wipes out what WorkWing already holds.
The customer reference is the most reliable match, because names and email addresses are often shared. If a match value finds more than one existing customer, or appears twice in your file, the row is refused and the preview says so.
WorkWing remembers the column mapping and the match choices for a file with the same column headings in the same brand, so when you upload a corrected copy of the same export, step 2 is already filled in.
Addresses and phone numbers
Section titled “Addresses and phone numbers”A customer’s main location is created from their address during the import. WorkWing looks the address up on the map in the background, so its map pin follows shortly afterwards. A job imported afterwards with the same postcode uses that location.
A phone number WorkWing cannot use is reported in the preview with the value as it appears in your file, so you can find and correct it.
Importing jobs
Section titled “Importing jobs”Pick a Job type before you upload. The list shows the job types of the brand you chose. Every job in one file shares a job type, so split your export by kind of work and import each file separately. The job type adds columns of its own: every field it asks for, and every custom field you have set up for jobs.
Import your customers first, into the same brand. Each job is linked to an existing customer in that brand.
| Field | What goes in it |
|---|---|
| Customer reference | The customer’s External CRM ID. WorkWing tries this first |
| Customer name | Used when there is no reference. Where two customers share a name, use the reference |
| Title | A short title for the job |
| Priority | low, normal, high or urgent |
| Status | pending, scheduled, completed or cancelled |
| Scheduled start, Scheduled end | When the work is booked |
| Completed date | When the work was finished |
| Created date | When the job was raised in your old system |
| Notes | Notes for whoever does the work |
| Parent job number | The project this job belongs to, if any |
| Address line 1 and 2, Town or city, Postcode, Country | The site |
| Job reference | Your old job number |
A row needs a customer reference or a customer name.
Statuses
Section titled “Statuses”Past work can come in as it was. These rules apply:
- A scheduled job needs a scheduled start.
- A completed job needs a completed date.
- A completed date on a job that is not completed is ignored, and the preview warns you.
- Jobs cannot be imported as assigned or in progress. Those states belong to people working in WorkWing.
Nobody is assigned to an imported job, and the import never assigns anyone automatically. Assign people afterwards from the dispatch console.
Matching old job numbers
Section titled “Matching old job numbers”Map the Job reference column as the match column and a job whose number is already in WorkWing is skipped on a re-run. When you map a Job reference column, WorkWing matches on it unless you choose Never match. Jobs are never updated by an import.
Each row’s address is compared with the customer’s locations:
- If one matches, the job uses it.
- If several match, the preview marks the row Needs a choice. Pick the site you mean from the list on the row. A row you leave without a choice is not imported, and it appears in the failed rows file.
- If none match, WorkWing creates a new location for the customer when the job is imported, and the preview warns you.
Projects
Section titled “Projects”To put jobs in a project, create the project first and give its job number in Parent job number. The project must belong to the same customer as the job.
Write dates as 2026-03-15 or 2026-03-15 09:30, or day first as 15/03/2026, with an optional time. A date that cannot exist, such as 31/02/2026, is refused.
A date or time without a time zone is read in the brand’s time zone, so 15/07/2026 09:00 is 9am on the brand’s clock, and a date alone is the start of that day there. A value that carries its own offset, such as 2026-03-15T09:30+01:00 or 2026-03-15T09:30Z, keeps it.
Previewing
Section titled “Previewing”The preview lists the first 500 rows of whichever filter you have chosen: All rows, Errors or Needs a choice. The counts above it cover the whole file. Each row is marked Create, Update, Skip, Error or Needs a choice, with the issue written beside it.
A row with an error is not imported. Fix it in your file and upload it again, or import the other rows now. Where WorkWing will save a value differently from how you wrote it, such as a phone number, the preview shows what it will be saved as.
What an import does not do
Section titled “What an import does not do”Imports are quiet. They send no emails, texts or webhooks. Imported jobs are marked as imported, and the API reports that in each job’s source field.
Creating a job that nobody is assigned to does not count against your plan’s job allowance. See Plan limits and overage.
Results and failed rows
Section titled “Results and failed rows”When the import ends you see how many rows were created, updated, skipped and failed. Download failed rows gives you a CSV with your original columns and an extra error column naming the field and the problem. Fix the rows in that file and import it again.
If you stopped the import, the rows that were never imported are in that file too, marked as not imported because the import stopped, so you can import them as a second file.
What’s next
Section titled “What’s next”- Import existing customers and work: the whole move from another system, in order
- Creating a job type: the job type a job import is built on
- Custom fields: extra columns for customers and jobs