SAP Master Data Migration and Upload Templates

24 Excel templates for loading SAP master data: materials, batches, bills of material, classification, cost centres, cost elements, activity types, internal orders, assets, functional locations, equipment, projects, bank keys, pricing conditions and HR infotypes.

Jump to a template (24)
  1. MM01Material Master Create
  2. MM02Material Master Change
  3. MM17Material Mass Maintenance
  4. MM01Extend Material to Plant, Storage Location and Sales Org
  5. MM06Flag Material for Deletion
  6. MSC1NBatch Master Create
  7. CS01Bill of Material
  8. CS02Bill of Material Change
  9. CT04Characteristic Create
  10. CL20NObject Classification and Characteristic Values
  11. VK11Sales Pricing Conditions
  12. KS01Cost Center Create
  13. KS02Cost Center Change
  14. KA01 / KA06Cost Element Create
  15. KL01Activity Type Create
  16. KP26Activity Type Price Planning
  17. KP06Cost Center Primary Cost Planning
  18. KO01Internal Order Create
  19. CJ20NProject Definition and WBS Elements
  20. AS01Asset Master Create
  21. IL01Functional Location
  22. IE01Equipment Master
  23. FI01Bank Master Create
  24. PA30HR Master Data Infotype Maintenance
These templates are also on GitHubFree under the MIT licence. Browse the full set of 75 on GitHub.
View on GitHub →

Loading order and dependencies

Master data has dependencies and they bite in a predictable order. Characteristics before classification, because a class cannot reference a characteristic that does not exist. Materials before bills of material, batches and classification. Cost elements and activity types before cost centre planning. Asset classes before asset masters. Functional locations before equipment. Projects before anything that account assigns to a WBS element. Load in that order and most of the failures that usually appear in a first cutover simply do not happen.

Use this sequence whenever these files serve as SAP migration templates in an S/4HANA migration, and again for mass loads after go live.

Using these templates with the SAP Migration Cockpit or LSMW

An SAP data migration project usually starts with master data, and these workbooks fit that stage. SAP designed the SAP Migration Cockpit for the initial load into a new system, so the column to field mapping here is the same mapping the Cockpit and LSMW both need. Teams use them as the collection and cleansing layer before an S/4HANA migration go live, then keep them for the mass change work that follows.

MM01Materials ManagementOne row per record 6 of 27 columns mandatory

SAP Material Master Upload Template (MM01)

Create material master records with the views your columns populate. One row is one material in one plant.

Posts throughBAPI_MATERIAL_SAVEDATAWatch Demo

The standard interface for creating and changing material master data. The same BAPI serves MM01, MM02 and MM17.

T-codeMM01

What to watchEvery data structure has a partner X structure, and the X structure is what makes a field count. Send PLANTDATA-DISMM without setting PLANTDATAX-DISMM to X and the value is silently ignored. On a change that means nothing happens. On a create it means the field comes out empty.

Step by step MM01 upload guide

Mandatory fields 6 fields
ColumnSAP structureSAP fieldNote
Industry SectorHEADDATAIND_SECTORM mechanical, C chemical, P pharma.
Material TypeHEADDATAMATL_TYPEFERT, ROH, HALB, HAWA, DIEN.
Material DescriptionMATERIALDESCRIPTIONMATL_DESCMax 40 characters.
Base Unit of MeasureCLIENTDATABASE_UOMMust exist in T006.
Material GroupCLIENTDATAMATL_GROUPMust exist in T023.
PlantPLANTDATAPLANTThe plant the plant level views are created for.
MM02Materials ManagementOne row per record 2 of 22 columns mandatory

SAP Material Master Change Upload Template (MM02)

Change fields on materials that already exist. A change edits fields inside a view. It does not create the view.

Posts throughBAPI_MATERIAL_SAVEDATAWatch Demo

The same interface as MM01. On a change, the X structures do the real work: they are what separates a field you are changing from one you are leaving alone.

T-codeMM02

What to watchEvery data structure has a partner X structure, and the X structure is what makes a field count. Send PLANTDATA-DISMM without setting PLANTDATAX-DISMM to X and the value is silently ignored. On a change that means nothing happens. On a create it means the field comes out empty.

Step by step MM02 upload guide

Mandatory fields 2 fields
ColumnSAP structureSAP fieldNote
MaterialHEADDATAMATERIALMust already exist.
PlantPLANTDATAPLANTRequired for any plant level field.
MM17Materials ManagementOne row per record 1 of 20 columns mandatory

