SAP Sales Order Upload from Customer PO PDFs to a Mass Upload File for Import Sales Orders

SAP will create sales orders from a spreadsheet in bulk.

PDF, JPG, PNG, BMP, HEIC, TIFF

Submit your purchase orders

PDF, scan, or email attachment
One row per order item
Excel for the SAP template
Works for ECC and S/4HANA

Overview

SAP will create sales orders from a spreadsheet in bulk. It will not read the purchase order PDF your customer emailed. Upload that PDF here and get the customer PO number, the ship-to, and every line with customer part number, quantity, price and requested date back as rows shaped for the Import Sales Orders template, a BAPI load or LSMW.

Why customer POs still get keyed into VA01

Most order desks on SAP already have a way to load sales orders in bulk. The bottleneck is the step before it: turning a pile of differently formatted customer PDFs into the file SAP expects.

The mass upload needs a spreadsheet nobody has

The Import Sales Orders app and every BAPI or LSMW load start from structured rows. Customers send PDFs, so someone builds the rows by hand before the fast part can begin.

Customer material numbers are not your materials

Buyers order by their own part numbers. Unless a customer-material info record exists, SAP cannot resolve the line, and the order stops on the item.

Duplicate PO numbers slip through

A customer who re-sends the same order as a reminder produces a second sales order unless the duplicate check is configured on the order type and someone reads the warning.

SAP extraction is not available everywhere

The SAP apps that read PDF orders need S/4HANA plus a Document AI service on BTP. An ECC shop, or an S/4HANA shop without that subscription, has no native PDF route at all.

From customer PO PDF to SAP-ready rows

Upload the customer purchase order. The AI reads it and returns header and line data as structured rows you can lay out one row per order item with the header repeated, which is the layout the Import Sales Orders template and a BAPI_SALESORDER_CREATEFROMDAT2 wrapper both work from.

Reads any customer layout

No template per customer. The extraction works from the document itself, including scanned and photographed pages.

One row per item

A 40-line replenishment order comes back as 40 item rows with the order header alongside, ready to group into one sales order on upload.

Customer PO number kept apart

The buyer reference sits in its own column, ready for the Customer Reference field (VBKD-BSTKD in the tables, PURCH_NO_C in the BAPI).

Customer part number and description

Both come through on every line, so the match to your SAP material runs against your customer-material info records instead of guesswork.

The three ways SAP creates sales orders in bulk

Which route you have depends on your release, and it decides what the upload file has to look like.

Import Sales Orders (Fiori app F4293). Available in SAP S/4HANA from the 2021 on-premise release, in S/4HANA Cloud private edition and in the public cloud. You download SalesOrderImportTemplate.xlsx from the app. The Field List sheet says which fields are mandatory and which are optional; the Order Data sheet is where the orders go. Header and item fields sit side by side, one line is one sales order item, and a multi-item order simply repeats the same header values on each of its lines. After upload the app runs the normal order entry checks and shows the failures, and you can run corrective imports from the import object page rather than starting over.

A BAPI load. On ECC, or wherever the app is not in use, the standard pattern is a small program that reads a spreadsheet and calls BAPI_SALESORDER_CREATEFROMDAT2. The customer PO number goes in PURCH_NO_C in the header structure ORDER_HEADER_IN, which lands in BSTKD in table VBKD. On the items, CUST_MAT35 carries the customer material number as an alternative to your internal material. Our BAPI_PO_CREATE1 reference covers the purchasing-side twin of this BAPI.

LSMW. Still used for one-off loads on older systems. Fine for a migration, awkward as a daily order desk tool.

Three details that make or break the upload

Format every template cell as text. SAP says it plainly for the import app: if cells are formatted as Number or General, quantity, amount, date and time values can fail to import. Excel likes to turn a part number such as 00123 into 123 and a date into a serial number.

Customer part numbers need a customer-material info record. A PO line that reads 4471-BLK means nothing to SAP until a record created in VD51 (stored in table KNMT) links that code, for that customer and sales area, to your material. With the record in place the order can be entered using the customer number alone. Without it, someone translates every line by hand. We return the customer code and the description on each row so the lookup is a join, not a guess.

Turn on the duplicate PO check. In VOV8, the field Check purchase order no. on the sales document type controls whether SAP warns when the same customer reference is used twice for the same sold-to party. Setting it to A gives you that warning. A customer who re-sends the order from last week as a reminder email is the most common cause of a double shipment, and the check is off on many order types.

What about the PDF extraction built into SAP?

SAP does ship it, with conditions. Create Sales Orders, Automatic Extraction (scope item 4X9) lets an internal sales rep upload a PDF or image purchase order and creates a sales order request, a draft you convert into the real order. It needs the Document Information Extraction service on SAP BTP, and SAP documents it for purchase orders in English or German. From SAP S/4HANA Cloud 2602 the upgraded Create Sales Orders, AI-Assisted Extraction app (F8947) runs on SAP Document AI. Reading PDFs straight out of a shared mailbox takes additional setup through SAP Build Process Automation.

If you are on S/4HANA with that service already licensed, use it. The route on this page is for everyone else: ECC shops, S/4HANA systems without the BTP subscription, and teams that want a reviewable spreadsheet between the customer document and the order.

Where the extraction fits, and where it stops

