Services · integration

When the dashboard and the ledger disagree

Every company that has built a warehouse has had this meeting: the board deck says one number, the close says another, and the next hour is spent working out which is wrong. Usually neither is — they were built from different extracts on different days with different definitions.

What's your BI stack?

Tell us your warehouse and BI tool. We will scope a reconciled feed.

1 / 3
From $6,500, fixed scopeOne definition, one sourceTies to the trial balance
Their QuickBooksas filed
1000 · Cash412,880.14
1200 · Accounts receivable286,401.00
2010 · Accounts payable(94,220.55)
4000 · Revenue(1,842,110.00)
6000 · Operating expense1,237,049.41
Trial balance0.00
erp.io shadow ledgercomputed
1000 · Cash412,880.14
1200 · Accounts receivable286,401.00
2010 · Accounts payable(94,220.55)
4000 · Revenue(1,842,110.00)
6000 · Operating expense1,237,049.41
Trial balance0.00

184 consecutive days tied · variance $0.00

The situation

What gets connected

A reconciled financial dataset delivered to your warehouse, with the definitions carried alongside the numbers.

Warehouse-native delivery

Snowflake, BigQuery, Redshift, Databricks, or object storage, refreshed on your schedule, in a documented schema rather than a shape derived from whatever the API returned.

Reconciled before it lands

Every load ties to the trial balance before it is published. A load that does not reconcile does not land, which is the property most warehouse pipelines lack.

Dimensions included

Department, location, entity, project, and customer hierarchy carried into the warehouse rather than reconstructed there by an analyst with a mapping table.

Definitions travel with the data

What revenue means, which entities are consolidated, how intercompany is eliminated — documented in the dataset rather than living in an analyst’s head.

Point-in-time snapshots

What the numbers looked like when the board deck was produced, so a restated figure can be explained rather than argued about.

Straight into your BI tool

Power BI, Looker, Tableau, Metabase, and Sigma all read from the same reconciled tables rather than each maintaining its own extract.

Why the numbers diverge

The warehouse pipeline pulls from the accounting API on a schedule. It has no concept of a period being closed, no idea that three journals were posted after its extract, and no way to know that an analyst redefined revenue in a transformation six months ago.

None of that is incompetence. It is the predictable result of building analytics on an extract that never checks itself against the source. The pipeline is not wrong; it simply cannot tell you when it has become wrong.

The problem is not that the pipeline is inaccurate. It is that nothing in it can detect the day it stopped being accurate.

Reconcile before publishing

Our loads tie to the trial balance — totals per account, per entity, per period — before anything is written to your warehouse. A load that does not reconcile raises an alert and does not publish, so the failure mode is a missing refresh rather than a wrong dashboard.

A missing refresh is visible and gets fixed the same morning. A wrong dashboard is invisible and gets presented to a board.

Definitions are the actual deliverable

Most warehouse disagreements are definitional rather than numerical. Does revenue include intercompany. Are the two dormant entities consolidated. Is the marketing number gross or net of rebates. Each has a correct answer and each is usually encoded in a transformation nobody has read since.

Shipping the definitions with the data — as documentation, not as tribal knowledge — is what makes the warehouse and the close agree. It is also the part most pipeline projects skip because it is not engineering work.

Restatement handled honestly

Periods get reopened, adjustments get posted, and last quarter’s numbers change. A warehouse that silently overwrites history makes that invisible; one that keeps point-in-time snapshots lets you show both what was reported and what is now correct.

That distinction matters the moment anyone asks why a figure in an old deck no longer matches.

Where to start

How the engagement runs

01

Audit the disagreement

Take a month where the dashboard and the close disagreed and decompose it. The cause is almost always definitional or timing, and knowing which shapes everything after.

02

Agree the definitions

Written, signed off by finance, encoded in the dataset. This is the part that takes the longest and prevents the recurrence.

03

Build the reconciled feed

Loads that tie to the trial balance before publishing, with dimensions and hierarchy included rather than reconstructed downstream.

04

Rebuild the reports on it

Existing dashboards repointed at the reconciled tables, with the differences from the old numbers explained rather than quietly absorbed.

Questions

What people ask.

Which warehouses do you support?
Snowflake, BigQuery, Redshift, Databricks, Postgres, and object storage in Parquet. BI tools read from whichever you use.
Do you replace our BI tool?
No. Power BI, Looker, Tableau, Metabase, and Sigma all keep working — they just read from a source that reconciles.
What happens if a load does not reconcile?
It does not publish, and you get an alert with the variance and the accounts involved. A missing refresh is a better failure than a wrong dashboard.
Can we keep our existing dbt models?
Yes, and we will usually recommend simplifying them, since much of what they do is reconstructing dimensions the feed now carries.
How do you handle restatements?
Point-in-time snapshots, so what was reported and what is now correct are both retrievable. Silent overwrites make old decks unexplainable.

Make the dashboard tie to the close.

Send one month where the two disagreed. We will decompose it and show you why.