SAP Material Mass Maintenance Upload Template (MM17)

The bulk field sweep. Same one field across many materials, where MM17 on screen becomes unwieldy.

For the SAP transaction itself, see how MM17 works.

Posts throughBAPI_MATERIAL_SAVEDATAWatch Demo

MM17 on screen and this BAPI reach the same place. The BAPI route gives you per-row validation and a per-row result, which the screen does not.

T-codeMM17

What to watchEvery data structure has a partner X structure, and the X structure is what makes a field count. Send PLANTDATA-DISMM without setting PLANTDATAX-DISMM to X and the value is silently ignored. On a change that means nothing happens. On a create it means the field comes out empty.

Mandatory fields 1 fields
ColumnSAP structureSAP fieldNote
MaterialHEADDATAMATERIALMust already exist.
MM01Materials ManagementOne row per record 1 of 27 columns mandatory

SAP Material Extension to a New Plant or Sales Org Upload Template (MM01)

Give an existing material a new plant, storage location or sales organisation view. One row is one extension.

Posts throughBAPI_MATERIAL_SAVEDATAWatch Demo

The same interface as material create. Extending is just sending the organisational key with the views you want and nothing else.

T-codeMM01

What to watchAn extension is not a separate operation in SAP. You call the same create interface, send the material number with only the new organisational key, and flag only the views you are adding. Send a view flag without its X structure and nothing is written for that view. Send data for a view you did not flag on HEADDATA and it is ignored without a message.

Mandatory fields 1 fields
ColumnSAP structureSAP fieldNote
MaterialHEADDATAMATERIALMust already exist.
MM06Materials ManagementOne row per record 2 of 8 columns mandatory

SAP Material Deletion Flag Upload Template (MM06)

Flag materials for deletion at client, plant or storage location level. One row is one material at one level.

Posts throughBAPI_MATERIAL_SAVEDATAWatch Demo

The same interface as any material change. The deletion flag is an ordinary field, which means it needs its X flag like any other.

T-codeMM06

What to watchThe deletion flag is an ordinary field, so it obeys the ordinary rule: without its X flag set it is silently ignored. A deletion run that reports success and flags nothing is almost always this. And the level matters: a client level flag affects every plant, a plant level flag affects one.

Mandatory fields 2 fields
ColumnSAP structureSAP fieldNote
MaterialHEADDATAMATERIALMust already exist.
Deletion FlagCLIENTDATADEL_FLAGX sets the flag. Blank with the X indicator set clears it.
MSC1NMaterials ManagementOne row per record 1 of 17 columns mandatory

SAP Batch Master Upload Template (MSC1N)

Create batch master records. One row is one batch of one material in one plant.

Posts throughBAPI_BATCH_CREATEWatch Demo

A compact interface. Note that BATCH and BATCHATTRIBUTES genuinely appear on both the importing and exporting side, which is legal and confirmed by working code.

T-codeMSC1N

What to watchClassification does not happen unless you ask for it. BATCHCONTROLFIELDS-DOCLASSIFY and -CLASS_NUM are what create the classification values. Leave them out and the BAPI creates the batch record cleanly and silently skips the characteristics, which is usually the whole point of the batch.

Mandatory fields 1 fields
ColumnSAP structureSAP fieldNote
MaterialMATERIALMATERIALMust be batch managed.
CS01Production PlanningHeader and detail rows 10 of 27 columns mandatory

SAP Bill of Material Upload Template (CS01)

Create material BOMs. An H row is the BOM header and the D rows under it are its components.

Posts throughCSAP_MAT_BOM_CREATEWatch Demo

This is a function module, not a BAPI. It predates the BAPI conventions entirely, has no RETURN table, and raises a classic ABAP exception instead.

T-codeCS01

What to watchThere is no RETURN table on this module, so the usual BAPI error handling finds nothing and treats every failure as a success. Failures raise the ERROR exception, so SY-SUBRC must be checked. And commit works differently: the module carries its own FL_COMMIT_AND_WAIT flag, which defaults to blank, so with the default the caller must commit. Samples that omit both are why many BOM loads appear to succeed and persist nothing.

Step by step CS01 upload guide

