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

# Bulk Import: Load Records from a File

> Bulk-import records from a CSV or XLSX file by choosing a record type, mapping columns to accepted fields, validating rows, and importing the file.

Bulk Import loads many records from a CSV or XLSX file at once. Use it for onboarding historical data, migrating from another system, or making large changes without entering records one by one.

You do not need to start from a record-specific template. Upload your own file, then map your file's columns to the fields accepted for the record type you selected. The same flow creates records and updates matching records. For usage across many revenue contracts in one file, choose the **Multi-Contract Usage** record type and follow [Import Multi-Contract Usage](../../revenue-recognition/usage-and-tiered-pricing/import-multi-contract-usage).

## Prerequisites

Before starting an import, confirm the source file and related setup are ready. This helps you resolve mapping and validation issues before any records are imported.

* Know which record type you are importing, such as bank accounts, customers, vendors, items, or journal entries.
* Prepare a CSV or XLSX file with a header row and one record per row.
* Confirm your role includes permission to perform bulk imports.
* For chart-of-accounts-related imports, make sure your [chart of accounts](../../core-financials/general-ledger/chart-of-accounts) is configured first.
* Make sure referenced records already exist when your file depends on them, such as GL accounts, companies, currencies, classifications, or allowed custom field values.

## Step 1: Open bulk imports

From the main navigation, open **Workflows** and choose **Bulk Imports**. The Bulk Imports page shows prior imports and lets you start another file import.

## Step 2: Start an import and choose a record type

Choose **New Import**, then choose the record type you want to load. The record type determines which fields are available in the mapper, which fields are required, and how matching records are identified during import.

Examples of available fields include:

* Core fields for the selected record type, such as name, company, currency, GL account, or opening balance.
* Classifications that apply to that record type.
* Custom fields configured for that record type in your organization.

### Multi-line record types

Some record types, such as journal entries, are made up of a header plus two or more lines. For these, Bulk Import loads the full record, not just a header total.

For [journal entries](../../core-financials/general-ledger/journal-entries), the import creates full entries with individual debit and credit lines. The same balancing rule applies as in the UI: total debits must equal total credits before an entry can post. Download the journal entry template from **New Import → Journal entries → Prepare File for Import** to see the exact columns for header and per-line fields, and how the template groups multiple lines into one entry.

## Step 3: Upload a CSV or XLSX file

Upload your file in the import wizard. Bulk Import reads the file and prepares a preview before any records are imported.

For XLSX files, Bulk Import reads the first sheet by default. If the workbook has multiple sheets, choose the sheet you want to import. For CSV files, Bulk Import detects the encoding and the delimiter, including commas, semicolons, and tabs.

If your file does not use DualEntry's column names, choose **Download template** for the record type and paste your data under its headers. The template's columns map automatically and show which fields are required before you upload.

Files can be up to 256 MB, with a maximum of 1,000,000 rows and 2,048 columns.

## Step 4: Map your columns

Use the field mapper to connect each source column in your file to the matching destination field. The preview shows the parsed file on one side and the mapping controls on the other.

In the mapper, you can:

* Map source columns to accepted fields for the selected record type.
* Add optional fields that are available for that record type.
* Remove optional fields you do not need.
* Map classifications and custom fields.

Required fields cannot be removed. If your file uses different column names than the destination fields, map the columns manually before importing.

## Step 5: Review validation issues

Bulk Import validates rows while you map the file and again when you confirm the import. Rows with validation errors are not imported.

Issues can include:

| Issue                       | What it means                                                                            | How to fix it                                                       |
| --------------------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| Missing required value      | A required field, such as company or currency, is blank for a row.                       | Add the value in your source file or map the correct source column. |
| Invalid format              | A value does not match the expected type, such as a number, date, or currency code.      | Correct the value, then re-upload or remap the file.                |
| Referenced record not found | The row refers to a record that does not exist, such as a GL account or company.         | Create the referenced record, then import again.                    |
| Referenced record inactive  | The referenced record exists but is archived. This is a separate message from not found. | Reactivate the record, or point the row at an active one.           |
| Invalid custom field value  | The value does not match the custom field type or allowed list.                          | Update the value to one accepted by the custom field.               |
| Duplicate in the batch      | Two rows conflict with a uniqueness rule for the selected record type.                   | Deduplicate the source file, then import again.                     |

Validation messages include the source row number so you can find the affected row in your original file. Row numbers count from the header row, so the first data row is one higher.

For the full list of messages, with the cause and the fix for each, see [Bulk Import Errors](./bulk-import-errors).

## Step 6: Import the file

After the preview and mapping look correct, confirm the import. Bulk Import creates rows that do not already exist and updates matching records when the selected record type uses the same match key.

The match key is configured per record type, so the columns that identify a record differ from one type to the next. Where a record type has an identity column, such as the record's DualEntry ID, supplying it targets exactly one record and overrides the rest of the key. Leaving any match key column blank makes the row a create rather than an update.

If two existing records share the same key values, the row fails rather than guessing. See [Bulk Import Errors](./bulk-import-errors#matching-and-duplicate-errors).

## Result

After the import finishes, Bulk Import shows one of two results. If every row imports successfully, the success screen links to the imported records filtered to that import batch.

If some rows fail, successful rows are still committed and the error screen shows only failed rows. Each failed row includes the source row number, the affected field, and the reason. You can review the failures in the UI or download the report as CSV to fix your source file.

To work through those failures, see [How to Fix a Failed Bulk Import](./fix-a-failed-bulk-import). To look up a specific error message, see [Bulk Import Errors](./bulk-import-errors).

To connect external data sources for ongoing sync instead of one-time loads, see [Integrations](../index).
