Cookie preferences

Choose what we may use. Strictly necessary cookies keep you signed in and can't be turned off; everything else is your call and changes nothing about how the site works. You can change your mind any time from the footer.

Marketing attribution for B2B SaaS companies

Which channels produced closed-won, not MQLs?

Match closed-won opportunities in your CRM to the campaigns that produced the original inquiry — across a cycle measured in quarters, not sessions.

  • No card required
  • Nothing to install
  • Cancel anytime
B2B SaaS workspace FY2026 Sample data
Revenue traced to a channel

$2,070,000 69% of $3,000,000 paid

  • Google Ads $720,000 · 24%
  • LinkedIn Ads $930,000 · 31%
  • Email marketing $420,000 · 14%
  • Direct / Unknown $930,000 · 31%
Direct / Unknown is shown, never shared out across the channels above.
Google Ads · LeadFY2026 14 · (•••) •••-0134
Closed sale · FY2026 27$40,000
Matched · high confidence

The blind spot

What's actually happening

Marketing reports MQLs, sales reports pipeline, finance reports revenue, and none of the three reconcile. The board asks what the demand-gen budget produced in ARR and the honest answer is that nobody can join the systems that would tell them.

What you get

Built for B2B SaaS companies.

Closed-won, not pipeline

Rank channels by revenue that actually closed, so pipeline inflation stops setting the budget.

Cycles measured in quarters

A deal sourced in Q1 and closed in Q4 still traces to the campaign that produced it.

Seats for the whole team

Demand gen, RevOps and finance read the same report instead of three reconciliations.

A worked example

The number you can take into a budget meeting.

Not impressions, not leads, not cost per click. Closed revenue, by the channel that produced it, for a period you choose — with the portion we could not trace shown rather than quietly shared out across your paid channels.

Total revenue$3,000,000paid revenue
Attributed to a channel$2,070,00069% of revenue
Average deal$40,000per paid sale
Match rate68%of sales matched
ChannelSalesRevenueShare%
Google Ads18$720,00024%
LinkedIn Ads21$930,00031%
Email marketing12$420,00014%
Direct / Unknown24$930,00031%
01

MQLs are a proxy that stopped predicting anything

The MQL was invented to give marketing a number it could move before revenue arrived. In a market where cycles run two to four quarters, it has become the number teams optimize instead of revenue — and the two have drifted far enough apart that a record MQL quarter can precede a flat bookings year.

The join that would settle it is not complicated: the CRM knows which opportunities closed and for how much, and the ad platforms know which campaign produced the original inquiry. What is missing is anything that reconciles them on the person rather than on a session, which is why the answer usually lives in a quarterly spreadsheet nobody trusts.

CloseRev does that join from two exports. It is not an attribution platform to implement, and there is no tag to deploy on a product surface where security review takes a quarter of its own.

02

Why last-touch and first-touch both mislead here

Enterprise buying committees have five to ten people and a dozen touches. Assigning the whole deal to the first or last of them produces a number that is precise and wrong, which is worse than an approximate one that is honest.

CloseRev deliberately does not model multi-touch weightings. It reports the channel that produced the contact who became the deal, and puts everything it cannot trace in Direct / Unknown rather than distributing it by a rule nobody can defend. That is a smaller claim than most attribution vendors make, and it is a claim that survives a CFO asking how the number was produced.

03

Expansion revenue belongs to the channel that won the logo

Net revenue retention is the figure a software board studies hardest, and almost all of it comes from accounts somebody acquired one, two or three years earlier. A seat expansion booked this quarter exists because a campaign two years ago put the right company in front of the right rep. The account executive who worked the upsell is credited for it, correctly. The channel that produced the original contact was credited with a first-year figure and then forgotten, which is how demand generation ends up arguing for its budget using the smallest number available to it.

Because the match is held on the contact rather than on a session, running the report across three or four fiscal years attaches every later booking to the channel that produced the first conversation. A source that looked marginal on new-logo bookings alone can turn out to sit underneath a third of the book. It is a different ranking, and it is the one that answers the question a chief financial officer actually asked, which was what the money spent in a past year has earned since it was spent.

The condition is that your export carries the same contact across those bookings, and most systems do, because renewals and upsells are recorded against the account rather than typed in fresh. Export every closed-won line with a contact detail, the booked amount and the close date, and let the report do the joining. Where an expansion was signed by somebody who appears in no lead file, it lands in Direct / Unknown rather than being handed to the acquiring channel on an assumption that nobody could check afterwards.

04

The self-reported source field is data, not an argument

Nearly every software company has a "how did you hear about us" field on its demo or signup form, and nearly every one of them argues about whether to believe it. Buyers answer loosely: they name the podcast rather than the search that followed it, or they type a colleague's name. Treated as a single source of truth it is unreliable. Treated as one more file to reconcile against closed-won revenue it becomes genuinely useful, because you can see which of those answers precede money and which precede nothing at all.

Add it to the lead file, each row tagged with the answer as its source. Every row is a person with contact details and a label, which is exactly what any other lead export is, so it ranks on closed-won revenue next to paid search and paid social. What may emerge is that two or three of the free-text answers account for most of the value while the rest are noise, and that a channel your ad platform reports as expensive looks rather different once the deals whose buyers named it are counted against it as well.

This also gives you something to do with the answers that are not channels at all. A buyer who writes the name of a community, a newsletter or a peer group is describing demand you did not buy and cannot bid on. Ranked on revenue it either justifies a sponsorship or it does not, and either finding is worth more than the recurring argument about whether the field should exist. Nothing is inferred from a blank answer; a blank stays unmatched and the revenue behind it stays in the unattributed bucket.

05

What a first year of closed-won usually shows a demand-gen team