PurchaseOrders reads the customer document and returns structured data as an Excel workbook or through the purchase order API. It does not connect to SAP, create or change sales orders, call BAPIs, maintain customer-material info records, or process EDI. It does not replace your order desk, your IDoc inbound or your integration. It removes the typing between a PDF in an inbox and the file SAP already knows how to load. Accuracy on long orders comes down to purchase order line item extraction, and a Monday backlog clears through bulk purchase order upload.

Who this is for

A US manufacturer or distributor running SAP ECC or S/4HANA whose customer service team receives purchase orders as PDF attachments and enters them in VA01 or through a spreadsheet upload. Typically an order desk handling dozens of orders a day from buyers who will never send EDI. The wider workflow is on sales order entry automation, and if you are comparing vendors for this job the options are laid out in SAP sales order automation software compared.

If you are loading the other direction

Purchase orders you send to your own suppliers are a different object with different tables. Purchase order to SAP covers that side, and the IDoc purchase order guide covers the ORDERS message when EDI is involved. The same inbound sales workflow on other systems is described on NetSuite sales order import and QuickBooks sales order import.

Customer PO field to SAP sales order field

What comes off the customer document and where it lands in SAP. Table fields are the standard SD fields; the BAPI column is BAPI_SALESORDER_CREATEFROMDAT2.

On the customer PO SAP field BAPI field Notes
Buyer company name Sold-to party (VBAK-KUNNR) PARTN_NUMB, role AG Mapped to your customer number. Mandatory.
PO number Customer reference (VBKD-BSTKD) PURCH_NO_C Checked for duplicates if VOV8 is set.
PO date Customer reference date (VBKD-BSTDK) PURCH_DATE Printed date on the order.
Ship-to address Ship-to party (role WE) PARTN_NUMB, role WE Matched to an existing ship-to where possible.
Customer part number Customer material (VBAP-KDMAT) CUST_MAT35 Resolved to your material through the VD51 record.
Your part number, if printed Material (VBAP-MATNR) MATERIAL Use when the buyer quotes your code.
Quantity and unit Order quantity Schedule line REQ_QTY Keep the unit as printed, convert in SAP.
Requested delivery date Requested delivery date REQ_DATE Per line when the PO gives one per line.
Unit price Pricing condition Condition records Usually priced by SAP; the PO price is for checking.

How the upload runs

Four steps from the email attachment to sales orders in SAP.

1

Upload the customer POs

Drop in one PDF or a batch. Scans, photos and forwarded attachments all work, with no per-customer setup.

Tip: Batch a morning of orders into one upload.

2

Review the rows

Check the header and every line on screen. The PO number, sold-to name, ship-to and dates come back with the lines.

Tip: Flag lines whose customer part number has no VD51 record yet.

3

Download for your route

Paste into the Order Data sheet of SalesOrderImportTemplate.xlsx, or feed the file to your BAPI or LSMW load.

Tip: Keep template cells formatted as text.

4

Create the orders in SAP

Run the import, read the checks, and fix failures with a corrective import. Your pricing, credit and availability checks run as normal.

Tip: Turn on the VOV8 duplicate PO check first.

Why order desks put this in front of SAP

1
Row per order item
50
Files per bulk upload
4
Outputs: Excel, CSV, JSON, API

Security and privacy

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

SAP sales order upload questions, answered

In SAP S/4HANA, open the Import Sales Orders app (F4293), download SalesOrderImportTemplate.xlsx, fill the Order Data sheet with one line per order item and upload it. The app runs the order entry checks and lists failures for correction. On ECC, the usual route is a program that calls BAPI_SALESORDER_CREATEFROMDAT2, or LSMW for one-off loads.

Use one line per item and repeat the same header values, such as sold-to party, customer reference and sales area, on every line of that order. The app groups lines with identical header data into one sales order. The extraction returns the header values with the lines, so repeating them down the rows is a copy, not a retype.

Usually because the template cells are formatted as Number or General. SAP asks for text format, and Excel otherwise converts dates to serial numbers and strips leading zeros from codes. Reformat the columns as text, paste the values again and reupload, or run a corrective import on the failed rows.

In the customer reference field, stored as BSTKD in table VBKD with the date in BSTDK. In BAPI_SALESORDER_CREATEFROMDAT2 it is PURCH_NO_C in ORDER_HEADER_IN. Keeping it there makes the order searchable by the buyer reference and lets the duplicate PO check work.

In VOV8, open the sales document type and set the field Check purchase order no. to A. SAP then warns when the same customer reference is used again for the same sold-to party. It is a warning, not a block, so the order desk still has to read it.

Yes, in SAP S/4HANA with the Create Sales Orders, Automatic Extraction app (scope item 4X9) or, from S/4HANA Cloud 2602, the AI-Assisted Extraction app F8947. Both need an SAP Document AI subscription on BTP and create a sales order request you then convert. ECC has no native PDF route.

Through a customer-material info record, created in VD51 and stored in table KNMT. It links the customer code, for that customer and sales area, to your material number. With the record in place the line can be entered with the customer code alone; without it the item has to be translated by hand.

Yes. The extraction produces rows, not an SAP connection, so the same file feeds the S/4HANA Import Sales Orders template or an ECC program built on BAPI_SALESORDER_CREATEFROMDAT2. What changes between releases is the loading step on the SAP side.

No. PurchaseOrders reads the customer purchase order document and returns structured data as Excel, CSV, JSON or through the API. It does not connect to SAP, create or change orders, call BAPIs or process EDI. It removes the retyping between the emailed PDF and the file SAP loads.