Quick answer

How to choose an SAP mass upload method

Choose the SAP mass upload method object by object. PostNow.ai posts an Excel template through a BAPI, such as BAPI_ACC_DOCUMENT_POST for journals, or through a transaction recorded once in SHDB. Take the BAPI where one covers your fields and record where none does; MIRO and ME21N belong on their BAPIs. Then Validate, Simulate and post a 10-row pilot.

This page is for deciding how a load should run before anyone builds it. If you are doing your first upload and want the clicks, the step-by-step version is how to upload data into SAP from Excel.

SAP mass upload methods: BAPI, recording, LSMW or Migration Cockpit

PostNow.ai gives every Excel template one of two posting modes, BAPI or recorded transaction, and both run through SAP's own business logic under the user's own SAP login. The other tools in the table are SAP's.

MethodUse it whenWhat to plan for
PostNow.ai, BAPI modeA BAPI covers the object and your fields: journals, POs, sales orders, goods movements, materials, cost centres. Search any function module by name in your system, or describe the job to Find with AI.Map custom fields through EXTENSIONIN; use recording mode for fields that exist only on a screen
PostNow.ai, recording modeNo BAPI fits, or you want the exact screens your team keys today: FS00, ECC vendor and customer masters, VK11 with SAP's own validity handlingUse a BAPI for transactions SAP does not support in batch input (MIRO, ME21N); record on the target client where screens differ by field status
MM17 / MASS (SAP mass maintenance)Changing a field across existing records inside SAPChanges existing records only. SAP mass change covers it
LSMWAn ECC load that already worksSAP Note 2287723: loading S/4HANA with LSMW is not recommended and at the customer's own risk SAP Note
S/4HANA Migration CockpitInitial load of SAP-delivered migration objects into a new S/4HANA system, from files, staging tables or direct transfer SAP HelpS/4HANA only, delivered objects only, built for go-live rather than month-end
Custom ABAP upload programHeavy transformation logic that IT ownsEvery change waits for a developer and a transport

Every posting from PostNow.ai goes through a BAPI or CALL TRANSACTION, so SAP's checks, change documents and follow-on updates all happen as they would for a manual entry. What has to exist in SAP differs by mode: BAPI mode needs only your user's RFC authorisation, while recording mode runs through PostNow.ai's ZPOSTNOW_* recording objects, which Basis installs once per system. For the BAPI-or-recording choice in depth, see BAPI vs BDC. For a recording that replays reliably, see the BDC recording guide.

How PostNow.ai runs a mass upload

One template per object, inside Excel

A designer maps the template once to a BAPI or a recording. Anyone allowed to run it gets the same checks on every row, and SAP's answer lands beside each row.

Map

Columns tied to BAPI fields or recorded screen fields, with leading zeros, date format and allow-lists per field.

Check

Validate the file, optionally confirm master data exists in SAP, then Simulate.

Post

Standard BAPI or CALL TRANSACTION under your own SAP login and authorisations.

Trace

Document number or SAP message per row in the Run Log, plus a central posting audit.

Start free trial 14-day trial · runs inside Excel

Which upload method for which SAP transaction

PostNow.ai can post most of these objects either way. The table shows the route we would start with, and the trap that decides it.

