Activity Messenger Help Center

Loyalty, coupons and punch cards

A coupon is a single-use voucher. It is redeemed against one class, booking package, product or membership, or consumed by one access-control scan. Coupons live under E-commerce › Promotions › Coupons.

The Loyalty page, under E-commerce › Promotions › Loyalty, is a report. It totals what each client spent on booking packages during a date range and lets you reward a client by creating coupons for them.

What exists and what does not

  • Activity Messenger has no automatic points program. It does not accumulate points, levels or tiers, and it never creates a reward on its own. Every loyalty reward is created by a staff member from the Loyalty page.
  • There is no object called a punch card. A punch card is a set of coupons issued together: a membership created with the Coupon pass preset, a product whose Coupons section is active, or coupons created manually. See Membership.
  • An Access control coupon is the closest thing to a physical punch card: one coupon is consumed each time the member's scan is accepted at an access point. The in-app help reads “If a coupon is not associated with any resources (classes, packages, products), it can be redeemed through access control, like a punch card.”
  • A coupon is not a promo code and not a gift card. A promo code is a reusable discount; a gift card is a stored balance. See How promo codes work and Gift cards.

Before you start

The Coupons menu item appears for an account owner, an administrator or an attendant who has Can apply coupons turned on in their user settings. The help text under that switch reads “Admins and Attendants can apply coupons to mark an item as paid on an invoice only if you allow them to. Account Owners always have that permission.” Every bulk operation and the Apply to invoice and Mark as redeemed actions check this permission on the server.

The Loyalty menu item appears when the Bookings module is enabled and the user is allowed to configure bookings. The report only counts booking packages.

How a coupon works

Open a coupon to see its window, titled Coupon followed by its number. The Information tab holds:

  • Name: required. The code itself is generated: seven uppercase letters and digits, unique within your organization. You cannot choose or change the code.
  • Coupon type: Standard coupons or Access control coupons. A standard coupon is redeemed at checkout, on an invoice or by an administrator. An access control coupon cannot be tied to classes, packages, products, memberships or tags; it is consumed by an access-control scan.
  • Expires at: optional. “This coupon will not be redeemable after this date.” The coupon stays usable until the end of that day in your organization's timezone.
  • Make-up class/drop in form: optional link shown to the client in their account for class coupons.
  • Admin-only redeemable: “Only an admin can redeem this coupon manually. It will not be automatically applied at checkout or access control.” A client cannot type this code at checkout.
  • Automatically apply at checkout: on by default. “When enabled, Activity Messenger automatically applies eligible coupons during checkout, including coupons generated by a product or membership in the current registration.” It is forced off when Admin-only redeemable is on.

The Applies to tab lists what a standard coupon can be redeemed for: Classes (individual classes, or by tags, with a Drop-in only switch), Packages, Products and Memberships. When a selected package asks for players, Coupon coverage for bookings appears with these options: Standard coverage (existing behavior), One player fee, Player price + additional fee, Booking charge only and Booking charge or one player's full charge. Applied on addons lets the coupon cover an add-on.

The Logs tab lists every operation on the coupon with the date, the administrator, the client and the data. Operations include Created, Issued from purchase, Issued from credit, Created from form, Issued from loyalty, Updated, Assigned to client, Unassigned from client, Expiration updated, Applied to invoice, Released from invoice, Manually redeemed, Manual redemption given back, Redeemed at access control, Given back at access control, Deleted and Restored. Download exports the log to Excel.

The Admin notes tab holds “Internal notes, visible only to staff.”

A coupon is accepted only when it is not already used, not expired, not cancelled, and when the purchase that created it has been paid. A coupon created by a product or membership purchase shows Not paid until that invoice is settled.

Create a coupon manually

  1. Go to E-commerce › Promotions › Coupons and click the blue + button.
  2. Enter a Name, choose the Coupon type and set Expires at if needed.
  3. Under Client, choose Assign to no one, Assign to an existing client (then Choose a client) or Assign to a new client (first name, last name and email are required).
  4. On Applies to, select at least the classes, packages, products or memberships the coupon can be redeemed for. An access control coupon has no selection.
  5. Click Create.

An assigned coupon appears in the client's account and the window shows Belongs to with their details. Use Send to email the code from the coupon window; the prepared subject is Receive a coupon for your loyalty. Transfer moves an unredeemed coupon to another client.

Delete is available only on a coupon that is neither redeemed nor assigned to a client. Any other coupon is archived instead.

