The dashboard says yesterday brought in one number. The Total Revenue and Payments report says another. Finance asks which one is right, and the honest answer is usually “both, for different definitions.” KPIs and reports in Altru are built separately, and unless you know exactly what each one counts, they will drift apart in ways that look like errors but aren’t.
This guide covers why the two disagree, how to find the specific cause in your database, and how to set things up so the numbers line up, or at least so everyone knows why they don’t.
Start by accepting that they measure different things
A KPI is a single calculated value with its own definition: a date range, a set of filters, and a rule for what counts as revenue. A report like Total Revenue and Payments has its own parameters and its own logic. Nothing forces the two to agree. They match only when every one of those choices lines up.
So the goal isn’t to “fix” the KPI. It’s to make the KPI and the report ask the same question, then confirm they get the same answer.
The usual reasons the totals differ
In our experience, nearly every mismatch traces back to one of these. Check them in roughly this order.
1. Date basis
Is each one counting by transaction date, by posted date, or by deposit date? A sale on Saturday that gets posted Monday will land on different days depending on which date each side uses. Over a month this mostly washes out; over a single day or weekend it can account for the entire gap.
2. Revenue versus payments
“Revenue” and “payments” are not the same thing in Altru. Pledges, recurring gift commitments, and installment arrangements can show up as revenue before any money arrives. If one side counts commitments and the other counts only cash received, they will never match during an active campaign.
3. Refunds, adjustments, and write-offs
A refund processed today for a sale last week reduces which period? Some calculations net it against the original transaction, some against the refund date, and some leave it out. Adjusted or written-off amounts follow the same pattern. Check how each side handles them before assuming anything else is wrong.
4. Which revenue types are included
Daily sales, advance sales, group sales, memberships, donations, event registrations, and merchandise may or may not all be in scope. A KPI built for “admissions revenue” will obviously differ from an all-revenue report, but less obvious exclusions (a single program, an online channel, a site) cause the same effect quietly.
5. Timing of the calculation
Reports usually run against current data when you open them. KPIs may be calculated on a schedule or refreshed on demand. If the KPI last updated at 2 a.m. and the report ran at 10 a.m., morning web sales will appear in one and not the other. Check when the KPI was last calculated before you dig further. If you’re not sure how refreshes are scheduled in your setup, ask your Altru admin or Blackbaud support.
A reconciliation method that actually finds the gap
Comparing two big totals rarely tells you anything. Narrow the problem until the difference is small enough to explain.
- Pick one short, closed period. A single past day with moderate activity is ideal. Avoid today, since data is still coming in.
- Run the report with explicit parameters. Write down every setting you chose: dates, date type, revenue types, sites. Save a copy of the output.
- Write down the KPI’s definition. Open the KPI and record its date range, filters, and the source it pulls from. If you didn’t build it, this step alone often reveals the mismatch.
- Compare by category, not just the total. Break both numbers down by revenue type or payment method. Usually one category is off and the rest match exactly, which tells you where to look.
- Build a revenue query that mirrors the problem category. Pull the individual transactions for that day and type, including transaction date, post date, amount, and any refund or adjustment flags. Sort and scan for the items that explain the difference.
- Document the answer. “The KPI uses transaction date; the report uses post date” is a one-line note that saves the next person an afternoon.
Making them agree going forward
Once you know the cause, you have two choices.
- Align the KPI to the report. If finance treats Total Revenue and Payments as the official number, rebuild or adjust the KPI to use the same date basis and the same revenue types. Test it against several past days, including one with refunds, before announcing it.
- Keep them different on purpose and label them. Operations may genuinely want a “sales today” KPI by transaction date while finance wants posted totals. That’s fine, as long as the dashboard tile says what it measures. “Gross admissions sales, transaction date, refreshed nightly” prevents most of the questions.
Either way, agree on one number for board reporting and budget comparisons. Two trustworthy numbers with clear labels are better than one number nobody can explain.
Keeping a reconciliation sheet without the exports
Many teams end up maintaining a spreadsheet that compares daily KPI values to report totals, which means someone exporting query results by hand every week. If you already have a query that captures the transactions behind your KPI, Data Bridge can sync that Altru query to Google Sheets, so the comparison sheet stays current and finance can check it without logging into Altru. The reconciliation logic is still yours; it just removes the export step.
Quick answers
Should the KPI and the report ever match to the penny?
Yes, when they use the same dates, date basis, revenue types, and refresh timing. If they’re aligned on all of those and still differ, pull the transactions with a query and compare line by line.
Which number should go to the board?
Whichever one finance reconciles to the bank and the general ledger. That’s usually the report built on posted transactions, but confirm with your finance team rather than assuming.