Mandatory fields 10 fields
ColumnSAP structureSAP fieldNote
MaterialMATERIALMATNRThe header material the BOM belongs to.
PlantPLANTWERKS
BOM UsageBOM_USAGESTLAN1 production, 3 universal.
Valid FromVALID_FROMDATUVYYYYMMDD.
Base QuantityI_STKOBASE_QUANThe quantity the component quantities relate to.
Base UnitI_STKOBASE_UNIT
Item NumberT_STPOITEM_NO0010, 0020. Space them so items can be inserted later.
Item CategoryT_STPOITEM_CATEGL stock, N non-stock, T text.
Component QuantityT_STPOCOMP_QTY
Component UnitT_STPOCOMP_UNIT
CS02Production PlanningHeader and detail rows 7 of 30 columns mandatory

SAP Bill of Material Change Upload Template (CS02)

Change existing material bills of material in bulk. An H row identifies the BOM, D rows are the items.

Posts throughCSAP_MAT_BOM_MAINTAINWatch Demo

An API function module rather than a BAPI, which means no BAPIRET2, no X structures, and a commit that happens by default.

T-codeCS02

What to watchThe quantity and date fields here are batch input character fields, not typed numbers and dates. COMP_QTY is CHAR 18, COMP_SCRAP is CHAR 6 and VALID_FROM is CHAR 10, all on data elements whose names end in _BI. They have to be formatted in the calling user's own decimal and date notation, so twelve and a half is 12,5 for one user and 12.5 for another, and a date is 24.09.2026 rather than 20260924.

Mandatory fields 7 fields
ColumnSAP structureSAP fieldNote
MaterialMATERIALMATERIALThe material the BOM belongs to.
PlantPLANTPLANT
BOM UsageBOM_USAGEBOM_USAGE1 is production.
AlternativeALTERNATIVEALTERNATIVE01 unless there are several.
Valid FromVALID_FROMVALID_FROMIn the user's date format, for example 01.05.2026.
Item NumberT_STPOITEM_NOThe new or retained item number. Four characters.
Item CategoryT_STPOITEM_CATEGL stock item, N non stock, T text.
CT04Cross ApplicationHeader and detail rows 4 of 20 columns mandatory

SAP Characteristic Upload Template (CT04)

Create classification characteristics with their allowed values. An H row is the characteristic, D rows are its allowed values.

Posts throughBAPI_CHARACT_CREATEWatch Demo

The classification interface. Allowed values are split across separate tables by data type, which is the thing that catches people.

T-codeCT04

What to watchAllowed values are split across three tables by data type, and their descriptions sit in a fourth. A single allowed-values column routed to the wrong table for the declared data type produces a characteristic with no value list and no error. This template carries a Data Type column on the header so the loader can route correctly.

Mandatory fields 4 fields
ColumnSAP structureSAP fieldNote
Characteristic NameCHARACTDETAILCHARACT_NAMESits inside the detail structure, not as a separate parameter.
DescriptionCHARACTDESCRDescription text, one row per language.
Data TypeCHARACTDETAILDATA_TYPEDecides which value table the allowed values go to.
LengthCHARACTDETAILLENGTHNumber of characters or digits.
CL20NCross ApplicationHeader and detail rows 5 of 20 columns mandatory

SAP Material Classification Upload Template (CL20N)

Assign objects to classes and set their characteristic values. An H row is the class assignment, D rows are the values.

Posts throughBAPI_OBJCL_CREATEWatch Demo

Three value tables, and which one a value goes in depends on the characteristic's own data type, not on what the value looks like.

T-codeCL20N

What to watchThe three value tables split by the characteristic's data type in CT04, not by how the value looks in your sheet. CHAR and BOOL go to the character table, CURR to the currency table, and NUM, DATE and TIME all go to the numeric table, whose VALUE_FROM field is a floating point number. A date characteristic therefore cannot be sent as 20260924. Pipe everything into the character table and every numeric, date and currency characteristic is lost.

Mandatory fields 5 fields
ColumnSAP structureSAP fieldNote
Object KeyOBJECTKEYNEWOBJECTThe concatenated key. A material number alone for class type 001.
Object TableOBJECTTABLENEWOBJECTTABLEMARA for materials, MCH1 for batches.
ClassCLASSNUMNEWCLASSNUMUp to eighteen characters.
Class TypeCLASSTYPENEWCLASSTYPE001 is the material class type.
CharacteristicALLOCVALUESCHARCHARACTUp to thirty characters. Must exist in CT04.
VK11Sales and DistributionOne row per record 9 of 20 columns mandatory

SAP Sales Pricing Conditions Upload Template (VK11)

Create sales condition records in bulk. One row is one condition record and one validity period.

Posts throughBAPI_PRICES_CONDITIONSWatch Demo