Sell or issue coupons automatically

  • Product: in the product's Coupons section, turn the switch on. “Create coupons when this product is purchased. The coupon codes will be included on the purchase receipt.” Set the Coupon type, Number of coupons to create, Expires after a number of days or an Expiration date, Allow client to cancel their coupon with Number of hours before to allow a cancellation, and what the coupons apply to. Low coupon balance automation notifies the client when their usable coupons for this product reach the Trigger quantity. See Use Groupon purchases with Activity Messenger coupons for a worked example.
  • Membership: the membership's Coupons tab issues Standard coupons or Access control coupons on each purchase, and optionally on each recurring payment with Issue coupons on recurring payments. The Coupon pass preset configures a non-expiring membership with a card and standard coupons. See Membership.
  • Form: on a form's confirmation settings, the Coupons tab can “Generate one or many coupons after this form is filled.” Set Number of coupons, the type and what they apply to, and add the {Coupon codes} placeholder to the confirmation email so the codes are revealed.
  • Invoice credit: on an invoice, Issue a coupon creates a coupon from a credited item, with an optional expiry and admin note, instead of refunding money.
  • Loyalty reward: see the Loyalty page below.
  • Make-up class: when a participant is removed from a class occurrence under the class's drop-in rules, Activity Messenger can issue a make-up coupon. The attendance list's Advanced options include Expire make-up coupon on a specific date to set its expiry.
  • Client import: when the import template contains a membership question whose coupons are active, it includes a Coupons column: “Specify the number of coupons to assign. Leave empty to use the default number defined on the membership.”

Redeem a coupon

  • At checkout: the client types the code in Apply a coupon or a promo code. Coupons that belong to the client and have Automatically apply at checkout on are applied without typing. For a class, the registration shows “You have N coupon(s) available to use for this class. They will be automatically applied during checkout.”
  • On a booking package: the package's payment options include Accept a coupon or promo code and Requires a coupon for reservation. With the second one, “This package can only be booked with a coupon discounting the price to 0.” Only coupons listing that package can book it. When the coupon's coverage allows a choice, the client picks the booking charge or one player.
  • At access control: an access control coupon issued by a membership is consumed when the member's scan is accepted and no valid class or booking already grants access. Standard coupons are never consumed by a scan.
  • By staff on an invoice: open the invoice and use Apply coupons. “Select items you want to apply coupons to. Then, pick the coupons this client has that can be applied, or paste coupons from another client.”
  • By staff without an invoice: open the coupon and click Mark as redeemed. The coupon is stamped with the current date and time and the Logs tab records Manually redeemed.

Give back coupon appears in the coupon window after a manual redemption or an access-control redemption, and makes the coupon usable again. For a coupon applied to an invoice, “To give back the coupon, go to the invoice.”

In their account, the client sees each coupon's code, Expires at, Redeemed at, Used on and Applies to. When the product that created a class coupon has Allow client to cancel their coupon, the client can cancel the class taken with it before the configured number of hours; the amount is credited, not refunded.

Manage coupons in bulk

The Coupons table offers a code/name search, a Client name / email search that “Search current owners and transfer history”, the Hide redeemed and Show archived switches, and Filters for Type, Admin-only redeemable, classes, packages, products and memberships. Columns are Code, Name, the eligible items, Client, Transferred from, Expires at, Redeemed at, Usage, Notes, Last updated and Actions. Usage shows Redeemed with a link to the invoice, Cancelled, Expired, Not paid, or 1 remaining.

Tick the coupons, then open Bulk operations. The menu stays disabled until something is selected and is only shown on wider screens.

  • Apply on: adds classes, tags, Drop-in only, packages, products or memberships to the selected coupons. “This operation is additive - existing items will still apply.”
  • Convert to standard coupons: turns access control coupons into standard coupons. “Every selected coupon must currently be an access-control coupon. If the selection contains another coupon type, no coupons will be changed.”
  • Mark as redeemed: confirms with Mark :count selected coupons as redeemed? and stamps each coupon with the current time. If any selected coupon is expired, cancelled, unpaid or already used, none of them is marked.
  • Apply to invoice: choose an invoice. Each coupon is applied to the first eligible item that is unpaid and matches its classes, packages, products or memberships, up to one coupon per unit of quantity. When a coupon's coverage allows a choice, a dialog asks for the booking charge or a player. The result reads :applied coupons applied. :skipped skipped. If nothing could be applied, the operation fails with Invalid coupon.
  • Transfer to client: choose a client. The coupons now belong to that client, the log records Assigned to client, and Transferred from shows the previous owner. Each coupon must still be redeemable; otherwise nothing is transferred.
  • Expires at: set a date or leave it empty to remove the expiry. The log records Expiration updated.
  • Archive: confirms with Are you sure you want to perform this operation on :count item(s)? Archived coupons disappear from the table until Show archived is on, where Restore brings one back.

There is no bulk import on the Coupons page. The green Excel button downloads the current list with these columns: code, name, type, admin_redeemable_only, created_at, expired_at, purchased_by_client_name, purchased_by_client_email, purchased_by_client_mobile, purchased_invoice_no, redeemed_invoice_no, redeemed_at, admin_name and admin_email.

The Loyalty page

