Skip to main content

Promo Codes

Build and Launch Targeted Discount Campaigns in CourtReserve

Written by Mari Bern

INTRODUCTION

Feature Summary: Promo Codes allow CourtReserve organizations to create and manage discount campaigns that can be applied at checkout across a wide range of fee types — including reservations, lessons, events, leagues, memberships, point of sale, packages, and miscellaneous fees. Admins can set discount amounts, control who can use a code, define usage limits, schedule campaign dates, and track all activity through the Audit Log. Promo codes work across the admin panel, member portal, mobile app, point of sale, and public booking.

Use Cases:

  • Offer a seasonal discount on court reservations — for example, 10% off tennis court rentals during May.

  • Create a new member welcome discount on membership purchases.

  • Run a limited-time promotion for event or league registrations.

  • Reward specific membership tiers with exclusive discount codes.

  • Apply promo codes to point of sale, packages, or miscellaneous fees.

  • Use the Audit Log to track a full history of promo code creations, edits, and deletions across your organization.

  • Apply a promo code to individual sessions of a recurring event rather than the entire series


Why Promo Codes Are Useful

Promo codes give your organization a flexible, controlled way to offer discounts without manually adjusting prices. Whether you're running a seasonal promotion, rewarding loyal members, attracting new players, or incentivizing early registration for an event — promo codes let you do it all from one place. Codes can be broad (available to anyone) or targeted (restricted to specific membership types), time-limited or ongoing, and capped by total usage or per-customer usage to keep your campaigns in check.


Navigation

Navigate to Settings > Billing Settings > Promo Codes.

Note: To allow a sub-admin to create and manage promo codes, enable the Can Manage Promo Codes permission in their sub-admin profile. Navigate to Settings > Organization Settings row > System Users icon > Sub-Admins to manage sub-admin permissions.


Viewing And Managing Promo Codes

Enable or Disable Promo Codes

At the top of the Promo Codes page, a global configuration section controls how promo codes behave across your organization.

  • Enabled / Disabled - Toggles promo code functionality on or off. When enabled, the promo code field is visible to players and system users at checkout. When disabled, the promo code field is hidden from players at checkout, though codes can still be built and managed from the admin panel. A warning banner reading "Feature is Currently Disabled - Promo Codes cannot be used by players until you enable this feature" displays at the top of the page when the feature is disabled.

  • Allow promo codes to apply to past transactions - When Promo Codes are enabled and this field is checked, promo codes can apply to fees from any date, including past-dated services. Uncheck to restrict promo codes to same-day or future-dated fees only. Note: This setting must be enabled to apply promo codes to batch billing invoices, as most invoice charges are past-dated.


Filtering by Date Range

Use the Activity Start/End Date fields to define the reporting window for this page. This date range only controls which data is displayed here and does not affect the active dates of any promo code. The interval dropdown lets you quickly select a preset range (such as Last 30 Days) or set a custom range using the arrow controls. All Key Signals metrics, as well as the same metrics in the table below by promo code, reflect the selected period.


Key Signals

