Quick answer

How SAP FICO mass posting works

SAP FICO mass posting means creating many finance documents in one run from a file instead of keying them one by one: G/L journals (FB50), supplier invoices without a PO (FB60) or against a PO (MIRO), customer invoices (FB70), asset postings and cost reposting. PostNow.ai runs these finance postings from Excel through the BAPI behind each transaction, mostly BAPI_ACC_DOCUMENT_POST. Validate checks the sheet offline, Simulate lets SAP check every document and rolls it back, and Run writes each document number back to its row.

  • The line decides the transaction. A PO behind the invoice means MIRO; a vendor line without a PO means FB60; a customer line means FB70; G/L lines only means FB50.
  • Every one of them ends in an FI document. A header plus balanced lines, posted whole or not at all, never deleted, only reversed.

This page is the hub for SAP FICO mass posting: it routes each finance job to its transaction and covers what all of them share. The step-by-step detail for each transaction lives on its own page: FB50 journal entries, FB60 non-PO invoices, MIRO supplier invoices and FB01 documents with posting keys. Finance master data (G/L accounts, cost centers, profit centers, asset masters) is covered in SAP master data mass upload.

SAP FICO mass posting with PostNow.ai, step by step

PostNow.ai turns each finance posting into a published Excel template: a designer maps it once against your SAP system, and accountants run their own files through it every period. The sequence is the same for a journal, an invoice or an asset acquisition.

  1. Pick the BAPI or start from a free template. Search the BAPI by name in PostNow.ai's BAPI search (for example BAPI_ACC_DOCUMENT_POST for FB50, FB60 and FB70, BAPI_INCOMINGINVOICE_CREATE for MIRO), or download a free template from SAP upload templates, each already mapped to its BAPI. Mapping AI suggests the column-to-field mapping from your headers; it reads the header names, never the cell values.
  2. Group header and lines. A marker column turns one H row (company code, dates, document type, reference) and the D rows under it into one document. Credits are negative amounts.
  3. Validate the sheet. Validate checks every cell offline, in Excel: required fields, type, length, date format, decimals and allowed values. Nothing is sent to SAP.
  4. Simulate. PostNow.ai calls the BAPI for every document and then BAPI_TRANSACTION_ROLLBACK instead of a commit. SAP's own balance, period, account and cost object checks come back on each row before anything posts.
  5. Run. PostNow.ai posts each document and commits only when SAP returned no error, then writes the document number, user, time and SAP system to the header row. Where an approval policy covers the template, Run waits until an approver in the PostNow.ai portal has released the data.
  6. Re-run only what failed. Retry Failed re-posts the rows whose Run Log starts with ERROR. If someone clicks Run again on a sheet that already holds posted rows, PostNow.ai asks first: Skip posted rows, Post again or Cancel.
PostNow.ai mapping BAPI_ACC_DOCUMENT_POST in Excel: DOCUMENTHEADER fields mapped to the H row, ACCOUNTGL line item columns in the sheet below
The accounting BAPI open in PostNow.ai: header fields map to the H row, line fields to the detail columns. FB50, FB60 and FB70 templates share this structure.

Which transaction for which job

In PostNow.ai each row is posted through the BAPI shown, so the choice you make here decides which template you download or build. What appears on the lines decides the transaction, not the size of the file.

Finance jobSAP transactionPostNow.ai posts it throughGuide
G/L journals: accruals, reclassifications, allocations, provisionsFB50 (document type SA)BAPI_ACC_DOCUMENT_POST, G/L lines onlyFB50 mass upload
Supplier invoice without a PO: rent, utilities, feesFB60 (KR)BAPI_ACC_DOCUMENT_POST with a vendor lineFB60 mass upload
Supplier invoice against a POMIROBAPI_INCOMINGINVOICE_CREATEMIRO mass invoice posting
Customer invoice outside sales: recharges, sundry incomeFB70 (DR)BAPI_ACC_DOCUMENT_POST with a customer lineBelow
Document with explicit posting keys or mixed account typesFB01BAPI_ACC_DOCUMENT_POST or a recorded FB01FB01 mass upload
Asset acquisition with automatic offsetting entryABZONBAPI_ASSET_ACQUISITION_POSTBelow
Cost reposting and manual allocationKB11N, KB15NBAPI_ACC_PRIMARY_COSTS_POST, BAPI_ACC_MANUAL_ALLOC_POSTBelow
Reversal of posted documentsFB08, F.80; MR8M for MIROBAPI_ACC_DOCUMENT_REV_POST or a recorded FB08Below

