A county commissioner asks how many of your visitors live in their county. A state grant wants attendance broken out by county, with members shown separately. Your Altru ZIP code numbers are a good starting point, but ZIP codes don’t line up with county lines, and the standard report may not split members from everyone else. You can build both breakdowns yourself with a query, a lookup table, and a spreadsheet you set up once.
Start by deciding what you are counting
“Visitors by ZIP” can mean three different things in Altru, and each one comes from a different place:
- Admissions sales by ZIP: the ZIP staff collect at the point of sale in daily sales, or that guests enter online. This counts transactions or tickets, including people who never become constituents.
- Constituents by ZIP: the ZIP on a constituent’s primary address. This counts people (or households), not visits.
- Members by ZIP: active memberships, tied to the primary member’s address.
Funders often mix these up. Before you build anything, write one sentence that defines the number, such as “paid admissions in fiscal 2026, by the ZIP collected at sale, grouped by county, with member visits shown separately.” That sentence decides which records you query.
Check what the built-in report can already do
Altru’s ZIP-based reporting options and parameters can differ depending on your version and by how your organization has configured ZIP collection. We can’t promise whether your install offers a county grouping or a member filter out of the box, so look at the report’s parameters first. If you don’t see a county option, assume it isn’t there. A quick question to Blackbaud support will confirm it. In most setups, the reliable path is a query you control.
Adding county: the lookup table approach
Altru stores ZIP codes, not counties, unless you have been recording county on addresses yourself. To get county you need a ZIP-to-county reference table and a join.
- Get a crosswalk. The U.S. Census Bureau publishes ZCTA-to-county relationship files, and HUD publishes a ZIP-to-county crosswalk. Both are free. Trim them to your state or service region so the file stays small.
- Decide how to handle split ZIPs. Many ZIP codes cross county lines. The crosswalks give a share of addresses or population for each county. Your choices: assign each ZIP to the county with the largest share (simple, slightly imprecise), or split the counts proportionally (more accurate, harder to explain). Pick one, note it in a footnote, and keep using it every year so the numbers stay comparable.
- Build the Altru query. Output the ZIP (first five characters only, since ZIP+4 values will break the match), plus whatever you’re counting: quantity, transaction date, revenue, constituent ID. Filter to your date range.
- Join in a spreadsheet. Export the query, paste the crosswalk on a second tab, and use a lookup on the five-digit ZIP to add a county column. A pivot table then gives you totals by county.
- Catch the leftovers. Blank ZIPs, international postal codes, and typos won’t match. Show them as an “Unknown / outside region” row instead of dropping them, so totals still tie back to Altru.
If you only need this once a year, that’s the whole job. If you need it monthly, see the last section.
Adding a member breakdown
Splitting members from non-members depends on the source you picked above.
For constituent or member counts
Query constituents with an active membership as of a specific date, and output the primary address ZIP. Count households, not individual constituents, if your memberships cover more than one person, or a family of four will show up as four “members” in one ZIP. Run the same query without the membership filter to get all constituents, and you have both columns.
For admissions
This is harder. A ticket sale only links to membership if the sale was tied to a constituent record who held an active membership at the time. Member admissions processed with a member price type, or scanned against a membership, are easier to separate than anonymous walk-up sales. Practical options:
- Group by price type or program if member admissions use their own price types. This is usually the cleanest split.
- Use the membership scan or check-in history if your organization records member visits that way.
- Label the rest “general admission” rather than “non-member.” Some of those guests may be members who didn’t identify themselves, and the label should be honest about that.
Test any of these in your query before you hand numbers to a funder. Pull a few days you know well and check that the member count looks right.
Improve the data going in
County reports are only as good as ZIP capture. A few habits help:
- Make the ZIP prompt at the desk quick and consistent, and train staff not to skip it at the busiest times.
- Require a ZIP on online ticket and membership purchases.
- Clean up obvious junk values (00000, 99999, five spaces) and decide whether a placeholder means “declined” or “not asked.”
- Merge duplicate constituents. Two records for one household with two different addresses will split their counts across ZIPs.
Making it a report you don’t rebuild every month
The export-and-lookup step is the part that eats time when you need the numbers every month or quarter. Our Data Bridge syncs Altru query results to Google Sheets, so you can keep the crosswalk and the pivot table on their own tabs and let the query tab update, instead of re-exporting and re-pasting each time. Altru still holds the data; the sheet just does the county grouping.
Quick answers
Can I store county on the address in Altru instead?
Possibly, if your address setup has a county field or you add an attribute for it. Filling it in for existing records would still require the crosswalk and an import, so test in a sandbox first.
Why don’t my county totals match my ZIP totals?
Usually unmatched ZIPs (blanks, ZIP+4, out-of-state) or split-ZIP handling. Add the “Unknown” row and the totals should reconcile.