The Key Signals section provides a snapshot of promo code activity for the selected date range. Each metric also displays a comparison to the prior period.

  • Total Redeemed - The number of successful promo code applications across all active codes in the selected period. Click the player count link to open the Members Who Used the Most Promo Codes panel which lists members who used the most promo codes during the selected period.

    • Use the Search field to find a specific member by name or email.

    • The panel displays each member's Rank, Member name and email, Distinct Codes Used, and Total Redemptions, along with a summary row showing the totals across all listed members (for example, "Top 2 total"). Hover over the info icon next to a member's Distinct Codes Used value to see which codes they used.

    • Note: This panel only displays the top 10 members by total redemptions.

      Results can be exported using the Export button.

  • Net Sales from All Campaigns - Total post-discount revenue on transactions where any promo code was applied during the selected period (subtotal minus discount).

  • Total Discount Amount - The total amount discounted across all promo codes in the selected period - the revenue traded for redemption activity.

  • Error Rate for All Codes - Failed promo code apply attempts divided by all promo code attempts in the selected period. Click Error Rate to open the Members with Frequent Redemption Errors panel, which lists members whose promo code attempts resulted in failures during the selected period. Failed attempts reflect activity across all promo codes in your club for the selected period.

    • Use the Search field to find a specific member by name or email.

    • The panel displays each member's Order, Member name and email, Last Attempt date, Failure Rate (All Codes) shown as a ratio of failed to total attempts (for example, 5/9 times), and Distinct Codes Attempted. Results can be exported using the Export button.

    • Hover over a member's Failure Rate value to open the Failed Attempts by Code tooltip, showing the total number of failed attempts and a breakdown by code, including the error type (for example, INVALID) and number of failed attempts for each code.

    • Hover over a member's Distinct Codes Attempted value to open the Codes Attempted tooltip, showing the total number of codes attempted and a breakdown by code with the number of times each code was attempted.

  • Note: Each metric displays a change indicator (increase or decrease) compared to the prior period of the same length. Total Redeemed, Net Sales from All Campaigns, and Total Discount Amount show their change as a percentage (for example, 80.8%). Error Rate for All Codes shows its change in percentage points (for example, 31.3 pp), since Error Rate is itself already a percentage.


Active and Inactive Promo Codes

The next section is organized into two tabs:

  • Active: Displays all currently active promo codes that are available for use at checkout. A code will only be usable if it falls within its configured campaign dates, has not reached its usage cap, and meets the eligibility requirements set during setup.

  • Inactive: Displays promo codes that have been deactivated. Inactive codes can be reactivated at any time from this tab.

Use the Sort by dropdown in the top right to change the order codes appear in the table. Options include Default (Newest), Redemption Activity, Error Rates, and Campaign Expiration Date.

For each promo code, the table displays the following:

  • Order - The display order of the promo code in the list.

  • Campaign Name - The campaign name assigned to the promo code.

  • Code - The discount code players enter at checkout.

  • Discount Type - The type of discount applied, either a percentage (e.g., 35%) or a fixed dollar amount.

  • Eligibility - The membership types eligible to use the code, or ALL if unrestricted.

  • Eligible Items - The fee types the promo code applies to.

  • Usage Limits - Whether the code is unlimited or has a usage cap, reflecting the settings configured during setup:

    • If Unlimited was selected: displays Unlimited.

    • If Limited To was selected: displays the total usage cap and the per-person limit (e.g., 99,999, 2 per person).

  • Redeemed - The total number of times the code was successfully applied within the selected date range. Click the value to open the Redemption History panel, scoped to that code, showing a badge with the code name and campaign description for reference. The panel lists each redemption's Last Used date, Member name and email, Applied To (the fee type the discount was applied to), and Saved amount. Use the Search field to find a specific member. Results can be exported using the Export button.

  • Error Rate - The percentage of failed apply attempts out of all attempts for that code within the selected date range. Click the Error Rate value for a specific code in the Active or Inactive table to open the Members with Frequent Redemption Errors panel, scoped to that code. The panel displays a badge with the code name and its campaign description for reference. The Failure Rate column header updates to reflect the code name (for example, Failure Rate (10OFF)). The panel lists each member's Order, Member name and email, Last Attempt date, Failure Rate shown as a ratio of failed to total attempts for that code, and Distinct Codes Attempted. Use the Search field to find a specific member. Results can be exported using the Export button.

  • Sales with Promo - The total post-discount revenue generated from transactions where the code was applied within the selected date range. Click the value to open the Sales with Promo panel, scoped to that code, showing a badge with the code name and campaign description for reference. The panel breaks sales down by Month, Redemptions, Sales with Promo, and Cumulative totals. Use the Search field to find a specific month. Results can be exported using the Export button.

  • Valid Dates - The campaign date range, or Ongoing if no end date has been set.


Sorting and Filtering the Columns

Each column header includes a filter icon that allows you to narrow results based on that column's values. Click the filter icon on any column to set one or more conditions - for example, filtering Redeemed to show only codes redeemed 20 or more times. Conditions can be combined using And logic for more precise results. Click Filter to apply or Clear to reset.

