# Import Records with Data Import

Use **Data Import** to create many records from a spreadsheet or make controlled updates to existing records. The same workflow can be used for master data, such as Items and Suppliers, and for supported transactions, such as Sales Orders and Purchase Invoices.

Data Import runs the same permissions, mandatory-field checks and business validations as the forms in NexWave. It is not an all-or-nothing process, and it does not provide a one-click undo. Prepare the file carefully, test a small batch and verify the result before importing the full set.

> Bank statements use the dedicated **Bank Statement Importer**, not Data Import. See [Import Bank Statement](/doc/3e567099-e3b8-40e3-a207-81e8e0e501a4).

## Before you start

Confirm that:

* You have access to **Data Import** and permission to import the selected **Document Type**. Ask your site administrator if **Data Import** is not available.
* Required linked records already exist, such as Companies, Customers, Suppliers, Items, Warehouses, Accounts, Currencies and Units of Measure.
* You know whether the records should be created as Draft or submitted after import.
* You have exported the current records before a significant update.
* You can test with a small, representative batch before importing the full file.
* You will keep the source file and the completed Data Import record for review.

Do not assume that an import can be reversed. Submitted accounting and stock records may need to be cancelled and amended through the normal document workflow.

## Choose the import type

| Need | Import Type | Important requirement |
|------|-------------|-----------------------|
| Create new records | **Insert New Records** | Use a blank template and avoid IDs or unique values that already exist. |
| Change existing records | **Update Existing Records** | Export the existing records and retain their identifier values, such as **ID** or **Item Code**. |

For updates, prefer a filtered export containing only the records and fields you intend to change. Use the identifier column provided by the downloaded template. For example, Items use **Item Code** in the example below; other records can use **ID**. Do not replace exported identifiers with display names or spreadsheet row numbers.

## Step 1: Create the Data Import


1. Search for **Data Import** in the NexWave search bar.
2. Open the list and click **Add Data Import**.
3. Select the **Document Type** you want to import.
4. Select **Insert New Records** or **Update Existing Records** under **Import Type**.
5. Click **Save**.

 ![A Data Import record configured to insert Items](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC8zYzBjNTc3OS03MzhlLTRjNDQtYWE2YS03MDRjNGJjNjg0NmUvMDEtZGF0YS1pbXBvcnQtc2V0dXAuanBnIiwidHlwZSI6ImF0dGFjaG1lbnQiLCJpYXQiOjE3OTI2MjA5MDAsImV4cCI6MTc5MjcwNzMwMH0.tkiFtokvhMvBv1ALBCxIqKwZrIOarjR7O4hb2VvJQGk)

## Step 2: Download the template

Click **Download Template**. In the **Export Data** dialogue:


1. Select **Excel** or **CSV** under **File Type**.
2. Choose an **Export Type**:
   * For an insert, use **Blank Template**.
   * For an update, use **Filtered Records**, then set and check the filters inside the **Export Data** dialogue. Do not assume that a filter on another list has been carried across.
3. Under **Select Fields To Insert** or **Select Fields To Update**, choose the fields needed for the workflow.
4. For inserts, click **Select Mandatory** first, then add any optional fields you need.
5. Click **Export**.

 ![The Export Data dialogue showing a blank CSV template and mandatory Item fields](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC83ZDkyYjMyOS03NzA5LTRiMDMtYjViMS05MmQ3N2I2ZjRkYWEvMDItZG93bmxvYWQtdGVtcGxhdGUuanBnIiwidHlwZSI6ImF0dGFjaG1lbnQiLCJpYXQiOjE3OTI2MjA5MDAsImV4cCI6MTc5MjcwNzMwMH0.pyUTugoawS_n_ZMhmO2xECbiBVjgy4wfO35gHVaZ_tc)

The generated template is specific to the selected **Document Type** and **Import Type**. Download a fresh template when either changes. Do not copy data into a template created for another document type.

## Step 3: Prepare the spreadsheet

Use these rules while preparing the file:

