“Can you pull our donors?” sounds like a five-minute job until you open the query designer and realize nobody said which donors, over what period, or what counts as a gift. Most donor analysis queries that go wrong in Altru don’t fail because of the tool. They fail because the question was never pinned down before the first field was dragged in.
This guide covers how to scope the question, which kind of query to start from, the fields worth including, and the traps that quietly inflate or shrink your totals.
Start with the question, not the fields
Write the question in one sentence before you build anything. A few common ones:
- Who gave last fiscal year but not this year? (lapsed donors, the classic LYBUNT/SYBUNT list)
- Who are our top donors by lifetime giving?
- How many donors gave at each level, and how did that change year over year?
- Which members also make donations, and which donors aren’t members?
Each of these needs a different shape of query. Trying to answer all four with one giant query is how you end up with a spreadsheet nobody trusts.
Pick the right starting point: one row per donor or one row per gift
This is the decision that matters most.
Constituent-based queries (one row per person)
Use a constituent query when you want a list of people: names, contact info, giving totals, first and last gift dates. Giving totals here usually come from smart fields, which pre-calculate values like total giving or last gift amount so the query stays fast. If your database doesn’t have the smart fields you need, an administrator can create them, and you’ll want to check how often they refresh. A smart field that last processed a week ago will not match a revenue report run this morning.
Revenue-based queries (one row per transaction)
Use a revenue query when you’re analyzing gifts themselves: amounts by month, by designation or fund, by appeal, by payment method. You’ll get one row per transaction, so a donor who gave five times shows up five times. That’s what you want for trend analysis, and exactly what you don’t want for a mailing list.
A common pattern is to use a revenue query to find the right people (for example, gifts over a certain amount in a date range), save the output as a selection, and then use that selection as a filter in a constituent query to get clean one-row-per-donor results.
Fields worth including
For a general-purpose donor list, these cover most needs:
- Constituent name, lookup ID, and whether the record is an individual or organization
- Primary email and address, plus any solicit codes or communication preferences
- First gift date, last gift date, and last gift amount
- Total giving for the current and previous fiscal year
- Lifetime giving
- Current membership level and expiration date, if you want to see member overlap
Keep the lookup ID in every output. It’s the only reliable way to match rows back to records later, especially once someone starts sorting and editing the export in Excel.
The traps that skew donor totals
Counting membership revenue as donations
In Altru, membership payments and donations are both revenue. If your filter is simply “revenue in date range,” your donor list will include every member who renewed. Filter by revenue type or application (donation versus membership, ticket, and so on) so you’re looking at contributed giving only. Some organizations treat the portion of a membership above benefit value as a gift. If yours does, decide how that should appear before you build the query, and confirm with your finance team how it’s recorded.
Households and duplicate records
If two spouses each have constituent records and gifts are split between them, a constituent query can show two mid-level donors where you really have one major-gift household. Decide whether you’re analyzing at the individual or household level. Duplicate constituent records cause the same problem: one person’s giving split across two rows, each looking smaller than reality.
Date fields that don’t mean what you think
Revenue records can carry more than one date. Use the gift date for donor behavior and check with finance before using anything else for reconciliation. Also confirm whether your “this year” means calendar year or fiscal year; mixing them is an easy way to end up with a query that won’t tie out to a board report.
Pledges and recurring gifts
A pledge commitment and the payments against it are different things. If you include both, you’ll double count. If you aren’t sure how your organization records pledges and recurring gifts in Altru, run a small test query on a donor you know well and compare it to their record before trusting the totals.
Check the numbers before you share them
Before the list goes to your development director, run two quick sanity checks:
- Compare totals to a standard revenue report for the same date range and revenue type. They won’t always match to the penny if the query excludes certain records, but you should be able to explain every difference.
- Spot-check five donors you know. Open their constituent records and confirm the query’s gift dates and amounts agree.
Once the query checks out, save it with a clear name and a description of what it includes and excludes. Six months from now, “Donors FY – final v2” won’t tell anyone whether membership revenue was filtered out.
Getting the results where people use them
Most donor analysis ends up in a spreadsheet or an email tool, and re-exporting the same query every week gets old fast. Our Data Bridge syncs Altru query results to Google Sheets, Mailchimp, ActiveCampaign, and other tools, so a saved donor query can feed a shared sheet or audience list without repeated manual exports. Building a correct query comes first, though. Data Bridge just moves the results.
Quick answers
Should I use smart fields or raw revenue for giving totals?
Smart fields are faster and simpler for constituent lists. Raw revenue is more flexible and always current. If the two disagree, check when the smart field last processed.
How do I find lapsed donors?
Build a selection of donors with gifts in last fiscal year and another with gifts this fiscal year, then filter for constituents in the first selection but not the second. Exclude membership-only revenue from both.