A condition interface with its own naming convention, its own operation codes, and one field that is unlike anything else in SAP.

T-codeVK11

What to watchVARKEY is a flat 100 character field into which the entire key of the target condition table has to be packed, in the exact field sequence and exact lengths of that table, with no delimiters. It is not a list of fields. Get the packing wrong by one character and the record lands against the wrong key with no error.

Step by step VK11 upload guide

Mandatory fields 9 fields
ColumnSAP structureSAP fieldNote
OperationTI_BAPICONDCTOPERATION009 create, 004 change, 003 delete. Set the same code in all three tables.
ApplicationTI_BAPICONDCTAPPLICATIOV for sales, M for purchasing.
Condition UsageTI_BAPICONDCTCOND_USAGEA for pricing.
Condition TableTI_BAPICONDCTTABLE_NO305, 304 and so on. Decides the VARKEY layout.
Condition TypeTI_BAPICONDCTCOND_TYPEPR00 price, K007 customer discount.
Valid FromTI_BAPICONDCTVALID_FROMYYYYMMDD.
Valid ToTI_BAPICONDCTVALID_TOYYYYMMDD.
AmountTI_BAPICONDITCOND_VALUEA 9 decimal BAPI amount. Negative for discounts.
Rate UnitTI_BAPICONDITCONDCURRA currency, or a percentage marker for percentage conditions.
KS01ControllingOne row per record 11 of 22 columns mandatory

SAP Cost Center Upload Template (KS01)

Create cost centers in bulk. One row is one cost center and one validity interval.

Posts throughBAPI_COSTCENTER_CREATEMULTIPLEWatch Demo

A list-based BAPI. You pass a table of cost centers and one controlling area for the whole call.

T-codeKS01

What to watchTwo things to know before you run: CONTROLLINGAREA is passed once for the whole call, so every row in the file must belong to the same controlling area. And VALID_FROM and VALID_TO are per-row with no default, so a blank validity interval creates an unusable record rather than defaulting to something sensible.

Step by step KS01 upload guide

Mandatory fields 11 fields
ColumnSAP structureSAP fieldNote
Controlling AreaCONTROLLINGAREACO_AREAPassed once for the whole file. Every row must match.
Cost CenterCOSTCENTERLISTCOSTCENTER
Valid FromCOSTCENTERLISTVALID_FROMNo default. YYYYMMDD.
Valid ToCOSTCENTERLISTVALID_TONo default. Often 99991231. YYYYMMDD.
NameCOSTCENTERLISTNAMEShort name, max 20 characters.
DescriptionCOSTCENTERLISTDESCRIPTMax 40 characters.
Person ResponsibleCOSTCENTERLISTPERSON_IN_CHARGE
Cost Center CategoryCOSTCENTERLISTCOSTCENTER_TYPE1 production, 2 service, F production.
Hierarchy AreaCOSTCENTERLISTCOSTCTR_HIER_GRPMust be an existing node in the standard hierarchy.
Company CodeCOSTCENTERLISTCOMP_CODE
CurrencyCOSTCENTERLISTCURRENCY
KS02ControllingOne row per record 4 of 22 columns mandatory

SAP Cost Center Change Upload Template (KS02)

Change existing cost centers in bulk. One row is one cost center and one validity interval.

Posts throughBAPI_COSTCENTER_CHANGEMULTIPLEWatch Demo

The change counterpart to the create BAPI. It works differently from most change interfaces, and the difference matters.

T-codeKS02

What to watchThis BAPI has NO X structures. Most SAP change interfaces use paired X structures to say which fields you mean. This one uses a single RESET_FILLED_FIELDS switch for the entire call instead. A template built on the usual X-column mental model will be wrong here, and the wrong switch setting either wipes populated fields or refuses to clear them.

Mandatory fields 4 fields
ColumnSAP structureSAP fieldNote
Controlling AreaCONTROLLINGAREACO_AREAPassed once for the whole file.
Cost CenterCOSTCENTERLISTCOSTCENTERMust already exist.
Valid FromCOSTCENTERLISTVALID_FROMIdentifies the time slice. YYYYMMDD.
Valid ToCOSTCENTERLISTVALID_TOYYYYMMDD.
KA01 / KA06ControllingOne row per record 7 of 15 columns mandatory

SAP Cost Element Upload Template (KA01 / KA06)

Create primary and secondary cost elements. One row is one cost element and one validity interval.

Posts throughBAPI_COSTELEM_CREATEMULTIPLEWatch Demo