Four questions route almost any finance file, and the order matters. Is there a purchase order behind it? Then it is MIRO, because an invoice posted in FB60 against an order leaves the PO history without the invoice and the GR/IR account uncleared. Is there a vendor or customer on the line? Then FB60 or FB70. Do you need to choose posting keys yourself? Then FB01. Do the cost objects the lines reference already exist? If not, the file is not ready, whatever the transaction.

ⓘ
Customer invoices from sales belong in billing. An invoice for goods delivered from a sales order is created with VF01 from the order or delivery, so the sales document flow stays intact; see VF01 mass billing. FB70 is for receivables that have no sales document behind them.

Customer invoices in FB70: the FI-only receivable

PostNow.ai posts FB70 customer invoices through BAPI_ACC_DOCUMENT_POST, the same interface as a journal: the customer line goes in ACCOUNTRECEIVABLE and the revenue lines in ACCOUNTGL, each joined to its amount in CURRENCYAMOUNT by ITEMNO_ACC. The free FB70 customer invoice template builds the customer line from the H row and one revenue line from each D row.

  • Signs carry debit and credit. The gross amount on the customer line is positive (a debit); the revenue lines are negative; together they add up to zero.
  • Document type. FB70 proposes DR in the standard system. Use your company's document type for manual customer invoices, so the documents land in the right number range.
  • Tax is a line of its own. The BAPI does not add a tax line from a tax code: pass it in ACCOUNTTAX with its amount, and prove it on Simulate before the first full run.
  • Payment terms and baseline date on the customer line drive the due date and dunning, so map them deliberately instead of relying on the customer master default.
  • Credit memos (FB75) are the same structure with the signs reversed; a separate FB75 template exists.

Asset postings from Excel, and where the asset master fits

PostNow.ai posts asset acquisitions through BAPI_ASSET_ACQUISITION_POST, the BAPI behind ABZON (acquisition with automatic offsetting entry); the free ABZON asset acquisition template has one row per acquisition. The asset must already exist: creating asset masters in bulk (AS01) is a separate job covered in mass create assets in SAP (AS01).

  • Use the asset BAPI, not the accounting one. BAPI_ACC_DOCUMENT_POST carries an asset number but no asset transaction type, so it is the wrong route for an acquisition. BAPI_ASSET_ACQUISITION_POST takes the transaction type (100 for an external acquisition) and the offsetting account.
  • The asset value date drives depreciation, not the posting date. A wrong value date shifts the depreciation start without any error message.
  • Retirements and transfers have their own BAPIs. SAP's asset accounting documentation lists BAPI_ASSET_RETIREMENT_POST for retirements (the ABAVN scrapping case, for example) and BAPI_ASSET_TRANSFER_POST for transfers, each with a matching _CHECK function. Pick them in PostNow.ai's BAPI search and prove them on a few assets in a test client before a full run.
  • Check every depreciation area after the pilot. SAP KBA 3716976 (S/4HANA) describes AAPO 704 "Depreciation area xx is a parallel area; it cannot be selected", where the BAPI posts the leading area but not the parallel one. Open a pilot asset in the Asset Explorer (AW01N) and confirm the values in each area before the full run.

What every finance mass posting has in common

PostNow.ai treats every finance template the same way because SAP does: FB50, FB60, FB70 and FB01 all create the same FI accounting document, and MIRO and asset postings create one alongside their own. Four properties of that document shape every file.

