Odoo exports any list view straight to XLSX — no module, no developer. Here is the exact process, including related fields and reusable templates, and what to do when the manual export stops scaling.
By Arpit — Founder & Owner, KSROlabs · · 9 min read
The short answer
Odoo has Excel export built in and it costs nothing. Open any list view, select the records, choose Export from the Actions menu, pick XLSX, choose your columns, and download. It works on every model in the system — sales orders, invoices, products, stock moves, contacts, leads — and it does not require a module or a developer.
The full walkthrough is below, including the two parts most people miss: pulling fields from linked records into the same sheet, and saving the column selection as a template so the next person does not rebuild it. After that, the honest part — where this approach runs out of road, and what teams move to when the weekly export becomes a job nobody wants.
Exporting to Excel — step by step
1. Open the list view of the records you want
Navigate to the records you need — Sales → Orders, Accounting → Invoices, Inventory → Products, or any other model — and switch to list view. Apply filters and group-by first so you export only the rows you actually want rather than trimming them in Excel afterwards.
2. Select the records
Tick the checkbox in the list header to select every record on the current page. Odoo then offers to select all records matching your current filter — use that if you want the full filtered set rather than just the visible page.
3. Choose Export from the Actions menu
With records selected, open the Actions menu (the gear icon next to the record count) and choose Export. This opens the export dialog. If you do not see the option, your user account does not have export rights — an administrator grants those in Settings under user access rights.
4. Pick XLSX and choose your fields
Select the XLSX format to get a native Excel file (CSV is the alternative). Choose fields from the available list and add them to the export column on the right. Expand a relational field to reach fields on the linked record — for example the customer’s country or salesperson on a sales order. Drag fields to set the column order.
5. Save the selection as a template
Before exporting, name the field selection and save it as an export template. The next time someone runs the same report they pick the template instead of rebuilding the column list, which is what makes a recurring manual export survive staff changes.
6. Export and open in Excel
Click Export. Odoo generates the XLSX file and your browser downloads it. If you tick "I want to update data (import-compatible export)" Odoo also includes the external ID column, so the same file can be edited and re-imported to update those records rather than creating duplicates.
Where the built-in export runs out
For a one-off extract it is the right tool and you should use it. The trouble starts when the same export happens every week, because then it is not an export any more — it is an unpaid recurring job with a single point of failure.
🔁
It is manual, every time
Nothing schedules a built-in export. Someone has to remember, log in, filter, and click. When that person is on holiday the weekly report quietly stops happening.
⏳
It is stale on arrival
The file is a snapshot of the moment you clicked Export. By the afternoon the numbers in the workbook and the numbers in Odoo disagree, and whoever is reading the spreadsheet has no way to tell.
🎨
Your formatting dies each run
Charts, pivot tables, conditional formatting, and formulas live in the workbook, not in Odoo. Every fresh export lands as raw rows, so the person running it rebuilds the presentation layer or pastes into a template by hand.
🐌
Big exports get slow
Exporting a very large filtered set — years of invoice lines, full stock move history — is heavy on the server and can take a long time or fail outright. The built-in export was designed for extracts, not for warehouse-scale offloading.
🧮
Some fields will not come out
Non-stored computed fields are not always available to the exporter, so metrics that appear on screen may be missing from the export and have to be recreated with Excel formulas — a second place for the logic to drift.
👥
It needs an Odoo seat
Anyone running the export needs an Odoo login with export rights. Sharing numbers with an accountant, a board member, or a partner who has no Odoo access means someone in the middle exporting and forwarding files.
What to use when the manual export stops scaling
Which one is right depends on why the export exists. If it feeds a spreadsheet somebody maintains, automate the spreadsheet. If it feeds a dashboard, skip the spreadsheet. If it exists so one person can answer one recurring question, let them ask the question instead.
📗
Scheduled sync into a spreadsheet
The Google Sheets Connector pushes any Odoo model into a spreadsheet on a schedule you set, with domain filters and field selection. Your charts and formulas sit in the workbook and stay put while the data underneath refreshes. Google Sheets opens and downloads as .xlsx, so an Excel-first team can still work in Excel.
Some reports are joins and aggregations the list view simply cannot produce. SQL Explorer Pro lets you write the query inside Odoo, save it, and export the result — without a developer and without direct database credentials.
When the spreadsheet has become a reporting system, move it. The Power BI Connector publishes Odoo datasets to Power BI with Azure Service Principal auth and a refresh schedule, so dashboards update without anyone exporting anything.
For multi-year history, cross-system joins, or volumes Excel cannot hold, the BigQuery Connector syncs Odoo with incremental change-data-capture so you move only what changed rather than re-exporting everything.
Often the export exists only to answer one question. The MCP Server connects Claude or ChatGPT to live Odoo data, so someone can ask "what did we invoice last month by customer" and get an answer from the current records, with Odoo’s own permissions applied.
If another system needs the data on a trigger rather than a schedule, the Webhooks & REST API module pushes Odoo events out as they happen, so the receiving system is never waiting on a person with a spreadsheet.
Odoo exports natively to both. In the export dialog you choose between XLSX and CSV, and XLSX gives you a real Excel workbook that opens without an import step or delimiter and encoding prompts. CSV is generally only the better choice when another system is consuming the file and expects plain text.
Why is the Export option missing from my Actions menu?
Export is a permission, not a feature that is always on. A user needs export rights on their account before the option appears, and administrators sometimes disable it deliberately so that customer lists and pricing cannot be extracted. If the option is missing, ask whoever administers your Odoo instance to grant export access to your user.
How do I export fields from a linked record, like the customer’s country?
In the export dialog, relational fields can be expanded. Expand the customer field on a sales order and the fields belonging to that contact — country, email, sales rep, payment terms — become selectable as their own export columns. This is how you build a single flat sheet out of data that lives across several linked Odoo models.
Can I export all records, not just the ones on screen?
Yes. Selecting the header checkbox marks the records on the current page and Odoo then offers to extend that to every record matching your current filter. Take the second option when you want the complete filtered set, and set your filters before exporting rather than deleting unwanted rows in Excel afterwards.
Can I schedule an Odoo export to run automatically?
Not with the built-in export, which is manual by design and runs only when a user clicks Export. Automating it requires either a connector that pushes Odoo data out on a schedule, such as the Google Sheets Connector, or a custom scheduled action built by a developer. For most teams the connector is faster to put in place and does not need ongoing maintenance.
Can I re-import an exported file to update records in bulk?
Yes, provided you tick "I want to update data (import-compatible export)" when exporting. That adds the external ID column that Odoo uses to match each row back to the record it came from. Edit the values, re-import the file, and Odoo updates the existing records. Without that column the import creates new records instead of updating the old ones, which is the single most common cause of accidental duplicates.
What is the fastest way to give someone Odoo numbers when they have no Odoo login?
A scheduled sync into a shared spreadsheet. The recipient reads a Google Sheet or Excel file that refreshes itself, sees current data, and never needs an Odoo seat, while access stays governed by the sync profile rather than by forwarding files over email. This is the usual answer for external accountants, board members, and partners.