Quick answer

How to mass create GL accounts in SAP with FS00

FS00 in SAP is the central transaction for G/L account master data. One save creates the chart of accounts segment (account number, account group, P&L or balance sheet, descriptions) and the company code segment (currency, tax category, open item management, field status group). SAP's G/L account BAPIs read accounts but do not create them, so to load a chart of accounts from Excel, PostNow.ai records FS00 once and replays it for every row: one Excel row per account and company code. Validate checks the sheet offline, Debug replays a few accounts in SAP GUI, and Run writes SAP's message back to each row.

  • Create both segments. SAP posts to an account in a company code only once its company code segment exists, so an account with chart data only cannot be posted to anywhere.
  • Decide the posting behaviour up front. Open item management, the reconciliation account type and the P&L or balance sheet choice are hard to change once the account carries postings.

This page covers one job: creating G/L account master records in bulk. Where G/L accounts sit among the other objects, and the order to load them in, is in SAP master data mass upload. The journals and invoices that post to these accounts are in SAP FICO mass posting, and the cost centers that P&L postings need are in KS01 mass cost center creation.

How PostNow.ai mass creates G/L accounts from Excel

PostNow.ai runs an FS00 mass upload as a recorded template: a designer records and maps FS00 once against your SAP system and publishes the template, and the finance team runs its account lists through it, each user under their own SAP login on their own computer.

  1. Record FS00 once. From the PostNow.ai ribbon, the designer records the creation of one account in FS00 and fills every field the file will carry, on the Type/Description, Control Data and Create/bank/interest tabs. Recording mode uses PostNow.ai's ZPOSTNOW_* objects, installed once in SAP. 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.
  2. Map every recorded field. In the Mapping Designer each recorded field becomes an Excel column or a fixed value. Chart of accounts and company code are usually fixed per template; account number, account group, descriptions, field status group and the indicators are columns. Check recording flags any screen the replay would leave without an OK-code and offers to add /00.
  3. Record one template per account pattern. A recording replays the screens it saw. Account groups with a different field status show different fields, and on S/4HANA an account of type Primary Costs or Revenue shows a cost element category that a balance sheet account does not. Typical templates are P&L accounts, balance sheet accounts and clearing accounts with open item management.
  4. Validate the sheet. Validate checks every cell offline: required fields, length and allowed values, such as an allow-list of account groups and field status groups, or X or blank in an indicator column. Whether an account number fits its group's interval is SAP's answer, and it comes when SAP processes the row.
  5. Debug a few accounts, then Simulate. Debug replays rows in the foreground in SAP GUI, every screen or only the screens with errors, so you watch three accounts go through before the file. Simulate plays every row's screens with the save removed and reports screen errors per row; the checks SAP makes at save come with Run.
  6. Run and read the Run Log. Run creates each account under the user's own SAP login and writes SAP's message, with user, time and system, to that row's Run Log. Retry Failed re-posts only rows whose Run Log starts with ERROR, scanning from the current Start Row. If someone clicks Run again on the same sheet, PostNow.ai first lists the rows already posted and offers Skip posted rows, Post again or Cancel.

Where the controller wants to see new accounts before they exist, an approval policy on the template holds the run until an approver has reviewed the rows in the PostNow.ai portal. The approval is tied to that exact data, so a sheet changed after approval needs approval again.

Chart of accounts segment and company code segment

In a PostNow.ai FS00 template, each row carries both segments of one account for one company code, because FS00 saves them together. SAP keeps them apart: the chart of accounts segment is shared by every company code that uses the chart, and the company code segment is what lets one company code post to the account.

SegmentSAP tableTypical fieldsMaintained alone in
Chart of accountsSKA1, texts in SKATAccount number, account group, P&L statement or balance sheet account (on S/4HANA the G/L account type), short and long text, group account numberFSP0
Company codeSKB1Account currency, only balances in local currency, tax category, posting without tax allowed, reconciliation account for account type, open item management, line item display, sort key, field status group, post automatically onlyFSS0