PropertyWhat it means for the Excel file
A document is a group, not a rowOne header and several lines. In a PostNow.ai sheet the H row carries the header and the D rows under it are its lines, so header fields such as posting date exist once per document, never once per line.
It must balanceDebits equal credits in document currency. SAP checks this when the document is posted or simulated, so a SUMIF per document reference in the sheet saves a round trip.
It posts whole or not at allA failed document leaves nothing behind in SAP. The row shows SAP's message, you fix it and re-post that document only.
It cannot be deletedA wrong document is corrected by a reversal or a correcting entry, and both stay in the ledger. This is why the pilot on a few documents matters more here than for master data.

The practical effect is that skills transfer: a team with a working FB50 template already knows the grouping, balance and reversal rules of FB60 and FB70, and only learns the vendor or customer line.

Period control: OB52 and the MM period

PostNow.ai's Simulate returns SAP's period check on every row, but the fix for a closed period sits with whoever owns the close calendar. Two calendars are involved, and backdated files usually fail on the one nobody checked.

  • The FI posting period is opened and closed in OB52 per posting period variant and account type (+ all, A assets, D customers, K vendors, M materials, S G/L accounts). A closed period returns F5 201 "Posting period … is not open".
  • The MM period is a separate calendar, moved forward with MMPV; MMRV shows the current period and whether postings to the previous one are allowed. A pure G/L journal ignores it; a MIRO invoice or a goods movement needs both.
  • The posting date is a decision, not a default. A =TODAY() formula posts October's accruals into November the moment the run slips past midnight. Type the date, or derive it from a period cell finance owns.
💡
Check both calendars before a backdated file. In early November, finance often still has October open in OB52 while materials management has already moved on, so journals post and invoices against orders fail.

Cost objects, reposting and allocations

PostNow.ai sends whatever cost object the sheet carries (cost center, internal order, WBS element, profit center) and SAP decides whether the line needs one. An expense account that is a cost element needs exactly one real CO object, otherwise SAP stops the document with KI 235 "Account … requires an assignment to a CO object".

  • The object must exist and be valid on the posting date. Cost centers are time dependent: a center valid from 1 November cannot take an October posting. On a restructure, create them first with KS01 mass creation, then post.
  • Balance sheet lines stay empty. The cost object column applies to P&L lines only, so it is optional in the template and required by SAP per account.
  • Moving costs that are already posted is a CO posting, not a journal. KB11N reposts primary costs and KB15N posts a manual allocation; SAP Community answers point to BAPI_ACC_PRIMARY_COSTS_POST and BAPI_ACC_MANUAL_ALLOC_POST as their BAPIs. Run a few lines in a test client first and check the result in the cost center line items.

Month-end close postings from Excel

PostNow.ai fits the month-end postings whose amounts are calculated in Excel each period: the model produces this month's figures and the same published template posts them. Postings with fixed amounts or fixed reversal dates are often better left to SAP's own tools.

Close taskRouteNote
Accruals and provisions calculated in ExcelPostNow.ai FB50 template, reversed next month from a fileDetail in FB50 mass upload
Reclassifications and allocationsPostNow.ai FB50 template (G/L) or KB11N/KB15N BAPIs (CO)Watch rounding: each receiver rounded to 2 decimals can leave the total 0.01 off
Supplier and customer invoices received latePostNow.ai FB60, MIRO and FB70 templatesMIRO needs the MM period open too
Asset acquisitions not yet capitalisedPostNow.ai ABZON templateAsset value date decides depreciation
Fixed amount every periodSAP recurring entry: FBD1, then F.14F.14 creates a batch input session processed in SM35
Accrual that reverses on a set dateSAP accrual/deferral: FBS1, then F.81F.81 reverses on the date stored in each document

Run the files before the busiest close day, not during it: anything with known values can post early, and a run posted on the last open day leaves no room to reverse and re-post if the pilot shows a problem. After period-end postings, check the result in a financial statement (balance sheet and P&L) in Excel, built from G/L balances by account and split into balance sheet and P&L accounts.

SAP finance automation from Excel: what it covers

PostNow.ai's part of SAP finance automation is the Excel side: the postings above, the finance master data they depend on, and the reports that reconcile them, all under each user's own SAP login. The jobs and where each one is covered:

