Sooner or later every Altru database picks up a pile of constituent records nobody wants: a test import that went sideways, years of one-time ticket buyers with no email, records created twice by a web form. The natural instinct is to select them all and hit delete. Altru doesn’t make that easy, and there are good reasons to slow down before trying.
Here’s what is realistic, what to do instead of deleting, and how to work through a large list without damaging your revenue history.
The short version
- Deleting constituents in Altru is generally a one-record-at-a-time action, and a record with revenue, memberships, or other transactions attached usually can’t be deleted at all.
- Inactivating or flagging records is the safer goal for most cleanups, and it can be done at scale with some planning.
- A big share of “records we want gone” are actually duplicates, which should be merged, not deleted.
Blackbaud adjusts what Altru can do in bulk over time, so if you need a definitive answer for your version, test in a sandbox or ask Blackbaud support whether a global change or import option currently covers constituent deletion or inactivation.
Why Altru resists mass deletion
A constituent record is the anchor for everything tied to that person or organization: gifts, ticket orders, membership history, households, relationships, communications. Deleting the record would orphan or remove that history, which breaks revenue reports and audit trails. That’s why records with financial activity are protected, and why bulk deletion isn’t a casual tool.
The records you can safely delete tend to be the ones that never had activity: bad imports, test entries, and blank shells. Those are also the easiest to find with a query.
Sort the list before you touch anything
Build a constituent query for the records you think you want to remove, then split the results into three groups. Each group gets a different treatment.
1. Duplicates of a real person
Same name and email, or same name and address, as another record. Don’t delete these. Merge them into the record you want to keep so their tickets, gifts, and membership history consolidate in one place.
2. Real people you no longer want to contact
Lapsed buyers, deceased constituents, people who asked to be removed from mailings. These should stay in the database because they have history. Mark them inactive or deceased where appropriate, and set communication preferences or solicit codes so they drop out of marketing lists.
3. Records with no history at all
Test records, junk from a botched import, entries with no revenue or transactions. These are the true deletion candidates. Add query output fields for revenue count, membership, and order history so you can prove each one is empty before removing it.
Inactivating a large group
Clicking into hundreds of records to mark them inactive is slow, so look for a bulk path first:
- Check for a global change or update import. Depending on your version and permissions, there may be a way to update a field across a selection of constituents. Confirm in a sandbox before running it on live data, because these changes are hard to reverse.
- Use a constituent attribute as a flag. If a native inactive field can’t be updated in bulk, an attribute such as “Archive – do not contact” can often be added through an import. Then exclude that attribute from every marketing query and selection.
- Save the query as a selection. Keep the list you acted on as a static selection with a date in the name. If someone asks in six months why a record was inactivated, you’ll have the answer.
Whichever route you choose, export the full list with constituent IDs before you start. That spreadsheet is your undo button.
Deleting the records that really should go
For the “no history” group, deletion is typically done from each constituent record. That’s tedious but manageable for a few dozen records. If you’re looking at thousands, such as a whole bad import, contact Blackbaud support before you begin. They can tell you whether there’s a supported way to reverse or clean up an import and what it will and won’t touch.
A few habits that save pain:
- Have one person own the cleanup so two staff aren’t deleting from the same list.
- Re-run the query right before deleting. A “blank” record may have picked up a ticket order since you built the list.
- Do it outside of high-traffic sales periods so you aren’t competing with front desk and web activity.
Keeping the pile from growing back
Most junk records come from the same few places: web checkouts that create a new constituent instead of matching an existing one, walk-up sales entered under a new name, and imports without matching rules. Review your duplicate-matching settings for web forms and imports, and run your “empty record” query on a schedule, monthly or quarterly, so the cleanup stays small.
Help with the duplicate group
In most databases the duplicate group is the largest of the three, and it’s the one that’s hardest to work through by hand. Social Good’s Deduper finds duplicate constituent and email records in Altru and helps you fix them, which shrinks the list you’d otherwise be tempted to delete.
Quick answers
Can I delete a constituent who bought a ticket?
Generally no. Records with transactions are protected so revenue history stays intact. Inactivate or flag them instead.
Will inactivating a constituent remove them from my email lists?
Not automatically in every case. Make sure your marketing queries and selections filter out inactive or flagged records, and check that any tool syncing from Altru uses those same filters.



