- Home
- Apps
- SaaS Tools
- Import Sales Order Lines from Excel or CSV
Illustrative previewA build-to-order Odoo module that lets your team paste or upload an Excel/CSV file directly onto a quotation and
generate validated sales order lines in one action. Scoped, built, and supported by ECOSIRE.
What is Import Sales Order Lines from Excel or CSV?
A build-to-order Odoo module that lets your team paste or upload an Excel/CSV file directly onto a quotation and generate validated sales order lines in one action. Scoped, built, and supported by ECOSIRE. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.
Key Features
Built to order, done for you
No DIY setup — a working app, built, installed and supported by ECOSIRE.
- 1
You order
Start with a one-time build price. We scope it with you at kickoff.
- 2
We build & install
ECOSIRE builds, configures and installs it on your Odoo.
- 3
Go live + support
You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.
Technical Specifications
- Odoo Compatibility
- Odoo 17, Odoo 18, Odoo 19
- Editions
- Enterprise & Community
- License
- Licence confirmation required
- Python Requirement
- Python 3.10+
- Database
- PostgreSQL 12+
About this Product
Re-keying twenty, fifty, or two hundred order lines by hand into a quotation is where sales-order accuracy quietly falls apart. Customers send purchase orders as spreadsheets, distributors send reorder lists in Excel, and your team ends up typing each product_id, quantity, unit price, and discount into the sale.order.line grid one row at a time — mistyping SKUs, missing lines, and applying the wrong price. Odoo core has no native bulk line-entry on the sales order form; the built-in base_import framework imports whole records into a model, not child lines onto a specific open quotation, and it cannot resolve your customer's part numbers or supplier references to internal products on the fly. That gap is exactly what this module closes.
We build a made-to-order Odoo module that adds an Import Lines action directly on the sale.order form. A user opens (or creates) a quotation, launches the wizard (a TransientModel), uploads an .xlsx or .csv file, and the module parses it server-side (openpyxl for Excel, Python's csv for delimited files), maps each column to the right field, matches products by internal reference, barcode, customer product code, or name, and writes clean sale.order.line records back onto that order. A preview step shows every parsed row with a resolved/unresolved status before anything is committed, so bad SKUs, unknown units of measure, and missing prices are caught up front rather than in the confirmed order. Quantities, unit prices, discounts, taxes, and UoM are all honored; unmatched rows are flagged with a clear reason instead of silently dropped.
Technically, the module ships as a proper addon: a __manifest__.py declaring the dependency on sale, a wizard model with @api.depends compute logic for the live preview, an OWL/XML view for the upload-and-map screen, and a downloadable column template so your team knows the expected layout. Product matching is configurable — we wire it to your real data (internal reference, EAN13 barcode, or the customer-specific product_customer_code on the partner), and pricing can either take the value from the file or fall back to the Odoo pricelist for that customer. Access is governed by ir.model.access.csv and, where you need it, record rules so only sales users can run the import. Everything is built against your Odoo edition and version — Community or Enterprise, 17.0, 18.0, or 19.0 — and the same file-parsing engine can optionally be exposed over the XML-RPC/JSON-RPC API if you want an upstream system to push order files programmatically.
Because this is build-to-order, nothing ships until we have agreed the scope. We start with a short scoping call to confirm your file formats, the column mapping, how products should be matched, and your Community-vs-Enterprise and version constraints. We then build on a staging copy of your database, run UAT with your real spreadsheets, and only deploy to production once you have signed off. Typical delivery is one working week from confirmed scope. Pricing starts from $999 (indicative, single-company base scope); multi-company rollout, non-standard file layouts, deeper customer-product-code cross-referencing, or integration with an upstream ordering system increases the quoted scope.
What you get
- Installable, version-matched Odoo addon source code for your Odoo 17/18/19 Community or Enterprise environment
- Installation and configuration on your staging environment, including column-mapping profile and product-match rules wired to your data
- Technical documentation covering the manifest, wizard model, matching logic, and security (ir.model.access.csv + record rules)
- End-user guide plus a live training session for your sales team on running the import and reading the preview/error report
- UAT on a staging copy of your database using your real spreadsheets, with a documented rollback plan before production deploy
- Post-go-live support window for bug fixes and adjustments to the mapping/matching behavior
- Git repository handover with tagged release and commit history for full ownership of the code
- Downloadable import template file matching your agreed column layout
Who this is for
Sales operations lead
Owns quotation accuracy and turnaround. Receives customer POs as spreadsheets and needs the team to turn them into confirmed sales orders in minutes without transcription errors or wrong SKUs.
B2B distributor / wholesaler
Processes large, repeat reorder lists from resellers. Needs bulk line entry that resolves customer part numbers to internal products and applies the correct contract pricelist automatically.
Odoo functional consultant or in-house admin
Runs the company's Odoo instance and wants a clean, version-safe addon with proper security and documentation rather than a brittle in-house script that breaks on the next upgrade.
Operations manager scaling order intake
Facing rising order volume and wants to cut manual data entry, reduce order-line mistakes, and free sales staff for selling rather than typing.
How Import Sales Order Lines from Excel or CSV Compares
| Criterion | ECOSIRE | Custom Build | Competitor | Odoo Native |
|---|---|---|---|---|
| Fit to your files & products | Built around your exact columns, SKUs, and customer part numbers | Fully bespoke but you specify and manage everything | Generic layout you must bend your files to fit | No bulk line import onto an open order at all |
| Product matching | Configurable priority: internal ref, barcode, customer code, name | Whatever you build; needs its own design | Usually name or internal reference only | Manual selection per line |
| Error handling | Preview grid with per-row reason before commit | Depends on how much you invest in validation | Often import-and-hope with limited feedback | Not applicable |
| Odoo version/edition safety | Matched and tested for your 17/18/19 Community or Enterprise | Your responsibility to maintain across upgrades | Depends on vendor's update cadence | Core-supported but lacks the feature |
| Delivery model | Scoped, built, UAT'd, deployed, supported by us | You hire and manage developers | Instant download, self-install, self-support | Already present, nothing to add |
| Ownership | Full git repo handover — you own the code | You own it | Licensed; source may be obfuscated or restricted | Part of Odoo core |
| Support & changes | Post-go-live support window + optional maintenance | Only what your team can provide | Generic ticket queue, changes rarely bespoke | Community/Enterprise support, not for this gap |
| Upfront cost | From $999 indicative, fixed quote after scoping | Typically the highest — developer time | Low sticker price, hidden fit/rework cost | Included, but doesn't solve the problem |
Frequently Asked Questions about Import Sales Order Lines from Excel or CSV
Is this a ready-made app I can download and install right now?
No. This is a build-to-order Odoo module. We scope it to your exact file formats, product-matching rules, and Odoo edition/version, then build, install, and support it. It is not an existing apps.odoo.com download.
How long does delivery take?
Typical delivery is one working week from confirmed scope. After a short scoping call we agree the column mapping and matching logic, build on a staging copy of your database, run UAT with your real spreadsheets, and deploy to production once you sign off. Volume, multi-company rollout, and integrations can extend the timeline — we confirm dates in the fixed quote.
How does pricing and scoping work?
Pricing starts from an indicative $999 for a single-company base scope. After a 15–45 minute scoping call we send a fixed quote. Drivers such as multi-company setups, non-standard file layouts, customer-product-code cross-referencing, and upstream integrations increase the quoted scope. You approve the fixed price before we build.
Which Odoo versions and editions do you support?
We build and test for Odoo 17.0, 18.0, and 19.0 on both Community and Enterprise. We match the build to your exact edition and version so the addon installs cleanly and survives your upgrade path.
What happens to rows that don't match a product?
Nothing is silently dropped. The preview step shows every parsed row with a resolved/unresolved status and a specific reason for each failure — unknown SKU, missing unit of measure, blank price, or non-numeric quantity. You review and correct the file before any sale.order.line is committed to the quotation.
How does the module know which product each spreadsheet row refers to?
We configure the match priority to your data — internal reference (default_code), barcode/EAN13, customer-specific product code, or product name. For B2B distributors we typically wire it to the customer's part numbers so their reorder lists resolve to your internal products automatically.
What support and updates do I get after go-live?
Every build includes a post-go-live support window for bug fixes and mapping adjustments. Because you receive the full git repository, you own the code outright. We can also provide ongoing maintenance or version-upgrade work under a separate agreement as your Odoo instance evolves.
Can an upstream system push order files in automatically?
Yes, optionally. The same parsing engine can be exposed over Odoo's XML-RPC/JSON-RPC API so an ERP, EDI, or e-commerce platform can drop a file into a draft quotation programmatically. This is one of the scope drivers we confirm during the scoping call.
Related Modules

HyperPay Payment Gateway for Odoo
Embedded HyperPay COPYandPAY checkout for Odoo — mada, Apple Pay, STC Pay, 3DS2 — built, installed and supported by ECOSIRE.

iDEAL & Bancontact Local Checkout for Odoo
Native iDEAL bank-select & Bancontact QR checkout for Benelux Odoo stores. PSP-agnostic, webhook-reconciled, refund-ready. Built to order.

India GST E-Invoicing & E-Way Bill (IRN/NIC)
Generate GST IRN e-invoices and e-way bills straight from Odoo via NIC/GSP — signed QR, auto-cancel, GSTIN and HSN validation.

India GSTR Filing & GSTR-2B Reconciliation
File GSTR-1 and reconcile GSTR-2B input tax credit against vendor bills directly inside Odoo. Built, installed and supported by ECOSIRE.
Import Sales Order Lines from Excel or CSV
A build-to-order Odoo module that lets your team paste or upload an Excel/CSV file directly onto a quotation and generate validated sales order lines in one action. Scoped, built, and supported by ECOSIRE.
- Import Lines action added directly to the sale.order form view — no separate menu hunt, the wizard opens against the currently loaded quotation
- TransientModel wizard accepting .xlsx (parsed via openpyxl) and .csv/delimited files with configurable delimiter and encoding detection
- Column-to-field mapping for product, quantity, unit price, discount, unit of measure, taxes, and line description, remembered as a reusable mapping profile
- Product resolution by internal reference (default_code), barcode/EAN13, customer-specific product code, or name, with a configurable match priority