Finance areaWith PostNow.aiWhere to read more
PostingsJournals, supplier and customer invoices, asset acquisitions, reversals from Excel templatesThis page and the transaction guides above
Finance master dataG/L accounts (FS00), cost centers (KS01), profit centers (KE51), asset masters (AS01) created or changed in bulkSAP master data mass upload, FS00, KS01, profit centers, AS01
Exchange ratesRates maintained in OB08 (table TCURR) loaded from a sheet through BAPI_EXCHANGERATE_CREATE, picked in the BAPI search. The currency pair's translation ratios must exist, or the rate is not saved.Tax, currency and rounding below: load the rates before foreign currency postings
Changes to existing recordsDownload current SAP values, edit them in Excel, post the changed rows backSAP mass change from Excel
ReconciliationReport Library reports such as GL Line Items 360 and AR Open Items + Aging, run into ExcelSAP GL line items report, Report Library
ControlDesigners publish templates, operators only run them; optional approval before Run; every run in the central auditExcel to SAP automation

The wider accounts payable process, from invoice receipt to payment, is covered in accounts payable automation in SAP.

Tax, currency and rounding: what breaks balance

PostNow.ai sends the amounts as the sheet holds them, so a file that balances in Excel can still fail SAP's balance check in Simulate. Three causes account for most of it.

  • The tax line. BAPI_ACC_DOCUMENT_POST has no counterpart to the "Calculate tax" checkbox on the FB60 and FB70 screens: tax is a line of its own in ACCOUNTTAX, with the tax amount and base amount in CURRENCYAMOUNT. A gross vendor or customer amount with net lines and no tax line does not balance. Prove one tax-relevant document on Simulate before the full file.
  • Foreign currency. A document in a currency other than the company code currency balances in document currency; SAP translates with the rate valid on the translation date, or with an exchange rate you pass. If no rate is maintained for that currency pair and date, the document fails, so load the OB08 rates first.
  • Rounding in allocations. A total split by percentage and rounded per receiver can miss by 0.01. Put the difference on the last line with a formula (total minus the sum of the others), so every document still sums to zero.

Worked example: an October close in company code 1010

PostNow.ai handles this with two published templates, one for journals and one for customer invoices. Finance in company code 1010 (EUR) has 18 accrual journals calculated in its accrual model and four recharge invoices to customer 200371 for October 2026.

  1. Fill the sheets. The FB50 sheet holds 18 H rows (posting date 31.10.2026, type SA, references ACCR-2610-001 to -018) with their G/L lines; the FB70 sheet holds four H rows (type DR, customer 200371, payment terms 0001) with one revenue line each.
  2. Validate. One cell is flagged: a posting date typed as text. It is fixed in Excel.
  3. Simulate. 16 journals and all four invoices pass. One journal returns F5 201 because its posting date was copied as 01.11.2026 and November is not open yet; one returns KI 235 because an expense line has no cost center. Both are fixed on the row and simulated again.
  4. Run. All 22 documents post. Each H row now holds its document number with user, time and SAP system.
  5. Reconcile. The GL Line Items 360 report, run for company code 1010, posting date 31.10.2026 and document types SA and DR, totals the same amounts as the accrual model and the recharge list.
  6. Next month. On 1 November the 18 accrual document numbers go into the reversal file with reversal posting date 01.11.2026.

The two workbooks now hold the calculation, the posted document numbers and the run details, which is what an auditor asks for when they pick a close entry.

When a run goes wrong: reversal, adjustment, compensation

PostNow.ai reverses documents in bulk from a file: the free FB08 reversal template on BAPI_ACC_DOCUMENT_REV_POST, one row per document, or a recorded FB08. Which kind of correction is right is a finance decision, so agree it before the first production run.

  • Reversal cancels the whole document. FB08 reverses one, F.80 a selection; the document numbers the run wrote back are the selection. The reversal BAPI identifies the original by object type and key (BKPF-AWTYP, AWKEY), not by document number. Several SAP Community answers report it refusing journals posted through the accounting BAPI while others report it working, so reverse a few in a test client first; a recorded FB08 or F.80 does the same job.
  • MIRO invoices are reversed with MR8M, not FB08; see MIRO mass invoice posting.
  • Adjustment posts a correcting entry when only some lines were wrong; the original stays valid.
  • Compensation in a later period is often the only route once the original period is closed: a reversal reason that allows a different posting date, or a new journal with flipped signs.
  • Cleared items stop a reversal. If a vendor or customer line has been paid or cleared, SAP refuses with "Document already contains cleared items - reversal not possible" until the clearing is reset.
  • Size runs so they can be reversed. Split by company code or journal type; a run that would take an afternoon to reverse should have been two runs.

