
B2B Order Import for OpenCart — turn a customer purchase order in Excel, CSV or PDF into an order
A module for OpenCart 4, 3 and 2.3 that turns a wholesale customer's purchase order file into a store order. A manager uploads Excel, CSV or ODS (in Pro also a PDF with a text layer), the module finds the item table, matches every line to your products by SKU, model, barcode or name and shows it all for review. The order is created only when the manager clicks Create order, and the store itself creates it: stock, e-mails and other modules work as for a checkout order.
- Compatibility
- OpenCart 4.0.2 – 4.1.x (tested on 4.1.0.3 and 4.0.2.3, also with DB_DRIVER=pdo) · OpenCart 3.0.x (tested on 3.0.5.0) · OpenCart 2.3.0.2 (PHP 7.0) · files .xlsx/.xlsm, .csv/.txt/.tsv, .ods, PDF with a text layer (Pro) · old .xls is not read · MariaDB 10.11
- Version
-
v1.0.0 (OpenCart 4)
v1.0.0 (OpenCart 3.x)
v1.0.0 (OpenCart 2.3) - Licence
- one site, lifetime
- Trial
- 7 days, no card, one per site
- Updated
- 10 October 2026
What Free has,
and what Pro adds
The free version works with no time limit. Pro adds the rest of the features in the table.
What it looks like
Key points
What the customer sees
Regular shoppers see no change: the module adds no scripts to the storefront and does not touch the checkout.
What the admin gets
A menu item Sales > B2B Order Import with a counter of new customer uploads.

The trial starts when you ask
A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site
Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. For studios — keys for 5 or 25 sites, or unlimited.
Technical requirements
OpenCart 4.0.2 – 4.1.x (tested on 4.1.0.3 and 4.0.2.3 with the mysqli and pdo database drivers), 3.0.x (tested on 3.0.5.0) or 2.3.0.2.
PHP as required by your OpenCart version: the 2.3 build was tested on PHP 7.0, the others on PHP 8.x. The zlib extension; ZipArchive is welcome but not required. cURL for the licence and AI.
Files: .xlsx, .xlsm, .csv, .txt, .tsv, .ods; in Pro also PDF with a text layer. No old .xls, no password-protected PDF.
Write access to storage/upload, where the original files are kept.
Database: tested on MariaDB 10.11.
Version history
For OpenCart 4.x, 3.x and 2.3: order import from Excel, CSV and ODS, table detection, matching by code, barcode and name, manual review, order creation by the store’s own order logic.
Frequently bought with B2B Order Import for OpenCart
4 modules in one order — 40% cheaper than separately


Nova Poshta Premium — a Nova Poshta module for OpenCart 2.3, 3.x and 4.x

LiqPay — Card Payments for OpenCart 2.3, 3.x and 4.x

