brianwith.ai
← Learn

AI Workflows

How to Reconcile Platform-Reported Performance With Closed Revenue

A straightforward monthly workflow for comparing ad-platform results against CRM, Shopify, Stripe, or finance data so budget decisions are based on what actually closed.

10 min read·Last updated July 26, 2026ReconciliationAttributionPaid Acquisition

What this guide helps you do

Ad platforms are useful, but they do not close your books.

Meta, Google, TikTok, LinkedIn, your CRM, Shopify, Stripe, and finance can all report different answers to the same question: what did we acquire last month?

That does not automatically mean anyone is lying. Each system is counting from its own position. The problem starts when the business uses a platform number as if it were closed revenue.

This guide gives you a monthly reconciliation workflow. The goal is to compare what platforms reported against what the business actually closed, identify the gap, and decide what is safe to change.

Use it before budget increases, agency reviews, board updates, channel cuts, and AI-generated performance summaries.

Define the system of record first

Before pulling platform data, decide which system gets to answer the question “what closed?”

Examples:

Business typeLikely system of record
EcommerceShopify, WooCommerce, ERP, finance export
SaaSStripe, subscription system, CRM closed-won
Lead generationCRM closed-won, qualified opportunity, booked appointment plus close status
ServicesCRM closed-won, signed agreement, invoice, finance system
MarketplaceOrder database, payout system, finance ledger

Write that source at the top of the reconciliation file. If the team cannot agree on it, stop there. That is the first operating problem.

The monthly reconciliation table

Create one worksheet with these tabs:

  1. system_of_record
  2. platform_exports
  3. mapping_rules
  4. reconciliation
  5. decision_log

Keep it boring. A spreadsheet is fine. The point is repeatability, not software elegance.

Step 1: Pull closed revenue or closed customers

From the system of record, export the period you are reviewing.

Minimum fields:

FieldWhy it matters
customer, order, or deal IDPrevents duplicate counting
close/order dateAligns the time period
revenueShows the business result
margin if availablePrevents scaling unprofitable volume
refund/cancel statusKeeps bad revenue out of the win count
source/medium/campaign if availableHelps match back to marketing activity
first-touch or last-touch fields if availableUseful, but not always complete

Clean the export before comparing it. Remove test orders, duplicates, canceled deals, refunded orders if the decision depends on net revenue, and records outside the period.

Do not average your way through bad records. Flag them.

Step 2: Pull platform-reported performance

Export the same period from each platform.

Minimum fields:

FieldWhy it matters
platformSeparates source claims
campaignLets you inspect budget decisions
spendNeeded for CAC or ROAS
conversionsPlatform claim
conversion valuePlatform revenue claim
attribution setting/windowExplains part of the gap
conversion action namePrevents mixing leads, purchases, calls, and signups

Do not combine platforms yet. Keep each platform’s claim separate until the comparison is done.

Step 3: Normalize the definitions

Most reconciliation problems hide in definitions.

Before comparing totals, answer:

  • Is the platform counting leads, purchases, calls, form fills, trials, or qualified opportunities?
  • Is the business counting gross revenue, net revenue, booked revenue, collected cash, or margin?
  • Are returning customers included?
  • Are refunds or cancellations removed?
  • Are branded and nonbrand campaigns mixed together?
  • Is the platform using click-through, view-through, data-driven, or another attribution model?
  • Does the sale happen inside or outside the platform attribution window?

Create a mapping_rules tab like this:

Platform metricBusiness metric it maps toSafe for budget decisions?Notes
Meta Purchase valueGross ecommerce revenueMaybeNeeds refunds removed
Google Ads lead conversionForm submitNoNot all leads qualify
CRM closed-won revenueClosed revenueYesSource of truth

This table protects the team from pretending unlike numbers are the same.

Step 4: Compare totals and calculate the gap

Now build the reconciliation tab.

SourceReported customersReported revenueSpendCACROAS
System of record38$63,500
Meta24$41,200$18,000$7502.29
Google31$57,800$21,000$6772.75
Combined platform claims55$99,000$39,000$7092.54

Then add the gap:

ComparisonCustomer gapRevenue gapWhat it may mean
Platform claims vs system of record+17+$35,500Possible double counting, view-through inflation, duplicate conversion actions, or gross-vs-net mismatch

Sometimes platforms overcount. Sometimes they undercount. Both matter.

If the platform undercounts, the team may cut channels that are helping. If it overcounts, the team may scale campaigns that are not producing real business value.

Step 5: Match records where possible