A list-based CO interface. Note the real function module name is BAPI_COSTELEM_CREATEMULTIPLE, not BAPI_COSTELEMENT_CREATEMULTIPLE, which exceeds the 30 character ABAP limit and does not exist.

T-codeKA01 / KA06

What to watchThis structure uses ABAP field names, not the English BAPI style. The cost element is KSTAR, the validity is DATAB and DATBI, the name is KTEXT and the description is KLTXT. Building the template by analogy with the cost center BAPI, which uses COSTCENTER, VALID_FROM, NAME and DESCRIPT, produces columns that map to nothing.

Mandatory fields 7 fields
ColumnSAP structureSAP fieldNote
Controlling AreaCOAREACO_AREAPassed once for the whole file. Note the parameter is COAREA, not CONTROLLINGAREA.
Cost ElementCOSTELEMENTLISTKSTARABAP field name, not COSTELEMENT.
Valid FromCOSTELEMENTLISTDATABABAP field name, not VALID_FROM. YYYYMMDD.
Valid ToCOSTELEMENTLISTDATBIABAP field name, not VALID_TO. YYYYMMDD.
NameCOSTELEMENTLISTKTEXTMax 20 characters.
DescriptionCOSTELEMENTLISTKLTXTMax 40 characters.
CategoryCOSTELEMENTLISTKATYP1 primary, 43 secondary for internal activity allocation.
KL01ControllingOne row per record 9 of 18 columns mandatory

SAP Activity Type Upload Template (KL01)

Create activity types. One row is one activity type and one validity interval.

Posts throughBAPI_ACTTYPE_CREATEMULTIPLEWatch Demo

A list-based CO interface. The real function module name is BAPI_ACTTYPE_CREATEMULTIPLE, not BAPI_ACTIVITYTYPE_CREATEMULTIPLE, which exceeds the 30 character ABAP limit and does not exist.

T-codeKL01

What to watchThe allocation cost element must already exist. It has to be a secondary cost element of category 43, in the same controlling area, with a validity window that covers the activity type's own. Loading activity types and their cost elements in the same run, in the wrong order, fails here and the message does not always say why.

Mandatory fields 9 fields
ColumnSAP structureSAP fieldNote
Controlling AreaCOAREACO_AREAPassed once for the whole file.
Activity TypeACTIVITYTYPELISTACTTYPE
Valid FromACTIVITYTYPELISTVALID_FROMYYYYMMDD.
Valid ToACTIVITYTYPELISTVALID_TOYYYYMMDD.
NameACTIVITYTYPELISTNAMEMax 20 characters.
DescriptionACTIVITYTYPELISTDESCRIPTMax 40 characters.
Activity UnitACTIVITYTYPELISTACT_UNITH, MIN, EA.
Activity Type CategoryACTIVITYTYPELISTACTIVITY_CAT1 manual entry and manual allocation.
Allocation Cost ElementACTIVITYTYPELISTALLOC_COST_ELEMMust be an existing secondary cost element of category 43.
KP26ControllingHeader and detail rows 13 of 27 columns mandatory

SAP Activity Price Planning Upload Template (KP26)

Plan activity quantities, capacities and prices by cost centre and activity type. An H row is the planning header, D rows are the combinations.

Posts throughBAPI_COSTACTPLN_POSTACTOUTPUTWatch Demo

Four parallel data tables joined by a fifth index table. This is the shape of the whole CO planning family and it is the thing people get wrong.

T-codeKP26

What to watchINDEXSTRUCTURE is not bookkeeping, it is the join. The four data tables are not matched by position. Each row of INDEXSTRUCTURE names one COOBJECT row, one value row and one CONTRL row by their index numbers. Supply the data tables without it and the call returns cleanly having planned nothing.

Mandatory fields 13 fields
ColumnSAP structureSAP fieldNote
Controlling AreaHEADERINFOCO_AREA
Fiscal YearHEADERINFOFISC_YEARYYYY.
Period FromHEADERINFOPERIOD_FROM001 for a full year plan.
Period ToHEADERINFOPERIOD_TO012 for a full year plan.
VersionHEADERINFOVERSION0 is the operational plan version.
Object IndexCOOBJECTOBJECT_INDEXSequential. Named by INDEXSTRUCTURE.
Cost CenterCOOBJECTCOSTCENTER
Activity TypeCOOBJECTACTTYPESix characters.
Value IndexTOTVALUEVALUE_INDEXSequential. Named by INDEXSTRUCTURE.
Planned QuantityTOTVALUEACTVTY_QTYThe activity quantity for the year.
Unit of MeasureTOTVALUEUNIT_OF_MEASUREThe activity unit, for example H for hours.
CurrencyTOTVALUECURRENCY
Attribute IndexCONTRLATTRIB_INDEXSequential. Named by INDEXSTRUCTURE.
KP06ControllingHeader and detail rows 10 of 25 columns mandatory

