Reporting and data
How to combine data from multiple business systems into one view
What to consider when connecting your CRM, accounting, e-shop and other sources: identifiers, data quality, refresh frequency and data ownership.
Ing. Dávid Stredánsky4 min read

When information is spread across your CRM, accounting, e-shop and operational system, a single report can take several exports. Combining sources only helps if it is clear how records relate to each other and which system is authoritative for each piece of data.
Map the purpose and owner of each source
Start with the questions you want to answer, not with a list of every table. For each source, define the owner, the available access method, the refresh frequency and the sensitivity of the data. Then decide which identifiers will let you join records.
The most common integration problems
The same customer can have different IDs in different systems. Time zones, currencies, product names and status codes can all look different. These differences need to be documented and monitored over time.
- Define a source of truth for each metric.
- Set up checks for data completeness and freshness.
- Restrict access by purpose and user role.
Choose a transfer method that fits your needs
A direct API can give you regular access without manual exports, but it depends on what the source system offers, on permissions and on available documentation. A scheduled file export is often simpler for a pilot or for a system with no interface, but you need to handle secure transfer, batch completeness and data delay. An integration platform or data warehouse can help when you have many sources, but it adds another layer that must be operated and monitored.
So the decision is not based only on what is technically possible. Consider how fresh the data needs to be, how many records change, who maintains the integration and what an outage would cost. A regular batch can be enough for a daily management report; for operational work, a delay may be unacceptable.
Test the connection on a small scale
Before a full rollout, pick a limited time period and a handful of representative records. Compare row counts and totals in the result against the source system, test for duplicates, and check how a correction to an already exported record is handled. Document the differences rather than hiding them inside a transformation.
Agree on an operating procedure too: who gets an alert when a load fails, how an incomplete import is rerun, and how you find out about a format change. A good integration is not a one-off script. It is a maintained process with a clear owner, checks and an agreed scope of data.
Agree on roles between the data owner and the report owner
For each source, name the person or team who confirms what the data means and announces planned changes. The report owner, in turn, is responsible for making sure the calculations answer the question being asked. When a column or lookup table changes, these roles can quickly check the impact, instead of the problem surfacing only when two tables disagree.
A short data contract also helps: field name, value type, allowed statuses, identifier and refresh frequency. This is not extensive technical documentation but a shared agreement that can be verified on every import. For a new source, start only with the fields needed for a specific metric; collecting everything available adds cost and risk without a clear benefit.
Design the integration around a specific question
Before joining sources, write down what result the user should get and which entities are needed to produce it. For a sales report, that might be the order, the product and the date; for a customer view, you may need a stable identifier. This kind of design exposes missing keys before messy joins appear. It also limits the work to data with a clear use and makes it easier to verify the calculation later.
Decide up front what fresh data means
Users need to know whether a report shows the state from a few minutes ago, yesterday's import or the last successfully processed batch. Show the refresh date, and when a load fails, mark older data as stale. Agree on an acceptable delay based on the decision the report supports. This prevents a gap between two systems from being mistaken for a calculation error when one source simply has not refreshed yet.
Article topics
- data integration
- business data
- reporting across multiple systems
- company data sources