Click the Sort by icon next to any column label to sort that column alphabetically in ascending or descending order.


Actions Menu

From the actions menu on the right side of each row, admins can take the following actions:

  • Edit: Update any details of the promo code campaign.

  • Copy Code: Copies the promo code to your clipboard for easy sharing — useful for pasting into member emails, newsletters, or social media posts.

  • Duplicate: Creates a copy of the campaign, making it easy to set up a similar promotion without starting from scratch.

  • Make Inactive: Temporarily deactivates the code so it cannot be used at checkout. The code will move to the Inactive tab and can be reactivated at any time.

  • Delete: Permanently removes the promo code. This action cannot be undone.

Note: Deleting a promo code permanently removes it and cannot be undone. If you may need the code again in the future, use Make Inactive instead.


Audit Log

Click the Audit Log button in the top right corner to track all promo code activity, including feature settings changes, and code creations, edits, and deletions.

Use the Search field to find a specific entry. The log displays the Action Type, Action By (the system user who made the change), Created On date and time, Name, and a Description of what changed.


Creating a Promo Code

Click Create Promo Code to open the creation page. The setup fields are organized into sections. Work through each section to configure your campaign.


Setting Up a Promo Code at a Glance

Creating a promo code involves six quick steps. Here's what each one covers before we go into detail.

Step

What You'll Choose

Options

Example

Campaign name and discount type

Percentage or Fixed Amount

10% off tennis court rental

How the code is created

Automatic or Manual

10OFF4U

How often the code can be used

Unlimited or Limited To (total uses and per-person limit)

Limited to 3 uses per customer

When the code is active

Activate Immediately or Scheduled Time

Active May 1 through May 31

Who can use the code

Anyone with Code, Specific Memberships, Specific Member Groups, or Specific Individual Members

Anyone with code

What the code applies to

Bookings, Public Booking, Point of Sale, Membership Costs, or Other Fees

Tennis court reservations


Basic Settings

Campaign Name - Enter a descriptive name for the campaign, up to 255 characters. This is visible to members at checkout once successfully applied.

For example: 10% off tennis court rental

Discount Type - Choose between two discount types:

  • Percentage: Applies a percentage discount to eligible fees. Use the +/- buttons to set the percentage amount. For example: 10%.

  • Fixed Amount: Applies a flat dollar discount to eligible fees, allocated proportionately across eligible items in the order.

Minimum Amount Spent - Optionally set a minimum order amount that must be reached before the promo code can be applied. Leave blank if there is no minimum.

Maximum Amount Eligible - Optionally set the maximum eligible fee total this code can be applied to. This field only appears for percentage-based promo codes. If the eligible fees on a transaction exceed this amount, the discount is still applied but will not exceed this limit. For example: a 10% code with a $1,000 cap applied to $1,200 in eligible tennis court fees will discount up to $1,000 of those fees, the remaining $200 is not discounted. Leave blank for no cap.


Code Generation

Choose how the promo code itself is created:

  • Automatic: CourtReserve generates a unique code automatically.

  • Manual: Enter your own custom code, up to 20 characters. Codes are not case sensitive, uppercase and lowercase are treated the same at checkout. Spaces are not allowed. Click the copy icon next to the Code field to copy the code to your clipboard so you can quickly share it with members via email, newsletter, or social media. For example: 10OFF4U

Note: Each promo code must be unique. If a code matches an existing campaign, you will receive an error prompting you to choose a different code.


Usage Cap

Control how many times the promo code can be used:

  • Unlimited: The code can be used any number of times during the campaign dates with no restrictions. Promo can be used unlimited times during its campaign dates.

  • Limited To: Set a cap on usage with the following options. Promo can be used a set number of times until the limit is met.

    • Total Number of Usage: The maximum number of times the code can be used across all customers combined.

    • Usage Per Customer: The maximum number of times a single customer can use the code.

