Tracking and analytics
A promotion ledger has two jobs. It supports decisions before money moves, and it explains what happened afterward. One number cannot do both. Expected value belongs to the decision record; deposits, wagers, settlements, and withdrawals belong to the accounting record.
Keep the system simple enough to update during ordinary use. A perfect workbook completed weeks later is less useful than a consistent ledger created at opt-in. The multi-platform blueprint supplies the operating sequence. This chapter supplies the evidence.
Use related tables instead of one crowded row
Section titled “Use related tables instead of one crowded row”A practical workbook can use five sheets:
Offersstores one row for each accepted or analyzed offer version.Transactionsstores deposits, withdrawals, fees, adjustments, and promotional credits.Activitystores sportsbook wagers or summarized casino sessions.Balancesstores periodic account snapshots.TaxRecordsmaps records to a tax year and supporting documents.
Use stable identifiers such as OFF-2026-0042 and TXN-2026-0188. Do not use an operator name plus row number as the only key because rows can move. Dates should use a sortable, unambiguous form such as 2026-09-04 14:30 with a separate time-zone field where timing matters.
Do not place passwords, MFA codes, full payment numbers, Social Security numbers, or identity-document images in the workbook. The ledger can point to a protected record location without containing the sensitive record itself.
The Offers sheet
Section titled “The Offers sheet”Each offer row should preserve what the customer knew and modeled at the decision point:
OfferIDOperatorLegalNameBrandProductJurisdictionOfferNameOfferVersionOfferURLTermsCapturedAtOptInAtActivatedAtExpiresAtOfferStatusDepositRequiredBonusFaceValueWageringBaseWageringMultipleContributionRateMinimumOddsMaximumStakeCashOutCapModeledEVEVLowEVHighCompletionProbabilityPeakCashRequiredAssumptionSetIDTermsFileSupportCaseDecisionDecisionReasonOfferVersion can be the operator’s published revision date, a saved-file checksum, or an internal label such as captured-2026-09-04-1430. Do not invent an official version number. The purpose is to distinguish one accepted rule set from a later page.
The Federal Trade Commission’s report Bringing Dark Patterns to Light discusses interface designs that can obscure choices or impair consumer decision-making. It does not make a finding about a particular gambling platform. For ledger design, the practical point is to preserve the full path: banner, account message, opt-in state, complete terms, and confirmation. A headline screenshot alone may not show the controlling condition.
The Transactions sheet
Section titled “The Transactions sheet”Record each movement of cash or credit:
TransactionIDOfferIDOperatorLegalNameAccountAliasTransactionAtTransactionTypePaymentMethodAliasExternalAmountPlatformCashAmountRestrictedAmountCurrencyFeeTransactionReferenceStatusSettledAtSourceLinkEvidenceFileNotesUse a sign convention and document it. One portable choice treats money received by the customer as positive and money sent or lost as negative. A $300 deposit is ExternalAmount = -300 and PlatformCashAmount = 300. A $325 withdrawal is ExternalAmount = 325 and PlatformCashAmount = -325. Restricted credit is never placed in the external-cash column.
TransactionType can use a controlled list: Deposit, Withdrawal, DepositFee, WithdrawalFee, BonusCredit, BonusRemoval, ManualAdjustment, Refund, or Reversal. A short list prevents “withdrawal,” “cash out,” and “payout” from becoming three categories.
The Activity sheet
Section titled “The Activity sheet”Sportsbook rows usually map cleanly to individual tickets:
ActivityIDOfferIDPlacedAtSettledAtProductEventOrGameMarketSelectionCashStakeBonusStakeDecimalOddsContributionRateEligibleHandleReturnAmountFeeOrCommissionSettlementStatusActualNetTicketReferenceSourceLinkEvidenceFileCasino play may produce thousands of rounds. Preserve the operator’s detailed history, but summarize a controlled session in the working ledger:
ActivityIDOfferIDSessionStartSessionEndProductGameOpeningCashOpeningRestrictedTotalCashStakedTotalBonusStakedContributionRateEligibleHandleClosingCashClosingRestrictedActualNetHistoryFileA session summary does not replace source records. Store the exported history or account statement in a protected folder and record its file name. If only part of a session contributes, split it into separate rows or calculate contribution by game.
Portable spreadsheet formulas
Section titled “Portable spreadsheet formulas”Assume the Offers sheet uses these columns: deposit required in N, bonus face value in O, wagering base in P, wagering multiple in Q, contribution rate in R, modeled EV in V, and peak cash required in Z. These formulas use syntax supported by common spreadsheet programs.
Nominal wagering target:
=P2*Q2Gross play required when one contribution rate applies:
=IF(R2>0,(P2*Q2)/R2,"")Modeled ROI on peak cash:
=IF(Z2>0,V2/Z2,"")Days remaining, using the expiration date-time in L2:
=MAX(0,L2-NOW())If the Activity sheet stores OfferID in column B, cash stake in I, bonus stake in J, contribution rate in L, eligible handle in M, return in N, fees in O, status in P, and actual net in Q, calculate sportsbook eligible handle as:
=(I2+J2)*L2For a stake-not-returned bonus bet, where J2 is bonus face value and K2 is decimal odds, modeled winning cash is:
=J2*(K2-1)For a cash wager, actual net after settlement is:
=N2-I2-O2That formula assumes return includes the cash stake and no bonus stake has been assigned an acquisition cost on the activity row. Keep that convention explicit.
To sum settled eligible handle for the offer in Offers!A2:
=SUMIFS(Activity!M:M,Activity!B:B,A2,Activity!P:P,"Settled")If a NominalTarget column has been added at Offers!AF2, progress percentage is:
=MIN(1,SUMIFS(Activity!M:M,Activity!B:B,A2,Activity!P:P,"Settled")/AF2)Guard against a zero target:
=IF(AF2>0,MIN(1,SUMIFS(Activity!M:M,Activity!B:B,A2,Activity!P:P,"Settled")/AF2),"")Sum external cash flow for one offer:
=SUMIFS(Transactions!H:H,Transactions!B:B,A2,Transactions!N:N,"Settled")These column letters are a design example, not a required template. Named ranges or structured references can improve readability, but the underlying logic should remain visible. Avoid formulas that silently treat blank, pending, void, and zero as the same state.
Add validation before adding dashboards
Section titled “Add validation before adding dashboards”Data quality matters more than charts. Apply dropdown validation to product, status, transaction type, balance type, jurisdiction, and settlement state. Protect formula columns from accidental typing, but keep a documented method for correcting formulas. Freeze source rows after month-end reconciliation and record later corrections as dated adjustments rather than rewriting history.
Useful row-level checks include:
Missing offer key=IF(B2="","CHECK","")
Settled row without settlement date=IF(AND(P2="Settled",D2=""),"CHECK","")
Cash and bonus stake both blank=IF(AND(I2="",J2=""),"CHECK","")
Negative fee entered under a positive-fee convention=IF(O2<0,"CHECK","")Use checks as prompts, not automatic accusations. A zero return can be valid on a settled losing wager, and a negative adjustment can be valid when clearly documented.
A dashboard can then show operating cash, restricted value, open exposure, pending withdrawals, next expiry, progress, modeled EV, actual result, and unresolved differences. Never combine them into one “total value” tile. A $100 token, $100 pending withdrawal, and $100 available cash have different liquidity and risk.
Charts also need denominators. Actual result by operator can reflect different amounts wagered, dates active, and offer types. Compare a sportsbook conversion rate with other stake-not-returned credits, not with a casino’s gross return on thousands of spins. Display sample size and period beside averages.
Preserve calculator assumptions
Section titled “Preserve calculator assumptions”The bonus calculator helps compare scenarios, but the output is not reproducible without inputs. Create an Assumptions sheet with one row per AssumptionSetID:
AssumptionSetIDCreatedAtCalculatorVersionOrPageOfferIDStartingCashBonusFaceValueQualifyingStakeQualifyingOddsEstimatedProbabilityWageringTargetModeledHouseEdgeContributionRateCompletionProbabilityBreakageProbabilityCashOutCapFeesCommissionLowCaseChangeHighCaseChangeOutputEVOutputPeakCashAnalystNotesA screenshot of the final EV does not replace copied input values. Save the calculator page URL, calculation timestamp, and any visible version information. If no version is shown, say so. Record whether decimal odds include returned stake and whether a promotional stake is returned.
Never overwrite the assumption row after actual results arrive. Create a new assumption set for a changed model. Otherwise hindsight contaminates the decision record. The original may have been reasonable even when the wager lost, or weak even when it won.
Understanding expected value distinguishes an average from a prediction. The EVLow and EVHigh fields should change one uncertain input at a time where possible. A sensitivity table is more informative than an unexplained confidence label.
Hypothetical model-versus-result scenario: Ten offers each have recorded EV of $15, for total modeled EV of $150. Their actual settled results total -$80.
Total modeled EV = 10 x $15 = $150Total actual result = -$80Difference from modeled mean = -$230The difference does not prove a $230 bookkeeping error or invalidate the model. Outcomes vary. First reconcile every cash flow and test whether actual terms matched assumptions. Only after data quality is established should the analyst review probability, completion, fee, and breakage estimates. Ten observations may still be too few for a reliable performance conclusion.
Reconcile three balances
Section titled “Reconcile three balances”Reconciliation compares independent records rather than trusting one screen. Perform it after each deposit or withdrawal, after an offer closes, and at month-end.
First reconcile external cash:
Expected closing external cash= opening external cash+ settled external inflows- settled external outflowsCompare the result with the bank, card, wallet, or payment statement. A pending transfer remains pending in both views.
Second reconcile the platform:
Expected closing platform value= opening cash balance+ deposits+ settled returns+ cash promotional credits+ restricted promotional credits- cash stakes- restricted stakes- withdrawals- fees- expired or removed credit+ or - adjustmentsCash and restricted balances should have separate subtotals. A displayed total that combines them is not enough.
Third reconcile wagering progress:
Ledger progress = sum of eligible settled handleDifference = operator-displayed progress - ledger progressDo not force the difference to zero with an unlabeled adjustment. Check contribution rates, settlement state, excluded games, canceled wagers, pushes, bonus-funded activity, time zones, and rounding. If the rule or display remains unclear, stop new wagering and preserve the discrepancy for support.
Hypothetical reconciliation scenario: A casino offer requires $1,000 of eligible handle. The ledger contains $600 on 100% games and $500 on games with 50% contribution:
Eligible handle = ($600 x 100%) + ($500 x 50%)Eligible handle = $600 + $250 = $850Progress = $850 / $1,000 = 85%If the operator displays 80%, the five-point difference is not permission to assume the friendlier figure. Save both records and identify which rounds, games, or rules differ.
Separate four financial views
Section titled “Separate four financial views”Accounting profit for a defined period measures realized cash-related results under the ledger’s stated convention:
Accounting profit= settled wagering returns+ cash credits- cash stakes- feesDeposits and withdrawals move cash between locations and do not by themselves create profit. A deposit match recorded as restricted credit is also not accounting profit until the chosen accounting policy recognizes a realizable cash amount.
Promotional value is the incremental expected or realized benefit attributed to the offer. Modeled promotional value belongs in the decision record. Realized promotional value may require a counterfactual, such as comparing actual results with what the same chosen activity would have produced without the promotion. Do not call all winnings promotional value.
Cash flow records timing and direction. A $500 deposit creates a $500 cash outflow even though it is not a $500 expense. A later $480 withdrawal creates an inflow. Liquidity planning needs these flows even when accounting profit is only -$20.
Taxable records organize gross wins, losses or wagers, forms, withholding, dates, products, and jurisdiction according to applicable tax rules. They are not automatically equal to accounting profit. The IRS states that gambling winnings are taxable and discusses records and deductions in Topic 419. Tax and legal considerations addresses important limits and the need for qualified advice.
The TaxRecords sheet
Section titled “The TaxRecords sheet”Use fields that allow a preparer to reconstruct source evidence:
TaxRecordIDTaxYearTaxpayerOperatorLegalNameJurisdictionProductActivityDateSessionOrTicketIDGrossWinRecordWagerOrLossRecordNetCashRecordFederalWithholdingStateWithholdingFormTypeFormReceivedAtFormPayerIDLast4DigitalAssetIndicatorFairMarketValueRecordSourceDocumentNotesForAdviserDo not use the workbook to decide uncertain tax treatment. Use it to preserve facts. For digital assets, retain units, transaction identifiers, timestamps, fair market value evidence, fees, and wallet or exchange records. The IRS provides current filing information on its digital assets page. Its categories and questions can change, so record the transaction rather than relying on a remembered label.
Review without chasing noise
Section titled “Review without chasing noise”A weekly review should identify expired offers, open wagering, pending settlements, withdrawals, unresolved support cases, and reserve breaches. A monthly review can compare modeled EV with actual results, but a small sample does not validate the probability model. Sportsbook wins and casino returns can deviate sharply over short periods.
Useful controls include duplicate-ID checks, blank settlement dates on settled rows, withdrawals without matching receipts, negative restricted balances, and activity after expiry. Conditional formatting can mark errors, but it should not turn the sheet into a reward display.
Back up the ledger and source files using an access-controlled location appropriate for financial records. Test that a backup can be opened. Retention periods and evidence requirements depend on tax and legal circumstances, so obtain advice before deleting annual records. Export operator histories while they remain available, because the ledger cannot recreate a missing ticket or round history.
The formula sheet keeps definitions consistent, while the glossary helps maintain controlled labels. Recheck offer permission through the pre-deposit checklist. If tracking starts to justify more play, or gambling becomes hard to stop, close the workbook and use the responsible gambling page. Records should support control, not create pressure to improve a red number.
Sources
Section titled “Sources”- Federal Trade Commission, “Bringing Dark Patterns to Light”. Accessed September 4, 2026.
- Internal Revenue Service, “Topic No. 419, Gambling Income and Losses”. Accessed September 4, 2026.
- Internal Revenue Service, “Digital Assets”. Accessed September 4, 2026.