“How many times has this person visited?” sounds like one number. In Altru it can be three or four different numbers depending on what you count, and the first query most people build usually answers a slightly different question than the one they were asked. Before you open the query tool, decide what a visit is at your organization.
Step one: define “visit”
Altru doesn’t keep a single running visit counter on the constituent record. Instead, a visit leaves a trace in one or more places, and each one counts differently:
- Orders. One purchase of admission, whether at the desk (daily sales) or ahead of time (advance sales or online). A family of five on one order is one visit by this measure.
- Tickets. Each admission line on an order. That same family is five tickets, which tells you about attendance but not about how often the household comes back.
- Membership check-ins or scans. If members show a card instead of buying a ticket, their visits may only appear as scans or zero-dollar transactions, depending on how your desk processes them.
- Distinct visit dates. One person who buys a timed ticket in the morning and a separate add-on in the afternoon might generate two orders on the same day. Most people would call that one visit.
For loyalty, member engagement, or donor prospecting, distinct visit dates per constituent is usually the most honest number. For capacity planning, tickets matter more. Write your definition at the top of the query’s description so the next person knows what it measures.
Step two: check whether the visits are attached to anyone
This is where many counts quietly fall apart. A visit only counts toward a constituent if the transaction is linked to that constituent record. Walk-up sales processed without looking up the guest are anonymous, so they never show up in a per-constituent total.
Before trusting any number, pull a sample of recent admission orders and see what share have a constituent attached. If it’s low, your visit counts reflect your staff’s lookup habits more than your guests’ behavior. Online sales and member transactions tend to be linked; walk-up cash sales often aren’t.
Duplicates cause the opposite problem. If the same person exists as two constituent records, their visits get split between them and each record looks like an occasional guest. Clean up obvious duplicates before you report on loyalty.
Step three: build the query
The general approach in Altru’s query tool:
- Start from the right source. If you want one row per person with a count, start from a constituent-based query and pull in sales or order fields. If you’d rather count in a spreadsheet afterward, start from a sales-order-based query and include the constituent’s lookup ID and the order date.
- Filter to admission activity. Limit to the program or revenue types that represent a visit. Leave out donations, store items, and membership purchases unless they also mean the person came through the door.
- Set a date range. “Visits ever” is rarely useful. A rolling twelve months or a fiscal year gives you a number you can compare over time.
- Count. Depending on how your query views are set up, you may be able to use summary or count options on the output fields to get one row per constituent with a total. If the count option isn’t available for the field you need, or you need distinct dates rather than orders, export the order-level rows and count in a spreadsheet.
The exact fields available differ between Altru databases and depend on which query views your organization uses. If you can’t find a field that ties orders back to constituents the way you expect, build a small test query against a constituent you know well and check the results by hand. Blackbaud support can also confirm which view is the right starting point.
Counting distinct dates in a spreadsheet
With one row per order (lookup ID, name, order date), remove duplicate rows on lookup ID plus date, then use a pivot table with lookup ID as rows and a count of dates as the value. That gives you visits per person under the “distinct dates” definition, and the pivot makes it easy to bucket guests into one-time, occasional, and frequent visitors.
Getting the count back onto the record
A number in a spreadsheet is useful for a report. It’s less useful to the membership manager looking at a single constituent. Some options:
- Smart fields. Altru’s smart fields can calculate values like counts or totals across a constituent’s revenue. Whether one can match your exact visit definition depends on what you’re counting; test it against your query results before relying on it.
- Constituent attributes. If you calculate the count outside Altru, you can store it as an attribute and update it on a schedule. Just note it’s a snapshot, not a live value.
- Saved selections. Even without storing the number, a selection like “3+ visits in the last 12 months, not a member” is a strong list for a membership conversion campaign.
Keeping it current
Visit counts go stale quickly, and re-running an export every month gets dropped when the season gets busy. Social Good’s Data Bridge syncs Altru query results to Google Sheets and tools like Mailchimp or ActiveCampaign, so an order-level visit query can feed a pivot sheet or a “frequent visitor” email segment without manual exports. The definition and query work above still has to come first.
Quick answers
Why does a member show zero visits when I know they come often?
Their visits are probably recorded as membership scans or not recorded at all, rather than as admission orders. Check how your desk handles member entry before counting.
Should I count by household or by individual?
For admission, households are often more accurate, since one adult usually buys for the group. If your orders are attached to individuals, consider rolling counts up to the household for loyalty reporting.