TransactionPostNow.ai routeWhy, and the trap to know
FB50 / FB01 journalsBAPI BAPI_ACC_DOCUMENT_POST, or a recorded FB50A recorded FB50 can Simulate with =BS, so SAP runs its full document check, balance included. An FI document holds at most 999 line items (message F5 727) SAP KBA
FB60 vendor invoices without POBAPI BAPI_ACC_DOCUMENT_POSTNo PO to check against, so the allow-lists and existence checks in the template carry the control
MIRO invoices against POBAPI BAPI_INCOMINGINVOICE_CREATE onlySAP does not support batch input for MIRO (SAP Note 381593), so a recording is not an option SAP Note
ME21N purchase ordersBAPI BAPI_PO_CREATE1, header/detailME21N is an Enjoy transaction and batch input is not supported for it (SAP Note 217437). PostNow.ai fills POITEMX and the other X structures for you SAP Note
MIGO goods movementsBAPI BAPI_GOODSMVT_CREATEOne call creates one material document, so group rows into documents before the run (next section)
VA01 sales ordersBAPI BAPI_SALESORDER_CREATEFROMDAT2, header/detailOrders come back "not yet complete" when the INX flag structures are empty. PostNow.ai fills X structures from the BAPI's dictionary shape
MM01 / MM02 materialsBAPI BAPI_MATERIAL_SAVEDATAOne BAPI creates, changes and extends, view by view
XK01 / XD01ECC: recording. S/4HANA: BP, via BAPI_BUPA_CREATE_FROM_DATAIn S/4HANA, XK01 and XD01 lead to transaction BP, so an ECC recording will not carry over SAP Help
KS01 cost centresBAPI BAPI_COSTCENTER_CREATEMULTIPLEValidity dates per row; the controlling area must be right on every line
FS00 G/L accountsRecordingOne transaction maintains the chart-of-accounts and company-code segments
VK11 pricing conditionsRecordingSAP Note 1135984 advises against creating conditions with BAPI_PRICES_CONDITIONS. The VK11 upload guide covers keys, scales and overlapping validity
CS01 BOMsFunction module CSAP_MAT_BOM_CREATENot a BAPI, but PostNow.ai can call it the same way. Load components before the assemblies that use them

For anything not listed, search the function module by name in PostNow.ai's BAPI mode, or type the job into Find with AI ("post a goods receipt for a purchase order"). If search is not authorised in your system, PostNow.ai offers a built-in list of common BAPIs. Copy from SAP then prefills a BAPI template from a document you created by hand, which is the fastest way to see which fields SAP actually fills. The 75 free SAP Excel templates start you from a mapped layout, for example FB50 journal entry, ME21N purchase order and MIGO goods receipt.

Header and line items from Excel: one row or many per document

PostNow.ai turns spreadsheet rows into SAP documents in one of two ways, and the choice decides whether a 600-row file posts 600 documents or 40. Make it before you map anything.

  • Header/detail. A marker column labels each row H (header) or D (detail), and one header plus its details posts as one document. AutoMap H/D creates the columns. Use it when the source already separates headers from lines, such as PO headers and items.
  • Flat rows. No marker column. Every row is a line item, and a split column decides where a new document starts: on a value, on change, on change ignoring blanks, or on blank. Use it for journal extracts where the reference repeats on every line.
  • Sort before you split. Split "on change" starts a new document whenever the value changes. An unsorted file breaks one journal into several, and those usually fail on balance.
  • Respect SAP's per-document limits. An FI document stops at 999 items. BAPI_GOODSMVT_CREATE makes one material document per call. Plan the split column around both.

A template is built for one grouping, so agree it with whoever prepares the file before the first month's extract arrives.

How many records can you upload to SAP at once?

PostNow.ai posts one document at a time and commits each one on its own, so volume is a question of run time rather than a row cap. A BAPI document is committed only when SAP returns no E or A message, and otherwise rolled back. A failed document never takes the good ones with it.

  • Use Run Scope to pilot. Set a start row and an end row: Auto, or a preset from 10 up to 5,000. Post 10 or 25 rows, open two of the documents through their written-back numbers, then run the rest from the next row.
  • Expect lock errors when work overlaps. If someone edits the same materials, or two runs touch the same records, SAP reports locks such as M3 897, "The plant data of the material & is locked by the user &" SAP KBA. These are timing problems, not data problems: check SM12, wait, then retry.
  • Leave the sheet alone during the run. PostNow.ai protects the run sheet while it posts, so the rows stay exactly as they were when the run started; you can still scroll.
  • Plan a person for the whole run. Runs start from the user's own computer under their own SAP login, so a large load needs a person and an open Excel session for its whole length.
  • Mass Change sizes its own batches. Mass Change pulls 100 rows by default, asks for confirmation above 500, and works on flat templates.

Pre-run checklist for an SAP mass upload