SAP Cost Centre Cost Planning Upload Template (KP06)

Plan primary costs by cost centre and cost element. An H row is the planning header, D rows are the cost element lines.

Posts throughBAPI_COSTACTPLN_POSTPRIMCOSTWatch Demo

The same four table plus index shape as activity price planning, but with different table types. They are not interchangeable.

T-codeKP06

What to watchThe two planning BAPIs look interchangeable and are not. INDEXSTRUCTURE is BAPIACPSTRU in both, but the object, value and control tables here are the BAPIPCP types, not the BAPIACP types, and the field sets genuinely differ. BAPIPCPOBJ has an order and a WBS element; BAPIACPOBJ has neither. A template built for one will not feed the other.

Mandatory fields 10 fields
ColumnSAP structureSAP fieldNote
Controlling AreaHEADERINFOCO_AREA
Fiscal YearHEADERINFOFISC_YEARYYYY.
Period FromHEADERINFOPERIOD_FROM
Period ToHEADERINFOPERIOD_TO
VersionHEADERINFOVERSION0 is the operational plan version.
Object IndexCOOBJECTOBJECT_INDEXSequential. Named by INDEXSTRUCTURE.
Value IndexTOTVALUEVALUE_INDEXSequential. Named by INDEXSTRUCTURE.
Cost ElementTOTVALUECOST_ELEMTen characters, zero padded.
Transaction CurrencyTOTVALUETRANS_CURR
Attribute IndexCONTRLATTRIB_INDEXSequential. Named by INDEXSTRUCTURE.
KO01ControllingHeader and detail rows 5 of 27 columns mandatory

SAP Internal Order Upload Template (KO01)

Create internal orders with their settlement rules. An H row is the order, D rows are its settlement rules.

Posts throughBAPI_INTERNALORDER_CREATEWatch Demo

An unusually small interface. Note the I_ and E_ prefixes on the master data parameters, which are not the usual BAPI convention and are frequently mistyped.

T-codeKO01

What to watchThe parameter names carry I_ and E_ prefixes, which almost no other BAPI does. It is I_MASTER_DATA going in and E_MASTER_DATA coming back, not MASTER_DATA in both directions. A mapping written from the usual convention will not bind.

Mandatory fields 5 fields
ColumnSAP structureSAP fieldNote
Order TypeI_MASTER_DATAORDER_TYPEDrives number range and settlement behaviour.
DescriptionI_MASTER_DATAORDER_NAMEMax 40 characters.
Controlling AreaI_MASTER_DATACO_AREA
Company CodeI_MASTER_DATACOMP_CODE
CurrencyI_MASTER_DATACURRENCY
CJ20NProject SystemHeader and detail rows 6 of 29 columns mandatory

SAP Project and WBS Element Upload Template (CJ20N)

Create project definitions with their work breakdown structures. An H row is the project, D rows are the WBS elements.

Posts throughBAPI_PROJECT_MAINTAINWatch Demo

A method driven interface with paired update tables. Every data table has a twin whose fields are all flags, and the twin has no key of its own.

T-codeCJ20N

What to watchThe update table has no key. Its first field, confusingly called WBS_ELEMENT, is itself a CHAR 1 flag rather than a WBS identifier, so nothing in that table says which element a row of flags belongs to. It is matched against the data table positionally, row for row. Filter, sort or skip a row in one table and not the other and the flags land on the wrong elements, silently, because every value involved is a valid X or blank.

Mandatory fields 6 fields
ColumnSAP structureSAP fieldNote
Project DefinitionI_PROJECT_DEFINITIONPROJECT_DEFINITIONUp to twenty four characters. Must fit the project coding mask.
DescriptionI_PROJECT_DEFINITIONDESCRIPTIONForty characters.
Company CodeI_PROJECT_DEFINITIONCOMP_CODE
Controlling AreaI_PROJECT_DEFINITIONCONTROLLING_AREA
Project ProfileI_PROJECT_DEFINITIONPROJECT_PROFILESeven characters. Decides most of the defaults.
WBS ElementI_WBS_ELEMENT_TABLEWBS_ELEMENTThe readable form. Up to twenty four characters.
AS01Asset AccountingHeader and detail rows 7 of 28 columns mandatory

