Import data with Milo

Upload a spreadsheet or paste a list, and Milo, the Assignar Pay assistant, creates or updates your cost codes, clients, projects, orders, suppliers and other lists in one go.

You can add cost codes, clients and the other lists below one at a time on their own pages, or all at once through Milo, the assistant built into Assignar Pay. Upload a CSV or Excel file, or paste a list into the chat. Milo shows every row in an import preview for you to check and fix, and saves nothing until you select the import button.

What you can import

RecordsColumns each row needsAn existing record is updated when the row has the samePermission you need
Cost codesCode, DescriptionCodeCreate Schedule of Values
ClientsNameNameCreate clients
ProjectsName, ClientNameCreate projects
OrdersTitleTitleNone beyond opening Milo
SuppliersNameNameManage suppliers
RolesName, Cost CodeNameCreate cost codes
ActivitiesName, Cost CodeNameCreate cost codes
MaterialsName, Cost CodeNameCreate cost codes
AssetsName, Type (asset or attachment), Ownership (owned or rented), and an Asset Class for an assetNameCreate assets
TagsLabelLabelManage tags

Owners, Admins and Managers hold all of these permissions by default. See the permissions reference.

Other columns are optional and match the fields on each record's own form, such as Email, Phone and the address for clients and suppliers, or Type, Category, Subcategory, Unit and Charge Rate for cost codes. A cost code's Type is one of activity, role, material, equipment, rateitem, payitem or other, and is other if you leave it out. Set it to role, activity or material for the codes you'll link roles, activities or materials to, or those imports won't find them. Anything a row refers to must already exist: the cost code of a role, activity or material (a cost code of that type, found by its code or description), the client of a project, the category and subcategory of a cost code, or the asset class of an asset. Add those first.

A project row can also carry the project's Project Code, Tags, Start Date and Est. End Date. Write each date as the day itself in YYYY-MM-DD form, for example 2026-10-05. A date in any other form, such as 05/10/2026, or one with a time zone, such as 2026-10-04T14:00:00Z, is listed as an error for you to fix, because Milo can't tell which day it means. List a project's tags by name, separated by commas, for example Flagger Premium, Night Works. Each tag must already exist, with no category or in the Project category. A tag that doesn't, for example "Tag "Flager Premium" not found", is listed as an error, so the project is never saved without it. When the row updates an existing project, its tags are added to the ones the project already has, and the preview shows the full list. A project that comes from Assignar Operations keeps its code: a different Project Code on its row is listed as an error.

Matching ignores capital letters and spaces at either end, so harbourside developments updates Harbourside Developments.

Worker profiles, competencies, timesheets, Schedule of Rates lines and pay rates can't be imported this way. Milo can give existing workers their roles from a list, though: see Give many workers their roles from a list.

Open Milo

Select Ask Milo. It sits beside Search at the top of the left navigation, or beside the search bar at the top of the page if your navigation runs along the top. On a phone, open the menu first. You can also press ⌘K (Mac) or Ctrl+K (Windows) and choose Ask Milo. The chat panel opens on the right.

Once a chat has started, the new-window icon at the top of the panel opens the same chat on its own page, Ask Milo, in a new tab. That page needs the Use the AI assistant permission, and the AI assistant must be switched on for your organization. To go back to an earlier import chat, select Chats at the top left of the panel.

Field users, and people who sign in to the customer, supplier or visitor portals, don't have Milo. See Get help for what else Milo and Support can do.

Import from a file

  1. In the chat panel, select + at the top right of the message box and choose the file, or drag it onto the message box. Use a CSV file or an Excel workbook (.xlsx) with one header row and one record per row.
  2. The file appears above the message box. Wait until it has finished processing; you can't send your message before then.
  3. Type what the file holds, for example "Import these as cost codes", and send it.
  4. Milo says in one sentence what it is about to do. If that's right, select Confirm, or type your answer instead.
  5. Check the rows in the import preview and fix any errors (see below).
  6. Select the import button. See Import the rows.

An Excel workbook can have only one sheet with data. Otherwise Milo stops with "This Excel file has 2 sheets with data (...). Milo can only process one sheet at a time — please save each sheet as a separate file and upload them individually."

The chat also takes PDF, Word, text and HTML files, but Milo can't import rows from them. Save the list as a CSV or Excel file first.

Uploading a file needs the Use the AI assistant permission.

Paste a list instead

For a short list, type or paste the rows into your message, for example: "Create these clients: Harbourside Developments, Coastal Rail Alliance, Westfield Civil." Milo asks you to Confirm and shows the same import preview. If your list has details the record has no field for, the preview names them and says they won't be saved.

Check the import preview

The preview is headed with the kind of record, such as Cost Code Import Preview, and how many rows are shown. Under it, counts show how many rows will be created, updated and have errors, or No errors.

The rows are in up to three groups:

  • Create: new records.
  • Update: rows that match an existing record. A blank cell keeps the current value, and each value that will change is marked with a green box.
  • Error: rows that can't be saved yet. The Issues column says why, for example "Cost Code "LAB-9" not found", "Name is required", "Name "Excavator" duplicates row 2 in this upload" or, for a supplier, "Email is not a valid email address".

To fix a row, change the cell in the preview, then select Validate Changes to check the rows again. The import button is hidden until you do, and the preview says "You have unsaved edits. Click Validate Changes before confirming."

When a file's columns went to the wrong fields, select Map Columns. Map CSV Columns lists each column from your file with a sample value. Under Maps to, choose the field it belongs to, or — ignore — to leave it out; required fields are marked with *. Select Apply Mapping.

When some rows would update existing records, Create new only leaves those rows out, so only new records are added. Include updates puts them back.

Import the rows

Select the import button. Its label says what happens, for example Create 12 Cost Codes, Update 3 Cost Codes or Create/Update 15 Cost Codes. Nothing is saved before you select it.

If some rows still have errors, you can select import only the N valid ... and skip the rest under the Error group instead.

When it finishes, the preview is replaced by a summary: "Successfully created 12 Cost Codes." and "Successfully updated 3 Cost Codes." Select View details to see the rows. Rows that couldn't be saved are listed with the Reason. The records are then on their usual pages.

Milo creates each order with its details only. Open the order to add roles and shifts; see Create and edit an order.

Tags come in without a category. On Settings, then Tags, select Filter, then Uncategorized to find them. To make a tag for one kind of record, such as a photo tag, add it on the Tags page instead.

When an import doesn't start

  • "You don't have permission to import cost codes." (or clients, suppliers and so on): you don't hold the permission in the table above. Ask an Owner or Admin.
  • Too many rows: "Your request has 1450 rows. The maximum per request is 1,000. Please split your upload into smaller batches." Split the file and import each part.