Start by deciding what revenue means
A payment dashboard and a marketing dashboard can both be correct while showing different totals. The difference often begins with the question each is answering. Your payment processor may show cash collected across every billing path. Your analytics tool may show only payments it can connect to a visitor or campaign.
Before comparing totals, write down the definition. Is the number gross collected or net after refunds? Does it include tax? Does it count subscription renewals? Which currency and timezone are selected? A clean definition is more valuable than a polished chart.
Checkout is a payment boundary, not a full accounting ledger
VisitLift’s first release measures positive paid Stripe Checkout payments received after a connection is configured. That includes an initial paid subscription Checkout, but subsequent invoices, later-charging free trials, refunds, disputes, processing fees, and historical payments are outside that definition.
We call this Paid Checkout revenue. It is not MRR, profit, or lifetime value. If you need your accounting total, use your accounting system and payment processor. If you want to connect a campaign to a verified Checkout payment, compare the matching Checkout population.
Separate payment coverage from attribution coverage
First ask whether a payment was received and verified. Then ask whether it carries a valid attribution token. These are different checks. A payment may be real even when its source is unknown.
A visitor might deny persistent tracking, return on another device, block the tracker, or reach Checkout without the required metadata. Keep these payments visible as unattributed. Reclassifying them as Direct makes the chart look complete while hiding the actual uncertainty.
A useful coverage calculation is attributed payments divided by all payments included in the selected report and period. Watch the denominator as carefully as the percentage. A higher percentage with fewer received payments may indicate an integration problem.
Check timing before changing your marketing budget
An unpaid completed Checkout Session is not yet collected money. Asynchronous payment methods can succeed later. Webhooks can also be retried or arrive out of order. The collector must verify signatures and deduplicate payments rather than assume that each delivered message represents new revenue.
Compare the same date range, reporting timezone, currency, and payment definition. Give delayed payment methods time to complete. Run a controlled purchase with a known campaign link before concluding that the channel report is wrong.
Use attribution as a useful model
VisitLift uses a last non-direct touch model within 30 days when persistent attribution is enabled with the visitor’s consent. The attribution is frozen when the Checkout token is created. This is a consistent reporting rule, not proof that a channel caused the purchase.
For budget decisions, combine this evidence with customer conversations and controlled experiments. A channel that introduces customers may deserve investment even if another touch gets the final attribution. Start with the strongest signal, ask a better question, and test one change.
A five-minute reconciliation routine
Select one currency and a short period. List the paid Checkout Sessions in Stripe for that population. Compare the count and gross collected amount with VisitLift. Check test versus live mode, metadata, and webhook delivery failures for missing sessions. Then inspect unattributed and unassigned amounts separately.
Once the payment population reconciles, review source attribution. This order prevents an attribution gap from becoming an accounting argument and helps you fix the actual integration boundary.