SAP Asset Master Upload Template (AS01)

Create fixed asset master records with their depreciation areas. An H row is the asset, D rows are its depreciation areas.

Posts throughBAPI_FIXEDASSET_CREATE1Watch Demo

The asset master interface. Almost everything is an importing structure with a paired X structure, and the depreciation areas are the only real table.

T-codeAS01

What to watchTwo X traps on this one. Every data structure needs its X partner flagged or the value is silently ignored. And in DEPRECIATIONAREASX the first field AREA is NOT a flag: it stays NUMC 2 and must carry the real depreciation area number, so the X row can be matched to its data row.

Step by step AS01 upload guide

Mandatory fields 7 fields
ColumnSAP structureSAP fieldNote
Company CodeKEYCOMPANYCODE
Asset ClassGENERALDATAASSETCLASSDrives number range, account determination and depreciation defaults.
DescriptionGENERALDATADESCRIPTMax 50 characters.
Cost CenterTIMEDEPENDENTDATACOSTCENTER
Depreciation AreaDEPRECIATIONAREASAREA01 book depreciation. Also the join key in the X table.
Depreciation KeyDEPRECIATIONAREASDEP_KEY
Useful Life YearsDEPRECIATIONAREASULIFE_YRS
IL01Plant MaintenanceOne row per record 5 of 23 columns mandatory

SAP Functional Location Upload Template (IL01)

Create functional locations. One row is one location. Load top down, parents before children.

Posts throughBAPI_FUNCLOC_CREATEWatch Demo

A compact interface with no TABLES parameters at all. General technical object data and functional location specific data are two separate importing structures.

T-codeIL01

What to watchA documented SAP behaviour worth knowing before you load a hierarchy. When you set DATA_SPECIFIC-SUPFLOC, the BAPI marks the data origin of maintenance plant, planning plant, cost center and company code as maintained directly, not inherited from the superior location. The child looks correct but is permanently detached from the parent's data propagation. SAP KBA 1704117 documents this.

Mandatory fields 5 fields
ColumnSAP structureSAP fieldNote
Functional LocationEXTERNAL_NUMBERFUNCLOCMust match the structure indicator mask, separators included.
Structure IndicatorDATA_SPECIFICSTRIND
CategoryDATA_SPECIFICCATEGORYFunctional location category.
DescriptionDATA_GENERALDESCRIPTMax 40 characters.
Maintenance PlantDATA_GENERALMAINTPLANT
IE01Plant MaintenanceOne row per record 4 of 26 columns mandatory

SAP Equipment Master Upload Template (IE01)

Create equipment master records. One row is one piece of equipment.

Posts throughBAPI_EQUI_CREATEWatch Demo

The sibling of the functional location BAPI, sharing the same general data structure. Installation is handled by its own structure, not by the specific data.

T-codeIE01

What to watchDo not map a functional location column to DATA_SPECIFIC-READ_FLOC or superior equipment to -READ_SUPEQ. The READ_ prefix marks those as output only fields. Installation is driven by DATA_INSTALL and VALID_DATE. A template that maps to the READ_ fields creates unattached equipment with no error message at all.

Mandatory fields 4 fields
ColumnSAP structureSAP fieldNote
Valid FromVALID_DATEINST_DATEValid from date for the time segment. YYYYMMDD.
Equipment CategoryDATA_SPECIFICEQUICATGRYM machines, P production resources.
DescriptionDATA_GENERALDESCRIPTMax 40 characters.
Maintenance PlantDATA_GENERALMAINTPLANT
FI01FinanceOne row per record 4 of 14 columns mandatory

SAP Bank Master Upload Template (FI01)

Create bank master records. One row is one bank, keyed by country and bank key.

Posts throughBAPI_BANK_CREATEWatch Demo

A small interface with no TABLES parameters. The whole address structure is only 11 fields.

T-codeFI01

What to watchRETURN on this BAPI is an exporting structure, not a table. Code written from the usual BAPI pattern that passes TABLES return will not bind, and an error handler that loops a message table finds nothing and treats every failure as a success.

Mandatory fields 4 fields
ColumnSAP structureSAP fieldNote
Bank CountryBANK_CTRYBANK_CTRYISO country code.
Bank KeyBANK_KEYBANK_KEYRouting number, sort code or Bankleitzahl. Text format.
Bank NameBANK_ADDRESSBANK_NAMEMax 60 characters.
CityBANK_ADDRESSCITY
PA30Human ResourcesOne row per record 5 of 22 columns mandatory

