# Importing assets from a CSV file | Raal Help Center

> The three step CSV import, the template columns, the row limits, and how existing devices are matched instead of duplicated.

Source: https://raal.io/help/asset-management/importing-assets-from-a-csv-file

---

Asset Management

# Importing assets from a CSV file

The three step CSV import, the template columns, the row limits, and how existing devices are matched instead of duplicated.

2 min read Updated 8 September 2026

Click **Import CSV** on the Assets page to load many devices at once. It is a three step flow: **Upload**, **Review and fix**, then **Done**.

![The import assets from CSV dialog showing the template download and the drag and drop area](/help-images/21fb9f77cb3a8900.png)

## Start from the template

Click **Template** to download **Raal-asset-import-template.csv** with the exact columns Raal expects:

`serial_number, model, manufacturer, category, status, warranty_start, warranty_end, warranty_provider, holder_business_email, holder_private_email, holder_name, holder_phone, location_country, location_address, notes, condition_grade, enrolled_in_mdm, assigned_at, device_in_use_from`

Only **model** is required. Header names are matched loosely, so an export of your own that uses `serial`, `brand`, `holder_email`, `mdm`, `grade`, `country` or `address` will still be understood. `enrolled_in_mdm` accepts yes, no, true, false, 1 and 0.

## Existing devices are updated, not duplicated

Rows are matched to your register by **serial number**. A row whose serial already exists updates that device. A row with a new serial, or no serial at all, creates one. This is what makes the import safe to re-run: exporting your register, fixing a column in a spreadsheet and importing it back does not double anything.

## Limits

-   Up to **5,000 rows** per upload.

-   The file must be **8 MB** or smaller.

-   It has to be a real .csv file.

## Fixing rows without re-uploading

Step 2 shows every row in an editable grid with Model, Category, Status, Serial and Holder business email, and a chip at the top reading something like "142 ready . 3 needs attention". Problems are listed under the row that has them: a missing model or category, an unrecognised category or status, or an invalid holder email.

Fix them in the grid. As the note says, "Rows with warnings are skipped unless fixed. Fix them here, no need to re-upload." Then click **Import N assets**.

## What you get back

Rows are imported independently rather than all or nothing, so a handful of bad rows never blocks the good ones. Step 3 reports how many were processed and how many were skipped, and offers **Download skipped rows (.csv)**, which is your original rows plus a `skip_reason` column. Fix that file and import it on its own.

## Two things the import does quietly

-   An **assigned\_at** date that arrives by import counts as a date a person set. Neither a delivery nor the nightly MDM sync will overwrite it later.

-   If a serial in your file matches a shipment you have already placed, the device and that order are linked, and the shipment appears in the device's activity trail dated when it happened.

## Related articles

-   [Adding an asset to the register](/asset-management/adding-an-asset-to-the-register)

-   [The Assets page: your device register](/asset-management/the-assets-page-your-device-register)

-   [Orders and your asset register](/asset-management/orders-and-your-asset-register)

On this page

-   [Start from the template](#dfy5dcye6w3)
-   [Existing devices are updated, not duplicated](#d2ztxfkk0s6)
-   [Limits](#moezbze6lac)
-   [Fixing rows without re-uploading](#4w5ieyksssl)
-   [What you get back](#z4izxp63dq5)
-   [Two things the import does quietly](#0x32tpbpo1w)
-   [Related articles](#xr0yrbmbp40)