* Keep the downloaded column headings unchanged. If a heading is changed, it must be mapped deliberately during preview.
* Keep one row of headings and at least one data row.
* Do not use blank rows as separators. Completely blank rows are ignored.
* Use values that match NexWave records exactly for linked fields, such as Customer, Supplier, Item, Warehouse, Account and Unit of Measure.
* Use plain numeric values for quantities, rates and currency fields. Do not include currency symbols in numeric cells.
* Check dates carefully, especially when a spreadsheet application may have changed their format.
* For inserts, check unique values before import to prevent duplicates.
* For updates, retain the exported parent identifier, such as **ID** or **Item Code**. Retain child-row **ID** values for existing lines that must be updated.
* Do not rely on a blank update cell to clear an existing value. Confirm the intended result with a small sample or make the change on the record.

Normal NexWave calculations and validations still run during import. Verify the document currency, exchange rate, quantities, rates, taxes and totals after importing transactions.

### Parent records with child rows

Transactions often contain a parent section and a child table, such as a Sales Order with several Items.

* Put the parent values and the first child row on the first spreadsheet row for the document.
* On each additional child row, leave every parent column blank.
* The next row that contains a parent value starts the next parent document.

For example:

| Customer | Date | Item Code | Quantity |
|----------|------|-----------|---------:|
| Kauri Office Supplies | 24/07/2026 | OFFICE-CHAIR | 2        |
|          |      | DESK-LAMP | 3        |
| Harbour Safety Equipment | 24/07/2026 | SAFETY-VEST | 10       |

For child-table updates, include every existing child row that must remain and retain each existing child-row **ID**. A row without a child ID is treated as a new child row. When a child table is included in an update, existing lines omitted from the file can be removed.

## Step 4: Attach and review the file


1. Attach the CSV, XLS or XLSX file under **Import File**.
2. Review **Preview**. The preview shows the first ten rows when the file is larger.
3. Confirm that important headings are recognised.
4. Click **Map Columns** if a heading must be assigned to another field or set to **Don't Import**.
5. Review **Import File Errors and Warnings** before starting.

 ![A Data Import preview with recognised name and status columns](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC8yY2JhMzE1MC0zY2VjLTQyZTAtOTIzMy00ZmFlMmY2MGFjYzEvMDMtcmV2aWV3LXByZXZpZXcuanBnIiwidHlwZSI6ImF0dGFjaG1lbnQiLCJpYXQiOjE3OTI2MjA5MDAsImV4cCI6MTc5MjcwNzMwMH0.CCn13hVKkdFhRQyHtrtkJRKsFr638UfIKhaUfeM9bi0)

A green recognised heading does not confirm that every business rule will pass. Preview checks the file structure and mappings, while full document validation occurs during the import.

Do not use **Import from Google Sheets** for confidential financial, payroll, personal or commercially sensitive data. That option requires a publicly accessible sheet.

## Step 5: Choose email and submission settings

* Leave **Don't Send Emails** selected unless the imported records are deliberately meant to trigger notifications and this has been tested.
* For document types that can be submitted, **Submit After Import** is available for new records. Leave it unticked for the first test so you can review Draft records.
* **Submit After Import** submits each successful insert immediately. It does not submit existing Draft records during **Update Existing Records**.

Submitted records can only be updated in fields that are allowed after submission. Other changes must follow the normal cancellation and amendment process.

## Step 6: Start and monitor the import


1. Click **Start Import**.
2. Wait for the status to change from **Pending**.
3. Review the **Import Log**, including links to successful records and messages for failed rows.

Possible results include:

| Status | Meaning |
|--------|---------|
| **Success** | Every record group completed successfully. |
| **Partial Success** | Some records were committed and some failed. |
| **Error** | The import failed or every record group failed. |
| **Timed Out** | Processing exceeded the job time limit. Review the log before continuing. |

Successful records are committed individually. A **Partial Success** import is not rolled back.

## Step 7: Verify the imported records

Do not stop at a **Success** status. Complete these checks:


