# ERPNext import templates

Seven Excel files for ERPNext's Data Import tool: **Item, Item Price, Customer, Supplier, Address, Contact and BOM.** Each has the right headers, a filled example and a guide to every column. Free. No sign-up.

**Checked on 14 October 2026** against ERPNext v15.122.0 and v16.50.0, Frappe v15.122.0 and v16.50.0, and India Compliance v15.32.1 and v16.10.1. Every column exists in both versions, and every header matches the field it names in both.

> We checked the files against the ERPNext source. We have not yet imported them into a running site. If a row fails for you, tell us at https://mith.tech/contact and we will fix the file.

## Which file, and in what order

| Import it | File | What it loads | Needs first |
|---|---|---|---|
| 1 | `erpnext-item-import-template.xlsx` | Items, with their defaults and barcodes | Company, UOM, Item Group, and Brand or Price List if you use them |
| 2 | `erpnext-item-price-import-template.xlsx` | One price for one item in one price list | The items |
| 3 | `erpnext-customer-import-template.xlsx` | Customers | Customer Group, Territory |
| 4 | `erpnext-supplier-import-template.xlsx` | Suppliers | Supplier Group |
| 5 | `erpnext-address-import-template.xlsx` | Billing and shipping addresses | The customers and suppliers they belong to |
| 6 | `erpnext-contact-import-template.xlsx` | People, with emails and phone numbers | The customers and suppliers they belong to |
| 7 | `erpnext-bom-import-template.xlsx` | Bills of materials | The items. Sub-assembly BOMs before the BOMs that use them |

Item Price can wait until you have more than one price list. Address and Contact can come first or last, as long as the party exists.

**Create these before the first import.** A new ERPNext site already has the common ones.
- **Company.** Creating it also creates its warehouses (Stores, Work In Progress, Finished Goods, Goods In Transit), named like `Stores - ABC`, where ABC is the company abbreviation.
- **UOM.** A new site has Nos, Kg, Meter, Litre, Box, Unit, Pair, Set, Gram, Hour and more.
- **Item Group.** New site: Products, Raw Material, Services, Sub Assemblies, Consumable. An item needs a group that has no sub-groups.
- **Customer Group** (new site: Individual, Commercial, Non Profit, Government) and **Territory** (your country, and Rest Of The World).
- **Supplier Group** (new site: Services, Local, Raw Material, Electrical, Hardware, Pharmaceutical, Distributor).
- **Price List** (new site: Standard Selling, Standard Buying), **Brand**, **Payment Terms Template** and **Tax Withholding Category** only if you fill those columns.
- **GST HSN Code.** India Compliance loads the HSN and SAC list when it is installed.

## Use a file in seven steps

1. **Open the file on the `Import` sheet.** It has only the header row. `Example (do not upload)` shows filled rows. `Columns` explains each column. `Read me` is these notes. **Never upload `Example`.**
2. **Type or paste your rows under the headers.** One record per row. Keep the headers as they are. Delete a column you do not use; do not rename it.
3. **Keep codes as text.** Item codes, barcodes, HSN/SAC codes, GSTIN, PAN, postal codes and phone numbers are text columns, so a leading zero stays (HSN `0901` is not `901`).
4. **In ERPNext, open Data Import and click New.** Document Type: the DocType in the table above. Import Type: **Insert New Records.** Save. (v16 also offers Update Existing Records and Insert or Update Records.)
5. **Attach the file.** Data Import reads **only the sheet that was open when you saved**. Save the file with `Import` showing, or save that sheet as CSV (UTF-8).
6. **Read the warnings and fix the file.** On v15 they are under Import File Errors and Warnings. On v16 the Preview and Fix Issues steps list them, and let you map a wrong value to a right one or skip a row. Nothing is written until they are clear.
7. **Start the import.** For **BOM, tick Submit After Import**; otherwise the BOMs stay drafts. Leave Don't Send Emails on. Read the Import Log. Failed rows can be downloaded, fixed and imported again.

Start with five rows on a test site. Then import large files in batches.

## One record on several lines

A record can have several rows in a child table: two barcodes on an item, two emails for a contact, ten components in a BOM. Put the record's own values on its **first line**, and the extra rows on the lines **below it with every record column left empty**. Frappe reads an empty line as "more of the record above".

```
Item Code        Item Name           …  Barcode (Barcodes)
SAMPLE-FG-TABLE  Sample Dining Table …  SAMPLE-0001
                                        SAMPLE-0002        <- a second barcode for the same item
SAMPLE-RM-PLANK  Sample Teak Plank   …
```

The `Example (do not upload)` sheet of each file shows it.

## India Compliance columns

`GSTIN / UIN`, `GST Category`, `PAN` and `HSN/SAC` belong to the India Compliance app. If your site does not have it, those columns are skipped with a note and nothing fails.

