Sage 100 Sales Order Import with Visual Integrator from Customer Purchase Order PDFs

Sage 100 loads sales orders in bulk through a Visual Integrator import job, and the job only reads files.

PDF, JPG, PNG, BMP, HEIC, TIFF

Submit your purchase orders

PDF, scan, or email attachment
Every order line captured
One row per line, header repeated
Plans from $49 a month

Overview

Sage 100 loads sales orders in bulk through a Visual Integrator import job, and the job only reads files. Upload the purchase order your customer emailed and get the customer PO number, the dates and every line with part, quantity and price as rows your import job can take.

Why customer orders still get retyped into Sage 100

Visual Integrator is quick once the file is right. Turning a customer PDF into that file is the slow part, and it lands on the order desk every morning.

Visual integrator reads files, not documents

An import job expects a CSV with one value per column. A purchase order printed by a buyer ERP has to become rows first, and today someone on the order desk types them.

One changed value splits the order

With Next on SalesOrderNo, any header value that differs between rows starts a new order. A ship date keyed differently on one line turns one customer PO into two sales orders.

Buyer part numbers are not yours

Customers order by their own codes. Every line needs an alias to your ItemCode, and a 60-line blanket release is 60 chances to key one wrong.

Header-Only imports fail

Sales Order Entry fills lines and totals through its screen logic. A file carrying only the PO number and dates stops on empty lines, so the detail has to come with it.

From customer PO to visual integrator rows

Upload the purchase order your customer sent. The AI reads the header and every line and returns a spreadsheet with one row per line, header values repeated on each row, ready to map to the fields in your Sales Order Entry import job.

Reads any PO layout

No per-customer template. Digital PDFs, scans and photographed pages from any buyer system come back in the same column layout.

One row per line

A 60-line order returns 60 rows in document order with the header repeated on each, the flat shape a Visual Integrator job reads best.

CustomerPONo in its own column

The buyer PO number lands in a dedicated column, ready for the CustomerPONo field and for sorting the file so Next groups lines correctly.

The price the buyer printed

Unit price comes off the document for each line, so you can load it and compare it with your price level before the order ships.

How sales orders get into Sage 100 without typing

Sage 100 has one native bulk route for sales orders, and it is Visual Integrator. An import job pointed at Sales Order Entry reads a CSV or text file, maps each column to a field, and writes the order through the same business logic a person uses at the keyboard. Sage partners list Visual Integrator inside the Essentials bundle and the Sales Order module inside the Advanced and Complete bundles, so most distributors running order entry on Sage 100 already own both pieces. What Visual Integrator cannot do is read the document your customer sent. A purchase order printed by a buyer ERP and emailed as a PDF has to become rows before the job can see it, and today that is the part someone types.

The header and detail pair behind every sales order

A Sage 100 sales order is stored as a header in SO_SalesOrderHeader and lines in SO_SalesOrderDetail. The header carries the customer (ARDivisionNo plus CustomerNo), the order date, the ship date, the ship-to and the customer PO number in CustomerPONo. Each line carries the ItemCode, QuantityOrdered and UnitPrice. The cleanest source file for an import job is flat: one row per order line, with the header values repeated on every row. That is exactly the shape the extractor returns, one row per line item with the PO number, buyer, dates and ship-to repeated alongside each line.

Why the Next operation decides where one order ends

Set the SalesOrderNo field in the job to the Next operation and Visual Integrator assigns a new sales order number each time a header value changes between rows. That single setting is what turns a file of fifty lines into the right number of orders, and it is also how one customer PO gets split by accident. If a header column such as the ship date or the ship-to differs on one line, Visual Integrator reads it as a new order. Sort the file by customer PO, keep every header value identical on every line of that PO, and the grouping takes care of itself. Sage 100 users on the Sage community also report that a Replace operation fed with order numbers from the source file gives inconsistent results across a batch, while Next stays reliable.

Customer part numbers and the alias file

Customers order by their own part numbers, not yours. Sage 100 handles this with alias item numbers in Inventory Management: record the customer code as an alias of your item once, point the job at that column, and Visual Integrator translates the alias to your ItemCode during the import. Matching on the item description does not work, because description is not a key field. Keep the mapping sheet, since the same account sends the same codes month after month, and the alias list grows into the cheapest piece of automation on the order desk.

Import the lines, not just the header

A header-only file fails. Sales Order Entry fills lines and totals through its screen logic, and an import job does not get that help, so a file with only the PO number and dates stops on empty lines. Import the detail rows with the header, and check one order on screen after the first test so you can see that the price, the quantity and the customer PO number landed where you expected. If the order desk also handles purchasing, the buying side runs through the same tool on our Sage 100 purchase order import page, and the full intake workflow across systems is on sales order entry automation.