Telegram notifications and Viber/SMS for customers for OpenCart
Full module description
B2B Order Import for OpenCart is a module for stores that sell wholesale. A wholesale customer rarely orders through the cart. They send the manager a file: an Excel sheet, a CSV export or a PDF from their accounting software, with their own item codes, names and quantities. The manager then looks up every line in the catalog by hand, copies quantities and prices into an order and makes a mistake on line twenty.
The module does that work for the manager. It reads the file, finds the item table, matches every line to a store product by SKU, model, barcode or name and shows the result for review. The manager fixes what the module did not recognise and clicks Create order. No order appears without that click: the module never orders anything automatically.
Free reads Excel (.xlsx), CSV and ODS and creates orders of up to 20 lines. Pro adds PDF with a text layer, orders of any size, similar names, memory of each customer’s codes and a page where wholesale customers upload their orders themselves. Scans and photos of orders are read only through an AI service with your own key: optional, off by default, and paid by you to your provider.
Other CatCode modules for OpenCart that help a wholesale store: Wholesale tiered pricing by customer group (B2B Order Import uses exactly these group prices), Supplier Price List Import, BAS Exchange to exchange orders with your accounting system and Stock Reserve & Reorder to reserve stock for orders.
Running WooCommerce? There is a separate B2B Order Import for WooCommerce plugin with the same approach: a purchase order in Excel, CSV or PDF, review by a manager, an order.
What the customer sees
Regular shoppers see no change: the module adds no scripts to the storefront and does not touch the checkout. A wholesale customer gets the order just as after the cart, with the store’s standard confirmation e-mail, their PO number in the comment and the status history in their account.
In Pro you can give wholesale customers their own Upload an order page. A logged-in customer sends a file, a PO number and a comment and sees their recent orders with a status. The page is for logged-in customers only, optionally only for chosen customer groups, with a daily upload limit. The manager gets an e-mail and the order waits in the admin; nothing is ordered automatically.
What the admin gets
A menu item Sales > B2B Order Import with a counter of new customer uploads.
- File upload: pick the customer, order currency and price source right away, or set them on the next screen.
- Import list with In progress, From customers, Orders created and All tabs: date, customer, file, PO number, how many lines were matched.
Reviewing an order
- Customer: a store account (default address and group) or a guest with company, name, e-mail, phone, address and price group.
- File columns: the module shows in which row it found the header and which column it took for code, name, quantity, unit, price, line total and barcode. If it got one wrong, pick the column or header row and click Read again.
- Lines: what the file says, which store product was found and how: by SKU, by model, by name, similar name (check it), chosen by hand. Next to it are product search, quantity, price, total and Skip.
- Warnings: the product is disabled, has required options, low stock, a minimum quantity, or the file price differs from the store price.
After the order is created
The import gets the status order created and a link to the order, and its lines are locked. The customer’s original file stays in the history and can be downloaded at any time.
Settings
- General: new order status, payment and shipping method names in the order, default prices, maximum file size.
- Matching: which fields hold item codes (SKU, model, EAN, UPC, MPN, JAN, ISBN); in Pro also similar names with a threshold and the matching memory.
- Customer upload (Pro): page address, allowed groups, notification e-mails, daily limit.
- AI recognition (Pro): API address, your key, model, auto-run. Off by default.
How it works, step by step
- A manager uploads the file (or the customer does, on their page in Pro). The module stores the original in
storage/uploadand reads it without any outside service: Excel and ODS as XML archives, CSV with encoding and delimiter detection, PDF with its own text layer parser. - It looks for the header row by words such as item code, SKU, description, quantity, price and total in five languages. In a PDF it sets column borders by the text coordinates and joins wrapped names. The table ends at Total. The PO number is taken from the text above the table.
- Lines are matched in this order: (Pro) this customer’s memory, exact code, code ignoring spaces, dashes, dots and slashes, barcode, exact name, (Pro) similar name above the threshold. Queries run in batches, so a file with hundreds of lines does not load the database.
- The price is the store price for the customer group, with quantity discounts and specials, or the file price converted to the order currency.
- The manager reviews the lines and clicks Create order. The store’s standard order logic creates it: stock, e-mails, taxes by the customer address and other modules’ events work just as for a checkout order.
Under the hood
- No third-party libraries and no paid services. Excel, ODS, CSV and PDF are read by the module’s own code, compatible with PHP 7.0. One class library is shared by all three builds.
- No core edits. No OCMOD patches; the menu item is added by an OpenCart event. The store’s standard order logic creates the order, so stock, e-mails and other modules are never bypassed.
- Own tables for imports, lines, matching memory and column layouts. Core tables are not changed.
- Safe creation: the admin issues a signed one-time link, and the confirmed-to-creating step is atomic, so a double click never makes a duplicate.
- Order files are kept in
storage/upload/cc_orderimport/under random 32-character names with direct access denied. - The licence lives in its own settings group, so Save never touches it.
- Uninstall removes the event and the menu item but keeps the import history, because it is your customers’ order history. To remove everything, drop the
oc_cc_orderimport_*tables by hand.
Installation
- OpenCart 4: Extensions > Installer, upload
cc_orderimport.ocmod.zip(keep the file name) and click Install. OpenCart 3: Extensions > Installer,cc_orderimport-oc3.ocmod.zip. OpenCart 2.3: upload the contents of theupload/folder fromcc_orderimport-oc2.ocmod.zipto the store root (FTP or the hosting file manager). - Extensions > Extensions > Modules > CatCode B2B Order Import > Install.
- Sales > B2B Order Import, choose the customer’s file and click Read the file.
- Check the lines, pick the customer or fill in a guest and click Create order.
- For Pro: paste the licence key from the e-mail after payment or click Try Pro for 7 days in the Licence tab.
Questions
about the module
Didn't find the answer? Message us on Telegram and we'll reply within a business day.
Which files does the module read?
Free: Excel (.xlsx, .xlsm), CSV/TXT/TSV and ODS. Pro adds PDF with a text layer, that is a PDF you can select and copy text from: accounting software, Excel and Word produce those. The old Excel format (.xls) is not read; the module asks to save the file as .xlsx or CSV.
What about scans and photos of orders?
A scan or a photo has no text, so without AI the module cannot read it. In Pro you can turn on AI recognition with your own key for an OpenAI-compatible service: the file goes to your provider, you pay for it, CatCode never sees the file. It is off by default and runs only from a manager's button (or automatically, if you turn that on).
Will the module create orders by itself, without a person?
No. Every file waits for a manager, who sees the lines, products and prices, fixes what is needed and clicks Create order. While there are lines without a product, no order is created: pick a product or tick Skip.
What about products with required options?
The module matches such a product and shows the warning that it has required options and they should be added in the order editor. The order is created without the options, and the manager adds size, colour and so on in the standard OpenCart order editor.
Which prices go into the order?
By default the store prices for the customer group, with quantity discounts and specials. You can choose prices from the file instead: then the customer's price is used, or the store price if the line has none. The module highlights where the file price differs from the store price. Taxes are added by your store rules, shipping cost is not.
Do I have to renew the licence every year?
No. For OpenCart it is one payment, a lifetime licence, one for all three builds: 4.x, 3.x and 2.3. The Pro trial starts only when you click its button. After the trial, Excel/CSV import with manual confirmation keeps working; only the Pro features switch off.
Does the module change OpenCart files or the checkout?
No. No core edits and no OCMOD patches; the menu item is added by an event. Core tables are not changed, the order is written by the standard order logic of the store. The module's own tables keep only the imports and the matching memory.
No reviews yet. Be the first.
No questions yet. Ask one — we answer within 24 hours.
Not quite what you are looking for?
We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.
Order a custom module
Buying the module
—
