Search the documentation

Find a page by title or section.

Data

Bulk imports

Load destinations, origins, vehicles and drivers from a spreadsheet, using the template Cooriroo generates for your tenant.

Updated

Bulk import loads records into Cooriroo from a file instead of a form. Four entities can be imported today — destinations, origins, vehicles and drivers — and each has its own downloadable template. The import runs against the same service the forms use, so the same validation, quotas and permissions apply to every row.

Who can do this

Role
Administrators
Permission
imports:readimports:writedestinations:write

Running an import needs imports:write plus the target entity’s own write permission. Downloading a template needs imports:read plus that same entity permission. Substitute origins:write, vehicles:write or drivers:write for the other entities.

Run an import

The import dialog opens from the Import button on the entity’s list page.

  1. 1

    Download the template

    Destinations → Import → Download template

    The template is generated for your tenant at the moment you download it. It carries your configured location or vehicle types as the allowed values, one extra column per custom field you have defined, and your own terminology in its title and filename. A template downloaded before you added a custom field will not have a column for it.

  2. 2

    Fill in one row per record

    Leave the lines starting with # where they are — they are the column guide, and the importer skips them, so a filled-in template re-imports without editing. Required columns must have a value. Optional columns may be left blank.

  3. 3

    Choose an import mode

    Import → Import mode

    All or nothing is the default. Best effort keeps the rows that worked. See the comparison below before switching.

  4. 4

    Validate before you commit

    Import → Validate only

    Validate only runs the whole import — header check, per-row parsing, and the lookups that decide create versus update — and reports exactly what would happen, without saving anything. It is the cheapest way to find a bad column name or a malformed date.

  5. 5

    Run the import

    Import → Import

    The result panel counts the rows as Total, Created, Updated, Failed, Skipped and Warnings, and lists the failed rows and the warned rows on separate tabs with the field each problem belongs to.

  6. 6

    Follow up on anything that failed

    When import history is enabled the result panel carries an Open in Import History link. From there you can edit a failed row in place and retry it rather than re-uploading the whole file.

What is inside the template

A template is a CSV in three parts: a commented column guide, the machine header row, and one example row. The guide names every column, says whether it is required, and describes what the cell accepts. The header row uses the machine column names, not your terminology, so renaming an entity never breaks a file that already works. Header matching is case-insensitive, and an unknown, duplicated or missing-required column rejects the whole file before any row runs.

A destinations template

text
name,type,status,address_line_1,address_line_2,city,state,postal_code,country,latitude,longitude,contact_name,contact_phone,contact_email,operating_hours,window_open,window_close,driver_emails,notes

The guide block above is an extract — the real file lists every column, and appends one line per custom field you have defined for that entity. The arrow shows the human label, which follows your terminology; the name to the left of it is what the header row must say.

All or nothing, or best effort

All or nothingBest effort
DefaultYesNo
One row failsNothing is savedEvery valid row is still saved
Rows that were rolled backReported as skippedNot applicable
Best forA file you expect to land wholeA large file you will fix in passes
The two import modes, chosen per run.

How rows are matched to existing records

Every import is an upsert. Each row is looked up by one business key inside your tenant; a match is updated, and anything else is created. Change the value in the match column and you have described a different record, not a rename.

EntityMatched onTemplate also covers
DestinationsnameDriver assignment by email, custom fields
OriginsnamePickup instructions, custom fields
Vehicleslicense_plateFeatures, labels, custom fields
DriversemailTraining certifications, custom fields
The match key per importable entity.

File formats and limits

  • Formats: .csv, .xlsx and .json.
  • Rows: 500 data rows per file. Split anything larger.
  • Size: 10 MB per upload.
  • Workbooks: only the first sheet is read. A CSV template opened and re-saved as a workbook still imports, guide lines and all.
  • JSON: an array of flat objects. Nested objects and arrays are rejected rather than flattened, because there is no single right way to flatten them.

Terminology

Your organisation can rename these. If your screens say something else, this is what they mean here.

Destination
The template’s title and filename follow your term for this — a tenant using "Client" downloads a client import template.Rename it in Settings → Terminology
Driver
Renaming drivers changes the labels in the template guide, not the machine column names your file must use.Rename it in Settings → Terminology