Three findings recur. The first is that lead volume and revenue rank the channels differently, often severely: a source producing a tenth of the inquiries carries a quarter of the bookings because it reaches companies with budget rather than companies with curiosity. The second is that the unattributed share is larger than anyone expected, commonly a third, because outbound sequences, community, conversations between operators and inbound from a founder's network are all genuine demand that no advertising account will ever claim credit for.

The third is narrower and more uncomfortable. Campaigns tuned on cost per qualified lead tend to have optimized toward the inquiries easiest to produce, which in software means students, consultants, competitors and people at companies far below the size the product is priced for. Those never appear in a closed-won file at all, so they simply do not rank. Seeing a quarter of a budget sitting against a row that produced no bookings whatsoever is the most common reason a media plan gets rewritten after a first report.

None of that requires a change to how the business operates. Two exports produce the whole thing: closed-won opportunities from the CRM, and whatever lead and campaign files already exist. Because the revenue records were kept for recognition rather than for tracking, a completed fiscal year can be analyzed on the afternoon you sign up. Most teams start exactly there, since a finished year is the cheapest available test of whether this tells them anything they did not already believe about their own spending.

Why it matters

What changes when you can prove it.

You stop defending the budget and start growing it

"We generated 400 leads" invites an argument. "This channel closed $186,400 last quarter, here is the reconciliation" ends one. The teams that can show closed revenue by channel are the teams that get the next increase approved, because they are asking with evidence rather than with conviction.

You can cut the wrong channel without a fight

Killing spend is politically harder than adding it, because someone always owns the channel being cut. A number that reconciles to the sales export takes the argument out of the room — you are not overruling a colleague's judgment, you are reading the same ledger they are.

Your reporting survives the finance review

Platform-reported conversions do not reconcile to revenue, and eventually someone in finance notices. Reporting built from your own closed-sales export starts from the number finance already trusts, which is why it holds up when it is checked.

You answer in an afternoon, not a quarter

Because this reconciles exports rather than tracking visitors, it works on months that have already closed. You are not instrumenting now to learn something in ninety days — you can answer for last quarter today, which is usually when the question is being asked.

Honest answers

The pushback we hear from B2B SaaS.

They say

We already have an attribution platform.

We say

Then you probably already know its weakest point: it tracks sessions, so it loses deals whose cycle outlives the cookie and it cannot see the meeting booked from a conference badge scan. This works from CRM exports, so cycle length is irrelevant and offline sources are included rather than dropped.

They say

Our data lives in Salesforce and we cannot open it up.

We say

Nothing connects to Salesforce. You export closed-won opportunities — a contact email, the amount, the close date — and that file is what gets analyzed. No integration, no OAuth scope, no security review of a live connection.

They say

Attribution is a modeling problem, not a matching problem.

We say

For multi-touch weighting, yes — and we do not pretend to solve that. What we solve is that most teams cannot even produce the deterministic join, so the modeling sits on top of numbers nobody has reconciled. Start with what closed and where the contact came from.

Pricing

Flat monthly pricing. No per-call fees.

The price here is the price on the invoice, plus any sales tax that applies — no per-call, per-minute or per-form fees. Enterprise usually fits sales-led software companies with enterprise deal cycles — ten seats for the team and the highest monthly record allowance, since a year of closed deals is a lot of rows.

Enterprise

One business closing at volume

$499/mo

billed monthly

  • 1 workspace · 10 seats
  • 25,000 sales records / month
  • 24-month history
  • Campaign drill-down and period comparison
  • Single sign-on through your identity provider
  • Your logo on every report
  • Roles, permissions and guided onboarding
  • Priority support

Questions

Questions we get about B2B SaaS.

Anything else? Talk to us — a person answers, usually the same day.

Closed-won opportunities: a primary contact email or phone, the booked amount, and the close date. Salesforce, HubSpot and Dynamics all produce this as a standard report.

Where your sales already are

What to export, by system.

All systems

HubSpot

Export closed-won deals and reconcile them against your ad and call exports, including the offline sources HubSpot never receives.

What to export

Salesforce

Export closed-won opportunities and reconcile them against your ad, call and partner exports — no campaign influence model required.

What to export

Pipedrive

Export won deals and match them to the ads, calls and referrals behind them — including the sources Pipedrive only records as a text field.

What to export

Close

Export won opportunities, upload the sources that produced the leads, and rank channels on closed value rather than on lead volume.

What to export

Calendly

Export your Calendly invitees, upload your closed sales beside them, and find out which bookings turned into money.

What to export

Microsoft Ads

Export your Microsoft Ads leads, match them against closed sales, and compare the channel on revenue per lead instead of on impressions.

What to export

Reddit Ads

Export your Reddit leads, match them against closed sales over a period that fits the decision, and see the channel where its effect actually lands.

What to export

X Ads

Where your campaigns produce contact details, match them against closed sales. Where they do not, this page tells you plainly that they cannot be measured this way.

What to export

Zoho CRM

Export won deals and leads from Zoho CRM, join them on the contact detail, and see what the source field has actually been recording.

What to export

monday CRM

Export deals and leads from your boards, reconcile them once in the file, and get a single revenue-by-source answer.

What to export

Jotform

Export your submissions, match them against closed sales, and find out which forms and which sources produced revenue.

What to export

NetSuite

Export invoices from NetSuite, upload the leads behind them, and rank marketing on invoiced revenue.

What to export

ActiveCampaign

Export contacts with their original source and deals with their value, and rank on what each channel actually produced.

What to export

Odoo

Export leads and invoices from Odoo, join them on the customer, and rank sources on invoiced revenue.

What to export

Start today

Stop guessing which ads pay off.

Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.