Analytics
Closed-loop attribution: CRM revenue to ad spend
How to join ad spend and CRM pipeline in one place, then send the results back so the ad platforms bid for revenue.
Key takeaways
- Put spend where revenue lives, so cost per opportunity is one report.
- A clean campaign naming key is the join; without it nothing links.
- Send opportunity and won events back so platforms bid for pipeline.
- Start with one channel and one stage, then add the rest.
Closed-loop attribution joins two things that usually live apart: what each campaign cost, and what the CRM says happened to the leads it brought in. Spend is brought into the CRM next to pipeline, and opportunity and revenue events are sent back to Google, Meta and LinkedIn, so their bidding learns which clicks turn into deals.
What does closing the loop mean?
Closing the loop means every campaign’s cost and every lead’s outcome sit in the same system, and the outcome flows back to the ad platform. Spend comes into the CRM, where accounts and opportunities already live. Stage changes, such as a qualified opportunity or a won deal, go back to Google, Meta and LinkedIn.
Most B2B teams run the open version: cost per lead from each ad platform, exported to a spreadsheet and compared with CRM opportunities by hand once a month. That works until the questions get specific. Which campaign produced the opportunities that closed? What did each one cost? A closed loop answers both without a spreadsheet.
Definition
Closed-loop attribution connects marketing spend and touchpoints to sales outcomes recorded in the CRM, and feeds those outcomes back to the channels that produced them so their optimization targets revenue rather than form fills.
Why do open loops hurt B2B teams?
Open loops push budget decisions onto proxies. B2B buying cycles are long and involve several people, so the gap between a form fill and revenue is wide. Three problems follow:
-
Attribution turns into guesswork. A campaign can report plenty of leads while none become opportunities, and the ad platform has no way to know.
-
Teams optimize the wrong number. Platforms report cost per lead because that is what they see. With spend next to pipeline, the team can steer on cost per qualified opportunity instead.
-
Sales and marketing argue. Sales lives in the CRM. If marketing cannot show, inside the CRM, which campaigns produced which opportunities at what cost, the conversation stays subjective.
How does the data pipeline work?
The pipeline has five steps, and none of them needs a new marketing stack:
-
Collect spend in one place. Pull daily cost, impressions and clicks from each platform into a warehouse or a sync tool, along with any offline spend such as events.
-
Normalize the campaign key. Spend must carry the same identifier the CRM campaign uses, usually the UTM set or a campaign ID. This is the hardest step, and it is why a naming convention matters.
-
Load spend into the CRM by day. Store dated cost on the campaign or in a spend object, with the platform as a field.
-
Share cost across opportunities. Map spend to the leads, contacts and opportunities each campaign touched, with first touch, last touch or a multi-touch model.
-
Report in the CRM. Cost per opportunity, pipeline per unit of spend and payback by channel become CRM reports that sales and finance can open.
Not sure where your pipeline data breaks?
The free pipeline check asks six yes or no questions on tracking, landing pages and lead follow-up. Each No marks a likely leak, and your answers stay in your browser.
How do outcomes reach the platforms?
Each major platform accepts conversion events from your systems, not only from its browser tag:
-
Google Ads. Offline conversion import attaches a later conversion, such as a signed contract, to the original click through the Google Click ID stored with the lead.[1] Google now recommends enhanced conversions for leads, which matches hashed first-party data such as an email address captured on the form.[1][2]
-
Meta. The Conversions API accepts events from your server or CRM, including offline conversions.[3] Contact details such as email and phone must be hashed with SHA-256 before they are sent.[4]
-
LinkedIn. The Conversions API sends conversions from your server to LinkedIn, online or offline, and reports them in Campaign Manager at account, campaign and ad level.[5]
Send the stages that matter: a qualified opportunity mid-pipeline and a won deal at the end, with a value where you have one. The platform then learns which clicks lead to pipeline rather than which are cheapest.
Is the native integration enough?
Native connectors, such as a CRM’s link to Google Ads, close part of the loop. They are a good start. They tend to cover one channel each and send a subset of stages to the platform, while the spend side of the picture stays outside the CRM. If leadership wants one view of cost and pipeline across every channel, a channel-neutral spend layer in the CRM is still needed.
What derails a closed loop?
Three problems account for most broken setups:
-
Messy UTM values. “linkedin” on one campaign and “LinkedIn” on another breaks the join. A governed schema, enforced when campaigns are built, prevents it. Automated taxonomy mapping catches what slips through.
-
Double-counted spend. Importing a daily feed and a monthly total for the same campaign counts the same money twice. Keep one source per channel and day.
-
Time zones and currencies. Platforms report in the ad account’s time zone and currency. Convert to the CRM’s settings before loading, or month-end numbers drift.
Where should a B2B team start?
Start small and prove the join before automating everything:
-
Pick the channel with the most spend and confirm its campaign names match CRM campaigns.
-
Capture the click ID and work email on every form, and store both on the lead.
-
Send one stage back, the qualified opportunity, and check that the platform reports it.
-
Bring daily spend into the CRM and build one report: cost per qualified opportunity by campaign.
-
Add the next channel, then the won stage with deal value.
Our analytics and attribution service sets up this loop as part of wider B2B demand generation work. Once the reports exist, a unified dashboard can show the same numbers to everyone.
Sources
Written under our Editorial and AI Policy. Sources checked 19 Oct 2026. Reviewed by DGo Digital on 19 Oct 2026.
FAQ
Closed-loop questions
An ad platform reports the conversions it can see, usually form fills on your site. It cannot see what sales does next: qualification, pipeline and won revenue. Closed-loop attribution brings spend into the CRM next to those stages, so cost per opportunity and return on spend can be read in one place, and then sends the stage changes back to the platform.