The volunteer coordinator needs total hours for a grant report by Friday. The board chair wants to thank the top twenty volunteers by name. A long-time docent calls asking how many hours she has logged since she started. All three are the same question, and in Altru the answer is usually “it’s in there, but you’ll have to build it.”
This guide covers how to get volunteer hours out of Altru as a usable report, how to make a volunteer’s total visible when someone opens their constituent record, and where the built-in tools run out.
Start with where the hours actually live
Before building anything, confirm how your organization records time. Altru has volunteer tracking, but organizations use it very differently, and what you can report on depends entirely on what gets entered:
- Volunteer records with logged time. If staff or coordinators enter time against volunteer records in Altru, those entries are the raw material for every report below.
- Hours kept outside Altru. Many teams track shifts in a sign-up tool or spreadsheet and never enter time in Altru at all. If that’s you, no query will find the hours; the first job is getting them in, usually through a periodic import.
- A mix of both. Common after a staff change. Pick one source going forward and note the date you switched, so nobody compares a partial year to a full one.
If you aren’t sure whether your Altru configuration includes the volunteer features you need, or which security roles can see them, test in your sandbox or ask Blackbaud support before you promise anyone a report.
Build the hours report with a query
Whatever standard reports your Altru setup includes, what funders and boards ask for rarely matches them exactly, so the dependable path is an ad-hoc query you build once, save, and reuse.
- Choose the right starting point. Start the query from the source that holds individual time entries rather than from constituents. You want one row per entry, each with its own date and hours, so date filters and totals behave predictably. If you aren’t sure which query source that is in your database, look at the available sources in your sandbox or ask Blackbaud support.
- Add the fields you’ll be asked about. Volunteer name and lookup ID, the date of the time entry, hours, and whatever job, program, or department you track. Include email if you plan to thank people.
- Filter by date range. Use a date filter you can change at run time so the same query handles a month, a fiscal year, or a grant period.
- Decide between detail and summary. A detail query (one row per entry) is best for checking accuracy. For totals, check whether your query options let you sum hours by volunteer or by job; if not, export the detail and total it with a pivot table in a spreadsheet.
- Spot-check against a known volunteer. Pick someone whose hours you know roughly and compare. Duplicate entries and time logged on a duplicate constituent record are the usual reasons totals look off.
Save two versions if you can: a detail query for coordinators and a summary for leadership. Most of the friction comes from trying to make one output serve both.
Common report shapes
- Grant or annual report: total hours and number of unique volunteers for a date range, sometimes multiplied by an hourly value your funder specifies.
- Recognition list: volunteers whose lifetime or yearly hours pass a milestone (100, 500, 1,000), sorted descending.
- Coverage check: hours by job or area by month, to see where you’re short-staffed.
Showing a volunteer’s hours on the constituent record
This is the harder half. Staff want to open a constituent and see “412 volunteer hours” without running anything. Altru doesn’t make a running total prominent on the record by default, so you have a few options, each with tradeoffs:
- Smart fields. A smart field can calculate a value like total hours per constituent and keep it refreshed on a schedule. Smart fields are reliable in queries and lists; whether and where they display on the record page depends on your configuration, so check in your sandbox.
- A constituent attribute. Some teams store a “Volunteer hours to date” attribute and refresh it periodically by exporting totals from the summary query and importing them back. It shows clearly on the record, but it is only as current as your last update. Put the “as of” date in the attribute or a note.
- Read the volunteer record directly. For occasional lookups, train the people who answer phones to check the volunteer area of the record instead of building anything new.
Whichever you choose, make volunteers part of your regular duplicate-record cleanup. A volunteer with two constituent records will have hours split across both, and each record will show a total that looks too low.
Keeping it from becoming a monthly scramble
- Set a deadline for logging time (for example, by the fifth of the following month) so reports run on complete data.
- Agree on what counts: training, events, remote work, board service. Write it down once.
- Schedule smart field refreshes before the dates people usually pull numbers.
- Keep the saved queries in a shared folder with clear names so the next coordinator can find them.
Getting the numbers somewhere people can use them
If your coordinators and leadership mostly work in spreadsheets, re-exporting the same query every month gets old. Data Bridge from Social Good can sync an Altru query to Google Sheets, so a volunteer hours query can keep a shared sheet current without manual exports. Altru still holds the hours; the sheet is just where people read them.
Quick answers
Can I report hours for a specific grant period?
Yes, as long as each time entry has a date. Filter the query on that date, not on when the record was created or changed.
Why don’t my totals match the coordinator’s spreadsheet?
Usually because some hours were never entered in Altru, were entered twice, or landed on a duplicate constituent. Compare at the detail level for one volunteer before changing anything.