1. Compare the successful record count with the expected number of parent records.
2. Open several records from the **Import Log**.
3. Check names, company, party, dates, currency, exchange rate, warehouse, quantities, rates, taxes, totals and child rows as applicable.
4. Confirm whether the records are Draft or Submitted.
5. For accounting or stock records, review the relevant ledger or operational report.
6. Open the document list and filter the imported batch. See [Working with list views and reports](/doc/99433972-107c-4fbf-9876-cd3d0b8486c1).

Child rows do not count as separate parent records. If one Sales Order contains three Item rows, it is still one successful parent record.

## Correct failures and retry safely

For **Partial Success**, first select **Show Only Failed Logs** and read the messages.

* If the spreadsheet values need to change, click **Export Errored Rows**, correct that file and create a new Data Import containing only the failed rows.
* If the file is correct but a prerequisite was missing, such as a linked record or configuration, correct the prerequisite and use **Retry** on the existing Data Import.
* For **Timed Out**, review the log, then use **Retry** to continue the remaining work.
* Use **Export Import Log** when the log is too large to review comfortably on screen.

Do not create a new insert import from the complete original file after **Partial Success**. Rows that already succeeded may be attempted again, causing duplicates or duplicate errors.

## Updating existing records safely

Use this sequence for a controlled update:


1. Filter the source list to the records you intend to change.
2. Create a Data Import with **Update Existing Records**.
3. Use **Download Template** and choose **Filtered Records**.
4. Retain the exported identifier column, such as **ID** or **Item Code**.
5. Remove fields that do not need to change from the export selection, rather than deleting important identifiers later.
6. Change only the intended values.
7. Test a few records and verify them before importing the full update.

When child tables are included, retain the child-row **ID** for every existing line and include every line that should remain. Never copy a child-row ID from one parent record to another.

## Worked example: update Item reorder levels

This example changes the Auckland purchase rule for two Items. Each Item also has a Wellington transfer rule that must remain unchanged. Use a small representative sample before applying this process to a larger Item list.

The quantities below are examples in each Item's stock unit of measure. Agree your actual thresholds before importing. **Re-order Level** and **Re-order Qty** are warehouse-rule settings; they are separate from **Minimum Order Qty** and **Safety Stock** in the Item's purchasing settings.

### 1. Record the starting values

Open each Item, select **Inventory**, and expand **Auto re-order**. Record every existing row under **Reorder level based on Warehouse**.

| Item Code | Request for | Re-order Level: before → after | Re-order Qty: before → after |
|-----------|-------------|--------------------------------|------------------------------|
| PACKING-CARTON | Auckland - NW | 20 → 30                        | 50 → 60                      |
| PACKING-CARTON | Wellington - NW | 15 → 15                        | 30 → 30                      |
| PACKING-TAPE | Auckland - NW | 10 → 15                        | 24 → 36                      |
| PACKING-TAPE | Wellington - NW | 6 → 6                          | 12 → 12                      |

The Auckland rows use *Purchase*. The Wellington rows use *Transfer*. Keep these request types and both warehouse selections unchanged.

 ![Packing Carton before import, with Auckland and Wellington rules](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC8zYmIwNzU0NS02M2MzLTQyZWYtOTA0Mi1mYTRiMGM2OTFjYWUvMDQtcmVvcmRlci1iZWZvcmUuanBnIiwidHlwZSI6ImF0dGFjaG1lbnQiLCJpYXQiOjE3OTI2MjA5MDAsImV4cCI6MTc5MjcwNzMwMH0.y2_QZ5C-tS0KikazPr4u5vEMC78XzaqWTJ8wLF5nVcE)

### 2. Export the two Items and their complete reorder tables