Finance mass posting errors and how to fix them

PostNow.ai writes SAP's messages to each failed document's H row, every error message joined in one cell, so the fix starts from SAP's own text. These are the ones that stop finance runs across all the transactions on this page.

MessageWhat it meansFix
RW 609 Error in documentA wrapper from the accounting interface; the real reason is the next message in the cellRead the second message and fix that
F5 702 Balance in transaction currencyThe document's lines do not add up to zeroCredits negative; add the tax line; put rounding on the last line
F5 201 Posting period … is not openThe posting date falls in a period closed in OB52 for that account typeCorrect the date, or ask the period owner to open it
KI 235 Account … requires an assignment to a CO objectAn expense line (a cost element) has no cost center, order or WBS elementFill the cost object column for that line
F5 727 Maximum number of items in FI reachedMore than 999 lines in one documentSplit into several balanced documents
Run Log: UNKNOWN (PostNow.ai)SAP's answer was lost after the document was sent, so it may have postedLook the reference up in FB03 or the GL line items report; post the row again only if the document is not there

Transaction-specific messages (duplicate invoice checks, MIRO tolerances, withholding tax) are on the FB60 and MIRO pages.

What S/4HANA changes for finance mass posting

PostNow.ai uses the same finance templates on S/4HANA: BAPI_ACC_DOCUMENT_POST, BAPI_INCOMINGINVOICE_CREATE and the asset BAPIs are all there, so a template proven on ECC usually needs new field values, not a new structure.

  • One line item table. The universal journal keeps FI and CO line items together in ACDOCA instead of separate ledger tables. Reconciliation reports built on old ledger tables need a check; the posting run does not change.
  • Profit center on every line. Many S/4HANA systems require a profit center on each line, and the segment is usually derived from it; add the column even where ECC derived it later.
  • Customers and vendors are business partners. FB60 and FB70 still post to the customer or vendor number, which must exist with its company code data; see SAP business partner automation.
  • New asset accounting. SAP's documentation for New Asset Accounting lists the asset posting BAPIs with accounting principle, ledger group and depreciation area fields. Check every area of a pilot asset after the first run.
  • API mode. PostNow.ai can also post journals through SAP's SOAP service Journal Entry - Post (Synchronous), with its test-run flag used for Simulate.

Checklist before an SAP FICO mass posting

PostNow.ai checks formats and allowed values and keeps operators on the published template; this list covers the decisions that stay with finance.

  1. Each document's transaction is right: PO behind it means MIRO, a customer line from sales means VF01.
  2. Every document's signed amounts add up to zero, checked with a SUMIF per document reference.
  3. Posting dates are typed values in the target period, open in OB52, and in the MM period where MIRO is involved.
  4. Cost centers, orders and WBS elements exist and are valid on the posting date.
  5. Vendors and customers exist in the company code; assets exist before an acquisition is posted.
  6. Tax-relevant documents carry their tax line and have passed Simulate once.
  7. Exchange rates for every foreign currency in the file are loaded.
  8. References are unique to this run, so every document can be found again.
  9. The correction route is agreed: reversal file, F.80, or a correcting entry.
  10. Simulate has run clean on the whole file.

What to plan for in finance mass posting

