How Do You Import Contacts Into Odoo CRM?
Quick answer
Open the Contacts list, click the Action icon and choose Import records, then upload an .xlsx or .csv file, map each file column to an Odoo field, click Test and then Import. Add an External ID column so a re-import updates records instead of duplicating them, and import companies before the people who belong to them.
Key takeaways
- Odoo imports .xlsx and .csv files into any business object. In the Contacts list, click the Action icon, choose Import records, upload the file, map the columns, click Test and then Import.
- Imports cannot be undone. Odoo suggests using the created on or last modified filters afterwards to find the affected records, so run Test first and try a small file.
- An External ID column is the key to safe repeat imports: with it, existing records are updated instead of duplicated. Two records with the same External ID cause a conflict, and changing one can create a duplicate.
- Import related records first, such as companies before the people linked to them. Match relations by name, or append / ID to the column title when names repeat.
- Common errors come from dates (use YYYY-MM-DD), numbers with currency symbols outside parentheses, tab-separated files and oversized files, which should be split into smaller batches.
To import contacts into Odoo CRM, open the Contacts list, click the Action icon and choose Import records. Upload an .xlsx or .csv file, check that each file column maps to the right Odoo field, click Test, then click Import. Add an External ID column so a repeat import updates records instead of duplicating them. The steps and rules here come from Odoo’s “Export and import data” documentation, checked on October 22, 2026.
What are the steps to import contacts into Odoo?
Odoo accepts Excel (.xlsx) and CSV (.csv) files for any business object, and contacts follow the same route as everything else.
- Open the list view of the object, here Contacts, click the Action icon and select Import records.
- Optionally click Import Template for Customers to download a preconfigured file.
- Click Upload Data File and choose your file.
- For CSV files only, adjust the Formatting options (separator, encoding, date format). They do not appear for .xls or .xlsx files.
- Check the mapping. Odoo guesses each column’s field type from the first ten lines, so a column may need to be matched by hand.
- Click Test to validate the data. Test again after any reload or change of mapping.
- Click Import.
The documentation is direct about one point: imports cannot be undone. You can filter on “created on” or “last modified” to find affected records afterwards, which is a clean-up, not a reversal. So test first, and try a sample of ten rows before the full file.
How do you stop Odoo creating duplicate contacts?
Use the External ID column. It is the unique identifier Odoo uses to recognise a record from your file, and it controls whether a row creates or updates.
| What the file contains | What Odoo does |
|---|---|
| No External ID or Database ID column | Creates a new record for every row |
| An External ID or Database ID column | Updates existing records that match, creates the rest |
| Two rows with the same External ID | Conflict |
| An External ID that was changed or removed | Can create a duplicate instead of an update |
Source: Odoo Documentation, “Export and import data”, checked Oct 22, 2026.
Odoo advises giving every record a unique External ID, prefixed with the name of the source table, for example company_1 and person_1. For the update route, export your existing contacts with I want to update data (import-compatible export) ticked. It adds the External ID automatically and limits the columns to importable fields. Edit the file, then import it as usual. Our own CRM data cleaning guide covers de-duplicating a spreadsheet before it ever reaches an import screen.
How do you link contacts to companies in an Odoo import?
Import the related records first, then the ones that point to them. Odoo’s example is exactly this case: companies before the people who belong to them.
The documentation gives three ways to reference a related record:
| Method | Example | When to use |
|---|---|---|
| Name or code | Belgium |
Hand-made files, names are unique |
| Database ID | 21 |
Rarely, because it never conflicts |
| External ID | base.be |
Data coming from another application |
Use only one method per field. If two related records share a name, validation halts, and Odoo recommends either fixing the duplicates or using External IDs. To reference by ID when names repeat, append / ID to the column title, as in the documentation’s example Product Attributes / Attribute / ID. For many2many fields such as tags, separate the values with a comma and no spaces, for example Manufacturer,Retailer.
Which Odoo import errors are most common, and what fixes them?
Most failures trace back to formats. These come from the troubleshooting parts of the documentation.
| Symptom | Cause | Fix |
|---|---|---|
| Dates imported wrongly or rejected | Ambiguous format such as 01-03-2016 | Use ISO 8601 (YYYY-MM-DD) or real Excel date cells |
| Number fails to import | Currency symbol outside the parentheses, or a format like ABC 32.000,00 |
Parentheses mean negative, and the symbol must sit inside them. Use plain numbers |
| Columns not split | Tab-separated file, which Odoo does not detect | Change the separator to a comma in LibreOffice or OpenOffice |
| Wrong field type offered | Odoo guessed from the first ten lines | Enable Show fields of relation fields (advanced) and map by hand |
| Blank cells overwrite a default | Blank CSV cells are set to empty, not to the field default | Fill the column or delete it from the file |
| Time-out on a large file | File too large for one import | Split into smaller files and import in batches |
Source: Odoo Documentation, “Export and import data”, checked Oct 22, 2026.
The documentation describes batch size and delay settings in the advanced options but gives no numbers for them, so test with a few thousand rows to find what your database tolerates. For a pre-upload check on a CSV, our CRM import file checker can flag bad dates and blank headers, and the CRM import limits comparison shows how other platforms treat file size.
Does the free Odoo plan limit imports?
Odoo’s documentation gives no import record cap, and its pricing page lists no import limit for the One App Free plan. The plan limit that matters is the app count: CRM on One App Free is the one app, and apps it depends on come free with it. For the full plan picture, see is Odoo CRM really free. If you want to compare with another tool’s import flow, how to import contacts into Pipedrive and how to fix HubSpot import errors cover the same job in those CRMs.
When to get help
A single clean file is quick. Help pays off when you are moving contacts from another CRM into Odoo, or out of Odoo into something else: companies, people, activities and custom fields that all have to keep their relationships. Odoo is quoted per project and aibrevo does not implement it. Migrating Odoo data into Salesforce, HubSpot, Dynamics 365, Zoho CRM, Pipedrive, monday.com, Airtable or GoHighLevel is a common request. Book a short call or send a message, and see the Zoho CRM service page for one common destination.
Sources
- Odoo Documentation, Export and import data, checked Oct 22, 2026.
- Odoo Documentation, CRM, checked Oct 22, 2026. The CRM section has no separate import page.
- Odoo, Pricing, checked Oct 22, 2026.