1. Create a **Data Import** with **Document Type** set to *Item* and **Import Type** set to *Update Existing Records*. Save it.
2. Select **Download Template**. Choose **CSV** or **Excel**, then **Filtered Records**.
3. Add a filter that selects only the intended Items. In this example, use **ID**, *In*, and the two Item codes separated by a comma. Check that the dialogue says two records will be exported.
4. Under the Item fields, retain **Item Code**. This identifies the parent Item in this template.
5. Under **Reorder level based on Warehouse (Item Reorder)**, select all six fields: **ID**, **Request for**, **Check Availability in Warehouse**, **Material Request Type**, **Re-order Level**, and **Re-order Qty**.
6. Leave unrelated child tables out of this export. Select **Export** and keep an untouched copy of the downloaded file.

 ![Filtered export limited to two Items, with Item Code selected](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC83Nzg1MjViYi0xZmEzLTQzODUtYmYzNi05YTJmMTlkN2VkZDMvMDUtZmlsdGVyZWQtaXRlbS1leHBvcnQuanBnIiwidHlwZSI6ImF0dGFjaG1lbnQiLCJpYXQiOjE3OTI2MjA5MDAsImV4cCI6MTc5MjcwNzMwMH0.oRgwtAErvFKmq5s8P3BCFOnOh_USJMUFokfFibRsf_k)

 ![All six fields selected for the warehouse reorder table](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC8xYzlkOWYzMi1jNzcyLTQyMmQtYmFmYy1mNTEyNGRhZDdkMjUvMDYtcmVvcmRlci1leHBvcnQtZmllbGRzLmpwZyIsInR5cGUiOiJhdHRhY2htZW50IiwiaWF0IjoxNzkyNjIwOTAwLCJleHAiOjE3OTI3MDczMDB9.-tFeZg3JuxyGXQxvvnzdxrmyhouePp60w34OlJtuoeE)

### 3. Change the values while retaining the row identities

Keep the downloaded headings exactly as they are. The warehouse-rule headings include the suffix *(Reorder level based on Warehouse)*. For example, the child identifier column is **ID (Reorder level based on Warehouse)**.

The identifier columns follow this layout. All other selected columns remain in the same file. Export order can differ; keep each Item's rows together.

| Item Code | ID (Reorder level based on Warehouse) | Request for (Reorder level based on Warehouse) |
|-----------|---------------------------------------|------------------------------------------------|
| PACKING-TAPE | otvgk6c3rv                            | Auckland - NW                                  |
|           | otvkdg1kl4                            | Wellington - NW                                |
| PACKING-CARTON | otr570mqga                            | Auckland - NW                                  |
|           | otrmjl391m                            | Wellington - NW                                |

Use your own exported codes and IDs. The IDs above belong only to this example.

Change only the Auckland **Re-order Level** and **Re-order Qty** cells to the values in the first table. Retain both Wellington rows, their values, and every existing child-row ID. Leave **Item Code** blank on the continuation row for the same Item. Do not fill it down or sort individual spreadsheet columns separately.

Omitting an existing warehouse rule from an included child table can remove it from the Item. Removing a child-row ID can make that line a new rule. Neither action is needed for this update.

### 4. Preview and run the sample


1. Attach the edited file to the saved update import.
2. In **Preview**, check that all seven columns are recognised. Use **Map Columns** to inspect full headings when the preview shortens them.
3. Check the four detail rows: two Item groups, with one parent **Item Code** followed by its continuation row.
4. Compare the Auckland values with the planned changes and the Wellington values with the original export.
5. Resolve any **Import File Errors and Warnings**, then select **Start Import**.

 ![Recognised reorder columns and four detail rows in the import preview](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC9mYmU4ZDM2MC1iNzA3LTQxZGMtOWE5ZC04YzUyMjY1Mjk2MzgvMDctcmVvcmRlci1pbXBvcnQtcHJldmlldy5qcGciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MjYyMDkwMCwiZXhwIjoxNzkyNzA3MzAwfQ.06XUwakz6deyEoGG4SCeKFCPQ04q6reniSRI3eAt9rA)

The expected result is two successfully updated records, because the file contains two parent Items. Four warehouse rows do not mean four updated Items.

 ![Import Log showing two successfully updated Items and their grouped spreadsheet rows](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC81MDMwNDRkOC03M2E2LTQyODktODc5Yy05YTkyZmIzMWVjYWQvMDgtcmVvcmRlci1pbXBvcnQtbG9nLmpwZyIsInR5cGUiOiJhdHRhY2htZW50IiwiaWF0IjoxNzkyNjIwOTAwLCJleHAiOjE3OTI3MDczMDB9.2f88xIHWUk9aoMwstiT7j41FimDUC-g390YWQStX4Ts)

