How do we build a dashboard that explains why two systems show different revenue totals?

Build a revenue reconciliation dashboard with agreed definitions, a balanced cash bridge, source coverage checks and a practical data contract for your team.

Saas Development
6 October 2026Updated 06 Oct 202610 min readBukhosi Moyo

Quick Answer

To build a dashboard explaining why two systems show different revenue totals, define authoritative revenue measures, timing rules, and exclusions upfront. Then display source coverage and reconcile differences explicitly before showing combined business KPIs. Use a clear revenue data contract to govern definitions and calculations rather than relying on source freshness or snapshots.

Key Takeaways

  • Define a single authoritative revenue measure and timing rules.
  • Explicitly state exclusions to avoid confusion.
  • Show source coverage to highlight data scope differences.
  • Display reconciliation differences before combined KPIs.
  • Use a formal revenue data contract for clarity and trust.

Want the full breakdown? Scroll below.

Close-up of an illustrative line chart on a screen
On this pageJump to a section
  1. 1Explain the difference before choosing a dashboard total
  2. 2Name the measures that each system actually reports
  3. 3Write the data contract before combining records
  4. 4Reconcile at record level before explaining totals
  5. 5A balanced hypothetical bridge from payments to bank cash
  6. 6Build a procedure that fails clearly when evidence is incomplete
  7. 7Make the dashboard's practical output reviewable
  8. 8Frequently asked questions
  9. 9Sources

Share this article

Bukhosi Moyo

Growth Partner

Need help growing your company?

We build SEO-first websites and growth systems for South African businesses.

Get Started

Explain the difference before choosing a dashboard total

Build a reconciliation dashboard by defining each measure, mapping the underlying records and calculating a visible bridge between the two totals. A gateway's completed payments, an accounting system's recognised revenue and a bank's received cash can all be different legitimate measures. Do not average their totals or invent an adjustment to make them agree. Show the explained differences and any unresolved remainder, with an owner responsible for investigating it.

The practical output below is a proposed data contract and a filled hypothetical reconciliation. It is a specification for a dashboard team, not an accounting policy or a claim about results achieved for a client. Your finance owner must approve the business definitions, including tax treatment and the basis for recognising revenue.

Name the measures that each system actually reports

Start with the exact label and definition of both figures. "Revenue" is often used loosely for orders, invoices, successful payments, net gateway credit or bank receipts. These are different questions:

  • What did customers order?
  • What revenue does the approved accounting policy recognise in this period?
  • What payments completed?
  • What did the gateway deduct or retain?
  • What cash reached the bank?

Give each measure its own label. A useful dashboard may need several of them rather than one universal total. If two systems claim to report the same measure, their definitions and record populations should match. If they report different measures, explain the relationship instead of presenting one as an error.

For a provider-specific example, Stripe's balance transaction definitions distinguish charges, refunds, fees, payouts and other balance movements. They also distinguish pending funds from available balance. This is evidence about Stripe's reporting model, not a claim that its products are available to every South African merchant.

Likewise, Payfast's subscription feature concerns scheduled card billing. A subscription schedule does not establish that an attempted charge completed, that cash reached the bank or that the payment should be recognised as accounting revenue.

Avoid two common definition errors

Do not remove historical successful payments merely because a subscription is now cancelled. Determine whether there was a refund, reversal or another event relevant to the selected measure.

Do not count an unsuccessful retry as money received. Keep attempted charges, completed payments and outstanding customer balances separate. If an accounting ledger records an amount receivable, label that measure explicitly rather than silently adding it to gateway cash collections.

Write the data contract before combining records

The following filled contract is for a fictional comparison of completed customer payments and bank cash. Every amount and operating rule in the worked example is hypothetical.

