Coupon
A Coupon in Salesforce (the Coupon standard object) is a single redeemable discount code issued to a buyer or loyalty member, used by Loyalty Management and Salesforce Commerce to track per-instance discount redemption.
Definition
A Coupon in Salesforce (the Coupon standard object) is a single redeemable discount code issued to a buyer or loyalty member, used by Loyalty Management and Salesforce Commerce to track per-instance discount redemption. Each Coupon record carries a unique CouponCode, a lookup to a parent Promotion (which defines the discount mechanics: percentage off, fixed amount, free shipping, BOGO), an issued-to identifier (typically a Loyalty Member or Account), an EffectiveFromDate and EffectiveToDate that bound validity, a Status (Issued, Redeemed, Expired, Cancelled), and a UsageCount tracking redemption against the parent Promotion max-use rules.
Coupons differ from Promotions in scope. A Promotion defines the rule: every customer who applies code SAVE10 gets 10 percent off. A Coupon represents a single instance of that rule: member 12345 was issued code SAVE10-XYZ123, valid through April 30. The per-instance modeling enables precise tracking of who received which coupon, when it was used, and what its lifetime contribution to revenue and engagement was. This is the structure Salesforce Loyalty programs and Commerce promotion engines need to drive personalized discounts.
How Coupons work in Loyalty Management and Salesforce Commerce
The Coupon object and its key fields
The Coupon standard object has CouponCode (string), Promotion (lookup to parent Promotion), Status (Issued, Redeemed, Expired, Cancelled), EffectiveFromDate and EffectiveToDate, UsageCount, MaximumUsage, and several issued-to fields (Loyalty Member, Account, Contact). The structure is designed for both Loyalty (issue X coupons to Y members) and Commerce (issue ad-hoc codes during a campaign) use cases.
Coupon vs Promotion: scope of the discount rule
A Promotion is the discount rule, like 10 percent off all sneakers for the month of April. A Coupon is a single instance of that rule, with its own validity window, status, and tracked usage. One Promotion can issue many Coupons, each with its own CouponCode. This separation lets Loyalty programs issue distinct codes per member (better fraud protection, better personalization) while still grouping under a single Promotion for reporting and rules.
How coupons are issued
In Loyalty Management, coupons are typically issued through a Loyalty Process or a Promotion Engagement when a member reaches a tier, books a flight, makes a purchase, and so on. The Loyalty engine creates the Coupon record and links it to the member. In Salesforce Commerce, coupons are issued through a marketing campaign workflow, a referral bonus, or a customer service interaction (give-back gesture). Both paths write to the same Coupon object.
Coupon redemption flow
When a customer applies a coupon at checkout, the Commerce checkout or the Loyalty redemption engine looks up the Coupon by CouponCode, validates Status = Issued and effective dates, checks UsageCount against MaximumUsage and the parent Promotion limits, applies the discount, and increments UsageCount. If everything passes, Status flips to Redeemed (for single-use coupons) or stays Issued with updated UsageCount (for multi-use coupons).
Expiration and lifecycle
Coupons expire either by date (EffectiveToDate passes) or by usage cap (UsageCount reaches MaximumUsage). Expired coupons get Status = Expired, and the redemption engine refuses them. Cancelled coupons are explicitly invalidated (typically by an admin action, for example a fraud investigation). The lifecycle is auditable through Field History; many regulators require this for promotion accounting.
Coupon mass issuance and the API
For high-volume coupon issuance (Loyalty tier rollovers, bulk marketing campaigns), the standard pattern is to insert Coupon records through the API or Data Loader, with CouponCode generated by a code-generator service or by Salesforce-side Apex. The Coupon object supports normal Salesforce DML, so batch jobs and Flows can issue millions of coupons given proper governor planning.
Reporting on coupon performance
Coupon performance reports answer two main questions: which Promotions are working (high redemption rate, high revenue contribution) and which member segments engage with which coupons. Standard reports group Coupons by Promotion, Status, and Issued-To-Segment. Many Loyalty programs build dashboards showing redemption rate, average discount per redemption, and revenue uplift attributable to coupon-driven sessions.
How to configure and issue Coupons
Coupons require a parent Promotion and the right Loyalty or Commerce package. Most of the configuration happens once at Promotion setup; ongoing operation is just issuance and reporting.
- Enable Loyalty Management or Salesforce Commerce
Coupon is a standard object that ships with both products. Confirm the right package is installed and licensed before configuring.
- Define the parent Promotion
Setup, Object Manager, Promotion (or Loyalty Setup, Promotions). Define the discount mechanic (percentage, fixed, free shipping), the product scope, the max usage per coupon, and the overall promotion budget.
- Configure the coupon code generation
Decide on the CouponCode format (random alphanumeric, member ID plus suffix, promotion code plus suffix). For bulk issuance, build a code generator Apex utility or use a third-party service. The codes must be unique and unguessable.
- Build the issuance Flow
For Loyalty programs, configure the Loyalty Engagement or Loyalty Process to issue Coupons on the right trigger (tier change, booking, milestone). For Commerce, build a Flow on Order or on Marketing Campaign Member that creates the Coupon record.
- Test the redemption flow
Walk through the customer-facing checkout or Loyalty portal. Apply the coupon. Confirm the discount applies, the UsageCount increments, and the Status updates correctly.
- Build coupon performance reports
Create a custom report type that joins Coupon, Promotion, and the issuing entity (Loyalty Member or Account). Group by Status to see redemption rate; group by Promotion to compare programs.
- CouponCode uniqueness is not enforced by the platform out of the box. Add a unique constraint or validation rule to prevent collisions in bulk issuance.
- MaximumUsage on the Coupon and on the parent Promotion are checked separately. If both have caps, the lower one wins, but the engine returns the Coupon-level error first, which can mislead troubleshooting.
- Expired coupons retain their record. Cleanup requires a separate Flow or batch job; storage grows linearly with coupon issuance volume.
- Coupon codes issued to a Loyalty Member but never redeemed do not auto-extend. If members complain about expired codes, build an extension Flow or accept the design.
- Coupon Code Generation through random Apex strings has collision risk at scale. Use a UUID-style generator or a dedicated service for high-volume programs.
Trust & references
Cross-checked against the following references.
- Coupon Object ReferenceSalesforce Developers
- Loyalty Management OverviewSalesforce Help
Straight from the source - Salesforce's reference material on Coupon.
- Promotions in Salesforce CommerceSalesforce Help
- Loyalty Promotions OverviewSalesforce Help
About the Author
Dipojjal Chakrabarti is a B2C Solution Architect with 29 Salesforce certifications and over 13 years in the Salesforce ecosystem. He runs salesforcedictionary.com to help admins, developers, architects, and cert/interview candidates sharpen their fundamentals. More about Dipojjal.
Discussion
Loading discussion…