The company code segment is not optional. SAP Help states that an account needs a master record in the company code before you can post to it there, and that the account must already exist in the chart of accounts. A file that creates only chart data gives you accounts that every journal in that company code rejects.

Count the rows before you build the sheet. Four hundred new accounts for three company codes is 400 FS00 creations plus 800 company code extensions. The first company code comes with the creation; the other two are a separate job with a separate recording (see extending accounts to a new company code).

Descriptions are per language. The texts are stored per language in SKAT. A recording fills them in the logon language of the user who runs the template; other languages go in through the Key word/translation tab, which is one more set of columns and one more thing to record.

Account group: number interval and field status

In a PostNow.ai FS00 template the account group is a column with an allow-list, because SAP uses it for two checks at creation. The account groups of each chart of accounts are defined in OBD4.

  • Number interval. Each group has a from-to range. When an account is created, SAP checks that its number lies in the interval of the group, and a number outside it stops the save with FH 013 "Account group … only defined for accounts from … to …". A number inside the wrong block of a well-planned chart loads without any message, so the number plan deserves a person's review.
  • Field status of the master record. The group decides which master record fields are required, optional or hidden in FS00. That is why a template recorded with one group may meet a required or hidden field on another group's account: record per group pattern, or check each group in Debug.
  • Changing the group later is possible. SAP Help describes assigning a different account group to an existing account, which changes its field status and number interval; the interval only matters when an account is created. A wrong group is therefore a master data correction, not a reason to delete the account; it is still one more change to explain to audit, so choose the group at creation.

P&L statement account or balance sheet account

PostNow.ai sends this choice as one column of the chart of accounts segment, and SAP derives the account's year-end behaviour from it. It is decided once for the whole chart, so it is the same in every company code.

Account kindAt year-endTypical company code settings
Balance sheet accountThe balance is carried forward on the same accountOpen item management on clearing accounts such as GR/IR; account currency set to match bank accounts
Reconciliation account (a balance sheet account)Carried forward, like any balance sheet accountReconciliation account for account type D (customers), K (vendors) or A (assets). It is posted through the subledger, not directly in a journal
P&L statement accountThe balance goes to the retained earnings account set by its P&L statement account type (OB53)Tax category for expense and revenue accounts; on S/4HANA a CO object on every posting to a Primary Costs or Revenue account

Two SAP messages show why this column needs a second look. FH 018 "Reconciliation account only allowed for balance sheet account" stops a reconciliation type on a P&L account. FH 601 "Change the balance sheet control only if nothing has been posted yet" blocks the switch between P&L and balance sheet once the account has postings (it is an error message by default).

Settings to get right before the first posting

PostNow.ai writes the company code settings exactly as each row states them, so reviewing these columns is the part of an FS00 mass upload that deserves the controller's time. Four of them are hard to change once postings exist.

SettingWhat it decidesChanging it after postings
Open item managementItems on the account are cleared against each other: GR/IR, bank clearing, payroll clearingA program run (FAGL_ACTIVATE_OP), not a field change. The balance must be zero, so the program can post it to a transfer account and, if you choose, back again; the account needs line item display
Line item displayIndividual items can be listed per accountRequired for open item management, so switch it on wherever open items are planned
Reconciliation account for account typeThe account is the control account of a customer, vendor or asset subledgerFH 110 "Modifications to reconciliation account not permitted": SAP KBA 3226451 (filed for S/4HANA Cloud Public Edition) allows removing the indicator only with no open items and a zero balance, and advises a new account
P&L or balance sheet (on S/4HANA, the G/L account type)Carry-forward and, on S/4HANA, whether the account is a cost elementFH 601 once posted; on S/4HANA FH 212 once CO postings exist (below)
Field status groupWhich fields are required, optional or hidden on every posting line to the accountA wrong group fails or under-documents journals until it is corrected in FS00
Tax category, posting without tax allowedWhich tax codes, input, output or none, postings to the account may carryCheck it against the tax codes the posting files will use

