Service master data cleansing in procurement and ERP: how to do it
Why service master data is usually worse than material data, and how to clean up the existing base in procurement and ERP without breaking open contracts.
Service master data is usually in worse shape than material master data because the purchasing process accepts free text and does not force anyone to use a well maintained service master. To clean up what is already there, you measure the problem, group records that describe the same scope, decide what happens to each code, block what goes and fix what stays, without breaking open contracts and purchase orders.
"Just use miscellaneous services and type the rest in the PO text."
You hear this in a lot of procurement teams. It solves today's order and creates tomorrow's problem.
When management asks how much the company spends on building maintenance, someone ends up opening order after order to read the text. The code says nothing, because the same code covers painting, replacing light bulbs and fixing the roof.
With materials, we fight the same bolt registered three times. With services, there is often no code to fight over at all.
What is service master data?
It is the set of records that describe the services a company buys: maintenance, cleaning, transportation, consulting, construction, security. Each record should say what the service is, how it is measured and which purchasing group it belongs to.
In SAP ERP, this is the service master of the External Services Management component (MM-SRV). The SAP ERP documentation (SAP Library) states that procuring external services does not expressly require a service master record. Using it can save considerable time because it stores texts, posting data and conditions that would otherwise be entered in every purchasing transaction. The same page lists fields such as activity number, service category, base unit of measure, short text, material group, valuation class, long text and a reference to standard service catalogs.
One caveat: this documentation covers older SAP ERP releases. If you run SAP S/4HANA, check the documentation for your release and your system configuration before assuming everything works the same way.
The takeaway is simple. The system lets you buy services without a master record. And it is common to see purchases made this way.
Why is service master data usually worse than material master data?
It is not carelessness on the part of the data team. It is the process design that pushes services out of the master data.
- Purchase orders accept free text. The External Services Management documentation lets users enter precise service descriptions or set value limits up to which unplanned services can be performed. The value limit is meant for the unexpected. When it becomes routine, nobody uses the master.
- The master is not required. If you can buy without a code, the code is left for whoever has time. Nobody does.
- The generic code becomes a shortcut. "Miscellaneous services", "third party services", "general maintenance". One code for everything, with the real scope buried in the text.
- Services have no inventory. A wrong material shows up in the warehouse, in the stock count, on the label. A wrong service shows up nowhere until someone tries to add up the spend.
- Each department creates its own. The same air conditioning maintenance gets one name at the plant and another at the office, each with its own price.
The result is a base with few good codes, many forgotten ones and a large volume of purchases that never went through the master data at all.
How do you size the problem in your data?
Measure before you touch any code. Extract two things: the full service master and the service purchase order and contract lines for a period that represents the operation (the company sets the window; a full year usually catches seasonal services).
Then look at:
- How many service codes are active and how many were used in the period.
- How many service PO lines were created without a code, with text only.
- How much spend landed on generic codes.
- Groups of similar descriptions that may be the same service.
- Price dispersion for what looks like the same scope.
- Empty or inconsistent fields: unit of measure, material group, long text.
To turn this into indicators you track month by month, use the same logic described in how to measure master data quality. There is no need to invent new metrics for services.
How do you clean up the service master data you already have?
The general master data cleansing method applies here. What changes with services is that much of the work sits outside the master, in purchase orders and contracts. These are the steps I follow.
1. Separate what is used from what just takes up space
Cross the master with PO and contract lines. Codes with no use in the period go on a list of blocking candidates. Codes in use go into the cleansing. Do not spend effort fixing descriptions of services nobody buys.
2. Group by the nature of the service, not by the text
Build groups by the nature of the activity: building maintenance, equipment maintenance, cleaning, transportation, consulting. Start with the groups that carry the most spend. The prioritization explained in ABC prioritization for master data cleansing works the same way for services.
3. Find the duplicates within each group
Within each group, compare description, unit of measure and purchase history. "Bldg maint", "building maintenance service" and "civil and building maintenance" may or may not be the same scope. The people who buy the service decide. The matching techniques are the same as in how to identify duplicate materials, so I will not repeat them here.
4. Decide the outcome for each code
Every code leaves the cleansing with a decision: keep, merge, block or reclassify. The table below is a starting point.
| Situation | What to do | Who decides (recommended practice) |
|---|---|---|
| Duplicate with an active contract | Choose the surviving code. Block the duplicate for new orders. Keep the old code in the contract until renewal or the next amendment, and switch at that point. | Contract owner in procurement, with the master data team |
| Generic code used in many orders | Read the PO lines, group recurring scopes and create a specific code for what repeats. The generic code stays for exceptions only. | Data governance with procurement |
| Service unused for a long time | Block for new orders. Do not delete if there is document history. | Master data team, validated by the department that used to buy it |
| Unreadable or incomplete description, still in use | Rewrite it with the people who buy the service, making clear what is done, on what, and how it is measured. | Master data team with the requesting department |
| Same scope with very different prices | Confirm the scope really is the same. If it is, merge. If it is not, the description must show the difference. | Buyer responsible for the category |
| Service registered as a material, or the other way around | Create the record under the correct type and block the old one, without changing closed documents. | Master data team with controlling |
5. Block before you even think about deleting
Codes with history are not deleted. Block them for new orders and keep the history available. Audit, tax and controlling will need to read those documents later.
6. Fix what stays
For the surviving codes, correct the short text, long text, unit of measure and material group. Poor descriptions also make the tax classification of the service harder, a topic outside the scope of this article.
7. Agree on a rule for open contracts and orders
This is the step that stalls service cleansing most often. Documents already issued are not rewritten. Agree with procurement on when the new code comes in: at renewal, at the next amendment or on the next order. Until then, the old code stays blocked for new use but alive for what is in progress.
What should you do with generic codes and free text in purchase orders?
A generic code is not always wrong. There will always be a service that shows up once and does not deserve its own record.
The Brazilian federal government offers a useful reference. In Guidance 36 of its procurement portal (page in Portuguese), the federal Management Secretariat recommends that federal agencies use the specific code from CATMAT/CATSER, the federal government's goods and services catalog used on Compras.gov.br, that describes the item. A generic code is accepted only as an exception, when there is no suitable specific code and a request to catalog a new item cannot be met at that moment. This applies to the Brazilian federal public administration and does not bind private companies. The logic, however, works for any procurement team.
For a company, that means: write down when the generic code may be used, ask for a short justification and regularly review what landed there. Whatever repeats is a candidate for a new code.
Free text follows the same logic. It exists for unplanned services. If most service lines are free text, the fix starts in the purchasing process, even before the master data.
How do you keep the data from getting dirty again?
Whoever cleans data without governance will soon be cleaning it again. For services, three measures cover a lot of ground:
- New services are created from attributes, based on a standard per family, not from typed text. The descriptive standard for services deserves its own article.
- Every request for a new code goes through a workflow with a defined owner.
- Use of generic codes and free text becomes an indicator, tracked alongside the other master data numbers.
What does this look like in an example?
Hypothetical example, created to illustrate the method.
A fictional manufacturer has three active codes: "BUILDING MAINTENANCE", "BLDG MAINT SERVICE" and "CIVIL AND BUILDING MAINT". It also has "MISC SERVICES", which appears on many orders with texts such as "warehouse painting", "light bulb replacement" and "gutter repair".
During grouping, procurement confirms the first three are the same scope. "BUILDING MAINTENANCE" stays, with its long text and unit of measure corrected. The other two are blocked for new orders. One of them is on an active contract, so it stays there until the planned amendment, when it is replaced.
In the generic code lines, building painting shows up at every site. It gets its own code. The gutter repair appeared once and stays under the generic code, with a justification.
Nothing was deleted. No closed document was changed. And the question "how much do we spend on building maintenance?" can now be answered by code.
Where should you start?
- Extract the service master and the service PO and contract lines for a representative period.
- Measure free text, use of generic codes, likely duplicates and empty fields.
- Pick one or two service families with the highest spend for the first wave.
- Build the outcome table with procurement and the master data team, code by code.
- Block, fix and agree on the switch rule for open contracts and orders.
- Put the rule for creating new services in place before expanding to other families. To see how to structure this as a discipline, look at service descriptive standardization (PDS).
Frequently asked questions
Can I clean up service master data without stopping purchasing?
Yes, and you should. The cleansing works family by family and blocks codes only for new orders. Purchasing keeps using the codes that stay, and the ones that go remain valid for documents in progress.
What about open contracts that use the old code?
Do not change documents already issued. Block the old code for new use and agree with procurement on when to switch: renewal, amendment or next order. Record the mapping between old and new codes so spend analysis can combine them.
Does cleaning up services require an active service master in SAP?
No. The SAP ERP documentation states that procuring external services does not require a service master record. You can start by diagnosing orders and contracts. But without a master to receive the result, the cleansing has nothing to rest on.
Is a generic code always wrong?
No. It serves the rare service that does not justify its own code. The mistake is letting the generic code become the default path. Define when it may be used and review what lands there.
How long does a service data cleansing take?
It depends on the size of the base, the volume of free text in orders and how available the people who buy the services are to validate scope. There is no honest standard timeline. A diagnosis is what gives you an estimate based on your own data.
How 4MDG can help
At 4MDG, we apply to the service catalog the same discipline PDM applies to materials: taxonomy by family, attribute templates, rule-generated descriptions, deduplication and tax classification, in five steps (diagnosis, taxonomy, standardization, deduplication and governance). ADAM, 4MDG's AI, suggests and your team approves, with an audit trail. See how PDS works for services and, if you want to start with a picture of your data, request a free diagnostic of your service catalog: we show duplicates, insufficient descriptions and price dispersion for the same scope.
Sources
- SAP. SAP Library, Materials Management. "Creating Service Master Records". https://help.sap.com/saphelp_46c/helpdata/EN/f5/24e56111b011d383750000e8a5eb64/content.htm. Accessed on October 21, 2026.
- SAP. SAP Library, Release Notes 3.0A. "Purchasing: New Component: MM External Services Management (MM SRV)". https://help.sap.com/saphelp_46c/helpdata/en/fc/5f3275e24bd111950d0060b03c6b76/content.htm. Accessed on October 21, 2026.
- Brazilian Federal Government Procurement Portal (gov.br). Guidance 36, "Recommendation on the use of the specific code of the goods and services catalog (CATMAT/CATSER), Federal Court of Accounts (TCU) Plenary Ruling (Acórdão) 2831/2021-TCU-Plenário" (updated on July 3, 2026; page in Portuguese). https://www.gov.br/compras/pt-br/agente-publico/orientacoes-e-procedimentos/36-recomendacao-sobre-uso-de-codigo-especifico-do-catalogo-de-bens-e-servicos-catmat-catser-2013-acordao-2831-2021-tcu-plenario. Accessed on October 21, 2026.