Skip to content

Reconcile revenue from two payment providers without hiding the gap

Use a payment reconciliation worksheet to explain provider differences, refunds, reporting windows, currency exclusions and unattributed revenue.

GuideAnalytics

By

3 min read
Provider A and Provider B feed a review ledger that keeps payment IDs, refunds and currencies as separate rows, without showing invented transaction amounts.

When a SaaS accepts payments through two providers, a revenue difference is a queue of questions to resolve. It is not a reason to adjust an analytics number until it matches a bank payout.

Build a reconciliation worksheet that preserves the provider, payment identifier, currency, status and reporting window. Keep attribution as a separate question: a payment can be valid even when its acquisition source is unknown.

Choose one comparison before exporting

Write down exactly what you are comparing. For example: successful payments, less refunds recorded during the same UTC calendar week, in USD, excluding test transactions. This is an operational comparison definition, not an accounting policy.

Bank payouts are a different measure. Fees, settlement timing and other adjustments can separate a payout from the payment activity shown in analytics. Comparing those totals directly creates a gap that instrumentation cannot fix.

Also choose the date field. A payment created before midnight and confirmed after midnight can land in different reports if one system groups by creation and another by successful processing. Record the actual fields used rather than labeling both columns simply “date.”

Give every amount a source row

Consider this deliberately small, fictional example:

Source Successful USD payments USD refunds Comparable net amount
Provider A 240 30 210
Provider B 180 20 160
Combined 420 50 370

If analytics shows 350, the unexplained difference is 20 under this definition. Do not decide that Provider B's refund is responsible merely because it also equals 20. Match records by provider and stable payment identifier.

Maintain separate columns for the original payment, refund identifiers, payment currency, settlement currency when available, dashboard inclusion and a short explanation. One payment can have several partial refunds. A spreadsheet row that assumes exactly one refund per payment can hide the second adjustment.

Classify the difference before changing anything

Use a fixed set of investigation states:

  • Missing delivery: the relevant provider event has not reached the integration.
  • Rejected delivery: the endpoint received it but did not accept it.
  • Wrong scope: the payment belongs to a different website, product or environment.
  • Currency exclusion: the payment is retained but excluded from this aggregate.
  • Window mismatch: the reports use different timestamps or timezones.
  • Unattributed: the payment is present, but no visitor or source can be established.

Stripe documents payments and recurring charges as asynchronous webhook use cases in its webhook guide. Dodo's webhook documentation describes signature verification and retries. Use each provider's delivery history to investigate an event; do not manufacture a second payment to compensate for a delayed first one.

Keep currency and attribution visible

Revfaro's revenue attribution rules explain that foreign-currency payments can remain in payment history while being excluded from the site's revenue aggregate. Revfaro does not automatically apply exchange rates to every payment. Dodo settlement amounts are used when the settlement currency matches the site currency.

That makes a separate currency column essential. A dashboard total of USD 370 should not quietly absorb EUR 40, even if a spreadsheet happens to sum both cells.

Likewise, do not remove an unattributed payment to make a source breakdown look complete. Keep the revenue evidence and acquisition evidence separate. Investigate missing identity metadata without guessing the customer's marketing source.

Close the worksheet with a decision

For each unresolved row, assign an owner, next check and review date. Mark whether the result requires a configuration change, a documented reporting difference or no action. Preserve the original evidence when you correct the integration so the next reconciliation can explain what changed.

For comparisons across products, use the same discipline described in pricing currencies in SaaS comparisons. When the question moves from payment accuracy to marketing value, measuring directory submission ROI provides a separate framework for evaluating acquisition evidence.

More guide articles