PostNow.ai checks a file in layers before anything is kept in SAP. This is the order we work through before a production run; what each layer can and cannot catch is laid out in Excel to SAP automation.

  • Field rules set. Leading zeros with a target length on every key field (vendor 100045 becomes 0000100045), and an explicit format on every date field rather than Auto.
  • Allow-lists where values are fixed. SAP Lookup gives F4 help from the check table. A custom list with Restrict switched on fails any value outside it at Validate, for example only company code 1010 in this run.
  • Validate is clean, with Pre-Validation on. Tick Pre-Validation on the vendor, cost centre and plant columns so SAP confirms they exist. On a 5,000-row file, export the errors to CSV and send them back to whoever owns the data instead of fixing them yourself.
  • Simulate is green. A BAPI Simulate calls the BAPI and then BAPI_TRANSACTION_ROLLBACK instead of a commit; a BAPI that commits inside SAP, such as the billing BAPI, is tested with its own test flag on a quality client. A recording runs SAP's full document check only if it has a Simulate OK-code, such as =BS on FB50; otherwise only the screens are checked, and balance and duplicate checks wait for the real run.
  • Check recording is clean. For a recorded template, the designer's Check recording flags screens a condition leaves without an OK-code and offers Add /00 for me. The same check gates Publish.
  • Tested in quality first. Field status and required fields differ by client and account group. A file that passes in QAS can still fail in production for that reason alone.
  • Posting period open. Check OB52 for the period your posting dates fall in before an FI load.

SAP mass upload errors: what the message means and the fix

PostNow.ai writes SAP's own message into the Run Log beside the row that caused it. Sort by that column first: 140 errors often come down to two or three causes, and one fix clears a whole group. If a message is unclear, AI Review explains it from SAP's messages and the field structure, by default without your cell values. These are the messages we see most in bulk loads.

MessageWhat it meansFix
F5 201 Posting period & & is not open Message textThe posting date falls in a period that is closed for that account typeCorrect the date column, or have finance open the period (OB52), then Retry Failed
F5 727 Maximum number of items in FI reachedA document crossed 999 line items, often because the split column was unsorted or blankSort the file, or add a split value so each document stays under 999 lines
00 349 Field & does not exist in the screen Message textThe recording fills a field the screen does not show in this system or for this data, often because of field status SAP KBAPostNow.ai flags this drop instead of letting the value vanish. Re-record on the target client, or make the field conditional
M3 897 Plant data of the material is lockedAnother user or run holds the lockCheck SM12, wait, then Retry Failed
A recording fails on a screen you did not expectThe data took the transaction down a different screen path from the recordingRun Debug in errors-only mode (E) to watch the failing screen in SAP GUI, then fix the recording or the data

How to re-run a failed SAP upload without posting twice

PostNow.ai re-posts failures through Retry Failed. It sends only the rows whose Run Log starts with ERROR, rebuilds each failed document with all its lines, and ignores a second click while a batch is running. One detail catches people: Retry Failed scans from the current Start Row down. If you piloted rows 2 to 25 and then ran from row 26, set Start Row back to 2 before you retry, or failures in the pilot range are skipped.

⚠️
Run asks before it re-posts. Before a real Run, PostNow.ai reads the Run Log and lists the rows in range that already hold a document number, with Skip posted rows, Post again or Cancel. Post again posts them a second time. The check reads this sheet, so keep re-runs in the same workbook.
  • Stop keeps what is already posted. Stop cancels the rows still to come. Documents already posted stay in SAP, and the Run Log shows the last one. Resume from the next row, and reverse anything wrong with SAP's own reversal transaction.
  • A dropped connection needs a look before a retry. If the link to SAP breaks while a row is in flight, check in SAP whether that document was saved before you retry the row.
  • Keep the document number in the file. PostNow.ai writes the document number back per row: $DOC_NO or the message variables for a BAPI, MSG_V1 to MSG_V4 for a recording. Saved with the workbook, it shows what posted, and clicking the number opens the display transaction (FB03, ME23N, MM03, VA03, XK03, XD03).
  • A recording's message comes after SAP's update. Recorded rows run with synchronous update, so each call waits for SAP's update task to finish before its message reaches the Run Log. The BDC recording guide lists the run settings.

