How to upload customer master data from Excel: XD01 or BP
On SAP ECC, PostNow.ai uploads customer master data from Excel by replaying an XD01 recording, one customer per row, and writes the new customer number back. On S/4HANA, XD01 redirects to transaction BP, which does not support batch input, so PostNow.ai creates the business partner with BAPI_BUPA_CREATE_FROM_DATA; customer roles go through an interface listed in SAP Note 2417298.
- ECC: one XD01 template per account group and screen path, then a second template for further sales areas.
- S/4HANA: business partner first, then customer roles
FLCU00(company code) andFLCU01(sales).
Most customer loads that go wrong have valid data. They used the wrong account group, a number range nobody checked, or a customer that already existed under a slightly different name. This page covers those decisions first and the mechanics second. For choosing a method across all SAP objects, see SAP mass upload from Excel.
How PostNow.ai uploads customer master data from Excel
PostNow.ai treats an ECC customer upload as a recorded transaction. A designer records XD01 once, and every Excel row replays that recording through CALL TRANSACTION, so SAP runs the same field-status, number-range and sales-area checks it runs for a person at the keyboard.
1. Record XD01 for one account group
Press Record on the PostNow.ai ribbon and create one real customer in a test client. On the initial screen (SAPMF02D 0100) you enter the account group (RF02D-KTOKD), company code (RF02D-BUKRS) and the sales area (RF02D-VKORG, RF02D-VTWEG, RF02D-SPART). Then walk every screen the customer needs, from address to partner functions, and save. The recording runs through SHDB, so you see each screen, field and OK-code it captured.
2. Map columns, and fix what should not vary
In the Mapping Designer each recorded field becomes an Excel column, a fixed value or a system value. Make the account group a fixed value, because the account group decides which screens and fields exist. If the whole file belongs to one company code and sales area, fix those too, so the file carries only what differs per customer.
3. Restrict the values that drive SAP's behaviour
Give country, reconciliation account, payment terms and customer pricing procedure a value list, from SAP's check table or typed by you, and switch on Restrict to make it a hard allow-list at Validate. Opt-in Pre-Validation also asks SAP whether each value exists in its check table.
4. Simulate and Debug a few customers
For XD01, PostNow.ai's Simulate strips the save and walks the screens. That still catches screen-level errors, such as a sales area SAP rejects. Debug replays rows in the foreground in SAP GUI, either every screen or only the screens with errors. Debug a few customers from different countries, then look at them in XD03.
5. Run, and write the customer number back
Run posts each row under your own SAP login and writes SAP's message to that row's Run Log. Map the message variable that carries the new number to a column, so the customer number sits next to the source row. Retry Failed re-posts only rows whose Run Log starts with ERROR, scanning from the current Start Row. A second Run on the same sheet first lists the rows that already show a success and offers Skip posted rows, Post again or Cancel, which matters here: posting a row again creates a second customer.
Recording rules that make a replay reliable are in the BDC recording guide. If this is your first upload of any kind, how to upload data into SAP from Excel walks through one file end to end.
XD01 in SAP ECC vs Business Partner in S/4HANA
PostNow.ai uses a different route per release, because SAP changed the object. On ECC the customer is the master record. On S/4HANA the business partner is, and the customer is a set of roles that CVI keeps in step with it.
| SAP ECC | SAP S/4HANA | |
|---|---|---|
| PostNow.ai route | XD01 recording, one template per account group, optional second template for more sales areas | BAPI_BUPA_CREATE_FROM_DATA in BAPI mode for the business partner; customer roles and segments through an interface your SAP team provides (see the next section) |
| Where you maintain it | XD01 (central), FD01 (general and company code), VD01 (general and sales area) | Transaction BP. XD01, XD02 and XD03 redirect to BP. |
| What controls numbering and fields | Account group: number range, field status, one-time account | BP grouping for the BP number range, linked to a customer account group for the customer number |
| Company code data | KNB1 | Role FLCU00, stored in KNB1 |
| Sales area data | KNVV, partner functions in KNVP | Role FLCU01, stored in KNVV and KNVP |
| Link between the objects | None needed | CVI_CUST_LINK (business partner GUID to customer number) |
What happens when you call XD01 in S/4HANA. SAP sends you to BP, which its conversion guide calls the single point of entry for business partners, customers and suppliers.
Why not record BP instead? SAP knowledge base article 1951318 says batch input and eCATT are not supported in transaction BP. PostNow.ai can record it, but an unsupported recording is a fragile thing to hand to operators.
S/4HANA business partners only? If the job is BP itself (groupings, roles, the supplier and customer sides together), the SAP Business Partner automation from Excel guide covers it with PostNow.ai end to end.
BAPI or recording: which customer master API to use
PostNow.ai's BAPI mode can call any RFC-enabled function module by name, and it reads SAP's verdict from a parameter called RETURN, whether that is a table or a single structure. That decides which interfaces fit.
| Route | Release | What it creates | Watch out for |
|---|---|---|---|
| PostNow.ai: XD01 recording from Excel | ECC | General data, one company code and one sales area per save, with whatever the recorded screens contain | One template per account group and screen path; a changed screen layout means re-recording |
PostNow.ai: BAPI_BUPA_CREATE_FROM_DATA | S/4HANA | The business partner: category, grouping, central data, name and address, communication data | Covers the central data; customer roles, company code and sales area data come from a CVI interface in Note 2417298 |
BAPI_CUSTOMER_CREATEFROMDATA1 | ECC | A customer copied from a reference customer and sales area (PI_COPYREFERENCE), with personal or company address data | SAP's own short text reads "Only for ONLINE Store". It is built for consumers, not for B2B customers with their own company code data |
CL_MD_BP_MAINTAIN | S/4HANA | Business partner with customer roles, company code and sales area data, through CVI | An ABAP class, not an RFC function. To call it from Excel, your developers wrap it in an RFC-enabled Z function module with a RETURN parameter. Mind KBA 2850047 on partner functions |
| Migration Cockpit object Customer | S/4HANA | Complete customers from SAP's migration template, with a separate object to extend existing customers by new organisational levels | A migration tool for projects, run by the migration team, not a daily upload for operators |
IDoc DEBMAS | ECC and S/4HANA | Customers sent from another system | Interface work for IT. SAP points S/4HANA-to-S/4HANA business partner integration to its web services instead |
A trap in BAPI search. Search for "create customer" and BAPI_CUSTOMER_CREATEFROMDATA1 comes up first in PostNow.ai's Find with AI. Read its short text first; for business customers on ECC, the XD01 recording is the better route.
What SAP recommends on S/4HANA. SAP Note 2417298, "Integration of Business Partner with Customer and Supplier Roles", lists the interfaces SAP releases for this. Do not build on RFC_CVI_EI_INBOUND_MAIN: KBA 2650140 says it is not supported from S/4HANA 1709 FPS2 on. The general trade-off between the two methods is in BAPI vs BDC in SAP.
Account groups, number ranges and mandatory fields
In PostNow.ai the account group is a fixed value of the template, because it changes the screens the recording walks through. Four things hang off it.
- The number range. The account group carries the number range, and the number range decides whether SAP assigns the customer number (internal) or your file must supply it (external). With external numbering the number is a column; with internal numbering you leave it empty and write SAP's number back.
- Field status, which is where "mandatory fields" come from. The account group sets each field to suppressed, optional or required. Field status can also depend on the company code and on the transaction, so the same field can be required in one company code and hidden in another. Mark the required columns from your own configuration, not from another system's list.
- Which screens exist. A field the account group suppresses is not on the screen. A recording made with one account group and replayed with another sends values into fields that are not there, and batch input reports
00 349. PostNow.ai flags this "field does not exist on screen" message, because it means data was silently dropped. - Partner functions. The partner determination procedure assigned to the account group decides which partner functions a customer needs. For a sold-to party, SAP fills ship-to, bill-to and payer with the sold-to's own number by default. If a mandatory partner function is missing in the customer master, SAP Help says the order stays incomplete until someone enters it.
On S/4HANA, two numbers. The BP grouping determines the business partner number range, and the customer account group determines the customer number range. CVI links the two in Customizing (Define Number Assignment for Direction BP to Customer). If BP and customer should share one number, SAP's conversion guide explains how the ranges must fit for the "same numbers" setting. Decide it before the first load.
On S/4HANA, field status has more sources. The BP role, the BP grouping and the customer account group all carry field status settings. If a field is unexpectedly required or hidden, check all three before you change the template.
Company code and sales area views: one save, one sales area
PostNow.ai replays XD01 the way it was recorded, and the XD01 initial screen takes one company code and one sales area. That gives every multi-area load the same shape.
- The sales area is one key. Sales organisation, distribution channel and division are checked as a combination. Three valid values can still form a combination that is not defined for customers, and SAP answers
F2 644. Pre-Validation checks each value on its own, so the combination is something you check in Simulate or Debug. - A second sales area is a second run. Create the customers with the first sales area, let the Run Log write the numbers back, then run a second template (VD01, or XD01 with the existing number and the new sales area) for the extensions. PostNow.ai chains run on BAPI templates; with recordings, plan these as two runs.
- A second company code works the same way. FD01, or XD01 with the existing number and the new company code. The reconciliation account must be valid in that company code, or SAP answers
F2 068. - Partner functions point to customers that must already exist. SAP requires a master record for every partner you enter. Load payers and ship-tos that belong to other customers first, then the sold-to parties that reference them.

