> ## Documentation Index
> Fetch the complete documentation index at: https://help.opmaint.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Import templates: columns and formatting rules

> Every Opmaint bulk import template, its columns, which are required, and the formatting rules that stop an import from failing validation.

Each Opmaint bulk import uses a fixed template with its own columns. This page lists every template, marks the required columns, and covers the formatting rules that cause most failed validations. For how to open the import screen and run an import, see [Bulk import](https://help.opmaint.com/bulk-import.md).

> [!TIP]
>
> Click **Template** on the import screen to download a blank sheet with the exact column headers. Keep the headers as they are, including the asterisks, and keep their order.

## Formatting rules for every template

* **Required columns** end with an asterisk (`*`). A row with an empty required cell fails validation.
* **ID columns** take the Opmaint ID of the record, not its name. Get IDs by clicking **Download data** on the import screen, or with **Copy ID** in the row menu of most lists.
* **Several IDs in one cell** are comma-separated without spaces, for example `166,167,168`.
* **ID columns replace, they do not add.** Whatever IDs you put in the cell become the full list. To add a user to a location that already has users, enter the existing IDs and the new one.
* **Re-importing a record replaces its details.** When you update an existing record, fill every value you want to keep, not only the one that changed.
* **Clean your cells.** Remove line breaks and extra spaces copied in from other sheets.

> [!NOTE]
>
> Deleting or deactivating records cannot be done through an import. Do it from the record's list instead.

## Your data structure

Opmaint organises each site as **Branch > Location > Zone > Sub Zone**. Import data while you are in the branch it belongs to, and remember that **Download data** shows the records of the branch you are in. See [Branches](https://help.opmaint.com/branches.md) and [Locations and zones](https://help.opmaint.com/locations-and-zones.md).

## Templates

> [accordion] Locations
>
> | Column | Notes |
> | - | - |
> | Name \* | |
> | Address | |
> | Users (IDs) | Users responsible for the location |
> | Teams (IDs) | Teams responsible for the location |

> [accordion] Zones
>
> | Column | Notes |
> | - | - |
> | Title \* | |
> | Description | |
> | Location (ID) \* | The location the zone sits in |

> [accordion] Sub Zones
>
> | Column | Notes |
> | - | - |
> | Title \* | |
> | Description | |
> | Location (ID) | |
> | Zone (ID) \* | The zone the sub zone sits in |

> [accordion] Asset Types
>
> | Column | Notes |
> | - | - |
> | Title \* | |
> | Description | |

> [accordion] Teams
>
> | Column | Notes |
> | - | - |
> | Name \* | |
> | Description | |
> | Members (IDs) | User IDs of the team members |

> [accordion] Users
>
> | Column | Notes |
> | - | - |
> | First Name \* | |
> | Last Name | |
> | Type \* | `ADMIN`, `FULL_USER`, `LIMITED_USER` or `REQUESTER` |
> | Phone Number \* | Digits only, no spaces. Must be unique for each user |
> | Email \* | Lowercase |
> | Password \* | |
> | Branches (IDs) | Every branch the user should have access to |
>
> Store Person users cannot be imported. Create them from **Users** instead. See [Users and roles](https://help.opmaint.com/users-and-roles.md).

> [accordion] Vendors
>
> | Column | Notes |
> | - | - |
> | Name \* | |
> | Description | |
> | Contact Person | |
> | Contact Number | |

> [accordion] Assets
>
> | Column | Notes |
> | - | - |
> | Name \* | |
> | Description | |
> | Serial Number | |
> | Model | |
> | Manufacturer | |
> | Contract Name | |
> | Year | |
> | Location (ID) | One location ID only. For the same kind of asset at several locations, add one row per location |
> | Asset Type (ID) | |
> | Zone (ID) | The zone where the asset is physically mounted |
> | Subzone (ID) | |
> | Users (IDs) | |
> | Teams (IDs) | |
> | Purchase Date | |
> | Purchase Price | |
>
> > [!WARNING]
> >
> > When you re-import an existing asset, fill its location and zone again. Leaving them blank clears them.

> [accordion] Part Types
>
> | Column | Notes |
> | - | - |
> | Title \* | |
> | Description | |
>
> Part type IDs are different in each branch. Use the IDs from the branch you are importing parts into.

> [accordion] Parts
>
> | Column | Notes |
> | - | - |
> | Name \* | Must be unique |
> | Description | |
> | UoM | Unit of measurement, such as `Nos`, `Kg`, `Metre` or `Litre` |
> | Min Stock | Cannot be empty. Enter `0` if you have no value |
> | Units in Stock | Cannot be empty. Enter `0` if you have no value |
> | Cost | Cannot be empty. Enter `0` if you have no value |
> | Detail | |
> | Vendor (IDs) | |
> | Assets (IDs) | The assets the part fits |
> | Location (ID) | |
> | Area (ID) | The part location where it is stored, such as a rack |
> | Part Type (ID) | |
> | Zone (ID) | |
> | Subzone (ID) | |
>
> Enter numbers only in **Min Stock**, **Units in Stock** and **Cost**: `50`, not `50 mtr`, and `130000`, not `1,30,000`.

> [accordion] Meters
>
> | Column | Notes |
> | - | - |
> | Name \* | |
> | Description | |
> | Multi Reading Count | |
> | Reading Name | |
> | Type | |
> | Measurement Unit \* | |
> | Min Value | |
> | Max Value | |
> | Out of Range Action | |
> | Reading Due In (DD:HH:MM) | Days, hours and minutes |
> | Location (ID) \* | |
> | Asset (ID) \* | |
> | Zone (ID) | |
> | Sub Zone (ID) | |
> | Responsible Users (IDs) | |
> | Enable Remarks | |
> | Activate Status | |
> | Arithmetic Formula | |
> | Precision | |
> | Daily Calculated Readings | |
>
> For columns with fixed choices, such as **Type**, pick the value from the cell's list on the import screen.

> [accordion] Meter Readings
>
> | Column | Notes |
> | - | - |
> | Meter (ID) \* | |
> | Reading \* | |
> | Timestamp | |
> | Reading Name (ID) | |

> [accordion] Work Orders
>
> | Column | Notes |
> | - | - |
> | Title \* | |
> | Type | |
> | Description | |
> | Priority | |
> | Asset (ID) | |
> | Location (ID) | |
> | Users (IDs) | |
> | Teams (IDs) | |
> | Category (ID) | |
> | Due Date | |
> | Start Date | |
> | Zone (ID) | |
> | Sub Zone (ID) | |
>
> For **Type** and **Priority**, pick the value from the cell's list on the import screen.

> [accordion] Checklists
>
> Use one row per question. Repeat the checklist name on every row so each question is attached to the right checklist.
>
> | Column | Notes |
> | - | - |
> | Checklist Name | Fill on every row |
> | Description | |
> | Field / Question \* | |
> | Field Type \* | See the list below |
> | Options (comma-sep) | The choices for the question |
> | Required | `yes` or `no` |
> | Min | |
> | Max | |
>
> **Field Type** values, written in lowercase: `yesno`, `oknotok`, `number`, `numberwithrange`, `text`, `radio`, `checkbox`, `dropdown`, `date`, `photo`, `file`, `time`, `star`, `slider`, `divider`, `signature`, `voice`.
>
> For `yesno` questions, enter `yes, no` as the options. For `oknotok` questions, enter `OK, Not OK`.

## Related

> [card] [Bulk import](https://help.opmaint.com/bulk-import.md)

> [card] [Data export](https://help.opmaint.com/data-export.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.