The field status group works on postings, not on the master record. Defined per field status variant in OBC4, it decides, for example, whether a journal line to this account must carry a cost center, a text or an assignment. A wrong group does not stop the account from being created; it shows up in the first FB01 or FB50 upload that posts to it.

G/L accounts in S/4HANA: account types and cost elements

On S/4HANA, PostNow.ai records the same FS00, with one more decision per account: the G/L account type. Cost elements are no longer separate master records, so the type also decides whether the account is a cost element.

G/L account typeUsed forControlling
Balance Sheet Account (X)Assets, liabilities, reconciliation and clearing accountsNo cost element
Nonoperating Expense or Income (N)P&L items outside the operating business, such as exchange rate gains and lossesNo cost assignment needed
Primary Costs or Revenue (P)Operating expenses and revenuesActs as a primary cost element; every posting needs a CO object such as a cost center, order, project or profitability segment. Cost element category, for example 01 primary costs or 11 revenues
Secondary Costs (S)Internal flows inside Controlling: assessments, internal activity allocationActs as a secondary cost element, categories such as 42 assessment or 43 internal activity allocation
Cash Account (C, from S/4HANA 2020)Bank G/L accounts used in bank account master data, with a G/L account subtype such as bank reconciliation account or bank subaccountNo cost element; record cash accounts in their own template, because the subtype is one more field
  • FS00 replaces KA01 and KA06. The cost element transactions KA01–KA03 and KA06 are not available on S/4HANA; primary and secondary cost elements are created as G/L accounts in FS00, with the cost element category on the Control Data tab. An ECC file that loads accounts in FS00 and cost elements in KA01 becomes one S/4HANA file.
  • One more column, one more screen. Types P and S need the cost element category, which a balance sheet account does not have. Keep cost-type accounts in their own template so the recording matches the screens.
  • Cost element validity is gone. Cost elements are no longer time-dependent; default account assignments are maintained in OKB9.
  • Choose the type before the first CO posting. SAP KBA 3084792 (filed for S/4HANA Cloud Public Edition) describes FH 212 "Cost elements cannot be deleted because transaction data exists" when a Primary Costs account is changed to Nonoperating: the change is refused once CO postings exist, even at zero balance, and SAP recommends creating a new account.

For an S/4HANA migration project, SAP also offers the Migration Cockpit objects "FI - G/L account" and "FI - G/L account - extend existing record by new org levels" (SAP KBA 2848568). How the cockpit compares with an Excel route is in SAP Migration Cockpit.

Posting route: FS00 recording or GL_ACCT_MASTER_SAVE_RFC

PostNow.ai creates G/L accounts through a recorded FS00 template, because SAP's G/L account BAPIs only read. BAPI_GL_ACC_GETDETAIL, BAPI_GL_ACC_GETLIST, BAPI_GL_ACC_EXISTENCECHECK and BAPI_GL_ACC_GETBALANCE return account data and balances; none of them creates an account, and SAP's own data transfer documentation for G/L account master data names batch input as the transfer method.

RouteHow it worksWhen it fits
PostNow.ai: recorded FS00 templateThe FS00 screens are replayed for each row with that row's values, so FS00's own checks apply to every accountCreating accounts, extending them with an FSS0 recording, and changing them with a recording of FS00 in change mode, on ECC and S/4HANA
PostNow.ai: GL_ACCT_MASTER_SAVE_RFC in BAPI modeThe designer finds the module by name in BAPI search and maps its parameters like a BAPI'sWhere your SAP team already uses this module and has checked it in SE37 (below)
SAP Migration Cockpit"FI - G/L account" and its extension object, loaded from SAP's file template or staging tablesAn S/4HANA migration project run by the migration team
LSMW with RFBISA00SAP's standard batch input program for G/L account master dataECC loads that IT builds and runs
OB_GLACC11 / OB_GLACC12SAP's mass maintenance of chart of accounts data and company code dataSetting one field on many existing accounts; not for creating them

