D365 Sales Order Import into Dynamics 365 Sales Orders from Customer PO PDFs

Dynamics 365 Supply Chain Management creates sales orders in bulk from the Sales order headers V2 and Sales order lines V2 entities, and both expect rows.

PDF, JPG, PNG, BMP, HEIC, TIFF

Submit your purchase orders

PDF, scan, or email attachment
Every order line captured
Header and line rows kept in step
Plans from $49 a month

Overview

Dynamics 365 Supply Chain Management creates sales orders in bulk from the Sales order headers V2 and Sales order lines V2 entities, and both expect rows. Upload the purchase order a customer emailed and get the PO number, customer, ship-to and every line with part, quantity, unit and price, ready for Data management.

Why customer POs still get keyed into all sales orders

Dynamics 365 has a good bulk route for sales orders. It starts from a file, and most customers still send a PDF.

Two entities, one order number

Headers and lines load through separate entities, and every line has to carry the exact sales order number of its header or the import fails.

Setup values must already exist

Currency, terms of payment, delivery terms and the delivery address location are validated against setup, so a PO value with no matching code stops the row.

Buyer part numbers are not your items

Customers order by their own part numbers. ITEMNUMBER has to be your released product, so each line needs a mapping first.

The customer PO number gets lost

If nobody fills Customer requisition, the order desk cannot find the sales order when the buyer calls with only their own reference.

From customer PO to data entity 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 and the header values repeated, ready to split into a Sales order headers V2 file and a Sales order lines V2 file.

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.

Line sequence preserved

Lines return in document order with a sequence number, so header and line files stay in step and are easy to check against the PO.

Customer PO in its own column

The buyer PO number lands in a dedicated column that maps straight to CUSTOMERREQUISITIONNUMBER, so every order is searchable by the customer reference.

Quantity, unit and price together

Quantity, unit and unit price come back side by side, so you can map EA, CS or BX to your unit symbols before the load.

A tidy office desk with printed purchase orders, a laptop and order paperwork ready for entry

How Dynamics 365 imports sales orders

Dynamics 365 Supply Chain Management and Dynamics 365 Finance create sales orders in bulk through data entities. Microsoft documents two of them for this job. Sales order headers V2 creates the order header with the customer, delivery and payment details, and Sales order lines V2 creates the lines with items, quantities and prices. You load them in the Data management workspace: create an import project, add both entities, attach an Excel or CSV source file for each, put the header entity first in the sequence and run the import. The same entities are exposed over OData as the SalesOrderHeadersV2 and SalesOrderLines collections, which is what an integration or a Power Automate flow calls.

Every one of those routes expects rows. None of them reads the PDF a customer attaches to an email. Customers on EDI or a portal can be connected by your partner; the ones who still email a purchase order end up with someone on the order desk keying lines into All sales orders. PurchaseOrders handles that front step. It reads the customer PO and gives you the rows, and Data management or your integration does the rest.

Required fields on Sales order headers V2

Microsoft marks four header fields as required. SALESORDERNUMBER is the primary key, ORDERINGCUSTOMERACCOUNTNUMBER is the customer who placed the order, INVOICECUSTOMERACCOUNTNUMBER is the account that gets the invoice (usually the same customer) and REQUESTEDSHIPPINGDATE is the date the customer wants the goods to ship. Optional fields that a customer PO often fills are CURRENCYCODE, PAYMENTTERMSNAME, DELIVERYTERMSCODE and REQUESTEDRECEIPTDATE. Each of those values has to exist in your setup first, so a PO that says Net 30 needs a matching terms of payment code.

The buyer purchase order number belongs in CUSTOMERREQUISITIONNUMBER, shown on the order as Customer requisition, and many companies also copy it into CUSTOMERSORDERREFERENCE, the Customer reference field. Fill it every time. When a buyer calls about an order, they quote their own PO number, not yours.

Required fields on Sales order lines V2

On the lines, Microsoft lists SALESORDERNUMBER (the link to the header), ITEMNUMBER, REQUESTEDSHIPPINGDATE and DELIVERYADDRESSLOCATIONID as required. Quantity goes in ORDEREDSALESQUANTITY, the unit in SALESUNITSYMBOL, and the price in SALESPRICE with LINEAMOUNT for the extended amount. The line key is INVENTORYLOTID, which needs the inventory lot number sequence set up; if you do not want to supply it, change the entity mapping to Auto-generated. Microsoft recommends a single thread for both entities, so large batches run one after the other rather than in parallel.

Shaping the export for Data management

The export from PurchaseOrders is one row per line with the header values repeated. Keep one row per customer PO for the header file and every row for the lines file, give each PO the sales order number you will use in both files, and map the customer, the item and the unit. The customer usually resolves from the bill-to name and address on the PO; the delivery address location comes from the ship-to block, matched to an address already on the customer record. Build the mapping workbook once and reuse it for every batch. For the purchase side of the same company, where you load the POs you issue to suppliers, see purchase order import for D365 Finance and Operations, and for table level detail on that side, D365 purchase order tables.

Matching customer part numbers to your items

