
B2B Order Import for WooCommerce — turn a customer purchase order in Excel, CSV or PDF into an order
A WooCommerce plugin that turns a wholesale customer's purchase order file into a shop order. The manager uploads Excel (.xlsx) or CSV (in Pro also a PDF with a text layer), the plugin finds the table in the file, matches the lines with your products by SKU, barcode or name and shows everything for review. The order appears only after the manager clicks "Create the order".
- Compatibility
- WooCommerce 7.0+ (tested on 11.2.1, HPOS and legacy order storage) · WordPress 6.2+ (tested on 7.1.2) · PHP 7.4+ (full run on 8.3) · .xlsx, .csv, .tsv, .txt files, PDF with a text layer (Pro) · old .xls is not read
- Licence
- one site, annual
- Trial
- 7 days, no card, one per site
- Updated
- 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
Nothing changes for regular shoppers: the plugin does not touch the cart or the checkout.
What the admin gets
WooCommerce → “B2B Order Import” with the tabs Imports, Settings and Licence.

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
WooCommerce 7.0+ (tested on 11.2.1), HPOS or legacy order storage.
WordPress 6.2+ (tested on 7.1.2) · PHP 7.4+ (full run on PHP 8.3; on 7.4 — syntax check and parsing of all test files with the same results).
PHP extensions: ZipArchive and XMLReader for .xlsx; for PDF (Pro) — zlib, iconv and mbstring.
Files: .xlsx, .csv, .tsv, .txt; in Pro — PDF with a text layer, and with AI turned on — scanned PDFs and JPG/PNG/WEBP photos. Old .xls — no.
Customer wholesale prices: the Wholesale Prices for WooCommerce plugin (optional).
Admin languages: Ukrainian, Russian, English.
Version history
Purchase orders from Excel (.xlsx) and CSV/TSV/TXT, header and column detection, matching by SKU, barcode and name, review of every line, order with the PO number, customer wholesale prices…
Frequently bought with B2B Order Import for WooCommerce
4 modules in one order — 40% cheaper than separately


Nova Poshta Premium — Nova Poshta for WooCommerce

Mono Acquiring — monobank card payments for WooCommerce

