Skip to content

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.

Section titled “Use related tables instead of one crowded row”

A practical workbook can use five sheets:

  1. Offers stores one row for each accepted or analyzed offer version.
  2. Transactions stores deposits, withdrawals, fees, adjustments, and promotional credits.
  3. Activity stores sportsbook wagers or summarized casino sessions.
  4. Balances stores periodic account snapshots.
  5. TaxRecords maps 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.

Each offer row should preserve what the customer knew and modeled at the decision point:

OfferID
OperatorLegalName
Brand
Product
Jurisdiction
OfferName
OfferVersion
OfferURL
TermsCapturedAt
OptInAt
ActivatedAt
ExpiresAt
OfferStatus
DepositRequired
BonusFaceValue
WageringBase
WageringMultiple
ContributionRate
MinimumOdds
MaximumStake
CashOutCap
ModeledEV
EVLow
EVHigh
CompletionProbability
PeakCashRequired
AssumptionSetID
TermsFile
SupportCase
Decision
DecisionReason

OfferVersion 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.

Record each movement of cash or credit:

TransactionID
OfferID
OperatorLegalName
AccountAlias
TransactionAt
TransactionType
PaymentMethodAlias
ExternalAmount
PlatformCashAmount
RestrictedAmount
Currency
Fee
TransactionReference
Status
SettledAt
SourceLink
EvidenceFile
Notes

Use 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.

Sportsbook rows usually map cleanly to individual tickets:

ActivityID
OfferID
PlacedAt
SettledAt
Product
EventOrGame
Market
Selection
CashStake
BonusStake
DecimalOdds
ContributionRate
EligibleHandle
ReturnAmount
FeeOrCommission
SettlementStatus
ActualNet
TicketReference
SourceLink
EvidenceFile

Casino play may produce thousands of rounds. Preserve the operator’s detailed history, but summarize a controlled session in the working ledger:

ActivityID
OfferID
SessionStart
SessionEnd
Product
Game
OpeningCash
OpeningRestricted
TotalCashStaked
TotalBonusStaked
ContributionRate
EligibleHandle
ClosingCash
ClosingRestricted
ActualNet
HistoryFile

A 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.

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*Q2

Gross 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)*L2

For 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-O2

That 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.

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.

The bonus calculator helps compare scenarios, but the output is not reproducible without inputs. Create an Assumptions sheet with one row per AssumptionSetID:

AssumptionSetID
CreatedAt
CalculatorVersionOrPage
OfferID
StartingCash
BonusFaceValue
QualifyingStake
QualifyingOdds
EstimatedProbability
WageringTarget
ModeledHouseEdge
ContributionRate
CompletionProbability
BreakageProbability
CashOutCap
Fees
Commission
LowCaseChange
HighCaseChange
OutputEV
OutputPeakCash
AnalystNotes

A 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 = $150
Total actual result = -$80
Difference from modeled mean = -$230

The 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.

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 outflows

Compare 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 - adjustments

Cash 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 handle
Difference = operator-displayed progress - ledger progress

Do 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 = $850
Progress = $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.

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
- fees

Deposits 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.

Use fields that allow a preparer to reconstruct source evidence:

TaxRecordID
TaxYear
Taxpayer
OperatorLegalName
Jurisdiction
Product
ActivityDate
SessionOrTicketID
GrossWinRecord
WagerOrLossRecord
NetCashRecord
FederalWithholding
StateWithholding
FormType
FormReceivedAt
FormPayerIDLast4
DigitalAssetIndicator
FairMarketValueRecord
SourceDocument
NotesForAdviser

Do 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.

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.