Most rejected lines fail on the item. Buyers print their own part numbers and Dynamics 365 validates ITEMNUMBER against your released products. You can keep a mapping column in the workbook that turns each buyer part into your item number, or maintain external item descriptions for the customer so the cross reference lives in Dynamics 365 itself. Either way it is set up once per customer. The extracted data keeps the buyer part number and description next to each other, which makes the first mapping fast. After the run, open the import project, check the execution summary and the staging data for errors, correct the source rows and import again.

Who uses this

Distributors and manufacturers on Dynamics 365 Supply Chain Management whose larger customers still send purchase orders as PDF attachments: industrial and electrical supply houses, food and packaging suppliers, contract manufacturers and medical distributors. Typical volume is a few dozen to several hundred customer POs a week. Running a smaller Microsoft system? Business Central sales order import covers the same workflow with configuration packages. The general version of the workflow lives on the sales order entry automation page, and a Monday inbox of 40 POs goes through bulk purchase order upload in one pass.

What it does not do

PurchaseOrders does not connect to Dynamics 365, does not run Data management projects and does not call OData. It reads customer purchase orders and returns Excel, CSV or JSON. You load the rows through Data management, the Excel add-in, an integration your partner builds or a flow you already run. Your pricing, credit limits, reservations and release rules in Dynamics 365 stay exactly as they are.

Customer PO field to Dynamics 365 entity field

What comes off the customer document and which data entity field it usually fills. Confirm against the entity version in your environment before the first load.

Field Entity Where it comes from Notes
SALESORDERNUMBER Headers and lines The sales order number you assign per customer PO. Required on both, must match
ORDERINGCUSTOMERACCOUNTNUMBER Headers The buyer on the PO, matched to a customer account. Required
INVOICECUSTOMERACCOUNTNUMBER Headers The bill-to on the PO, usually the same account. Required
REQUESTEDSHIPPINGDATE Headers and lines The ship date or delivery date the buyer printed. Required on both
CUSTOMERREQUISITIONNUMBER Headers The purchase order number the customer printed. Shown as Customer requisition
CURRENCYCODE Headers The currency on the PO. USD for most US customers
PAYMENTTERMSNAME Headers The payment terms on the PO, such as Net 30. Must exist in terms of payment
ITEMNUMBER Lines Your item, from the buyer part number via a mapping or cross reference. Required, validated
ORDEREDSALESQUANTITY Lines Quantity on each line. Numeric
SALESUNITSYMBOL Lines The unit the buyer printed, mapped to your unit symbol. EA, CS, BX and similar
SALESPRICE Lines The unit price on the PO. Leave out to let D365 price it
DELIVERYADDRESSLOCATIONID Lines The ship-to block, matched to a customer address. Required

How the import runs

Four steps from the customer attachment to sales orders in Dynamics 365.

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 buyer to a customer account, each part to your item and the ship-to to a delivery address.

Tip: Save the mapping per customer and reuse it on every later order.

3

Build the two files

One row per PO in the header file, every line in the lines file, the same sales order number in both.

Tip: Keep the header entity first in the import project sequence.

4

Import and check

Run the import project in Data management, then read the execution summary and staging data for any rejected rows.

Tip: Test with one two-line PO before a full batch.

Why order desks use this in front of Dynamics 365

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

D365 sales order import questions

Open the Data management workspace, create an import project, add the Sales order headers V2 and Sales order lines V2 entities with an Excel or CSV file for each, keep headers first in the sequence and run the import. Lines always need a header that already exists.

Two entities. Sales order headers V2 creates the header with customer, delivery and payment details, and Sales order lines V2 creates the lines with items, quantities and prices. Over OData they appear as SalesOrderHeadersV2 and SalesOrderLines.

Microsoft lists SALESORDERNUMBER, ORDERINGCUSTOMERACCOUNTNUMBER, INVOICECUSTOMERACCOUNTNUMBER and REQUESTEDSHIPPINGDATE as required. Fields such as CURRENCYCODE, PAYMENTTERMSNAME and DELIVERYTERMSCODE are optional but must match codes that already exist in your setup.

Use the Sales order lines V2 entity after the headers exist. Each row needs SALESORDERNUMBER, ITEMNUMBER, REQUESTEDSHIPPINGDATE and DELIVERYADDRESSLOCATIONID, plus quantity, unit and price. INVENTORYLOTID needs a number sequence or an Auto-generated mapping.

In the Customer requisition field, which the header entity exposes as CUSTOMERREQUISITIONNUMBER. Many companies also copy it into Customer reference. Fill it on every import so the order desk can find the order by the buyer reference.

Yes, through the same entities, but Microsoft notes the header must still have an open order status. Once an order is delivered or invoiced, change it in the sales order form instead of through Data management.

Not through the data entities or OData, which expect rows or JSON. A customer PO that arrives as a PDF has to become structured data first, keyed by hand or extracted, before Dynamics 365 can create the sales order in bulk.

No. PurchaseOrders reads the customer purchase order and returns Excel, CSV or JSON. It does not connect to Dynamics 365 or run the import. You load the rows with Data management, the Excel add-in or an integration you already run.