For example: Set Usage Per Customer to 3, meaning each member can only use it up to 3 times.

Note: For public bookings, usage per customer is tied to the guest's verified phone number. If a guest attempts to use the code more times than allowed on the same phone number, they will receive an error message at checkout.


Campaign Dates

Define when the promo code can be used at checkout:

  • Activate Immediately: The code becomes active as soon as it is saved and remains active until it is manually deactivated or deleted.

  • Scheduled Time: Set a specific start date, start time, end date, and end time for the campaign window. Specify a promotion start date, date range, or expiration date.

For example: Start Date 5/1/2026 at 12:00 AM through End Date 5/31/2026 at 11:59 PM, the code is only usable during the month of May.

Important: Campaign dates control when the promo code can be used at checkout, they do not restrict which reservations or event times or dates the code applies to.


Eligibility

Define who can use the promo code:

  • Anyone with Code - Any member or public booker who has the code can apply it at checkout.

  • Specific Memberships - Restrict the code to members on specific membership types. Select one or more membership types from the dropdown.

  • Specific Member Groups - Restrict the code to members belonging to specific member groups. Select one or more groups from the Member Groups dropdown.

  • Specific Individual Members - Restrict the code to individually named members. Use the Search players to add... field to find and add members by name. Type at least three characters to trigger search results. Added members display in a list showing Name and Membership, and can be removed individually using the delete icon.

Note: Only Anyone with Code supports public booking. If you select Specific Memberships, Specific Member Groups, or Specific Individual Members, the code will not be applicable during the public booking flow.


Apply To

Select which fee types the promo code applies to. At least one fee type must be selected - you will receive a validation error if you attempt to save without selecting at least one. You can select a single fee type or any combination across tabs.

The Apply To section is organized into the following tabs:

Note: The Public Booking tab only appears if Public Booking is enabled for your club.


Bookings

Select which booking types the code applies to:

  • Reservations: Apply the code to reservation fees. Optionally narrow by specific Reservation Types. Enable Allow for Reservation Guest Fees to include guest fees on reservations.

  • Lessons: Apply to lesson fees. Optionally narrow by Lesson Types.

  • Events - Apply the code to event registration fees. By default, the events dropdown displays All Events Across Every Category, meaning the code applies to all events. Click the dropdown to open the Select Events panel if you want to narrow the code to specific events or individual occurrences within a recurring series.

    Enable Allow for Event Guest Fees to include guest fees on event registrations.

    • Within the Select events panel:

      • Use the date range fields and the Custom Range dropdown to filter events by date window. Use the arrows on either side of the date fields to step forward or backward.

      • Use the Search events by... field to find specific events by name.

      • Use the All Categories dropdown to filter by event category.

      • Events are grouped by event category. Each category displays a checkbox, the category name, a badge showing the total number of events currently selected across the panel, and an expand toggle showing the number of events in that category. Expand a category to see individual events, each showing a checkbox, event name, date range, and time range, along with an expand toggle showing the number of dates in that event's series. Select the category-level checkbox to include all events and dates within it, select an event-level checkbox to include all dates in that event's series, or expand an event to select individual dates to target specific occurrences.

      • A note displays when additional dates fall outside the selected date range.

      • The footer displays the total number of events selected and the number currently shown based on your filters. Click Cancel to close without saving, or click Add [number] Events (reflecting your current selection count) to confirm your selection.

  • Leagues: Apply to league fees.


Time-Based Eligibility

Restrict code usage by booking day and time. Redemption rules for time of checkout are controlled in Campaign Dates.

  • Any day, any time - The code can be applied at checkout on any day and at any time.

  • Specific days and times - Restrict the code to specific days of the week and a defined time of day range. Select individual days or use the Weekdays or Weekends shortcuts to quickly populate the selection. Set a Time of day range using the start and end time fields. Leave the time fields blank to allow the code on selected days at any time. Note: For the time range to apply, the booking must both start and end within the defined window. For example, if the time range is set to 9 AM to 12 PM, a reservation starting at 11:30 AM that runs until 12:30 PM would not be eligible, as it extends beyond the end time.

