Skip to main content
GullySystem

How to Combine Data from Multiple Business Systems

By Ganesh HS, Strategy and Technology, GullySystem

Combining data from separate systems means inventorying what each source holds, matching the same customer, product or period across them using a shared identifier, applying consistent transformation rules, and reconciling totals so disagreements get caught rather than silently averaged away. It's a defined process, not a one-time export-and-merge.

Start With an Inventory, Not the Merge Itself

Picture a multi-clinic healthcare group with a separate appointment-booking app, a billing system and a pharmacy inventory tool at each of its four locations. Before anyone tries to combine that data into one revenue-and-footfall report, the useful first step is simply listing what each of the three systems holds, who's responsible for it at each clinic, and the exact question the combined report needs to answer.

Before combining anything, list every source system involved, who owns it, and the specific question the combined data is meant to answer. A common failure mode is starting the technical merge before anyone has agreed what question it's for — which leads to a combined dataset that technically works but doesn't answer anything a manager actually asked.

For each source, note its update frequency, who can export from it, and whether its records use consistent identifiers (a customer ID, a product SKU) or free-text fields that will need matching. This inventory usually surfaces the hardest part of the project before any data has moved — it's rarely the technical connection that's difficult, it's reconciling what each system means by the same word.

Match the Same Entity Across Different Systems

Two systems rarely refer to the same customer, product or location the same way. Your CRM might hold a customer as "Sharma Traders," your accounting software as "SHARMA TRADERS PVT LTD," and a delivery app as a phone number with no name at all — and unless these get matched to one entity, a combined report will double-count or drop that customer's activity.

The reliable approach uses a shared identifier wherever one exists — a GSTIN, a phone number, an internal customer code entered consistently — rather than matching on name text, which breaks on abbreviations, typos and formatting differences. Where no shared identifier exists yet, matching has to happen manually or with fuzzy-matching rules that get reviewed, not trusted blindly on the first pass.

Design the Extraction, Transformation and Quality Checks Together

Extraction is pulling data out of each source on a schedule; transformation is applying the rules that make the extracted data comparable — common date formats, a shared currency, consistent status labels. Quality checks are the automated tests that catch a broken extraction before it reaches a report: row counts that suddenly drop, a date range that stops updating, a total that moves further than a defined threshold from the prior period.

These three should be designed together, not bolted on after the fact. A transformation rule with no quality check behind it can silently misfire for weeks — a currency conversion pointed at the wrong rate, a status filter excluding more records than intended — and the first anyone hears of it is when a manager questions a number that's been wrong the whole time.

Reconcile Totals and Document Where Each Number Came From

Once systems are combined, the combined total should be checked against each source system's own total, at least during the first few refresh cycles. If the combined revenue figure doesn't match the sum of what each individual system reports on its own, that gap needs an explanation — a timing difference, a duplicate record, an exclusion rule — before the combined number is trusted for a decision.

Documenting lineage — which source each field came from, which rule transformed it, and when it was last reconciled — turns a one-time reconciliation into something the next person can check without redoing the whole investigation. Without that record, every future discrepancy starts from zero.

Schedule Refreshes and Watch for Silent Failures

A combined report needs a defined refresh schedule matched to how often each source actually updates — there's no benefit to refreshing hourly from a system that's only updated once a day. What matters more than frequency is monitoring: an alert when a scheduled extraction fails, when row counts drop unexpectedly, or when a source system changes its export format without warning.

Multi-source reports fail quietly far more often than they fail loudly — a broken connection that simply stops updating looks, at a glance, like a normal report with no new activity. Building in a basic "last successfully refreshed at" timestamp on the report itself is a small addition that catches most of these failures before they mislead anyone.

Multi-source reporting architecture

A diagram showing three or four representative source systems feeding a matching and transformation layer, a reconciliation checkpoint, and a final combined report — with the identifier used for matching and the quality check at each stage labelled explicitly.

Frequently asked questions

How do we match duplicate customer records?

Match on a shared, stable identifier — a GSTIN, phone number or internal customer code — wherever one exists across the systems involved. Where none exists, a reviewed fuzzy-match on name and address can get you most of the way, but the matches it produces should be checked, not trusted automatically.

What if source totals disagree?

Treat the disagreement as information, not noise to average away. Check for timing differences (one system updates faster than another), duplicate or excluded records, and differing definitions of what counts before assuming either source is simply wrong — the cause is usually one of those three, not a data error.

Next step

Have a specific situation to work through?

This article covers the general case. Tell us what you're actually dealing with and we'll respond directly.

Discuss Your Requirement