Before you use GL_ACCT_MASTER_SAVE_RFC

GL_ACCT_MASTER_SAVE_RFC is not one of the BAPI_GL_ACC_* BAPIs. SAP KBA 3589646 refers to it as a standard BAPI and describes the runtime error ITAB_ILLEGAL_SORT_ORDER in CL_FINS_SGLACCT_MASTER_REPLI when G/L account master data is created on SAP S/4HANA; the resolution is in the full KBA on SAP for Me. The KBA describes the error; it does not document the module's interface. We found no SAP source for the module's remote-enabled flag, and its sibling GL_ACCT_MASTER_SAVE is reported in user forums as not remote-enabled. So check three things first:

  1. In SE37, the Attributes tab shows Remote-Enabled Module for GL_ACCT_MASTER_SAVE_RFC in your release.
  2. The resolution of KBA 3589646 is applied where your release needs it, and you know whether it commits on its own or expects BAPI_TRANSACTION_COMMIT, because that decides what a test run can roll back.
  3. A handful of accounts created with it in a test client look right in FS00, in both segments, before a production file runs.

Extending G/L accounts to a new company code

PostNow.ai handles an extension as its own template: a recording of FSS0, the company code segment alone, with one row per account per new company code. The chart of accounts data already exists, so the row carries only the company code number, the account number and the company code fields.

  • Keep creates and extensions in separate files. A create row for an account that already exists in the chart returns FH 059 "Account … has already been created in chart of accounts …", and an extension row for an account that is not yet in the chart fails because there is no chart data to extend. A file that mixes them returns errors that contradict each other.
  • Same chart of accounts only. A company code uses one operational chart of accounts (assigned in OB62). An extension adds that company code to accounts of its own chart; a company code on another chart needs those accounts created in that chart.
  • Copy the settings deliberately. An extension is where the open item and reconciliation settings of the first company code are most often copied without thought. Review those columns per company code, as for a create.
  • S/4HANA Cloud Public Edition. SAP KBA 2833324 points to the Mass Copy function of the Manage G/L Account Master Data app for copying accounts between company codes.

SAP GL account automation: templates finance can run again

SAP GL account automation with PostNow.ai means the FS00 templates are built once and reused for every new account request, instead of rebuilt for each project. New accounts arrive with a new company code, a reporting change, an acquisition or a migration, and each wave runs through the same published templates.

  • Designers build, operators run. Operators get a run-only ribbon: no recording, no mapping, only the published template and their own SAP login.
  • The chart's rules sit in the template. Allow-lists for account group, field status group and tax category, fixed chart of accounts and company code, required columns: Validate stops a row that breaks them before SAP sees it.
  • Approval before Run. The controller approves the exact rows in the PostNow.ai portal; a changed sheet needs approval again.
  • A record per row. The Run Log keeps SAP's message with user, time and system for every account, and SAP writes its change documents for each account as it does for manual maintenance.

How published templates, roles and the central library work across a team is described in Excel to SAP automation.

Worked example: 30 new accounts for company codes 1010 and 1710

PostNow.ai handles this with three published templates and three runs. Controlling needs 24 new expense accounts for a new cost reporting structure, and accounting needs 6 payroll and GR/IR-type clearing accounts. Company codes 1010 and 1710 both use chart of accounts YCOA on S/4HANA.

