Skip to content

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.

Both importers work the same way.

  1. 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.
  2. 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.
  3. Preview. WorkWing checks every row and tells you what would happen to it.
  4. 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.
  5. 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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.