KNVP.Duplicate check before a customer master upload
SAP creates a new customer for every row it accepts, even when the same company already exists under another number. Do the duplicate check in Excel before the run, against SAP and against the file itself.
- Pull what exists. In the PostNow.ai Report Library, Duplicate Customers (W-12) groups
KNA1by name, tax number 1 and country, and Customer Master Sales 360 (SD-01) lists customers with sales areas, partner functions and reconciliation account. Operators can run both, under their own SAP authorisations. - Match on more than the name. Normalise the name (legal form, punctuation, spacing), then compare tax number, postcode and street with
COUNTIFSagainst the extract. A tax number match is strong evidence; a name match alone is a question for a person. - Check the file against itself. Two rows for the same new customer pass every SAP check and give you two numbers. The same
COUNTIFSon the file catches them. - Remove or mark rows before Validate. If the match exists only in another sales area, the row belongs in the extension template.
SAP's own checks. S/4HANA can warn about likely duplicate business partners from the address index, as a pop-up for the person creating the partner. That is a prompt for someone at the screen, so treat it as a second line, not your check.
Who may request, approve and own a new customer is a governance question; SAP master data governance covers owners, approvals and audit with or without SAP MDG.
Worked example: 40 new sold-to customers in company code 1010
PostNow.ai handles this with one XD01 template and one run, on an ECC system with internal numbering. Sales sends 40 new trade customers for company code 1010, sales area 1010 / 10 / 00, account group 0001.
- Check for duplicates. W-12 and SD-01 go into the workbook. Tax numbers match on two rows: customer
200371already exists in sales area1010/10/00, and a second customer exists only in sales organisation1020. The first row is removed. The second moves to the extension file for a later run. Two rows in the file share a tax number; Sales confirms they are the same company, and one row is deleted. - Build the template. Account group
0001, company code1010and the sales area are fixed values. Reconciliation account, payment terms and customer pricing procedure have allow-lists with Restrict on. Name, country, postcode and tax number are required columns, matching the field status of0001. - Validate. One row has no name, one tax number is longer than the field, and one payment term is not on the allow-list. They are fixed in Excel and Validate is clean.
- Debug three rows. A German, a French and a US customer, all screens in the foreground. XD03 shows the right reconciliation account, and sold-to, ship-to, bill-to and payer all point to the customer itself.
- Approve and run. If an approval policy covers the template, Run waits until someone other than the submitter approves, and an edit after approval cancels it. Run creates the remaining customers and fills the number column.
- Hand back. Sales gets the workbook with a customer number on every row. With Call Transaction set to
XD03, a click on a number opens that customer in display mode.
Checklist before a customer master upload
PostNow.ai enforces the formats and allow-lists in the template; this list covers the decisions that stay with the master data team.
- You know whether the number range is internal or external, and external numbers in the file are unique and inside the range.
- Required columns match the field status of the account group, company code and transaction in the target system, not in a sandbox.
- The sales area combination is valid for customers, and Simulate on a few rows has shown no
F2 644. - Customers referenced as payer, bill-to or ship-to already exist and are extended to the sales area.
- The file has been checked against W-12 / SD-01 and against itself for duplicates.
- On S/4HANA: grouping, account group and number assignment are maintained, and the interface for company code and sales area data is agreed.
- A few rows have run in Debug in a quality client, and XD03 or BP shows what you expected.
How to check customer master data after the upload
PostNow.ai gives you the first check per row: the Run Log holds SAP's message and the customer number, and the central audit records each row's transaction, template, SAP system, client, user and result. The rest of the proof comes from SAP.
- Tables on ECC. General data in
KNA1, company code data inKNB1, sales area data inKNVV, partner functions inKNVP. Count the new rows per table; 40 customers with one company code and one sales area give 40 rows in each of the first three. - On S/4HANA, the link as well.
BUT000holds the business partner andCVI_CUST_LINKlinks it to the customer number. A business partner without a link row has no customer. Synchronisation errors between BP and customer are in the post-processing office, transactionMDS_PPO2. - Display a sample. XD03 on ECC, BP on S/4HANA, across countries and account groups.
- Report Library. Customer Master Sales 360 (SD-01), filtered on creation date, lists the new customers with their sales area data in Excel. The SAP customer master report explains which general, company code and sales-area fields to pull.
- A test order. One VA01 order per account group in the quality client. Partner determination, pricing and tax only show up there.
- The Run Log is final. PostNow.ai runs recordings with synchronous update, so each row's messages and customer number return at once in the Run Log.