Where PurchaseOrders fits, and where it stops

PurchaseOrders reads the customer PO, a digital PDF, a scan or a photographed page, and returns the header and every line as Excel, CSV or JSON. You rename the columns once to the field names your import job uses, save that header row, and every later batch drops straight in. It does not install inside Sage 100, does not run Visual Integrator and does not create the sales order. For volume, bulk purchase order upload takes up to 50 files at a time, and the purchase order API returns the same fields as JSON when an integrator wants to post orders through code. For how other tools compare on reading customer orders, see sales order OCR software.

Customer PO field to Sage 100 sales order field

What comes off the customer document and which Sales Order Entry field it usually fills in a Visual Integrator job. Confirm field names against the job in your Sage 100 version.

Sage 100 field Level Where it comes from Notes
ARDivisionNo Header Your AR division for the customer. Fixed per customer
CustomerNo Header The buying company, matched to your customer number. Customer must exist
SalesOrderNo Header Not in the file. Set the job to Next. New order when a header value changes
CustomerPONo Header The purchase order number the customer printed. Sort the file by this value
OrderDate Header The PO date on the document. Same value on every line
ShipExpireDate Header The ship or delivery date the buyer asked for. Same value on every line
ShipToCode Header The ship-to address, matched to a ship-to code. Differing values split the order
ItemCode Line The customer part number, translated by an alias. Description will not match
QuantityOrdered Line Ordered quantity on each line. One row per line
UnitPrice Line The unit price the buyer printed. Check against your price level

How the import runs

Four steps from the customer attachment to sales orders in Sage 100.

1

Upload the customer PO

Drop in the PDF, the scan or the email attachment. Up to 50 files per bulk upload, with no per-customer setup.

Tip: Portal downloads and forwarded attachments work the same way.

2

Review and Map

Check the header and lines on screen, then map the customer to ARDivisionNo and CustomerNo and confirm the part numbers have aliases.

Tip: Add missing aliases once and every later order matches.

3

Build the import file

Download CSV, rename the columns to the field names in your import job, and sort the rows by customer PO.

Tip: Save the renamed header row as the template for every future batch.

4

Test one order, then load

Run a single two-line PO through the job, open it in Sales Order Entry, then load the full batch.

Tip: Check CustomerPONo, both lines and the unit price before the big run.

Why order desks use this in front of Sage 100

1
Row per line item
3
Export formats, Excel, CSV and JSON
50
POs per bulk upload

Security and privacy

  • Bank-grade TLS encryption in transit
  • Your PO data is never sold or shared
  • US-based cloud infrastructure

Sage 100 sales order import questions, answered

Use a Visual Integrator import job on Sales Order Entry. Build a CSV with one row per order line, the header values such as ARDivisionNo, CustomerNo and CustomerPONo repeated on each row, and line values such as ItemCode, QuantityOrdered and UnitPrice. Set SalesOrderNo to the Next operation so Sage assigns the order numbers.

Because a header value changed between rows. With Next on SalesOrderNo, Visual Integrator starts a new order whenever any header field differs from the row before. Sort by customer PO and keep the date, ship-to and other header values identical on every line of one order.

The header lives in SO_SalesOrderHeader and the lines in SO_SalesOrderDetail. The customer PO number is the CustomerPONo field on the header, separate from the Sage SalesOrderNo, so the order desk can find the order when a buyer calls with only their own reference.

Yes, through alias item numbers. Record the customer code as an alias of your item in Inventory Management, map the column to the item field, and the alias translates to your ItemCode during the import. Matching on item description does not work because description is not a key field.

Not through Visual Integrator, which reads structured files such as CSV. A customer purchase order that arrives as a PDF has to become rows first, typed by hand or extracted, before the import job can create the sales order.

Usually not. Sage partners list Visual Integrator inside the Essentials bundle and the Sales Order module inside the Advanced and Complete bundles, so a company already doing order entry in Sage 100 normally has both. Confirm against your own subscription with your Sage partner.

The file probably carried header fields only. Sales Order Entry fills lines and totals through its screen logic, and an import job does not get that help. Import the detail rows together with the header so every order arrives with its items, quantities and prices.

No. PurchaseOrders reads the customer purchase order and returns structured data as Excel, CSV or JSON. It does not install in Sage 100 and does not run Visual Integrator or create orders. You load the rows through your import job, the API or your own integration.