Example: A campaign called Pickleball Reservation Special uses the code PBALL10 for 10% off on the weekends. When a player selects Pickleball Reservation as the reservation type for a Saturday or Sunday reservation, the 10% discount is applied to the member’s reservation.


Public Booking

Select which public booking types the code applies to:

  • Reservations - Apply the code to public booking reservation fees. Optionally narrow by specific Reservation Types using the dropdown.

  • Events - Apply the code to public booking event registration fees. Optionally narrow by Event Categories and specific events using the dropdown.

Example: A campaign called Tennis Clinic Special uses the code CLINIC5 for $5 off. With Events enabled and Tennis Clinics selected as the Event Category, the $5 discount is applied at checkout when a public booker registers for any Adult Clinic event on any day, at any time.


Point of Sale

Apply the code to point of sale purchases. Optionally narrow by POS Item Category.

Example: A campaign called Paddle Discount uses code PADDLE15 for 15% off. Under Point of Sale, the Paddle item category is selected — meaning the discount applies only to paddle purchases at the time of sale.


Membership Costs

Apply the code to membership fees. Optionally narrow by Membership Type or include Initiation Fees.

Note: The promo code only applies to the membership fee for the month it's used. It does not carry forward to future charges, including recurring membership payments.

Example: A campaign called Single Gold Annual Member Welcome Offer uses code GOLD20 for 20% off. Under Membership Costs, the Single Gold membership type is selected and Initiation Fee is left unchecked, meaning only the membership fee is discounted, not the initiation fee.


Other Fees

  • Misc. Fees: Apply to any miscellaneous fee.

  • Packages: Apply to package purchases. Optionally narrow by specific Packages.

  • Recurring Fees: Apply to recurring fees. Optionally narrow by Recurring Fee Type.

Example: A campaign called Drop-In Event Package Deal uses code DROPIN20 for $20.00 off. Under Other Fees, Packages is selected and the 10-Pack (Event Drop-Ins) package is chosen from the dropdown — meaning the discount applies only when a member purchases that specific package.

Once all fields are completed, click Save to create the promo code.


Promo Codes and Fee Changes

Promo codes are applied once, at checkout, and only adjust automatically in very limited cases:

  • If a reservation's time is extended after checkout, the promo code is not reapplied to the added fee. A promo code can only be applied once to a given fee.

  • If an edit increases the fee, the discount amount does not increase to match, whether the code is percentage-based or a fixed amount.

  • If an edit decreases the fee, a percentage-based promo code recalculates to reflect the new, lower fee. A fixed amount promo code stays the same regardless of a fee increase or decrease.

  • Editing a reservation also revalidates the promo code against its eligibility parameters. If the edit moves the reservation outside the code's eligibility, such as rescheduling to a day or time the code doesn't cover, the discount is forfeited, even if the original booking was eligible.

For example: A $5.00 reservation fee has a $10.00 fixed amount promo code applied. Since the discount can't exceed the fee, the applied discount is capped at $5.00. If the reservation is later edited and the fee changes, either up or down, the discount stays at $5.00.

Another example: A promo code is restricted to weekend bookings only. A member books a Saturday reservation and applies the code at checkout. If they later edit the reservation to a Tuesday, the code no longer meets the day-based eligibility requirement, and the discount is removed.


Promo Codes on Point of Sale Transactions

Promo codes can be applied to Point of Sale transactions. See example transaction and receipt shown here:

Important to note: There are a few guardrails in place for Point of Sale to prevent double discounting:

  • Discounted items - If a discount has already been applied to an item in the cart, a promo code cannot be applied to that item. If every item in the cart has been discounted, the promo code field will be grayed out and display the message: "Cannot apply Promo Code for Discounted Items." If the cart contains a mix of discounted and non-discounted items, the promo code field remains active and displays the message: "Promo will only be applied to non-discounted items."

  • Charge to Account - If a member is selected and the payment method is set to Charge to Account or Apply Credit is selected, the promo code field will be grayed out and display the message: "Promo codes cannot be applied when charging to a member account."