Credit limits are a separate object. On ECC they are FD32, and that load is covered in bulk credit-limit updates.
Common customer upload errors and the fix
PostNow.ai writes SAP's message to the row it belongs to, so the fix starts from the message.
| Message | What it means | Fix |
|---|---|---|
F2 644 Sales area &1 &2 &3 is not defined for customers | The combination is missing in TVTA, or it refers to another sales area for customer data | In XD01 use Extras, Sales areas, All areas to see valid combinations; restrict the three columns to those |
F2 007 Account &1 already exists | With external numbering, the number is taken. With internal numbering, KBA 2923061 traces it to a number range at or near its highest number | Check the file against KNA1; check the number range status before the run |
F2 068 Account &1 is an invalid reconciliation account in company code &2 | The G/L account is not set up as a customer reconciliation account in that company code | Allow-list the reconciliation account per company code |
00 349 Field does not exist on the screen | The recording sends a field the screen does not show, often because the row's account group suppresses it | Keep one template per account group; PostNow.ai flags these drops |
Role FLCU00 / FLCU01 not maintained (S/4HANA) | Company code or sales data was sent for a business partner without the customer role | Add the customer roles before or with the company code and sales area data (KBA 2736246) |
What to plan for in a customer master upload
PostNow.ai replays XD01 as recorded and calls BAPIs as SAP defines them, so SAP's own customer master rules decide every result.
- Prove combinations in Simulate or Debug. Pre-Validation confirms that each value exists in SAP. Whether the sales area combination and the reconciliation account fit the company code, SAP decides in Simulate, Debug and Run.
- Plan an RFC wrapper for order-ready S/4HANA customers.
BAPI_BUPA_CREATE_FROM_DATAcreates the business partner. Company code and sales area data come from an interface listed in Note 2417298, which your SAP team wraps for RFC. - Run the duplicate check on every new file. The re-run guard reads the Run Log and protects a second Run on the same sheet. A new file with the same customers starts with an empty Run Log, so your duplicate check is what catches them.
- Correct created customers in SAP. Stop cancels the rows not yet sent; created customers stay in SAP, and a wrong one is blocked or flagged for deletion there.
- Plan a person to start each run. Recording templates run when a user starts them in Excel.
- Keep the PostNow.ai portal reachable for approved templates. The approval check runs against the portal; if the portal cannot be reached, the check lets the run through.
Making a template like this repeatable for a team (designers who record, operators who only run, a published template in the central library) is the subject of Excel to SAP automation. Orders for the new customers are covered in VA01 mass sales order creation, and the vendor side in XK01 vendor master upload. Where customers sit in the full SD load order (customers, prices, orders, deliveries, billing) is in SAP SD mass upload.