Worked example: 640 accrual lines into 80 FB50 documents

PostNow.ai handles this month-end job with one BAPI template on BAPI_ACC_DOCUMENT_POST, flat rows, and a split on the reference column. Company code 1010, period 09, 640 lines from the accruals workbook, 8 lines per accrual document.

Group the rows

The sheet is sorted by the column Accrual ref (ACR-0901 to ACR-0980), and the template splits on change of that column, so 640 rows become 80 documents. Cost centres such as 4120 get leading zeros to 10 characters, and the posting date column uses DD.MM.YYYY.

Validate and check existence

Validate flags 9 rows. Six cost centres do not exist in controlling area A000, which the existence check catches, and three dates read as text after a copy-paste from email. Both get fixed in the sheet.

Zero coral cells before moving on.

Simulate

Simulate calls the BAPI for every document and rolls each one back. One document, ACR-0937, comes back from SAP as out of balance by 0.01 because of a rounded amount in the source. Fix the cell and simulate again.

Pilot, then run

Run Scope rows 2 to 25 posts the first three documents. Open one through its document-number link in FB03, then run from row 26 to the end.

Retry only what failed

Four documents fail with F5 201 because their posting date is 01.10, and period 10 is not open yet. Correct the dates to 30.09, set Start Row back to 2 so the pilot range is included, then Retry Failed. Only those four documents are re-sent; the 76 posted documents are not touched.

80 document numbers in the Run Log, matched against 80 accrual references.

The same template runs next month unchanged. Handing it to other people to run (roles, approvals, the template library) is covered in Excel to SAP automation.

Mass upload in S/4HANA vs ECC: what changes for your templates

PostNow.ai posts to both ECC and S/4HANA through the same two modes. What changes is which templates survive the move.

  • Vendor and customer recordings do not carry over. In S/4HANA the business partner is the entry point, and XK01 and XD01 lead to BP. Rebuild these templates on BP, or on BAPI_BUPA_CREATE_FROM_DATA, adding the supplier or customer role and company-code data as further steps.
  • BAPI templates usually do. A template on BAPI_ACC_DOCUMENT_POST, BAPI_PO_CREATE1 or BAPI_MATERIAL_SAVEDATA does not depend on a screen layout. Re-run Simulate on the new system before trusting it.
  • Don't build anything new on LSMW (SAP Note 2287723, in the methods table). LSMW alternatives compares replacements, and SAP data migration from Excel covers go-live loads alongside the Migration Cockpit.

What to plan for in an SAP mass upload

PostNow.ai posts through SAP's own interfaces, so these jobs stay with SAP's own transactions and checks.

  • Reverse in SAP. Correct a posted document with SAP's own reversal transaction.
  • Rely on SAP's duplicate checks for documents. They apply on a real run or a full Simulate. For master data, the Report Library's duplicate vendor and customer reports find duplicates before you load.
  • Prove the balance with a full Simulate. A full Simulate or the run proves that debits and credits balance.
  • Build chains and schedules on BAPI templates. Chains (several templates per row in sequence) and scheduled runs use BAPI mode; recorded transactions run when the user starts them.
  • Map long texts through the BAPI. A BAPI's own text tables can be mapped like any other field.
  • Pair templates with the Migration Cockpit for an initial S/4HANA load. SAP's tool loads its delivered migration objects; PostNow.ai templates cover the other objects and the data loads after go-live.

Mass upload guides by module and transaction

Each PostNow.ai guide below takes one area further, with the fields, structures and traps for its objects. The full list by transaction follows after the article.

SAP transactions loaded from Excel with PostNow.ai, grouped by module: FB50, FB60, FB01 and KS01 in finance; MM02, XK01, XD01 and CS01 in master data; ME21N, ME51N, MIGO and MIRO in procurement; VA01, VK11 and PA30 in sales and HR.
Diagram The transactions teams load from Excel most often, grouped by module.

SAP FICO mass posting