Promo Codes on Batch Billing Invoices

Promo codes can be applied when paying a batch billing invoice. This works both from the admin panel and the member portal when an invoice is paid manually.

When a member or admin navigates to the pay invoice screen, a promo code field is available at checkout. The discount is calculated based only on the eligible fees within the invoice - some fee types such as reservations, Point of Sale, and miscellaneous fees may not be eligible depending on how the code is configured. The eligible amount and resulting discount are displayed before payment is submitted. Receipts will reflect the applied discount consistent with other checkout flows.

Note: Because most batch billing invoices include past-dated charges, the Allow promo codes to apply to past transactions setting must be enabled for the code to apply. If this setting is not enabled, members will receive an error stating there are no eligible items in the cart. Promo codes applied at invoice checkout do not work with auto collection - the code must be entered manually during the checkout flow.


Applying a Promo Code at Checkout — Admin Side

When processing a payment from the CourtReserve admin panel, an Apply Promo Code option appears in the Summary section on the right side of the Payment Details screen.

To apply a promo code:

  1. From the Payment Details screen, locate the Apply Promo Code option in the Summary section and click it.

  2. A Promo Code field will appear. Enter the code and click Apply.

  3. If the code is valid, the Summary will update to reflect the discount. The discounted amount, campaign name, and total savings will display in green. For example, Drop-In Event Package Deal, $20.00 OFF, Saving $20.00 and the Final Payment amount will update accordingly.

  4. Note: If the code is invalid, an error message will display. This may occur if the code is misspelled, expired, not yet active, restricted to a membership type the member does not have, or has already reached its usage limit. There are several validation messages that may display depending on the issue.

  5. Once the correct code is applied and the discount is confirmed, proceed with payment as usual. An example completed payment and receipt are shown here:


Applying a Promo Code at Checkout — Player Side

Players can apply promo codes directly at checkout through the CourtReserve member portal and mobile app. During the checkout process, a Promo Code field will appear where players can enter their code before completing payment. Once a valid code is entered, the discount will be applied and confirmed in green — displaying the campaign name and savings amount. The updated total will reflect the discounted price before the player submits payment.


Member Portal

When completing a payment, members can enter a promo code directly on the checkout screen. To apply a discount, they'll type the promo code into the Promo Code field located below the payment information and click Apply. For example, entering 20OFF and clicking Apply will apply the associated discount to the reservation total before completing payment.

Before completing payment, members will see a full summary of charges and any applied discounts above the Pay button.

Example of a player's receipt:


Mobile App

On the Process Payment screen, members can enter a promo code directly below the Payment Method section. To apply a discount, they'll type the promo code into the Promo Code field and tap Apply. For example, entering 20OFF4U and tapping Apply will apply the associated discount to the reservation total before completing payment.

Once applied, the Promo Code field updates to show a green checkmark, the campaign name, and the discount amount (for example, 20% off everything - one time use, 20% off). The Subtotal, a new Discount line, and the Total Due all update to reflect the applied discount before the member taps Pay.

Example of a member's receipt showing a mobile app promo code discount:


Public Booking

Promo codes are supported on the Public Booking checkout page based on the the code's Apply To settings.

On the Public Booking site, the code entry field appears on the right side of the checkout screen, and the Apply Promo Code button appears directly above the pay button in the checkout flow.

Guests must first verify their phone number before applying a promo code. Users outside the US and Canada verify using their email address instead. If a guest attempts to apply a code before completing verification, they will receive an error. Once verified, the guest can enter an eligible code and the discount is applied to the subtotal before payment is submitted.


Summary

Promo codes give your organization a flexible way to run discount campaigns across reservations, lessons, events, leagues, memberships, point of sale, and more. Once a campaign is set up, redemption activity, sales impact, and errors are all tracked automatically through Key Signals and the Audit Log, so you can adjust eligibility, usage limits, or campaign dates at any time as your promotions evolve.

Did this answer your question?