TemplateRowsFixed valuesColumns filled
FS00 create, cost accounts24Chart YCOA, company code 1010, type Primary Costs or RevenueAccount number, account group, short and long text, cost element category 01, tax category, field status group
FS00 create, clearing accounts6Chart YCOA, company code 1010, type Balance Sheet AccountAccount number, account group, texts, open item management X, line item display X, sort key, field status group
FSS0 extension30Company code 1710Account number and the company code fields, reviewed for 1710
  1. Validate. Three cells are flagged: a field status group typed as G0O1 that is not on the allow-list, a blank tax category on an expense row where the template makes it required, and a Y in the open item column, which accepts only X or blank. All three are fixed in the sheet.
  2. Debug. Three accounts from each create template run in the foreground. The cost accounts show the cost element category on the Control Data tab; the clearing accounts show both indicators set.
  3. Run the creates. 28 of 30 accounts are created. Two expense accounts numbered 81000010 and 81000011 return FH 013: the account group for P&L accounts in this chart covers 60000000 to 79999999. The controller renumbers them 71000010 and 71000011, and Retry Failed creates both.
  4. Run the extension. All 30 accounts are extended to company code 1710, each row with SAP's message in its Run Log.
  5. Check. The G/L accountant opens one account of each template in FS00 for both company codes and compares both segments with the sheet. The journal template that will post to the new accounts has already been proved with them in the quality system.

Each account can be traced from its Excel row to SAP's message, user and time, and the same three templates are ready for the next request.

FS00 upload errors and the fix

PostNow.ai writes SAP's message to each failed row's Run Log, so the fix starts from the message text. These are the messages an FS00 mass upload meets most, plus two that appear later, at posting:

MessageWhat it meansFix
FH 013 Account group … only defined for accounts from … to …The account number lies outside the interval of its account groupCorrect the number or the group; the intervals are in OBD4
FH 048 Enter an account groupThe account group reached FS00 emptyMake the column required in the template, so Validate stops the row
FH 059 Account … has already been created in chart of accounts …A create row for an account that exists in the chartMove the row to the extension template, or remove it if the company code segment exists too
FH 018 Reconciliation account only allowed for balance sheet accountA reconciliation type on a P&L accountCorrect the account kind or clear the reconciliation column
00 349 Field … does not exist in the screen …The replay met a screen without a recorded field: another account group's field status or another account typeGive that pattern its own template, and watch it once in Debug
At posting: F5 507 G/L account … is not defined in chart of accounts …A posting file names an account that was never created, often a typo or a missing leading digitCheck the number in the posting file against the Run Log of the create
At posting: the account fails in one company code onlyThe account has no company code segment thereRun the extension template for that company code
Run Log: UNKNOWN (PostNow.ai)SAP's answer was lost after the row was sent, so the account may existDisplay the account in FS00 before running the row again; Retry Failed leaves UNKNOWN rows alone

Checklist before an FS00 mass upload

PostNow.ai checks formats and allowed values and keeps operators on the published template; this list covers the decisions that stay with the controller and the G/L team.

  1. Creates and extensions are in separate files, one template per account pattern.
  2. Every account number lies in the interval of its account group.
  3. P&L or balance sheet, and on S/4HANA the G/L account type, is agreed for every account.
  4. Cost-type accounts carry a cost element category.
  5. Open item management is set on clearing accounts only, and line item display on every account that gets open item management.
  6. Reconciliation types are only on balance sheet accounts meant to control a subledger.
  7. Field status group and tax category match how the account will be posted.
  8. Account group, field status group and tax category columns have allow-lists in the template.
  9. The templates have been proved in a test client: accounts created, checked in FS00, and one journal posted to each pattern.
  10. Debug has replayed a few rows of each template in the target system.

What to plan for in an FS00 mass upload

PostNow.ai creates G/L accounts through FS00 itself, so SAP's own account group, interval and consistency checks decide every result.

  • Run SAP's checks before the file. Validate checks the sheet in Excel; interval and consistency checks start when SAP processes the row, so Debug a few rows and prove each template in a test client.
  • Spot-check after the run. Recorded runs use synchronous update, so each row's message in the Run Log is SAP's final answer. Display a sample in FS00 after the run to confirm the settings.
  • Replay templates after an upgrade. A recording replays screens; after an S/4HANA conversion or a release upgrade, run each template in Debug and re-record any whose screens changed before operators run it.
  • Load in dependency order. G/L accounts come before the assets and postings that refer to them, and cost-type postings also need their cost centers; the full order is in SAP master data mass upload.
  • Keep re-runs in the same workbook. The re-post check reads this sheet's Run Log, and UNKNOWN rows are checked in SAP before anyone runs them again.

