Customer purchase orders reach a SYSPRO shop as PDFs, and someone keys them into Sales Order Entry.
PDF, JPG, PNG, BMP, HEIC, TIFF
Submit your purchase orders
Drop documents here, or choose a file
Up to 50 files per batch
Uploading...
Customer purchase orders reach a SYSPRO shop as PDFs, and someone keys them into Sales Order Entry. Upload one here and get the customer PO number, ship-to and every line with part number, quantity and price, ready to post through SORTOI or check in a spreadsheet.
SYSPRO automates everything after the sales order exists. Reading the PDF the customer sent is still a person at the order desk, line by line.
Retail chains, contractors and OEM customers each send a different layout. Template capture breaks on the next new customer.
SYSPRO documents its Document Analyzer as supporting single-page purchase orders only, and each analysis uses a paid credit.
Lines that miss the customer stock code cross-reference come in as non-stocked items or fail, so someone fixes them by hand.
A 60 line restocking order takes twenty minutes to key, and one wrong quantity means a short shipment and a credit note.
Upload the purchase order your customer sent. The AI reads the header and every line, on every page, and returns structured data your SORTOI integration or your order desk can load.
No template per customer. A 1 page order and a 9 page restocking order come back in the same column layout.
The buyer part number lands in its own column for CustomersPartNumber, so the cross-reference lookup does the mapping.
The PO number is ready for CustomerPoNumber, which is what the duplicate check and the invoice match both use.
JSON maps onto OrderHeader and StockLine for a SORTOI feed. Excel and CSV suit a review step before anything posts.

