“Can you pull totals by gift code?” sounds like a five-minute ask. In Altru it often turns into an afternoon, partly because “gift code” isn’t one field. Before you build anything, figure out which code the person asking actually means. After that the reporting is fairly routine.
First, pin down what “gift code” means at your organization
Different teams use the phrase for very different things. The usual candidates are:
- Appeal or campaign codes: the solicitation a gift responded to (spring appeal, gala, year-end letter).
- Source or marketing codes: the mailing, email, or channel that produced the gift, if your shop tracks it separately from the appeal.
- Designations or funds: where the money goes (general operating, education, animal care). Finance staff sometimes call these gift codes.
- Promo or discount codes: codes entered at checkout for tickets or memberships. These live on the sales side, not on donations.
- Gift membership identifiers: how you flag memberships bought for someone else.
Ask the requester for one real example code and look it up on a revenue record. Wherever it shows up is what you’ll filter and group on. If your organization stores the code in a custom attribute or a free-text note instead of a structured field, reporting gets much harder. Fixing that going forward is worth more than any report.
Build the report as a revenue query
For most gift code questions, an ad-hoc revenue query is the most flexible tool you have, more so than a canned report. A setup that works:
- Start from revenue, not constituents. You want one row per gift (or per gift split, if you use multiple designations), not one per donor.
- Filter on date range, revenue type (so you aren’t mixing ticket sales into donation totals), and the code field you identified. Filter for “has a value” first so you can see every code in use, then narrow.
- Output the code, amount, date, constituent name and lookup ID, and payment method. Add designation if finance will reconcile against it.
- Save it with a clear name and a description noting which field “gift code” means. The next person who opens it will thank you.
Watch out for split gifts. If a single payment is spread across two designations or appeals, a query that outputs split-level fields will show two rows. That’s correct, but a quick sum in a spreadsheet can double-count the payment total if someone mixes payment amounts with split amounts. Pick one level and stay there.
Getting totals per code
A query returns rows, not subtotals. You have two common options:
- Export and pivot. Export the results and build a pivot table with code as rows and sum of amount as values. It’s quick and familiar, and you’ll be re-exporting every time someone wants fresh numbers.
- Use a standard report if one fits. Altru includes revenue and appeal-oriented reports, and some may already group the way you need. Which grouping options each report exposes depends on your configuration, so run a few against a known date range and compare the totals to your query before you trust one for board numbers. If you can’t tell whether a report respects split amounts or refunds, ask Blackbaud support.
If the code is a promo or discount code
This is a sales question, not a fundraising one. Discounts are applied to orders in daily sales, advance sales, and online sales, so you’ll be querying orders or sales rather than donation revenue. Check whether your discount setup records which code was used on each order or only that a discount was applied. If only the discount type is recorded, you can report on discount usage but maybe not on individual codes. In that case the cleaner fix is to create a separate discount per code you need to track.
Sanity checks before you send numbers
- Compare the grand total in your query to a general revenue report for the same dates. A large gap usually means a filter is excluding a revenue type or the code is blank on many gifts.
- Count gifts with no code at all. That number tells you how much your code reporting can actually explain, and it’s often the most useful finding.
- Decide how refunds and adjustments should appear, and say so in the report notes.
- Use the same date logic (gift date vs. posted date) your finance team uses, or the numbers won’t match theirs.
Keep the numbers current without re-exporting
Once the query is right, the ongoing work is running it again every week for development staff who just want an up-to-date table. You can keep doing that by hand, or schedule time for it. Social Good’s Data Bridge syncs Altru query results to Google Sheets and other tools, so the pivot by code can sit on top of a sheet that refreshes from the saved query instead of a stale export. Altru still holds the gifts. The sheet is just where people read the totals.
Quick answers
Can I report on more than one code at once, like appeal and designation?
Yes. Output both fields in the query and pivot on both. Just stay at the split level if gifts can span multiple designations.
Why do my code totals not match finance’s?
Usually it’s date logic, refunds, or revenue types included on one side and not the other. Line up those three before digging further.



