LLoomstratAnalytics
← Back to blog
Attribution

What Is Closed-Loop ROAS? (And Why Platform-Reported ROAS Lies to You)

LBy Loomstrat Team · January 14, 2026 · 11 min read

Closed-loop ROAS measures return on ad spend using actual closed revenue from your CRM — not the value a platform assigns to a lead the moment it converts. Platform-reported ROAS treats every lead, click, or purchase event as equally valuable; closed-loop ROAS traces each dollar of ad spend to the deal it eventually produced, whether that deal closed for $200 or $20,000, or never closed at all.

What platform-reported ROAS actually measures

When Meta Ads Manager or Google Ads shows you a ROAS number, it is doing simple division: revenue events divided by spend, where “revenue” usually comes from a pixel or conversion API event fired at the moment of form-fill, checkout, or call. For ecommerce with a single-SKU cart, that’s a reasonable proxy — the transaction value is the transaction value. For agencies running lead generation, the picture breaks down immediately, because a “conversion” is a lead, and a lead is not revenue.

Platforms have no visibility into what happens after the form submits. They don’t know if a sales rep called the lead back in five minutes or five days. They don’t know if the lead was a real buyer or a competitor filling out a form for research. They don’t know if the deal closed for the average contract value or three times that. Every lead gets counted as a fixed, assumed value — often the average order value you configured once in a pixel setting and never revisited.

How closed-loop ROAS differs from platform ROAS

Closed-loop ROAS starts from the same ad spend number but replaces the platform’s assumed revenue with actual revenue pulled from your CRM at the deal level. The “loop” is the connection between an ad click or impression, the lead it generated, and the deal stage that lead eventually reached — closed-won, closed-lost, or still in pipeline.

Platform-reported ROASClosed-loop ROAS
Revenue sourcePixel/CAPI event, fixed or assumed valueActual closed-won amount in the CRM
Counts a lead asA conversion worth a flat estimated valueAn open opportunity worth $0 until it closes
Visibility into sales outcomeNone — attribution ends at form submitFull — tracks deal through won/lost
Bad leads (spam, unqualified)Counted as full-value conversionsCorrectly counted as $0 revenue
Setup effortPixel install, largely automaticCRM integration + deal-to-campaign linking

A worked example (illustrative numbers)

Say an agency runs a $10,000/month Meta campaign for a home services client and generates 40 leads at a $250 cost per lead. The pixel is configured with an assumed value of $400 per lead — a number set during onboarding and never updated. Platform-reported ROAS looks like this:

Platform math
40 leads × $400 assumed value = $16,000 reported revenue
$16,000 ÷ $10,000 spend = 1.6x platform-reported ROAS

Now trace those same 40 leads through the CRM three months later. Twelve never answered the phone. Nine were unqualified — wrong service area, tire-kickers, or duplicate submissions. Fourteen entered a sales process but didn’t close in the window. Five closed, but at wildly different values: two small jobs at $600, two mid-size jobs at $2,400, and one large contract at $9,000.

Closed-loop math
Closed revenue: (2 × $600) + (2 × $2,400) + $9,000 = $14,400
$14,400 ÷ $10,000 spend = 1.44x closed-loop ROAS

In this illustrative case the two numbers land close together, but that’s coincidence, not the norm — swap the mix slightly (say, the $9,000 contract falls through, or three more leads convert next quarter) and the two figures diverge sharply. The real value of closed-loop reporting isn’t that it always produces a lower number; it’s that it produces the right number, tied to money that actually landed in the client’s bank account, campaign by campaign and creative by creative.

Why last-click platform attribution over- or under-credits channels

Most ad platforms default to some form of last-click or last-touch attribution within their own walled garden — Meta credits Meta, Google credits Google, and neither sees what the other did. This creates two consistent distortions agencies run into:

  • Upper-funnel channels get under-credited. A prospect sees a Meta retargeting ad, ignores it, later searches the brand name on Google, and converts through a Google Ads click. Google claims the full conversion. Meta’s earlier touch — which may have been what created the intent — gets nothing.
  • Bottom-funnel and branded search get over-credited. Branded search campaigns intercept demand that was already created by other spend, then take full attribution credit for a conversion that would likely have happened anyway.
  • Cross-device and offline paths vanish entirely. A lead who saw an ad on their phone, called the business from a desktop the next day, and closed over email leaves no clickstream any platform pixel can reconstruct.

Closed-loop attribution doesn’t solve every one of these problems on its own — true multi-touch modeling is a separate discipline — but it fixes the most damaging one for agencies: it stops assuming every lead is worth the same amount, which is usually a bigger source of ROAS distortion than attribution-path disputes between platforms.

How agencies operationalize closed-loop ROAS

Getting from “we should measure closed-loop ROAS” to actually reporting it requires three pieces of infrastructure working together:

  1. 1CRM integration. Connect the ad platforms to the CRM (HubSpot, Salesforce, Pipedrive, or a custom system) so lead records carry the UTM parameters, click IDs, or campaign identifiers that were present at the moment of conversion.
  2. 2Deal-to-campaign linking. Every deal record needs a reliable link back to the specific campaign, ad set, and creative that sourced it — not just “Facebook” as a source, but the individual ad. This is usually the hardest part technically, since it requires consistent UTM discipline and a system that persists that data through the entire sales pipeline instead of losing it at form submission.
  3. 3A dashboard that shows both numbers side by side. The goal isn’t to hide platform ROAS — it’s to put true ROAS next to it so account managers and clients can see where the two diverge and why. A campaign with strong platform-reported ROAS but weak closed-loop ROAS is a signal worth investigating before scaling spend into it.

This is the specific gap a platform like Loomstrat is built to close: leads flow in from ad platforms, get tracked through a built-in CRM to closed-won or closed-lost, and every campaign report shows true ROAS next to platform-reported ROAS automatically — without an agency having to stitch together spreadsheets and manual CRM exports every reporting cycle.

Frequently asked questions

See the FAQ section below for quick answers on setup effort, data requirements, and how closed-loop ROAS interacts with multi-touch attribution.

FAQ

Closed-loop ROAS is return on ad spend calculated from actual closed CRM revenue instead of platform-assumed lead values — it ties each dollar spent to what a lead was really worth once sales finished working it, whether that's $0 for an unqualified lead or the full contract value for a closed deal.

See your ad performance data the way it should look.

Book a walkthrough with the Loomstrat team and see your accounts inside the platform.