In every other company that comes to us asking "we'd like to finally see who our best customer actually is", the problem isn't with the reports. It's in the customer master file. The same customer sits in the ERP under four different names, three typo'd tax IDs and two independent order histories. No BI tool fixes that — not even an expensive one.
Duplicates in customer master data aren't a cosmetic problem. They're real money: wrong marketing segments, duplicate offers sent to the same partner, missed volume discounts (because the "new" customer never hit the threshold), salespeople cold-calling firms that have been loyal for eight years, and a complete loss of management's trust in the sales reports. "This data is useless" — we hear that roughly once a week.
This piece is about how to clean up the customer file in a 10–50-person company without paying half a million for an MDM project and without paralysing the sales team for three months.
4,200 customers, of which 1,400 are the same customer
At one of our clients — a 26-person electrical-wholesale business, on Comarch Optima for 11 years — the management team was convinced the company served "around 4,000 active customers". That number appeared in investor decks, in sales targets, in commission calculations.
One week of work with a master-file export revealed that out of 4,217 active customer records: 1,411 were duplicates (same companies under different spellings), 643 were customers who hadn't bought anything in over 36 months, and 287 were "test", "Test customer", "ABC contractor" and similar leftovers from old migrations. The real number of active customers was 1,876. Less than half of what the reports said.
The consequences were measurable. The "VIP customer" segment (over PLN 50k/year) showed 312 firms in the report — after deduplication, only 198 unique customers, with nine of them "split" across two records and never crossing the threshold inside the report. They were missing 4–7% volume rebates they were formally entitled to and never received. Marketing had been sending the same newsletter four times to the same company for 18 months. At least two salespeople were competing for a "new" customer who was already a colleague's loyal account in another region.
The whole cleanup project ran for 6 weeks — 2 weeks of audit and analysis, 3 weeks of controlled merging (40–80 records per day, verified by the responsible salesperson) and one week to rebuild the reports. Total cost: under PLN 18k including their own team's time. Return: the first sales report management actually trusted, plus a roughly PLN 9k per year saving on marketing alone.
This isn't a story about software. It's a story about what happens when, for 11 years, every new customer was entered by whoever picked up the phone, with no rules.
Where duplicates come from
Nobody creates duplicates on purpose. They accumulate because every company has a few classic "duplicate generators":
- Manual entry by different people. Anna writes "ABC Ltd", Marek writes "A.B.C. Sp. z o.o.", Krzysiek writes "ABC limited". Comarch Optima, enova365, Subiekt — none of them will block such an entry if the tax ID hasn't been filled in (and often it hasn't, because "the client pays cash, we don't need a tax ID").
- Imports from different sources. Newsletter, website form, trade-show contacts, online-shop integration — each source creates a new record. A WooCommerce shop doesn't know that a customer with the same email already exists in Optima.
- Migrations from earlier systems. Every company that moved from Subiekt to enova365, or from an Access database to Optima, brought "a certain percentage" of duplicates into the new system. That percentage never drops — it only grows with new entries.
- Customer legal changes. A sole proprietor turns into a Ltd — new tax ID, new name, in practice the same customer with the same salesperson. If nobody links the two records, the system carries two separate entities with two separate histories.
- No rule for "who creates new customers". In most SMEs, everyone does, with no oversight. Three people with edit access and five years of operation are enough to create chaos.
These are systemic causes, not human ones. If you clean the file but don't change the causes, in 18 months you'll be having the same conversation with management again.
What "clean" actually means for an SME
In enterprises, "clean master data" means an MDM project, a dedicated data team, half-a-million-zloty tooling. In an SME, you need far less, but specifically:
- One record per partner. Partner = one tax ID. Exceptions (foreign customer without a Polish tax ID, private person) have a clear identifying rule (e.g. email + address).
- Consistent name format. The legal name (as on the invoice) goes into "full name". The working name (what the salesperson uses) goes into "short name" or "aliases". Without this, no search will ever find your duplicates.
- Tax ID in one format. Everywhere without spaces, without dashes, without the "PL" prefix. One rule, enforced by validation.
- Record status. Active / archived / blocked. Without this you can't tell a "former customer" from a "customer just returning after two years".
- One sales owner. Every active partner has one assigned account manager. Otherwise you'll never settle the "whose customer is this" arguments and never finish cleaning, because nobody feels it's their problem.
Five things. Not ten, not twenty. Five — which together deliver 90% of the value of an MDM programme at SME scale.
How to clean it up, step by step
A customer-file cleanup, done right, is a 4-to-8-week project for a typical 20-50-person company. Order matters — done in reverse, it can paralyse the sales team for weeks.
- Export and audit — 3 to 5 days. Export the whole customer file to Excel or CSV. Count: how many records have an empty tax ID, how many records share an identical tax ID (guaranteed duplicates), how many have similar names (Levenshtein/fuzzy matching — doable with an Excel formula, or 20 lines of Python), how many had no transaction in the last 24 months. Produce a one-page report for management. You're not touching anything yet — only measuring.
- Written merge rules. Before merging anything, agree and write down: how do we recognise that two records are the same customer (tax ID + legal name, email + address, for private persons — phone). Which record "wins" in a merge (usually the one with the longest transaction history or the most complete data). What happens to sales history, documents, receivables from the "losing" record. Comarch Optima has a "merge partners" function, enova365 has one too — but both demand clear rules, or you'll do more harm than good.
- Pilot on one segment. Pick one segment (e.g. "customers in the Mazovian region" or "salesperson X's customers") and run the full merge cycle on it. That's 200–500 records. Learn what edge cases pop up (e.g. two group companies with different tax IDs but the same billing address).
- Controlled merging, in batches. 40–80 records per day, verified by the responsible salesperson. Never merge in "one big batch" — one wrongly merged customer in a wholesaler is two days of untangling invoices and stock reservations. After each batch — a quick check that sales reports haven't started misbehaving.
- Archive, don't delete. A customer who hasn't bought anything for 36 months goes to "archived" status, doesn't disappear. Because in six months they might come back — and you'll want to see their full history, not start from scratch.
- Rules for the future. Tax-ID validation, one or two people authorised to create new partners, integration with the Polish REGON database to auto-fill the name from the tax ID, a monthly "new partners to review" report. Skip this step and you're back to square one in 18 months.
Each of these steps works in Comarch Optima, enova365, Subiekt GT, Microsoft Dynamics 365 Business Central and most other systems used in Polish SMEs. They differ in details, not in the idea.
What not to do
Three classic mistakes we see regularly:
- "We'll clean it up over the weekend, all the interns Friday after work". You'll end up on Monday with salespeople who no longer recognise their own customers. Cleaning needs one accountable owner and contact with the sales team, not a battalion on piecework.
- Deleting without archiving. Someone removes "inactive" records because "they don't buy anyway". Six months later the customer comes back, and with them the question "why don't we have their history and why are we giving them new-customer terms". Archive costs PLN 0 — deletion costs trust.
- Automatic merge without verification. "We have a script that merges everything by tax ID". Great — until it merges a customer with a typo in their tax ID with a totally different company, and three weeks later you're hunting for why account X has an order from a different region. Automation, yes — but as a suggestion a human accepts, not as a "commit".
Cleaning the customer file is craft work, not a sprint. A pace of 40–80 verified records per day is the pace that works. Anything faster usually generates more cost than savings.
Where to start next week
If you're reading this thinking "ours is worse than I thought", do this in order:
- Export the full customer file from your ERP to CSV. Open in Excel, sort by tax ID. Count records with an identical tax ID. That one number tells 80% of the truth about your master file.
- Ask your bookkeeper how many times in the last 12 months they had to manually fix an invoice because "the customer was duplicated". That's your first real cost — multiply by 30 minutes apiece.
- Appoint one person responsible for master-file quality. Even if it's 4 hours a week. Without an owner, nothing changes.
- Run a pilot on one segment (one region, one salesperson, one product group). 200–500 records. Learn. Measure how long it took.
- If the pilot worked, plan the rest as a 4-to-8-week project. If it didn't — stop and check whether you have written merge rules. Without them, don't go any further.
Master-data chaos doesn't fix itself, and a new ERP won't fix it either (if you don't clean before the migration, the new system will hold the same mess, just better-looking). It's fixed by one person with a plan and a few weeks of patience.
If you want to set this up at your company but aren't sure where to start, we help SMEs break this down regularly. The first conversation is free and takes half an hour.
AI won't tell you who your best customer is if that customer sits in the database under four different names. Start with the master file — the rest can wait.