Data import
Copy for AI
Use Data import to load accounts, contacts and products from an .xlsx or .csv file. You map the columns, preview every row and import in chunks, and you can undo a finished import. It is the quickest way to move your customer list and price list out of spreadsheets; see Accounts and contacts for how the records fit together.
Where to find it
Section titled “Where to find it”Open System settings and select Data import in the Data group, which shows only with Import data. Import history is on the same page.
Before you start
Section titled “Before you start”- You need Import data, plus Add and Edit on the kind of record, and Delete to undo. Administrator has Import data; for a custom role, switch it on under Role administration in Roles and permissions.
- To update existing records instead of creating them, you need Edit on that kind of record, not Add; undoing such an import needs Edit too.
- The file is .xlsx or .csv, up to 5,000 rows and 5 MiB. The first row that is not blank is the header, and blank rows are skipped. An .xlsx file is read from its first sheet only.
How it works
Section titled “How it works”- Upload & map. Your browser reads the file and sends only its rows. Fix unmatched columns with Import as; Template (.xlsx) downloads a blank file.
- Preview. Each row is checked by the record’s own form rules. Nothing is saved yet.
- Import. Records are created as you, 200 rows at a time. Keep the page open.
- Select System settings, then Data import in the Data group.
- Choose a card, such as Accounts, then select Continue with Accounts.
- Drop your file on the page, or click to choose it.
- For each column, choose a field in Import as, or Skip this column; each Required field needs a column.
- Under Rows that match an existing record, keep Create new records only (a match is a duplicate), or choose to update the records your rows match; see Update existing records below.
- Select Preview import.
- Read the cards and the To create, Duplicates and Needs attention tabs. Error file (.csv) downloads the failed rows.
- Select the import button, such as Import 34 rows, and keep the page open until Import finished appears.
Duplicates and errors
Section titled “Duplicates and errors”A row is a duplicate when it matches an existing record or an earlier row of the same file, ignoring capitals:
- Accounts: the same Billing country and the same Name or Registration no. A blank country matches only a blank one.
- Contacts: the same Name under the same account.
- Products: the same Name, not the code.
Duplicates are skipped and listed by row number in your file; nothing about the existing record is shown.
A row with an error is not imported; the others still are. Error file (.csv) holds those rows with Field and Reason columns: correct it and upload it again.
A row with a warning is still imported. A contact’s email that does not look like an email address is left out, and the row shows Warning under To create and Needs attention.
A product needs a Category that exists in the Product catalogue. A missing or unknown category is an error: an import never creates categories.
A product’s Sales tax code column is optional and sets its Default sales tax. Write one of your company’s sales tax choices of today: its name as the product form lists it, such as GST 9%, or its code, such as SR. One that is not a choice, or that matches more than one, is an error. A blank cell sets none.
Update existing records
Section titled “Update existing records”Under Rows that match an existing record, choose what a row that matches does:
- Create new records only (a match is a duplicate): the default. A matching row is skipped as a duplicate.
- Update the records they match, create the rest: a matching row updates that record, and the other rows are created.
- Update the records they match only: a matching row updates that record, and a row that matches none is Skipped.
A row matches by the same rules as a duplicate, among all of the company’s records. A row that matches two records, such as one account by name and another by registration number, is an error.
An update writes only the cells that have a value: a blank cell leaves that field as it is. A difference in capitals alone in a name, a country or a registration number is not a change. The preview lists each row under To update with the fields it changes, such as Changes: Phone, Website; it never shows the old or the new values. A row whose values the record already holds is Skipped.
- Permissions. Updating needs Edit on that kind of record. With Own records only on Edit, you update only your own records, and a row that matches someone else’s record shows as a duplicate. If your role may not edit a field, such as Phone, a row that would change it is an error.
- Owner. An import never changes a record’s owner. Leave Owner blank or name the current owner; any other name is an error.
- Changed since the preview. If someone edits a record after your preview, its row is an error when you import and the record is left as it is. Upload the file again to preview it.
- Plan limits. With Update the records they match, create the rest, your plan’s limit stops only the new records; the updates still go ahead.
- Products and custom fields. A row that updates may leave Category or a required custom field blank; a row that would be created still needs them.
- Personal accounts. A row that matches a personal account, or its contact, is an error. Change those on their own pages.
Undo an import
Section titled “Undo an import”Select Undo this import on the result, or Undo beside the import in Import history, and confirm with Undo import. Undo deletes the records the import created that are unchanged and unused. It keeps any that were edited, are used by other records (such as an activity or a document line) or were deleted since. If your role may not delete some of the records, the message says how many; they stay in the import for someone who may delete them.
Undo also gives the records an import updated their previous values back, for the fields it changed, and needs Edit for them. A record edited after the import updated it keeps its later values and is listed as kept.
Import history lists every import in the company with its status. Undone means every record was removed and Partly undone that some were kept. Expired means the import was not finished within 24 hours of its preview: it shows as soon as the 24 hours pass, and the rows still waiting are Not imported. Undo has no time limit.
Rules to know
Section titled “Rules to know”- Owners. A blank Owner goes to you. An Owner column takes an active user’s login, email or name; with Own records only on Add, only you. Other names are errors.
- Contacts. Account name links a contact to an existing business account you can see; if two share a name, add Account country, or the row is an error. Import accounts first.
- Cell values. Is customer and Is supplier take yes or no (also y/n, true/false, 1/0). Salutation takes Mr., Ms., Mrs., Dr. or Mdm. Item type takes goods or service.
- Chunks and stopping. Each chunk of 200 rows is saved as a unit; a chunk that fails creates none of its rows. Stop after this chunk ends the import once the chunk in progress is saved, and a button such as Continue with 120 rows resumes it. Records already created stay, also if you leave the page.
- Continue later. An import you stopped or left shows In progress in Import history. While it still has rows ready, and within 24 hours of its preview, the person who ran it sees Continue there to import the rest.
- Plan limits. At your plan’s limit for that kind of record, Import stopped at your plan limit appears, and Import history shows Stopped at limit. Earlier rows stay; the rest are Not imported.
- Custom fields. Your account and contact custom fields are listed under Additional information in Import as, and each value is checked as the form checks it. A Dropdown cell takes an option’s code or label. A required custom field must be mapped before you can preview, and a row that leaves it blank is an error. A Record link cell names the record: an account by its name; a quotation, invoice or credit note by its number; a contact by email or name; a user by login, email or name. Only records you can see are matched, and a cell that matches none, or more than one, is an error. If your role cannot see that kind of record, a required Record link field makes every row an error.
- Existing records. By default an import only creates records, and a row that matches an existing record is skipped as a duplicate. To change existing records, see Update existing records above.
Why it works this way
Section titled “Why it works this way”You see every row before anything is saved. A spreadsheet that has grown over years holds typos, repeats and people who have left. The preview checks each row by the same rules as the form, so you fix problems in the file, where it is quick, rather than in hundreds of records afterwards.
Duplicates are skipped, and the existing record stays private. Importing the same client twice would split their quotations and invoices across two accounts. Skipping the row keeps one record per client. The preview shows only the row number, because the match may be a record your role cannot open.
Undo removes only what nobody has built on. By the time you notice a wrong import, a colleague may have edited a record or put a product on a quotation. Undo keeps those, so it never deletes someone else’s work or leaves a document pointing at a missing record.
Records are created in your name, in chunks. Each record is created as if you had entered it, under your own permissions, and Import history shows who ran each import, so your team can trace where data came from. Saving 200 rows as a unit means a failure never leaves half a chunk behind.
Work faster
Section titled “Work faster”- Start from the template, or keep your own headers. Template (.xlsx) has a column for every field. Your own headers match too: common names such as “Company”, “UEN”, “Tel”, “Handphone” and “Postcode” are matched automatically, in English and in the app’s other languages.
- Fix only the failed rows. Error file (.csv) holds just the rows with errors and the reason for each. Correct them and upload that file as a new import; its Row, Field and Reason columns are skipped.
- Use the Needs attention tab. It lists every error and warning in one place, so you can decide whether to fix the file first or import the valid rows now.
- Import in the right order. Accounts first, then contacts, which link to accounts by name. Add any missing product categories under Product catalogue before importing products. See Categories and manufacturers.
- Start from the Dashboard. A new company’s administrator finds Import customers in Get started with easySales on the Dashboard.
Examples
Section titled “Examples”Importing a client list. Lim & Co, a five-person interior design firm, keeps its clients in clients-2026.xlsx: 40 rows under a header of Name, Registration no., Billing country and Owner. Mei Tan opens Data import, chooses Accounts and drops the file on the page. All four columns match automatically, so she selects Preview import.
The cards read To create 34, Skipped duplicates 4, Errors 2 and Total rows 40. Rows 8 and 15 have the name and country of accounts the company already has. Row 36 has the registration number and country of an existing account under a slightly different name, and row 27 repeats row 9 of the file.
The two errors are row 19, which has no name, and row 33, which names Priya Nair as owner, who is no longer an active user. Mei selects Import 34 rows, and the rows fit in one chunk. The result reads 34 accounts created, 4 duplicates skipped, 2 rows with errors, with the duplicates listed as 8, 15, 27, 36.
She downloads Error file (.csv), named clients-2026-errors.csv, and adds the missing name and a current owner. She uploads it as a new import, and its Row, Field and Reason columns match no field and are skipped. The preview shows To create 2.
Undoing a wrong price list. Sarah Koh imports supplier-prices.csv as Products: 30 rows with Name, Category and List price. The preview shows To create 24, Skipped duplicates 3 and Errors 3.
Three product names already exist, and three rows name a Category that is not in the Product catalogue. Sarah selects Import 24 rows, then realises the file is last year’s list.
Meanwhile Wei Jie Tan has changed the list price of one of the new products, and another has been added to a quotation. In Import history Sarah selects Undo on that import, then Undo import.
A message reads Undo finished: 22 records removed, 2 kept because they were changed or used since. The import now shows Partly undone, with 24 created · 3 duplicates · 3 errors · 2 kept.
Moving from spreadsheets. Lim & Co has kept its business in three spreadsheets and moves to easySales in one afternoon. Mei Tan prepares the files first:
- clients.xlsx, with the client list on the first sheet: 120 rows under Company, UEN, Country, Salesperson and Phone. Each salesperson is written as the person’s name in easySales, such as Daniel Lim.
- people.csv: 260 rows under Name, Company, Email and Handphone.
- prices.xlsx: 45 rows under Item, Category, Price and Selling. The categories are Lighting, Fabrics and Furniture; Furniture is not in the Product catalogue yet, so she adds it there first.
She imports Accounts first. All five columns match automatically: Company as Name, UEN as Registration no., Country as Billing country, Salesperson as Owner and Phone as Phone. The preview shows To create 118 and Skipped duplicates 2: Harbour Café appears on rows 14 and 87, and another client on rows 30 and 102. She selects Import 118 rows.
Next come Contacts. Company matches Account name and Handphone matches Mobile. The preview shows To create 257 and Errors 3: three rows spell the café “Harbor Cafe”, which matches no account. One row’s email, “jo@harbourcafe”, shows Warning: that contact will be created without an email. She selects Import 257 rows; the progress reads 200 of 257 created after the first chunk, and the second chunk finishes the import. She corrects the three names in the Error file (.csv) and imports it as a new file.
Last come Products. Item matches Name and Price matches List price; Selling matches nothing and is skipped. Mei imports the 45 rows, then opens a product and sees that its list price is what Lim & Co pays the supplier. Nothing has used the products yet, so in Import history she selects Undo and Undo import: Undo finished: 45 records removed, 0 kept because they were changed or used since. She uploads prices.xlsx again, sets Price to Cost and Selling to List price under Import as, and imports 45 rows.
Common questions
Section titled “Common questions”- How do I import customers from Excel? Open System settings → Data import, choose Accounts and drop your .xlsx or .csv file on the page. Check the column mapping, select Preview import, then the import button.
- Can I import contacts and their companies in one file? No. Import the companies as Accounts first, then the people as Contacts, with an Account name column naming each person’s company.
- Can I update existing records with an import? Yes. On the mapping step, under Rows that match an existing record, choose Update the records they match, create the rest or Update the records they match only. Only the cells that have a value are written, and an undo puts the previous values back.
- Can I import custom fields? Yes, for accounts and contacts. Map the column to the field under Additional information. For a Record link field, enter the linked record’s name or number.
- How do I undo an import? Select Undo beside it in Import history, then Undo import. Records that were changed or used since are kept.
- What happens if I close the page during an import? Records already created stay. The import shows In progress in Import history, and within 24 hours of the preview you can select Continue there to import the rest.
- Can I import quotations, invoices or payments? No. Data import loads accounts, contacts and products. To bring in open invoices, create them in easySales; see Create an invoice.
- Why was a row skipped as a duplicate? It matched an existing record, or an earlier row of the same file, by the rules under Duplicates and errors on this page, such as the same Name and Billing country for an account.