Contract field Proposed definition for this example Evidence or owner
Measures Gateway gross completed payments; bank cash received from gateway payouts Finance approves the labels and formulas
Period One calendar month in Africa/Johannesburg Record the period start and exclusive next-month boundary
Currency ZAR only; currency conversion excluded from this example Preserve currency on every source record
Completed payment population Unique completed customer payments in the selected period Provider transaction records and internal payment mapping
Refunds Recorded refund movements affecting the period's gateway balance Link each refund to its original payment
Fees Observed gateway fee movements in the period Use actual source amounts, not an estimated percentage
Timing Keep payment completion, refund, payout and bank-posting timestamps separate Source fields and documented timezone conversion
Coverage One gateway account and one receiving bank account Named account scope, extraction timestamp and completeness checks
Identity Stable source record IDs plus explicit cross-system mapping Data owner approves the mapping and one-to-many relationships
Exceptions Unmatched or ambiguous records remain visible Named investigation owner and evidence reference
Acceptance The cash bridge balances; unresolved amounts are shown separately Finance and product owners review the result

For the real product, add the approved treatment of discounts, tax, chargebacks, credits and opening balances. Do not infer these from field names. If a source amount includes a component that the selected measure excludes, record the adjustment and its supporting record.

Use half-open period boundaries: include timestamps at or after the start and before the next period's start. A rule ending at "23:59" can accidentally omit transactions in the remaining seconds of that minute. Store the source timestamp and timezone alongside the normalised value so the decision is reproducible.

Reconcile at record level before explaining totals

Extract the required records from both systems without overwriting their original values. Retain a source ID, account scope, amount, currency, event type, effective timestamp, extraction timestamp and relevant parent reference.

Match records using stable identifiers. A single invoice may have several payments, a payment may have a partial refund, and a payout may contain many payments. Invoice number plus date is not automatically a unique key. Document the intended relationships rather than forcing every record into a one-to-one join.

Classify each difference into a concrete category:

  1. A measure difference, such as gross payment versus cash after fees.
  2. A timing difference, such as a payout not yet posted to the bank.
  3. A coverage difference, such as an account omitted from the extract.
  4. A duplicate or missing source record.
  5. An unresolved exception requiring investigation.

For each category, retain record references and the adjustment direction. A narrative explanation without amounts cannot prove that the bridge balances. Preserve the unresolved remainder even when it is below an alert threshold.

Source freshness still matters. A sound contract cannot compensate for a missing export page, a failed connector or an extract taken before late records arrived. Display when each source was extracted and which period is complete.

A balanced hypothetical bridge from payments to bank cash

Suppose a fictional gateway extract shows R500,000 in gross completed customer payments. The bank shows R470,000 received from that gateway during the same month.

For this simplified example, the opening gateway balance is zero. There are no older-period payouts, chargebacks, reserves, foreign-currency movements or other adjustments. Refunds and fees below are invented observed-record amounts for the illustration; they are not current provider prices.

Bridge item Amount Running balance Evidence required in a real dashboard
Gross completed customer payments R500,000 R500,000 Unique completed payment records
Less refunds recorded in the period R5,000 R495,000 Refund records linked to original payments
Less gateway fees recorded in the period R17,000 R478,000 Fee records or reconciled provider statement
Less ending funds not received by the bank R8,000 R470,000 Pending balance, retained funds or in-transit payout evidence
Bank cash received R470,000 R470,000 Matched bank statement entries
Unresolved difference R0 R0 Comparison of expected and observed bank receipts

The R30,000 difference is explained by R5,000 + R17,000 + R8,000. The dashboard should show both original measures and this bridge. It must not report their average, R485,000, as "combined revenue".

For a real period, the R8,000 line needs a precise classification. Pending gateway funds, available but unpaid-out funds and a payout already sent but not bank-posted are different states. If several apply, split the line and avoid counting the same amount twice.

This bridge explains cash movements. It does not determine accounting revenue. Show the finance-approved revenue measure separately, with its own source and recognition rules.

Keep an unexplained remainder visible

If the bank extract instead contains R469,000, the same supported adjustments leave R1,000 unexplained. Record "Expected bank cash: R470,000; observed: R469,000; unresolved: R1,000". Investigate the unmatched movement.