### 5. Verify both the changes and the retained rules

Open each Item from **Import Log** and refresh it. Under **Inventory** > **Auto re-order**, confirm that:

* The Auckland thresholds match the planned new values.
* Both Wellington thresholds remain unchanged.
* Both warehouse rows remain, with no missing or duplicate rules.
* **Request for**, **Check Availability in Warehouse**, and **Material Request Type** still match the original export.

 ![Packing Carton after import, with Auckland changed to 30 and 60 and Wellington retained at 15 and 30](https://docs.nexwaveapp.com/api/files.get?sig=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ1cGxvYWRzL2YxMTg5ZTEzLTdlMTQtNDA1ZC04MDI1LWMxZmI0Y2Y2MTg0ZC9mZGEzODkyOS1jZDY3LTQwZGItYmFjOS1hMWU5NzYwZDhmYWIvMDktcmVvcmRlci1hZnRlci5qcGciLCJ0eXBlIjoiYXR0YWNobWVudCIsImlhdCI6MTc5MjYyMDkwMCwiZXhwIjoxNzkyNzA3MzAwfQ.ujt6rjCRAO1-_4wG9q_gyEtKHOW0sX49rW7X2eDjGak)

Only continue with the remaining Items after these checks pass. Use a fresh filtered export that excludes Items already updated in the sample.

If a record fails, use the earlier **Correct failures and retry safely** steps. When exporting failed rows, keep the complete failed Item group, including its unchanged warehouse rules and child-row IDs. Do not include successful Item groups in a new correction import.

Changing Item rules affects future automatic reorder checks when automatic requests are enabled. It does not switch that setting on or cancel existing Material Requests. See [Configure Reorder Levels and Automatic Material Requests](/doc/4394a240-eb47-4222-b3dc-38fc7688a165) for the setup and follow-up checks.

## Troubleshooting

| Issue | What to check |
|-------|---------------|
| A linked value cannot be found | Create the required master record first, or correct the spelling so it matches NexWave exactly. |
| A column is red or skipped in Preview | Use **Map Columns**, restore the downloaded heading, or set an unwanted column to **Don't Import**. |
| The import succeeds but a field is empty | Confirm the column was recognised and not skipped, then check whether the value passed the selected field's validation. |
| An update says the record cannot be found | Use an exported update template and restore the correct parent identifier, such as **ID** or **Item Code**. |
| Child rows are duplicated | Check whether existing child-row IDs were removed or new child rows were included twice. |
| Existing child rows disappeared after an update | Restore from the prior export if appropriate, then repeat the update with every child row that must remain. |
| A row reports **No changes to update** | The row contains no value different from the current record. Remove it from the update file. |
| Dates are rejected or interpreted incorrectly | Check the raw value and use a consistent date format throughout the file. |
| Amounts or totals differ from the spreadsheet | Check currency, exchange rate, quantities, rates, taxes and normal NexWave calculations. |
| A submitted record cannot be updated | Use a field allowed after submission, or follow the normal cancellation and amendment process. |
| The import partially succeeds | Do not repeat the complete original insert file. Correct and re-import only failed rows, or fix the prerequisite and use **Retry**. |

## Related documentation

* [Configure Reorder Levels and Automatic Material Requests](/doc/4394a240-eb47-4222-b3dc-38fc7688a165): choose warehouse rules and review the resulting requests.
* [Import Bank Statement](/doc/3e567099-e3b8-40e3-a207-81e8e0e501a4): use the dedicated importer for CSV and Excel bank statements.
* [Working with list views and reports](/doc/99433972-107c-4fbf-9876-cd3d0b8486c1): filter source records and verify imported results.
* [User Permissions and Record-Level Access](/doc/fb86047e-b868-4ff5-8951-349d966e3808): understand why users may only see or import selected records.