Promotions and Discounts
Create promo codes, configure seasonal discounts, manage service-specific offers, and track promotion ROI.
Promotions and Discounts
The Promotions module lets you create discount codes, seasonal offers, and targeted promotions that customers can apply to estimates. Navigate to Admin > Marketing > Promotions to manage your promotions.
Promotions List
The main view displays all promotions as cards. Each card shows the promotion name, promo code, discount amount, status, validity dates, redemption count, and any service restrictions.
Status Indicators
| Status | Meaning |
|---|---|
| Active | The promotion is live and can be redeemed |
| Inactive | The promotion has been manually deactivated via the toggle |
| Expired | The current date is past the Valid Until date |
| Scheduled | The current date is before the Valid From date |
Each promotion card also displays an Auto-apply badge if that option is enabled, and a usage progress bar when a maximum usage limit is set.
Creating a Promotion
- Click the + New Promotion button in the upper right corner.
- Fill in the promotion details in the form that appears.
- Click Create Promotion to save.
Required Fields
| Field | Description | Tips |
|---|---|---|
| Promotion Name | A descriptive name for internal reference | Use a format like "Fall 2026 -- 15% Off" for easy identification |
| Promo Code | The code customers enter to redeem the discount | Automatically converted to uppercase. Keep it short -- SPRING25 is better than SPRING-2026-PROMO-15PCT |
| Discount Value | The numeric discount amount | Enter 15 for 15% off, or 50 for $50 off |
Discount Type
Choose between two discount types:
| Type | How It Works | Best For |
|---|---|---|
| Percentage (%) | Reduces the estimate total by a percentage of the subtotal | Higher-value services where the discount should scale with the job size |
| Flat ($) | Subtracts a fixed dollar amount from the estimate total | Consistent, predictable offers -- "$50 off your next house wash" |
Select the discount type by clicking either the Percentage (%) or Flat ($) button before entering the value.
Validity Dates
| Field | Description | Default |
|---|---|---|
| Valid From | The date and time the promotion becomes redeemable | Optional -- if omitted, the code is valid immediately |
| Valid Until | The date and time the promotion expires | Optional -- if omitted, the code has no expiration |
Both fields accept date and time input. Setting a Valid From date in the future creates a scheduled promotion that activates automatically on that date.
Usage Limits
| Field | Description | Default |
|---|---|---|
| Max Total Uses | The maximum number of times the code can be redeemed across all customers | Unlimited if left blank |
| Max Uses Per Customer | The maximum number of times a single customer can use the code | 1 |
When a max total usage limit is set, the promotion card displays a usage progress bar showing the percentage consumed. The bar color changes from green (under 50%) to yellow (50-89%) to red (90% and above) as the limit is approached.
Service Restrictions
By default, a promotion applies to all services. To restrict it to specific services, click one or more service badges:
- House Wash
- Roof Wash
- Driveway
- Deck Wash
- Fence Wash
- Gutter Cleaning
- Window Cleaning
When service restrictions are set, the promo code only works on estimates that include at least one of the selected services. If a customer applies the code to an estimate with no matching services, the system returns an error.
Auto-Apply
Enable the Auto-Apply toggle to have the promotion automatically applied when a customer requests an estimate through the portal. This is useful for site-wide promotions or seasonal specials where you want every incoming lead to see the discounted price without needing a code.
When auto-apply is enabled, an Auto-apply badge appears on the promotion card for easy identification.
Managing Promotions
Activating and Deactivating
Each promotion card has a toggle switch in the upper right corner. Switch it off to deactivate a promotion without deleting it. Switch it back on to reactivate. Deactivated promotions show an Inactive status badge.
Deleting a Promotion
Click the Delete button on a promotion card. A confirmation dialog appears before the promotion is permanently removed. Deletion is irreversible -- if you want to temporarily disable a promotion, use the toggle instead.
Promotion Validation
When a promo code is applied to an estimate -- whether by a customer on the portal or by a sales rep in the admin panel -- the system runs five validation checks:
- Code exists -- the code must match an existing promotion for your organization.
- Promotion is active -- the promotion's is_active flag must be true (not toggled off).
- Date range is valid -- the current date must fall within the Valid From and Valid Until range. If no dates are set, this check passes automatically.
- Total usage limit not reached -- if a max total uses limit is set, the code must have remaining redemptions.
- Per-customer limit not reached -- if the customer's email is known, the system checks whether they have already used the code up to the per-customer limit.
- Service restrictions satisfied -- if the promotion is restricted to specific services, the estimate must include at least one of those services.
If any check fails, the system returns a specific error message:
| Error | Meaning |
|---|---|
| "Invalid promo code" | The code does not match any active promotion |
| "Promo code is not yet active" | The Valid From date is in the future |
| "Promo code has expired" | The Valid Until date has passed |
| "Promo code usage limit reached" | The max total uses limit has been hit |
| "You have already used this promo code" | The customer has reached their per-customer limit |
| "Promo code does not apply to selected services" | The estimate does not include any of the restricted services |
Using Promotions on Estimates
In the Estimate Builder (Admin)
When building an estimate in the admin panel, look for the Promo Code field. Enter the code and the system validates it in real time. If valid, the discount is applied to the estimate total and appears as a visible line item so the customer can see the savings on their proposal.
On the Customer Portal
Customers can enter a promo code when requesting an estimate through your public portal. The validation runs the same checks described above. If the code is valid, the discount is applied to the generated estimate.
Auto-Applied Promotions
If a promotion has auto-apply enabled, it is automatically included on estimates generated through the portal without the customer needing to enter a code.
Distributing Promo Codes
Through Marketing Campaigns
Include your promo code in email or SMS campaigns using the {{promo_code}} merge field. This inserts the code directly into the message body. See Marketing Campaigns for details on creating campaigns.
Through Direct Messages
Send the code to specific customers through the messaging inbox. This works well for personalized offers to high-value or at-risk clients.
Through External Channels
- Social media -- post the code on your business profiles with a clear expiration date.
- Print materials -- add the code to flyers, door hangers, yard signs, or vehicle wraps.
- Google Ads or landing pages -- include the code in ad copy or on dedicated landing pages.
Seasonal Promotion Strategies
Spring Cleaning Special
Create a percentage discount (10-15%) with a Valid From date at the start of March and Valid Until at the end of April. Target dormant customers who have not had service in 6+ months using a marketing campaign with the "By Last Service Date" audience filter.
Holiday Lights Early Bird
Offer a flat dollar discount ($50-$100 off) for holiday light installations booked before October 15. Restrict the promotion to the holiday lights service. Use auto-apply so portal visitors see the discount automatically.
Referral Reward
Create a promotion code that each referring customer can share. Set the max uses per customer to 1 and the max total uses to match your budget. Distribute through the referral request win-back template.
End-of-Season Clearance
Offer a larger discount (20-25%) for the last two weeks of your busy season to fill remaining capacity. Set a tight Valid Until date to create urgency.
Win-Back Promotions
Win-back promotions combine a discount code with a targeted campaign to re-engage dormant customers. The recommended workflow:
- Create the promotion -- set up a promo code with a reasonable discount (10-15%) and an expiration date 30 days out.
- Create a campaign -- use the "We Miss You!" or "Seasonal Reminder" win-back template from the Marketing page.
- Link the promo code -- include the
{{promo_code}}merge field in your email and SMS templates. - Set the audience -- the win-back templates come pre-configured to target dormant customers, but you can adjust the filters.
- Send and monitor -- track redemptions on the Promotions page and campaign conversions on the campaign detail page.
Tracking Promotion ROI
Redemption Tracking
Each promotion card displays the Redemptions count -- the number of times the code has been applied to an estimate. If a max total uses limit is set, it shows as a fraction (e.g., 12/50) with a visual progress bar.
Measuring Effectiveness
To evaluate whether a promotion is driving profitable business:
- Check the redemption count on the promotion card. This tells you how many customers used the code.
- Cross-reference with campaign stats if you distributed the code via a marketing campaign. The campaign detail page shows conversions -- customers who booked a service after receiving the campaign.
- Calculate the discount cost. Multiply the average discount per estimate by the number of redemptions to get your total discount spend.
- Compare against revenue. Look at the total revenue from jobs that used the promo code. If revenue minus discount cost is positive, the promotion generated net-positive results.
Key Metrics to Track
| Metric | How to Calculate | What It Tells You |
|---|---|---|
| Redemption Rate | Redemptions / times the code was shared | How compelling the offer is |
| Conversion Rate | Booked jobs from promo / total redemptions | Whether the discount converts browsers to buyers |
| Cost Per Acquisition | Total discount given / number of new customers acquired | The marketing cost of winning each new customer |
| Lifetime Value Ratio | Average customer lifetime value / cost per acquisition | Whether the promotion pays for itself over time |
Best Practices
- Set expiration dates. Urgency drives action. A promotion with no end date does not motivate customers to act now.
- Limit total usage. Scarcity increases perceived value. "First 20 customers" works better than "unlimited."
- Keep codes simple. Customers type these on their phones. SPRING25 is better than SPRING-2026-PROMO-15PCT. Use uppercase letters and short numbers.
- Use service restrictions strategically. Restrict discounts to services you want to promote or fill capacity for, rather than discounting your most profitable offerings.
- Set per-customer limits. The default of one use per customer prevents abuse. Only increase this for loyalty-style programs.
- Track ROI. Calculate whether the revenue from promo-driven jobs exceeds the discounts you gave. A promotion that generates $10,000 in revenue at a $1,500 discount cost is a strong return.
- Deactivate instead of deleting. If a promotion is underperforming, toggle it off rather than deleting it. This preserves the redemption history for analysis.
- Pair promotions with campaigns. A promo code without distribution has no impact. Always pair a new promotion with a marketing campaign or direct outreach.
- Do not stack discounts. CE Pro applies one promo code per estimate. This prevents customers from combining multiple offers, protecting your margins.
- Test with auto-apply sparingly. Auto-apply is powerful but reduces revenue on every portal estimate. Use it only for limited-time, high-impact promotions.
Related articles
Was this article helpful?
Still need help? Contact support