PostNow.ai posts through SAP's own BAPIs, so SAP's balance, period, account and CO checks decide every result.

  • Run SAP's checks in Simulate. Validate checks formats, lengths and allowed values in Excel; balance, period and account checks start when Simulate calls SAP.
  • Post as named users. Each user posts with their own SAP login and authorisations. For recorded transactions, PostNow.ai logs in to SAP GUI only on the user's own computer, with the user's own stored login, when the user starts the action (Record, Run, Debug or Call Transaction); never on a server, never unattended, never with someone else's login.
  • Approve the file, not the run. With an approval policy on the template, the approver releases the exact data; a file changed after approval needs a new approval.
  • Keep re-runs in the same workbook. The re-post check reads this sheet's Run Log, so a copied file with the same documents starts without one.
  • Name an owner per template. When the chart of accounts or a document type changes, someone re-proves the template on Simulate before the next close.
  • Reconcile every run against the source model the same day, while the run is fresh.

Free SAP finance posting templates

PostNow.ai publishes free Excel templates for the finance postings on this page, each with a field guide and its BAPI mapping: FB50 G/L journal entry, FB60 vendor invoice, MIRO supplier invoice, FB70 customer invoice, ABZON asset acquisition and FB08 document reversal. Fill the template, open it in PostNow.ai, Validate, Simulate and Run. The full set is on SAP upload templates.

Frequently asked questions

How do I post SAP finance documents from Excel?
With PostNow.ai, open the template for the transaction (FB50, FB60, MIRO, FB70 or an asset posting), put one header row per document and one detail row per line, with credits as negative amounts. Validate checks the sheet offline, Simulate lets SAP check every document through the BAPI and rolls it back, and Run posts each document and writes its number back to the header row. Failed documents show SAP's message in the row and can be re-posted with Retry Failed.
What is SAP FICO mass posting?
SAP FICO mass posting is creating many finance and controlling documents in one run from a file instead of keying each one in its transaction: G/L journals in FB50, supplier invoices in FB60 or MIRO, customer invoices in FB70, asset postings and cost reposting. Each document still goes through SAP's standard posting logic and checks.
Which SAP transaction should I use for journals, vendor invoices and customer invoices?
FB50 for journals whose lines are all G/L accounts. FB60 for a supplier invoice without a purchase order, MIRO for one against a purchase order. FB70 for a customer invoice with no sales document behind it; invoices from sales orders and deliveries are created with VF01. FB01 when you need to choose posting keys yourself.
Can SAP finance postings be automated from Excel?
Yes. SAP finance automation from Excel with PostNow.ai covers journals, supplier and customer invoices, asset acquisitions and reversals, plus finance master data such as G/L accounts, cost centers and profit centers. Each posting goes through SAP's standard BAPI under the user's own login, Simulate runs SAP's checks first, and every document number is written back to its row.
How do I post month-end accruals in bulk?
Calculate them in Excel and post them as FB50 journals from one file, one header row per accrual, with a typed posting date in the closing period. Reverse them in the next period from a file of the posted document numbers, or with F.80. Accruals with a fixed reversal date can instead be entered in FBS1 and reversed together with F.81.
What happens if the posting period is closed?
SAP rejects the document with F5 201 "Posting period is not open" and nothing is posted. The FI period is controlled in OB52 per account type; MIRO invoices and goods movements also need the MM period. Correct the posting date or ask the period owner to open the period, then re-post the failed rows.
How do I reverse a whole mass posting run?
Use the document numbers the run wrote back: reverse them with F.80, or from a file with the FB08 reversal template on BAPI_ACC_DOCUMENT_REV_POST, which needs each document's object type and key. Prove the file route on a few documents in a test client first. MIRO invoices are reversed with MR8M, and documents with cleared lines need the clearing reset before they can be reversed.
What changes in S/4HANA for finance mass posting?
The postings land in the universal journal (table ACDOCA), where FI and CO share one line item table, and many systems require a profit center on every line. The posting BAPIs stay the same, so an ECC template usually needs new values rather than a new structure. Customers and vendors are business partners, and the asset posting BAPIs carry ledger group and depreciation area fields.
Your close model. SAP's posting rules.

Run your next SAP FICO mass posting from Excel

Map each finance template once, simulate every document, then post and see each document number on its row.

Start free trial
  • 14-day free trial
  • Works with ECC and S/4HANA
  • Posts under your own SAP login