Do not invent another R1,000 fee or change the period boundary simply to balance the report. When evidence establishes the cause, add its record reference, adjustment and approval to the reconciliation history.

Build a procedure that fails clearly when evidence is incomplete

A practical proposed runbook is:

  1. Confirm the period, account scope and finance-approved definitions.
  2. Extract source records and retain extraction evidence.
  3. Check pagination, record counts, currencies and required identifiers.
  4. Normalise timestamps and event classifications without changing source values.
  5. Match payments, refunds, fees and payouts through documented relationships.
  6. Calculate each bridge line using deterministic arithmetic.
  7. Compare expected cash with bank records and retain the remainder.
  8. Assign exceptions to an owner and publish the review state.

If a spreadsheet is part of the workflow, use stable ranges and a defined column contract. The Google Sheets batch-update documentation describes structured spreadsheet updates. An accepted update does not establish that the source extract was complete or that the figures were classified correctly. Read back the relevant ranges and compare them with the approved reconciliation result.

AI can help write a plain-language explanation from validated figures and exception categories. It should not choose financial definitions or create balancing adjustments. OpenAI's Structured Outputs guidance explicitly warns that structured outputs can still contain mistakes. Validate any generated explanation against the calculated bridge before displaying it.

Acceptance and recovery checklist

Test Expected result Recovery if it fails
Replay the same source record Totals remain unchanged; the record is deduplicated by its stable identity Fix ingestion identity and recalculate the affected period
Load a partial refund Refund amount and original payment remain separately traceable Repair the parent mapping; do not delete the original payment
Add a late bank posting It appears in the correct period under the agreed timestamp rule Review the mapping and retain the prior report revision
Omit an extract page Coverage check fails; the dashboard shows incomplete data Re-extract and reconcile before marking the period reviewed
Supply another currency It is rejected from this ZAR-only example or handled by an approved conversion rule Obtain the correct currency treatment and source rate
Produce an unexplained difference The remainder remains visible with an owner Investigate records rather than averaging totals
Compare explanation with calculation Every amount and direction agrees Correct the explanation before customer display

An alert threshold is an operating choice, not permission to erase smaller discrepancies. Define who receives alerts, how exceptions are resolved and when a reporting period may be marked reviewed.

Make the dashboard's practical output reviewable

Deliver the completed contract, source-field mapping, record-matching rules, filled bridge, exception register and acceptance results together. This gives a reviewer enough evidence to reproduce the totals and understand their limits.

If your business needs help turning this specification into a reliable interface, our dashboard development service can support that work. For a scoped implementation discussion, get in touch with the two source reports and agreed measures.

Connect the report to relevant decisions using marketing dashboard metrics, and consider SaaS development where the workflow needs a custom product. If CRM automation is involved, the AI CRM integration guide and AI CRM integration glossary explain that separate integration concept.

Frequently asked questions

Should we choose one total and hide the other?

Keep legitimate measures visible with clear definitions. Gross completed payments and bank cash answer different questions. Reconcile their relationship; choose the finance-approved measure for each business decision.

Can failed subscription retries count as collected cash?

No unsuccessful attempt establishes collected cash. Track payment attempts separately from completed payments and receivables. Verify the provider's actual records before classifying an event.

Should a cancelled subscription's earlier payments be excluded?

Do not exclude them solely because of current cancellation status. Determine whether a refund, reversal or another relevant adjustment occurred and apply the selected measure's rules.

How often should we reconcile and what if differences remain?

Choose a proposed schedule based on reporting needs and source availability. Daily checks may suit some teams. Retain unresolved differences, source completeness and review status until evidence supports a correction.

Sources

Share this article

Bukhosi Moyo

Written by

Bukhosi Moyo

CEO & Founder

Bukhosi is the founder and lead SEO strategist at Symaxx. He architects search-first digital systems for South African businesses, combining technical engineering with commercial strategy to build long-term organic assets.

Feedback

Was this helpful?

Tell us how this article felt in one click.

Back to Insights

Need help executing this strategy?

Our team turns these insights into revenue-generating search architectures for your business.