# Import a CSV file

> Bring accounts, contacts, deals or any other records in from a spreadsheet: map the columns, see what was matched, and undo an import that went wrong.

Every kind of record can be imported from a file, on every plan, by anyone in the workspace. If you’re bringing in both accounts and contacts, import the accounts first, so a contact file’s company column finds them with their websites.

## Start an import

Open the list you’re importing into, such as Accounts, Contacts or Opportunities, and choose **Import / Export** → **Import from CSV**. Choose a .csv, .tsv or .txt file whose first row holds the column headings, separated by commas, semicolons or tabs, and saved as UTF-8 or UTF-16.

A file of up to 50,000 rows goes in at once. Of a longer one, the first 50,000 rows are imported and the screen says so: import the rest as a second file. The whole file is checked against your plan’s record limit before anything is written, so one that would go over it imports nothing. A file of 10,000 rows or more takes a minute or two; keep the page open, and the bell says when it’s done.

## Map the columns

A column whose heading is a field’s name is mapped to that field already, so anything exported from Migaru goes back in without touching the mapping. For the others, a field is suggested from the heading and the first few cells, marked **Suggested**: check those before importing. Set a column to **Ignore** to leave it out.

Every row needs a name. **Import** stays off until a column is mapped to Name, and a row with no name is skipped and counted rather than imported as “Untitled”. The owner can’t be mapped from a file, because a name in a cell can’t be matched to a member without guessing: what you import is yours, and you can reassign it after.

Three columns aren’t fields, and do more than fill one:

- **Company**, on a contact file, links each contact to that company’s account, found by the website of their work address or by the company’s name, and makes the account where there isn’t one.
- **Amount**, on a deal file, is what each deal is worth: it becomes a twelve-month contract at a twelfth of it a month, unless the row gives a monthly fee of its own. A column headed Total contract value is read the same way.
- **ID**, on a deal file and every kind but accounts and contacts, is what the file calls each record: its id in an export from Migaru, or the ID the CRM it came from gave it, such as HubSpot’s Record ID, Pipedrive’s Deal - ID or Salesforce’s Opportunity ID. Headings like those map to it by themselves.

## Numbers, dates and options

Numbers are read the way the file writes them. Where they could be read either way, choose **1,234.56** or **1.234,56** under **Numbers**; where the file writes them both ways, the import waits until you choose. Amounts like $50k, 1.2M and (1,200) are understood. Text that isn’t one number, like “150 employees” or “Q3”, is left empty rather than guessed at.

Dates written with dots, like 25.04.2026, are read day first. With slashes or dashes they are read day first when some date in the file could only be read that way, or when the file writes its decimals with a comma, and month first otherwise. A day that doesn’t exist, like 31/02, is left empty.

A cell for a single-choice field has to match one of its options as the option is written there; one that doesn’t is left empty. After the import, the screen lists each column that had cells it couldn’t read, with examples, so you can fill them in on the records, or undo the import, correct the file and import it again.

## Records that are already here

Importing doesn’t make a second copy of a record that’s already in Migaru:

- **An account** is the one with the same website, or, where no websites disagree, the one account with the same name.
- **A contact** is the one with the same email address, however it is capitalised.
- **A deal, or any other record,** is the one the row’s ID is: its own id, from an export of Migaru, or the record an earlier import made from a row with that ID. A deal merged since is the one it was merged into. Without an ID column, every row is a new record.

A row for a record that’s already here fills in that record’s empty fields, and leaves everything it already has, its name included. A deal with no price takes the price its amount comes to. A row further down the file that is the same record as one above it is folded into it.

## Where new contacts came from

On a contact file, the **Source** box starts as the file’s name. It is given to each new contact whose own Source cell is empty, and to the accounts made for their companies; contacts already here keep their own. Empty the box to give none.

## Undo an import

Every import is listed under **Settings → Import history**, with how many of its records are still here and how many changes it made to records that were here before it. **Undo** moves the records it made, and any accounts it made for their companies, to Deleted items, empties the fields it filled on records that were here before, and takes away the company links it added to them. A field somebody has changed since keeps their change.

The bell tells you when an import is done, and what it made, matched and skipped.

## More in this section

- [Move from another CRM](https://www.migaru.ai/help/move-from-another-crm.md)
- [Find and merge duplicates](https://www.migaru.ai/help/find-and-merge-duplicates.md)

Can’t find what you need? Write to support@migaru.ai and a person will answer. [Every help article](https://www.migaru.ai/help.md).

---

Canonical page: https://www.migaru.ai/help/import-a-csv-file
Last updated: 2026-10-29
