A coffee shop sells $5,000 in gift cards and loyalty points in December. The owner counts all $5,000 as revenue, celebrates a record month, and pays quarterly taxes on it. In February, customers start redeeming. The beans were already expensed, the baristas already paid, but the accounting says the money was earned months ago. Now the books show a profit that never existed, inventory that doesn't reconcile, and a tax bill on income still sitting on customers' phones.
If you run any program where customers earn points, stars, or credits toward a future free item, you are not just marketing — you are creating a financial liability. Under ASC 606, that liability has rules, and getting them wrong quietly distorts revenue, taxes, and the story your financials tell.
Why Loyalty Points Are Not “Just Marketing”
Before ASC 606, many businesses booked the full sale as revenue and expensed loyalty costs only when points were redeemed — the “incremental cost” model. It was simple and it was wrong.
ASC 606 treats a loyalty point as a separate performance obligation. When a customer pays $100 and earns points worth $5 toward a future latte, you haven't earned $100. You've earned $95 and you owe $5 of product or service in the future. That $5 is deferred revenue — a liability — until the point is redeemed or expires.
Think of it as selling two things in one transaction: the coffee today and a promise of coffee tomorrow. Revenue must be split between them.
The Two Accounting Models — And Why Only One Survives an Audit
The old incremental cost model (no longer GAAP for most programs)
- Recognize full revenue at sale ($100)
- Accrue the expected cost of fulfilling the award (e.g., $2 for the latte's beans and milk)
- No liability for the full value of the promise
Auditors now reject this for any material program because it understates the liability and accelerates revenue. It remains acceptable only where points have negligible value and breakage is near 100% — rarely defensible in a review.
The deferred revenue model (ASC 606 compliant)
- Allocate the transaction price between the product sold and the loyalty points based on standalone selling prices
- Record the points portion as a liability (deferred revenue / contract liability)
- Recognize revenue when points are redeemed (or when breakage is recognized)
If your CPA still lets you use incremental cost for a points program that drives repeat business, ask them to document the materiality memo in writing.
Step-by-Step: From Sale to Redemption
Step 1: Estimate the standalone selling price of points
A point has no price tag, so you estimate what a customer would pay for it if sold separately. Three common techniques:
- Adjusted market assessment: What would you sell a $5 off coupon for? Often the redemption value itself ($5 for 100 points = $0.05/point), adjusted for the likelihood of redemption.
- Expected cost plus margin: Cost to fulfill the free item plus a normal margin, useful when the award is a specific product you control.
- Residual approach: Rare for loyalty — only if the point's value is highly variable and a standalone price for the main product is observable.
Example: A sandwich shop gives 1 point per $1, 10 points = $5 off. A customer spends $50, earns 50 points. If historical redemption is 70% and each point is worth $0.50 at redemption, the standalone value of 50 points is 50 × $0.50 × 70% = $17.50 before allocation. In practice many businesses simplify to the redemption value adjusted for breakage — the math matters less than consistency and documentation.
Step 2: Allocate the transaction price
Allocation is relative, not residual (unless criteria met). If the sandwich sale is $50 and points standalone is $3.50 (50 points × $0.10 redemption value × 70% expected redemption), the allocation is:
- Total standalone: $50 + $3.50 = $53.50
- Sandwich revenue: $50 / $53.50 × $50 = $46.73
- Deferred revenue: $3.50 / $53.50 × $50 = $3.27
Journal at sale:
Debit Cash $50.00
Credit Revenue (sandwich) $46.73
Credit Deferred Revenue (points) $3.27You're not losing revenue — you're timing it correctly. The $3.27 will become revenue when the customer returns.
Step 3: Track the points liability
Maintain a rollforward, not just a single liability account:
Beginning deferred revenue (points)
+ Points issued (new deferrals)
- Points redeemed (revenue recognized)
- Breakage recognized
= Ending deferred revenueIf you use a POS like Square, Toast, or Shopify with a loyalty app (Stamp Me, Belly, Fivestars, or built-in), export the points issued/redeemed daily. Reconcile that export to your general ledger weekly. The POS is the subledger; your GL is the truth.
Step 4: Recognize revenue on redemption
When the customer redeems 10 points for the $5 sandwich:
Debit Deferred Revenue $5.00 (or allocated amount: $3.27 originally deferred for these points, plus proportional breakage)
Credit Revenue $5.00
Debit Cost of Goods Sold $2.00
Credit Inventory $2.00If you allocated $3.27 for 50 points, each point carried $0.0654 of deferral. Redeeming 10 points recognizes $0.65 of that deferral plus a proportional slice of expected breakage (see below).
Step 5: Recognize breakage — the part customers never claim
Breakage is the points that will never be redeemed — lost cards, expired accounts, customers who move away. ASC 606 lets you recognize breakage proportionally as redemptions occur, not only at expiration, if you can reliably estimate it.
If you expect 30% breakage (70% redemption), then for every $0.65 of deferral recognized on redemption, you also recognize $0.28 of breakage revenue (30/70). Total revenue on that 10-point redemption: $0.93, not just $0.65. The remaining deferral stays for the other points.
If you cannot reliably estimate breakage, you must wait until points expire or redemption becomes remote. That is conservative and often understates interim revenue — the incentive to track history is real.
Update your breakage estimate quarterly. A program that mailed expiry warnings or added points expiration will see breakage rise; a program that made redemption easier will see it fall.
What Goes on the Balance Sheet — And Why Auditors Care
- Current vs non-current: Points expected to be redeemed within 12 months sit in current liabilities; beyond that, non-current. For most coffee, restaurant, and retail programs, it's entirely current.
- Disclosure: Material programs require disclosure of the nature of the performance obligation, the transaction price allocated, the timing of recognition, and significant judgments (breakage estimate, standalone price technique).
- Tax vs GAAP: For tax, loyalty deferrals are generally deductible only when redeemed (or breakage recognized), but the timing can diverge from GAAP. Track the book-tax difference for your return — your CPA will need the rollforward.
A common audit finding: the liability is missing because the POS “handles it.” The POS handles the points count, not the GL liability. If the year-end points balance is $12,000 at redemption value and your balance sheet shows $0, you have a $12,000 understatement of liabilities and overstatement of revenue.
Five Mistakes That Quietly Break Your Books
1. Booking full revenue at sale. The classic. It pumps December and starves January, and it creates a phantom tax liability on money you still owe in product.
2. Using cost instead of value for the deferral. Booking the $2 cost of the free coffee instead of the $5 value understates the liability by 60%. Use standalone selling price, not ingredient cost.
3. Never updating breakage. A shop that launched with 10% breakage in 2023 and still uses 10% in 2026 while half its points expired untouched is carrying a growing liability that will never be fulfilled — and deferring revenue it could recognize.
4. Forgetting expiration and terms changes. If you add a 12-month expiry to previously evergreen points, breakage jumps. That is a change in estimate, recognized prospectively, not a prior-period correction — but it must be recorded.
5. Mixing gift cards and loyalty points in one liability. They are different performance obligations with different breakage curves. Gift cards have state escheat (unclaimed property) implications; points generally do not. Keep separate GL accounts.
A Simple Monthly Close Checklist
If you run any earning program, add this to your close:
Day 1–2: Export from POS/loyalty platform: points issued, points redeemed, points expired, outstanding balance.
Day 3: Roll the deferral: Beginning balance + issued (at standalone value × expected redemption) − redeemed (at allocated amount + proportional breakage) − expired/breakage = Ending balance. Tie to GL.
Day 4: Review breakage estimate: trailing 12-month redemption rate, expiry changes, program rule changes. Document the judgment.
Day 5: Reconcile: Outstanding points × value per point × expected redemption % ≈ GL deferred revenue. Investigate >5% variance.
Quarterly: Disclose and review with CPA — is the deferral still current vs non-current, any material change in estimate, any new tier or bonus-point promotion that changes standalone price?
The POS Reconciliation That Saves You in an Audit
Loyalty platforms love to report “points” and “dollars saved.” Your ledger needs dollars deferred. Build a one-tab spreadsheet or, better, a plain-text reconciliation:
- Column A: POS date
- Column B: Cash sales
- Column C: Points issued (count)
- Column D: Deferred amount (points × value × expected redemption)
- Column E: Points redeemed
- Column F: Revenue recognized from deferral + breakage
- Column G: GL deferred revenue balance
- Column H: POS outstanding points × value × expected redemption (control total)
If column G and H diverge, something posted to the wrong account. Fix it that week, not in February when the 1099s are due.
The Bookkeeping Connection
Loyalty accounting rewards the same habit that makes plain-text accounting powerful: every promise is a ledger entry. A deferred revenue liability is not a footnote — it is a contract with your customers, sitting on your balance sheet until you fulfill it. When points and cash live in the same version-controlled ledger, the story from “stickers earned” to “revenue recognized” is traceable, reviewable, and explainable to an auditor who asks why March revenue spiked.
Tracking the rollforward in a transparent ledger also makes breakage estimates honest. You can see cohort by cohort when points were issued and when they were redeemed, instead of guessing from a dashboard average.
Simplify Your Financial Management
Getting loyalty accounting right means getting timing right — recognizing revenue when you’ve actually earned it, not when cash changes hands. Beancount.io gives you plain-text, version-controlled accounting where deferred revenue, breakage, and redemption are all visible history, not hidden adjustments. Keep every point, every sale, and every recognition in a ledger you can git log. Get started for free and make your loyalty program build loyalty — not a balance-sheet surprise.