The page is titled Loyalty: “Clients package purchases and rewards within a given date range.”

  1. Pick the date range at the top right. It starts on the first day of the current month and ends today.
  2. Optionally filter by Package.
  3. Read the table. Amount is the total of finalized invoice items for booking packages, excluding cancelled items. Packages is the number of packages bought. Name, Email, Gender, Date of birth and Zip/Postal code come from the client's purchases in the range when that information was captured. Reward totals the rewards dated inside the range and To reward is Amount minus Reward. Rows are sorted by amount.

Click a row to open Rewards. The large figure is Client spend not rewarded for the range. The table lists each reward's Title, Date, Value and Coupons. The comment icon opens a message to the client with the subject Receive a coupon for your loyalty; the trash icon asks “Are you sure you want to delete this reward and associated coupons?” and deletes the reward with its unredeemed coupons. Coupons already redeemed are kept.

Click + to create a reward:

  1. Coupons: how many to create, at least 1.
  2. Value: the amount you consider rewarded. It is prefilled with the unrewarded spend and is subtracted from To reward; it is not a dollar value printed on the coupons.
  3. Description: prefilled with Loyalty and the date range.
  4. Packages and Products: select at least one.
  5. Click Create. Create stays unavailable while the client has no unrewarded spend.

Each coupon is a standard coupon named Loyalty followed by the client's name, assigned to the client, without expiry, with Automatically apply at checkout on, and logged as Issued from loyalty. The reward is dated on the last day of the selected range, so it counts in that range. Nothing is emailed until you use the comment icon.

The Excel icon opens Loyalty with Export and the option Include answers to some questions? to add form placeholders as columns. The file has these columns: name, email, gender, date_of_birth, zip_postal_code, count, amount, plus one column per selected placeholder. It does not include the Reward and To reward columns.

Settings reference

Setting Where Default Effect
Can apply coupons Users › user Off for administrators and attendants; always on for account owners Shows the Coupons menu and allows Apply to invoice, Mark as redeemed and every bulk operation.
Coupon type Coupons › coupon › Information Standard coupons Access control coupons have no eligible items and are consumed by an access-control scan.
Expires at Coupons › coupon › Information None The coupon is refused after the end of that day in the organization's timezone.
Admin-only redeemable Coupons › coupon › Information Off Clients cannot use the code; only staff can redeem it. Forces Automatically apply at checkout off.
Automatically apply at checkout Coupons › coupon › Information On Eligible coupons owned by the client are applied without typing a code.
Applied on addons Coupons › coupon › Applies to Off The coupon can cover an add-on charge.
Coupon coverage for bookings Coupons › coupon › Applies to Standard coverage (existing behavior) Chooses what one use covers on a package with players. Shown only when a selected package asks for players.
Accept a coupon or promo code Package › payment options On Shows the code field on the package booking page. Turned on automatically when Requires a coupon for reservation is on.
Requires a coupon for reservation Package › payment options Off The package can only be booked with a coupon that lists it.
Coupons (product) Products › product › Coupons Off Each purchase creates the configured number of coupons, revealed on the receipt once paid.
Low coupon balance automation Products › product › Coupons Off Sends the chosen template when the client's usable coupons for the product reach the Trigger quantity.
Issue coupons on recurring payments Memberships › membership › Coupons Off Creates another set of coupons after each successful recurring payment.
Expire make-up coupon on a specific date Attendance › class list › Advanced options Off Sets the expiry of make-up coupons issued for the class.
Loyalty date range E-commerce › Promotions › Loyalty First day of the current month to today Limits the report to invoices finalized in the range and rewards dated in the range.

Common questions

Does Activity Messenger award points automatically? No. The Loyalty page is a report of package spending. Rewards are created by hand, one client at a time, and each reward creates coupons. See The Loyalty page.

Can I run a punch card? Yes, as a set of coupons. Use a membership with the Coupon pass preset, a product with its Coupons section active, or create coupons manually. Choose Access control coupons when one punch should be consumed by a door scan. See Sell or issue coupons automatically.

Why is the Loyalty page missing from my menu? It appears only when the Bookings module is enabled and your user can configure bookings. The report counts booking packages only; class, product and membership purchases are not included.

Can a coupon be used more than once? No. “A coupon is a voucher to exchange for a class, package or product. It can only be used once.” Issue several coupons for several uses.

Can I choose the coupon code? No. Codes are generated: seven uppercase letters and digits.

How do I cancel a redemption? Open the coupon and click Give back coupon after a manual or access-control redemption. For a coupon applied to an invoice, release it from the invoice. See Redeem a coupon.

Why did Mark as redeemed or Transfer to client do nothing? Every selected coupon must be redeemable: not expired, not cancelled, not already used and paid for. One failing coupon cancels the whole operation. See Manage coupons in bulk.

Can I import coupons from a file? Not from the Coupons page. The client import only accepts a number of coupons for a membership question whose coupons are active.

Does the Loyalty export include rewards? No. The export has name, email, gender, date of birth, postal code, count and amount, plus optional form placeholders.

Is the client notified when I create a reward? No. Use the comment icon in Rewards to send the coupon codes, or the client finds them in their account.