Telegram notifications and Viber/SMS for customers for WooCommerce
Full module description
B2B Order Import for WooCommerce is a plugin for shops that sell wholesale. A wholesale customer rarely checks out 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 article codes, names and quantities. The manager then looks up every line in the catalogue, types the quantities into a WooCommerce order and makes a mistake on line twenty.
The plugin does this work for the manager: it reads the file, finds the table in it, matches every line with a product of your shop by SKU, barcode or name and shows the result for review. The manager fixes what the plugin did not recognise and clicks “Create the order”. Without that click no order appears — the plugin never orders anything on a guess.
The customer’s wholesale prices come from our Wholesale Prices for WooCommerce plugin: when it is active, every order line gets the price for the customer’s role and quantity — the same as in the cart.
Running OpenCart? There is a separate B2B Order Import for OpenCart module (versions 4.x, 3.x and 2.3) with the same approach: purchase order file, review by a manager, order.
What the customer sees
Nothing changes for regular shoppers: the plugin does not touch the cart or the checkout. A wholesale customer receives the order the same way as after the cart — with the usual WooCommerce e-mails (if the status of new orders sends them) and the order in their account.
In Pro, wholesale customers can send purchase orders themselves: My account gets an “Upload an order” item. The customer chooses a file, optionally types the PO number and a comment, and sees their uploads with a status — “Received, being checked”, then the order number. You decide which roles see the page; one customer can send up to 10 files an hour. The manager gets an e-mail, and the upload waits in the admin — no order is created without review.
What the admin gets
WooCommerce → “B2B Order Import” with the tabs Imports, Settings and Licence. The Imports tab has the “New order from a file” form (file, customer, PO number) and the list of all imports with the filters Waiting for review, Order created and Discarded.
Reviewing a purchase order
- Customer and PO number: a customer of your shop and the number the plugin found in the file’s letterhead (“Purchase Order …”, “Order No …”) — or type your own.
- Lines: what the file says, the quantity read, which product was found and how — “by SKU”, “by barcode”, “by name, similarity 100%”, “chosen by hand”. Next to it — stock, the price from the file and the price in the order.
- What needs you is highlighted: product not found, a variable product without a chosen variation, a weak name match, not enough stock. Such lines stay unticked until you confirm them.
- “Columns of the file”: if a line was read wrongly, choose where the code, name, quantity and price are, and the plugin reads the file again.
The order
“Create the order” adds a regular WooCommerce order: items, the customer’s addresses, the status from the settings, taxes under your rules. The PO number and the original file are in the “Purchase order” sidebar box, and the number is searchable in the orders list. A double click does not create a duplicate.
PDF purchase orders (Pro)
A PDF with a text layer is parsed on your server, without external services: the table is rebuilt from the positions of the text on the page, item names wrapped over several lines are joined, and a header repeated on every page is skipped. The screenshot shows a Word purchase order saved as PDF with prices from the file turned on: the difference from your price is highlighted on every line.
Settings
- Order: status of the new order (Pending payment sends no e-mails; On hold and Processing send the usual WooCommerce e-mails and reserve stock), customer wholesale prices.
- Matching: flexible SKU, name matching and the similarity threshold (85% by default; a weaker match is only a suggestion).
- Files: maximum size (10 MB by default, never above the server limit) and how many days to keep the originals (180 by default).
- Pro: remembered matches and file layouts, prices from the file and the difference threshold, the customer account page, roles and notification addresses, AI recognition — the OpenAI key is stored encrypted.
How it works, step by step
- The manager uploads the file (or the customer does in their account, in Pro). The plugin checks the content, not only the extension, stores the original in a private folder under a random name and reads it without third-party services: Excel as a zip of XML, CSV with encoding and separator detection, PDF by parsing the text layer.
- It looks for the header row by words like “SKU”, “code”, “item”, “description”, “quantity”, “price” and their equivalents in five languages — even under a letterhead. Lines such as “Total” or “VAT” and a repeated header are skipped. The PO number is taken from the text above the table.
- Lines are matched in order: (Pro) this customer’s memory → exact SKU → SKU without spaces, hyphens and dots → barcode → name with similarity. Variations are found by their own SKU.
- The price is the shop’s price or the customer’s wholesale price from the wholesale pricing plugin; in Pro — the price from the file.
- The manager reviews the lines and clicks “Create the order”. WooCommerce creates the order: stock, e-mails and taxes work the same as for an order from the cart.
Under the hood
- No heavy libraries. Excel is read by the plugin’s own code on ZipArchive and XMLReader with a size limit against zip bombs. For PDF, Pro bundles smalot/pdfparser 2.12.5 (LGPL) — byte for byte from the official release, loaded only while a PDF is being read.
- WooCommerce creates the order with its own functions, so stock, e-mails, taxes and other plugins’ hooks are not bypassed. An atomic claim on the import keeps a double click from creating two orders.
- Hundreds of lines: the review form sends its lines as one field, so a purchase order with hundreds of lines does not hit PHP’s
max_input_varslimit. - Purchase order files are kept in
uploads/ccboi-private/under random names with direct access denied; they are served to managers only, with a nonce check, and deleted after the period you set. - Data: the free version makes no external requests at all. A file leaves your server only in Pro, only with AI turned on and only after a manager’s click.
- Deleting the plugin removes its tables, settings, the private folder and cron jobs; orders stay.
Installation
- Plugins → Add New → Upload Plugin: choose
catcode-b2b-order-import-for-woocommerce-free-1.0.0.zipand activate it (WooCommerce must be active). - WooCommerce → “B2B Order Import” → choose the customer’s file and, optionally, the customer → “Read the file”.
- Check the highlighted lines, pick a product or a variation where needed and click “Create the order”.
- On the Settings tab choose the status of new orders and the name similarity threshold.
- For Pro: paste the licence key from the e-mail after payment or click “Try Pro free for 7 days” on 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 plugin read?
For free — Excel (.xlsx) and CSV/TSV/TXT in any common encoding. In Pro also a PDF with a text layer, i.e. a PDF whose text you can select and copy: accounting software, Excel and Word produce such files. The old Excel format (.xls) is not read; the plugin asks to save the file as .xlsx or CSV.
What about scans and photos of purchase orders?
A scan or a photo has no text, so without AI the plugin cannot read it. In Pro you can turn on recognition through OpenAI with your own API key: the file goes to OpenAI, you pay OpenAI directly, CatCode sees neither the key nor the file. It is off by default and runs only when you click "Recognise with AI" on a particular file.
Will the plugin create an order on its own?
No. Every file waits for a manager, who sees the lines, the matched products and the prices, corrects what is needed and clicks "Create the order". A line without a product does not go into the order until the manager picks a product.
Which prices go into the order?
The shop's prices, and with the Wholesale Prices for WooCommerce plugin active — the customer's wholesale price for their role and quantity. The price from the file is shown next to it. In Pro you can take the prices from the file: lines where the customer's price differs from yours by more than the percentage you set are highlighted. Taxes are calculated by WooCommerce under your settings.
How many lines can a purchase order have?
There is no limit by plan, neither in Free nor in Pro. The plugin reads up to 3,000 lines from a file; a 600-line purchase order against a catalogue of 20,000 products was read and matched in about 3 seconds.
Do I need to renew the licence every year?
The licence runs for a year (or 2–5 years at a discount) and includes updates and support for that term. No automatic charges. After the term a purchased licence keeps its Pro features — the shop only stops receiving new versions. The free part works in any case.
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
—