If you have IDs, emails, GCLIDs, UTMs, order IDs, or CRM campaign fields, match records directly.

Use three buckets:

BucketMeaningAction
MatchedPlatform and system-of-record both see the conversionUsually safe to include
Platform-onlyPlatform reports it, system of record does not show a closed resultInspect duplicate, lead quality, attribution window, cancellation, or wrong conversion action
Business-onlyBusiness closed it, platform does not claim itInspect direct/organic return, long sales cycle, missing tracking, offline conversion upload, or assisted path

This is where the useful work happens. The operator is not looking for a perfect match rate. The operator is looking for a pattern that changes the decision.

Step 6: Classify the reconciliation gap

Use these classes:

Gap classDescriptionOwner
Counting gapDuplicate events, multiple conversion actions, gross vs net mismatchMarketing ops / analytics
Timing gapSale happens before or after the platform windowGrowth owner / analytics
Qualification gapPlatform counts a lead the business would not count as qualifiedSales / lifecycle
Revenue gapOrder value, refunds, discounts, or margin are treated differentlyFinance / ecommerce
Source gapUTM, campaign, or source field is missing or overwrittenMarketing ops / CRM owner
Assisted-path gapPlatform influenced demand but did not get direct creditGrowth owner

Assign one owner per class. A reconciliation gap without an owner becomes a recurring meeting topic instead of a fix.

Step 7: Decide what is safe to change

Use the decision log.

DecisionEvidenceSafe?OwnerFollow-up
Increase Meta retargeting budgetPlatform ROAS strong, but system record shows heavy returning-customer overlapNot yetGrowth ownerSplit new vs returning customers
Cut Google nonbrandPlatform underreports closed-won customers with long sales cycleNoSales opsUpload offline conversions / inspect assisted path
Reduce campaign with high lead volumeCRM shows poor qualification and low close rateYesPaid media leadLower bid or tighten targeting

This is the difference between reporting and operating. The table has to protect decisions that are not ready.

Step 8: Use AI to accelerate the review

AI can help once the tables exist.

Good prompts:

textReview this reconciliation worksheet. Classify each gap as counting, timing, qualification, revenue, source, or assisted-path. Return owner, likely cause, and the next question to ask.
textFind decisions in this budget review that are unsafe because platform-reported performance does not match closed revenue. Explain what evidence is missing.
textTurn this reconciliation table into a one-page operator summary: what changed, what is safe to decide, what needs owner review, and what should not move yet.

Do not paste sensitive customer data into an unapproved tool. Use row IDs, aggregated tables, or approved internal AI environments when the data is private.

The monthly operating rhythm

Run this once per month before budget review.

  1. Export system-of-record outcomes.
  2. Export platform claims for the same period.
  3. Normalize definitions.
  4. Compare totals.
  5. Match records where possible.
  6. Classify the gap.
  7. Assign owners.
  8. Write the decision log.
  9. Decide only what the evidence supports.

The first run may be messy. That is expected. Mess is the signal. The second run should be cleaner because the team knows which fields, conversion actions, and owner rules need repair.

What good looks like

A good reconciliation review ends with plain-language decisions:

  • We can increase this campaign because closed revenue supports the platform trend.
  • We cannot cut this channel yet because the sales cycle falls outside the platform window.
  • We need to repair offline conversion uploads before judging nonbrand search.
  • We need to split new and returning customers before trusting ROAS.
  • We need finance to define whether this review uses gross revenue, net revenue, or margin.

That is the point. The business stops arguing about which dashboard is right and starts deciding what can safely change.

Frequently asked questions

How often should this reconciliation happen?

Monthly is enough for most teams. Run it before budget review, not after the team has already decided what to cut or scale.

What if the platform and CRM never match perfectly?

They do not need to match perfectly. The question is whether the gap is understood, stable, and safe for the decision being made. Large or changing gaps need owner review.

Should AI do the reconciliation?

AI can help classify gaps and summarize the worksheet, but the source-of-truth decision and final budget action should stay with a human operator.

What is the fastest first version?

Compare one month of platform conversions and spend against one month of closed revenue from the system of record. Classify the biggest gap and assign one owner.

What is the most dangerous mistake?

Scaling spend because platform ROAS looks good while closed revenue, refunds, margin, or lead quality tells a different story.

Start with the constraint. Then pick the right path.

Tell Brian where the business is stuck. He will point you to community, coaching, AI Marketer — or tell you it is not the right fit yet.

Ask Brian where to start

Prefer LinkedIn? Connect with Brian →