SAP HR Infotype Upload Template (PA30)

Create, change and delimit employee infotype records. One row is one infotype operation.

Posts throughHR_INFOTYPE_OPERATIONWatch Demo

Not a BAPI. A function module with an untyped record parameter, a single message back, and a commit that happens unless you switch it off.

T-codePA30

What to watchThe parameter texts for the two validity dates are transposed in SAP standard: the parameter typed ENDDA is described as the validity begin and the one typed BEGDA as the validity end. The types are right and only the descriptions are wrong, so anyone generating column headings from the SE37 documentation labels the two date columns the wrong way round. Go by BEGDA and ENDDA, never by the description.

Step by step PA30 upload guide

Mandatory fields 5 fields
ColumnSAP structureSAP fieldNote
InfotypeINFTYINFTYFour digits. 0002 personal data, 0006 addresses, 0008 basic pay.
Personnel NumberNUMBERPERNREight digits.
Validity BeginVALIDITYBEGINBEGDAData element BEGDA. Ignore the transposed parameter text. YYYYMMDD.
Validity EndVALIDITYENDENDDAData element ENDDA. 99991231 for an open ended record. YYYYMMDD.
OperationOPERATIONACTIOINS create, MOD change, DEL delete. There is no CHG.

After the template

Posting these templates to SAP

Filling in a template is the easy half. PostNow.ai is the other half: it loads the sheet, checks every row against your live SAP system, and posts it through the same SAP interface named on the template, under your own SAP user and authorisations. Nothing is written that you could not write yourself in the SAP GUI, and every row that fails is reported with the SAP message that caused it.

  • Load the sheet
  • Check every row in live SAP
  • Post through the SAP interface
Start your 14 day free trial Runs under your own SAP login and authorisations.

FAQ

Frequently asked questions

What is the mandatory field list for creating a material master in SAP?

It depends on the views you are creating, which is why the material template has a flag per view. At minimum the basic view needs material number, industry sector, material type, description and base unit of measure. The full mandatory list per view is in the template and on its Field Guide tab, mapped to the BAPI_MATERIAL_SAVEDATA structures.

How do I extend an existing material to a new plant or sales organisation?

Use the same create interface and send only the new organisational key with the views you are adding. Extending a material is not a separate operation in SAP: you call BAPI_MATERIAL_SAVEDATA with the material number, set the flag for the view you are adding, and existing views are left untouched. There is a dedicated template for this on this page.

How do I upload master data to SAP from Excel without writing an upload program?

PostNow.ai takes the filled template, checks every row against your live SAP system, and posts it through the standard SAP interface named on the template. There is no custom ABAP, no transport and no recording to maintain. It runs under your own SAP login, so it can only create what you are authorised to create.

Why do characteristic values need three different tables?

Because SAP splits them by the characteristic's data type rather than by how the value looks. Character and boolean values go to one table, currency values to another, and numeric, date and time values all go to a third where the field is a floating point number. A date characteristic therefore cannot be passed as a formatted date. The classification template handles this split for you.

Can I change master data in bulk as well as create it?

Yes. This page includes separate templates for creating, changing, mass maintaining and flagging for deletion, because SAP uses different behaviour for each. Change interfaces in particular ignore any field whose update flag is not set, so a change template that only carries the changed columns will appear to succeed and alter nothing.

What order should master data be loaded in during a migration?

Characteristics, then classes and classification, then materials, then batches and bills of material. On the finance side: cost elements and activity types, then cost centres, then internal orders and projects. Asset classes before asset masters, functional locations before equipment. Each template on this page names what has to exist before it.

Do these templates work for a mass change after go live, not just for migration?

Yes, and that is where most of them get used. Migration tools are built for the initial load into a new system, so the mass changes that follow (a material group realignment, a price list update, a cost centre restructure) usually need a different route. PostNow.ai posts these same templates through the SAP change interfaces at any point in the system's life.

Can I use these as S/4HANA migration templates?

Yes, as the data collection and cleansing layer of an S/4HANA migration, although they are not the SAP Migration Cockpit's own staging templates. Each one maps every column to the structure and field of a standard SAP interface that exists on both ECC and S/4HANA, so the same file serves the go live load and the mass changes after it. Load them in the order given in the Loading order and dependencies section on this page.

Keep going

More SAP upload templates