A partner hotel wants 200 free admission codes for its guests. A radio station is giving away family passes. Development wants to send a thank-you discount to last year’s lapsed donors. In each case you want what retailers take for granted: every person gets their own code, and the code stops working once it has been redeemed.
Promotional codes in Altru are typically set up as shared codes: one code, many uses, active between a start and end date. That works for a weekend sale. It works poorly when a code gets posted to a coupon site and redeemed 900 times. Below is what to check in your own database, the workarounds Altru administrators actually use, and the tradeoffs of each.
First, confirm what your version of Altru supports
Before building a workaround, check the discounts and promotions area of your Altru configuration and look at every option on a discount that uses a promotional code. Things to look for:
- Whether a code can carry a usage limit (total redemptions, or redemptions per order).
- Whether a discount can be limited to specific sales channels, such as online only or daily sales only.
- Whether a discount can be limited by date range, program, or price type.
We are not going to claim Altru has or lacks a true per-code usage limit, because options and behavior can change between releases and depend on how your discounts are configured. Test it in a sandbox if you have one: create a code, redeem it twice on a web form, and see what happens. If the second redemption goes through, Blackbaud support can tell you whether there is a setting you missed. Assume shared, reusable codes until your test proves otherwise.
Workaround 1: Many codes, each tightly scoped
The closest thing to unique codes is creating a separate promotional code for each recipient or partner. For a handful of partners (five sponsor companies, say) this is reasonable. Each gets a code like ACMECORP26, and you can report on which partner’s code was used.
It stops being reasonable at a few hundred codes. Every code is a configuration record someone has to create, test, and later retire, and unless your testing showed a usage limit, you should assume it keeps working after the first redemption. If you go this route:
- Use a naming pattern that sorts together, so retiring them later is one filtered list.
- Set a short end date on every code, even if the offer feels open-ended.
- Keep a spreadsheet mapping code to recipient. Altru will tell you a code was used; your spreadsheet tells you who was supposed to use it.
Workaround 2: One code, plus a redemption check
Many organizations accept a shared code and contain the damage instead. Build a query on sales or revenue that includes the discount applied, the transaction date, and the constituent. Run it daily during the promotion. When redemptions pass the number you intended, end-date the code.
This is manual, and a viral code can blow past your limit between checks. It is still the most common approach because it costs nothing to set up. Pair it with a modest discount and a tight date window so overuse is annoying rather than expensive.
Workaround 3: Skip the code, change who qualifies
Sometimes the real goal is “only these people get the deal,” and a code is just the first tool that came to mind. Alternatives that avoid the reuse problem entirely:
- Member or constituent-based pricing. If the offer is for members, use membership discounts. The discount follows the record, not a string someone can share.
- Pre-issued tickets. For giveaways, sell or comp the tickets in advance to the winner’s constituent record and deliver the tickets themselves. If you scan tickets at the door, each barcode is checked when it is used, so it cannot quietly be redeemed twice.
- Staff-applied discounts at the desk. Hand partners a printed voucher with a number, and have staff apply the discount and record the voucher number on the transaction. Collect the paper. Low-tech, but each voucher really is used once.
- Group sales. For corporate partners buying in bulk, a group sales reservation with negotiated pricing is often cleaner than a pile of codes.
Choosing between them
A rough rule we use with clients:
- Under about ten recipients: individual codes with end dates.
- A public promotion where some sharing is fine: one code, daily redemption query, short window.
- Giveaways and prizes: issue the tickets directly instead of a code.
- Hundreds of recipients who each need a unique, one-time code: this is where Altru’s native tools get painful, and it is worth testing your version carefully or looking at what your online checkout can do.
Video walkthrough
If you prefer to watch rather than read, here is a short video on this topic.
Where Social Good fits
Our Checkouts product is a branded, mobile-friendly checkout that replaces Altru web forms for tickets, memberships, and donations, with every sale written back to Altru. If promotions are a regular part of your online sales, ask us how discount codes are handled in Checkouts for your use case before you build hundreds of codes by hand.
Quick answers
Will a promo code stop working after one use by default?
Do not count on it. Treat Altru promotional codes as reusable until a sandbox test shows otherwise.
How do I see how many times a code was used?
Build a query or report on sales that includes the discount or promotion applied, filtered to your promotion’s date range. Save it so you can rerun it daily.