Recording rules, OK-codes and screen pitfalls are in the SAP BDC recording guide, and the BAPI-or-recording decision for other objects is in BAPI vs BDC in SAP.

Frequently asked questions

How do I mass create GL accounts in SAP from Excel?
PostNow.ai records FS00 once and replays it for every Excel row, one row per account and company code, with the account group, texts, account type and company code settings as columns. Validate checks the sheet offline, Debug replays a few accounts in SAP GUI, and Run creates each account under your own SAP login and writes SAP's message back to its row. Failed rows are re-posted with Retry Failed, and extensions to further company codes run from a separate FSS0 template.
What is FS00 in SAP?
FS00 is the central transaction for G/L account master data: it creates, changes and displays the chart of accounts segment and the company code segment of an account in one place. FSP0 maintains the chart of accounts segment alone and FSS0 the company code segment alone. On S/4HANA, FS00 also creates cost elements, because they are G/L accounts of type Primary Costs or Revenue or Secondary Costs.
Is there a BAPI to create G/L accounts in SAP?
SAP's G/L account BAPIs, such as BAPI_GL_ACC_GETDETAIL, BAPI_GL_ACC_GETLIST and BAPI_GL_ACC_EXISTENCECHECK, read accounts; none creates one. SAP KBA 3589646 refers to GL_ACCT_MASTER_SAVE_RFC as a standard BAPI in the context of creating G/L account master data, so check in SE37 whether it is remote-enabled in your release, and test it in a test client, before you use it. The usual route is a recording of FS00.
What is the difference between the chart of accounts and the company code segment?
The chart of accounts segment holds the data every company code on that chart shares: account number, account group, P&L or balance sheet, and the texts. The company code segment holds what one company code needs to post: currency, tax category, open item management, line item display, reconciliation type and field status group. SAP posts to an account in a company code only once that company code's segment exists.
What changes for G/L accounts and cost elements in S/4HANA?
Every account gets a G/L account type: Balance Sheet Account, Nonoperating Expense or Income, Primary Costs or Revenue, or Secondary Costs, and from S/4HANA 2020 also Cash Account for bank G/L accounts. Cost elements are G/L accounts of the two cost types, created in FS00 with a cost element category, and the transactions KA01 to KA03 and KA06 are no longer available. Postings to a Primary Costs or Revenue account need a CO object such as a cost center.
Which G/L account settings should be right before the first posting?
Open item management, the reconciliation account type, and P&L or balance sheet (on S/4HANA, the G/L account type). Switching on open item management later is a program run with FAGL_ACTIVATE_OP that needs a zero balance, a reconciliation indicator can be removed only with no open items and a zero balance, and SAP's message FH 601 blocks a change of balance sheet control once the account has postings. Field status group and tax category can be corrected, but every posting before the correction is checked against the wrong value.
How do I extend existing G/L accounts to a new company code?
Create the company code segment only, with FSS0 or FS00, for accounts that already exist in the same chart of accounts. In PostNow.ai this is its own recorded template with one row per account per new company code. Keep extensions out of the create file: a create row for an account that already exists in the chart returns FH 059.
Can the account group of a G/L account be changed later?
Yes. SAP Help describes assigning a different account group to an existing G/L account, which changes the field status of the master record and the number interval it belongs to. The interval is checked only when an account is created, so the change does not renumber the account. It is still a correction to explain, so pick the group at creation.
Your account list. SAP's FS00 checks.

Mass create your next G/L accounts from Excel

Record FS00 once, replay a few accounts in Debug, then create the list and read SAP's answer on every row.

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