Journal entries, vendor invoices, G/L documents and cost centres, with period and balance checks.

SAP master data mass upload

Materials, vendors, customers, BOMs and HR master, with view completeness and S/4HANA business partners.

SAP MM mass upload

Purchase orders, requisitions, goods movements and logistics invoices, the procure-to-pay chain.

SAP SD mass upload

Sales orders, deliveries, billing and pricing condition records.

Methods and alternatives

How the techniques compare, and what replaces LSMW or GUI scripting.

Excel to SAP automation

Step-by-step first uploads, repeatable team templates, migration loads and mass changes.

Frequently asked questions

How does PostNow.ai mass upload data from Excel to SAP?
PostNow.ai is an Excel add-in that maps a template to an SAP BAPI, such as BAPI_ACC_DOCUMENT_POST or BAPI_PO_CREATE1, or to a transaction recorded once in SHDB and replayed by CALL TRANSACTION. Validate checks the file and can confirm referenced master data exists in SAP, and Simulate lets SAP check each document before the real run. Run posts under your own SAP login and writes the document number or SAP message beside each row. Retry Failed re-posts only the rows whose Run Log starts with ERROR.
Should I use a BAPI or a BDC recording for an SAP mass upload?
Use a BAPI when one covers the object and every field you need, because it does not depend on screen layouts and returns a structured message per document. Use a recording when no BAPI fits, or when a field exists only on a screen. In PostNow.ai both are template modes, so one project can use BAPIs for some objects and recordings for others.
Can I upload MIRO invoices or ME21N purchase orders with a recording?
MIRO, no: SAP Note 381593 says batch input is not possible for MIRO, so post invoices through BAPI_INCOMINGINVOICE_CREATE. ME21N is not supported in batch input either (SAP Note 217437). PostNow.ai can replay an ME21N recording in a dedicated SAP GUI session, but purchase orders are safer through BAPI_PO_CREATE1, where the header/detail template fills POITEMX and the other X structures for you.
How many records can I upload to SAP at once?
PostNow.ai posts and commits one document at a time, so volume is about run time, not one row limit. SAP's per-document limits still apply: an FI document holds at most 999 line items, and BAPI_GOODSMVT_CREATE creates one material document per call. Pilot 10 or 25 rows with Run Scope, check the documents, then run the rest from the next row.
How do I re-run a failed SAP upload without posting duplicates?
Fix the failed cells, set Start Row back to the first data row, and use Retry Failed, which re-posts only rows whose Run Log starts with ERROR. If you click Run on the same range instead, PostNow.ai first offers to skip the rows that already have a document number; choose Skip posted rows, because Post again posts them a second time. If the connection dropped mid-row, look that document up in SAP before retrying it.
Can I mass upload to SAP without LSMW?
Yes. A BAPI or a recorded transaction run from Excel covers what LSMW is usually used for, without a per-object LSMW project. SAP Note 2287723 says using LSMW to load S/4HANA is not recommended and at the customer's own risk. For go-live loads of SAP-delivered objects, the S/4HANA Migration Cockpit is SAP's tool.
What does "Field does not exist in the screen" (00 349) mean in a batch input upload?
The recording tries to fill a field that the screen does not show in this system or for this data, often because of field status or a different client. The value never reaches SAP. PostNow.ai flags the drop. Re-record on the target client or make that block conditional on the data.
Does SAP mass upload from Excel work the same in S/4HANA as in ECC?
BAPI-based templates usually carry over, but test them with Simulate on the new system first. Vendor and customer recordings do not, because XK01 and XD01 lead to transaction BP in S/4HANA. Rebuild those on BP or BAPI_BUPA_CREATE_FROM_DATA, with the roles and company-code data as further steps.
Start with a real file

Run your next SAP mass upload from Excel

Map your columns once, validate every row against live SAP, and post through standard logic. Each row comes back with the document number it created.

Start free trial
  • 14-day free trial
  • Works with ECC and S/4HANA
  • Your data stays in your systems

Mass upload by SAP transaction

PostNow.ai has a guide for each SAP transaction you can load from Excel, grouped by module.