If it has them, India Compliance checks every row. These are its rules, all found in its source for v15 and v16:
- **GSTIN** has 15 characters and a valid check digit. A GSTIN means the category is not Unregistered. No GSTIN means Unregistered or Overseas.
- **GST Category** is worked out from the GSTIN. Say it yourself for Registered Composition, SEZ and Deemed Export, which a GSTIN alone does not show. A blank category is Unregistered.
- **PAN** comes from the GSTIN when there is one.
- **Address:** an Indian address needs a state, spelled as India Compliance spells it (Karnataka, Tamil Nadu, Delhi …). The first two digits of the GSTIN must be that state's number (Karnataka is 29). The postal code is six digits, not starting with 0, and its first three digits must fit the state. An address outside India must be Overseas.
- **Item:** while *Validate HSN/SAC Code in Sales Items and Transactions* is on (it is on by default), a sales item needs an HSN/SAC code. At the default *Minimum HSN/SAC Code Digits* of 6, that means 6 or 8 digits, and the code must be in the GST HSN Code list.

Put the GSTIN on the **Address** as well as on the party. Invoices read it from the address.

## Common errors, and what to do

| What you see | Why | Fix |
|---|---|---|
| "Cannot match column X with any field" (v15) · "X does not match any field. Map it in the Preview step, otherwise it will be ignored." (v16) | A header was renamed, or the app that owns the column is not installed (India Compliance) | Put the header back. Delete the column if the app is missing. Or map it on the Preview step |
| "Value X missing for Item Group" (v15) · "X is not a valid Item Group — row 2" (v16) | The group does not exist, or is spelled differently (capitals, spaces, `Stores` instead of `Stores - ABC`) | Create it first. On v16 you can map the wrong value to the right one |
| "Value must be one of …" (v15) · "X is not valid — row 2. Allowed: …" (v16) | A list column holds something outside the list: Customer Type, GST Category, Address Type | Use a value from the `Columns` sheet |
| "Row has less values than columns" (v15) · "This row has fewer cells than the header" (v16) | A CSV row lost commas | Use the XLSX, or keep every comma |
| "Error: Value missing for Item: Item Group" | A required column is empty | Fill it. The `Columns` sheet says which are required |
| "Import template should contain a Header and atleast one row." | You uploaded the Import sheet with nothing under the header | Add rows first |
| Errors that name "Your Company Pvt Ltd" or a row of SAMPLE items | The `Example (do not upload)` sheet was uploaded | Save the file with `Import` open |
| "GSTIN … must have 15 characters" · "Invalid GSTIN! The check digit validation has failed" | A typo, or a shortened number | Copy the GSTIN from the GST certificate |
| "GST Category should be one of Unregistered or Overseas" (the two may come in either order) | A row has no GSTIN but another category | Add the GSTIN or set Unregistered |
| "GST Category cannot be Unregistered for party with GSTIN" | A GSTIN is given, and the category is Unregistered | Blank the category, or set the right one |
| "State is a required field for Indian Address" · "Please select a valid State from available options" | The state is empty, or not in India Compliance's list | Use its spelling |
| "First 2 digits of GSTIN should match with State Number for Karnataka (29)" | The address state and the GSTIN disagree | Fix whichever is wrong |
| "Postal Code … must be a 6-digit number and cannot start with 0" | A space, a letter, or a number stored with a decimal | Type it as plain text, 6 digits |
| "HSN/SAC Code should be 6 or 8 digits long." · "HSN/SAC Code is required." | A sales item with a short or empty code | Give 6 or 8 digits. Do not switch the check off to get past it |
| "UOM X not found in Item Y" (Item Price) | The price is in a UOM the item does not have | Use the item's UOM or add a UOM conversion to the item |
| "Disabled Item X cannot be used in BOMs." · "Quantity required for Item X in row N" · "Raw Materials cannot be blank." | A disabled item, a quantity of zero, or a BOM with no components | Fix the item or the row |
| A BOM component has quantity 1 and you left it blank | ERPNext fills 1 and does not warn | Always fill `items.qty` |
| A customer or item is rejected as already existing | The name or code is taken. Importing never adds " - 1" to a customer name | Use Update Existing Records (v16: Insert or Update Records) |

## What these files leave out, and why

- **Opening stock.** The Item's Opening Stock field posts a Stock Entry on v15 and a Stock Reconciliation on v16 (where the field is hidden). Load opening quantities with a Stock Reconciliation instead. See our guide to ERPNext data migration: https://mith.tech/blog/erpnext-data-migration-guide
- **Opening balances and open invoices.** Journal Entry and the Opening Invoice Creation Tool, as in the same guide.
- **UOM conversions.** Add `uoms.uom` and `uoms.conversion_factor` as extra columns if you need them: the headers work in both versions.
- **Item Tax rows.** India Compliance fills them from the HSN/SAC code.
- **Per-company accounts and credit limits** on a customer or supplier, and **BOM operations and routing.** Different shapes; add them later.
- **v16 shortcut.** On v16, the Customer and Supplier import can also create the contact and the address in the same file. Add headers such as `First Name (Contact)`, `Email Address (Contact)`, `Mobile No (Contact)`, `Address Line 1 (Address)`, `City/Town (Address)`. The separate Address and Contact files in this bundle work on v15 and v16 alike. *(Per the v16 source; not yet tried on a live site.)*

## Your version

ERPNext v15 and v16, with or without India Compliance. Not tested for v14 or older: the Data Import tool is different there. To see your version: Help, then About.

## Keeping it right

The columns come from ERPNext's own DocType files. We re-check them against the newest v15 and v16 releases, and this README names the versions it was checked against. The numbers in `manifest.json` are the file sizes and SHA-256 checksums of every file in the bundle.

Free to use. Made by MithTech. More: https://mith.tech/blog/erpnext-data-migration-guide