SYSPRO is good at what happens after a sales order exists. Credit checks, allocation, back orders, dispatch notes and invoicing all run without anyone touching them. The weak spot is the front door. A distributor or manufacturer on SYSPRO gets customer purchase orders as PDF attachments from dozens of buyers, each printed by a different system, and somebody at the order desk reads each one and keys it into Sales Order Entry. That is the step that eats the morning, and it is where a transposed quantity turns into a wrong pick and a credit note three weeks later.
There are three ways to close that gap. SYSPRO 8 has its own Document Analyzer, which reads a purchase order inside Sales Order Review. Larger shops post orders through the SORTOI business object from an integration. And many teams still want a spreadsheet they can check before anything posts. PurchaseOrders covers the reading step for the second and third routes, and it is the route for any order the Document Analyzer cannot take.
SYSPRO documents a Purchase Order to Sales Order capability in its 2025 help, run from the Document Analyzer pane in Sales Order Review. You upload a PDF or image of the customer order, enter the customer code, and SYSPRO fills in a new sales order header and lines for review. It is worth knowing exactly what the help says about it before you plan around it. Only single-page documents are currently supported, and SYSPRO warns that multi-page orders may lose data from later pages because of a limitation in the Azure Document Intelligence service underneath. Each purchase order analyzed uses one credit from a bundle you buy and top up through the SYSPRO customer portal. It needs the SYSPRO 8 Cognitive Service installed on a machine with internet access, and the endpoint configured in Setup Options. Lines are matched through the customer stock code cross-reference, so a code that is not mapped comes in as a non-stocked item.
If your customers send one-page orders and your cross-references are clean, try it. If they send a 6 page restocking order from a retail chain, or you run an older SYSPRO release, you need another way to read the document. That is the gap this page is about.
SORTOI is the SYSPRO e.net business object for sales order import. SYSPRO describes it as adding a new sales order and changing or cancelling an existing one, with many orders in one call and any mix of add, change and cancel. It is a Transaction class object in the Sales Orders module, posted with the Post method, and it has been there since SYSPRO 6.1. The Process parameter takes Validate or Import, so an integration can run a whole batch as a dry run first and only post when it comes back clean. That is the setting to use for the first week of any new feed.
Each order is an OrderHeader plus OrderDetails. The header carries CustomerPoNumber, Customer, OrderDate, the ship-to lines and ShipPostalCode, ShippingInstrs, RequestedShipDate and OrderComments. The details hold four line types: StockLine for items, CommentLine, MiscChargeLine and FreightLine. A StockLine takes CustomerPoLine, StockCode, CustomersPartNumber, OrderQty, OrderUom and Price. The response returns the SalesOrder number SYSPRO assigned against each CustomerPoNumber, plus counts of items processed and rejected.
Buyers order with their own part numbers, not your stock codes. SORTOI handles this the same way the Document Analyzer does. When StockCode is blank or invalid, SYSPRO looks up the customer and part number combination in the customer stock code cross-reference. If there is no match, the line is accepted as non-stocked only if the AllowNonStockItems parameter permits it. So the cross-reference is the single biggest factor in how clean an automated feed runs. The extraction gives you the buyer part number in its own column on every line, which is exactly what goes into CustomersPartNumber, and a quick sort shows which codes are missing from the cross-reference before you post.
The SORTOI documentation lists the errors you will actually hit. With the duplicate customer PO number check switched on, a second order carrying the same CustomerPoNumber is rejected unless AllowDuplicateOrderNumbers says otherwise, which is useful protection when the same PDF is forwarded twice. Customers on hold cannot be processed. Credit checks can fail on the credit limit, on the oldest invoice being past terms, or on a manual hold, and the error text comes from the CreditFailMessage parameter if you set one. Orders at status 0 (in process), 9 (complete) or aborted cannot be changed. Running Validate first surfaces all of these before anything posts.
PurchaseOrders is a document data capture layer. It reads the customer purchase order, any length and any layout, and returns the header and every line as Excel, CSV or JSON. It does not connect to SYSPRO, does not hold your login and does not post orders. Your integration or your team loads the rows. For a SORTOI feed, the JSON output maps onto OrderHeader and StockLine fields directly. For a manual check, the spreadsheet puts one row per line with the customer PO number, date and ship-to repeated beside each, so the order desk reviews instead of typing. Teams that clear a morning pile of attachments use bulk purchase order upload to process up to 50 files at once.
The same approach runs on other mid-market systems. Distributors on Epicor use the Epicor sales order import, wholesale distribution shops on Prophet 21 use Prophet 21 order entry automation, and teams on Infor use the Infor sales order import. The wider picture, including how to measure the time saved per order, is on sales order entry automation.
What comes off the customer document and where it goes in the SORTOI sales order import, based on the SYSPRO business object reference.
| SORTOI element | Where it comes from | Note |
|---|---|---|
| Customer | Your SYSPRO customer code, mapped from the buyer name. | Customer must not be on hold |
| CustomerPoNumber | The PO number the customer printed. | Checked for duplicates when that option is on |
| OrderDate | The PO date on the document. | Header |
| RequestedShipDate | The ship-by or delivery date on the PO. | Header |
| ShipAddress1 to ShipAddress5, ShipPostalCode | The ship-to block on the PO. | Header |
| ShippingInstrs and OrderComments | Carrier notes, dock times and remarks. | Header |
| StockLine CustomerPoLine | The line number on the customer PO. | One per line |
| StockLine StockCode or CustomersPartNumber | Your stock code, or the buyer part number for the cross-reference. | Blank or invalid StockCode triggers the lookup |
| StockLine OrderQty and OrderUom | Quantity and unit on the line. | Per line |
| StockLine Price | The unit price the customer quoted. | AlwaysUsePriceEntered controls whether it overrides |
| FreightLine and MiscChargeLine | Freight or handling charges printed on the PO. | Separate line types |
| CommentLine | Line notes on the PO. | Separate line type |
Four steps from the customer attachment to a sales order in SYSPRO.
Drop in the PDF, the scan or the email attachment. Up to 50 files per bulk upload, with no per-customer setup.
Tip: Multi-page orders work the same way as single-page ones.
Check the header and every line on screen, including the buyer part number and price.
Tip: Sort by part number to spot codes missing from the cross-reference.
Add your customer code and export JSON for a SORTOI feed, or Excel and CSV for your own load.
Tip: Most header values repeat and fill down.
Run SORTOI with Process set to Validate, fix what it reports, then post with Import and read back the SalesOrder numbers.
Tip: Keep Validate on for the first week of a new feed.
Yes, with limits. SYSPRO 8 documents a Document Analyzer in Sales Order Review that reads a PDF or image purchase order and fills a new sales order for review. The help says only single-page documents are currently supported, and each analysis uses one purchased credit.
Integrations post sales orders through SORTOI, the SO Sales Order Import business object. It adds, changes or cancels orders, takes many orders in one call, and has a Process parameter of Validate or Import so a batch can be checked before it posts. Each order is an OrderHeader plus StockLine, CommentLine, MiscChargeLine and FreightLine details.
SORTOI is the SYSPRO e.net business object for sales order import, in the Sales Orders module and posted with the Post method. It has been available since SYSPRO 6.1. The response returns the SalesOrder number assigned to each CustomerPoNumber, plus counts of items processed and rejected.
When StockCode is blank or invalid, SYSPRO looks up the customer and part number in the customer stock code cross-reference. If no match is found, the line is accepted as non-stocked only when non-stocked items are allowed. Keeping the cross-reference complete is what makes an automated feed run clean.
Common reasons in the SORTOI reference are a duplicate customer PO number when that check is on, a customer on hold, a failed credit check on limit or overdue invoices, denied operator access to the branch or warehouse, and trying to change an order at status 0, 9 or aborted.
SYSPRO says Document Services needs no separate license, but the extraction runs on credits you buy in bundles and top up through the SYSPRO customer portal. Each purchase order uploaded and analyzed uses one credit.
Yes. It reads every page and returns every line in document order, with the PO number and ship-to repeated beside each line. That covers the long restocking and blanket release orders the single-page limit leaves out.
No. PurchaseOrders reads the customer purchase order and returns Excel, CSV or JSON. It does not connect to SYSPRO or post orders. Your SORTOI integration, a SYSPRO partner tool or your order desk loads the rows.
The full order entry workflow.
The same workflow on Epicor.
Order entry on Prophet 21.
The same workflow on Infor.
The same workflow on Acumatica.
OCR for customer orders.
Choose your plan