B2B metrics are the numbers that tell a business-to-business company whether its funnel works: how much it costs to win a customer, how many prospects turn into revenue, and how long that revenue stays. B2B funnels are longer and smaller than B2C funnels. A company might win 24 customers in a quarter, not 24,000, so each stage carries a lot of weight and a bad definition at one stage distorts every number after it.
Most lists of B2B metrics give you 15 unrelated numbers. This guide does it the other way round: 12 metrics, grouped by funnel stage, where each one feeds the next. Every metric has a formula, the reason it matters, and the system its data comes from. Then one fictional B2B SaaS company runs through a full quarter so you can see the numbers chain together, from $60,000 of ad spend to an LTV to CAC ratio of 4 to 1.
| Stage | Metric | Formula | Data comes from |
|---|---|---|---|
| Marketing | 1. Visit-to-lead rate | Leads ÷ website visits | Web analytics, CRM |
| Marketing | 2. Cost per lead (CPL) | Ad spend ÷ leads from paid channels | Ads platforms, CRM |
| Marketing | 3. Lead-to-MQL rate | MQLs ÷ leads | CRM |
| Sales | 4. MQL-to-SQL rate | SQLs ÷ MQLs | CRM |
| Sales | 5. Win rate | Won deals ÷ SQLs (or opportunities) | CRM |
| Sales | 6. Sales velocity | Opportunities × win rate × ACV ÷ sales cycle in days | CRM |
| Revenue | 7. New ARR and MRR | Won deals × ACV; MRR = ARR ÷ 12 | CRM, billing |
| Revenue | 8. CAC | Sales and marketing cost ÷ new customers | Ads platforms, finance, CRM |
| Revenue | 9. CAC payback | CAC ÷ (monthly revenue per customer × gross margin) | Finance, billing |
| Retention | 10. Logo churn rate | Customers lost ÷ customers at start of period | Billing |
| Retention | 11. Net revenue retention | (Start ARR + expansion − contraction − churn) ÷ start ARR | Billing |
| Retention | 12. LTV to CAC | (Monthly revenue × gross margin ÷ monthly churn) ÷ CAC | Billing, finance |
The worked example: one quarter at a B2B SaaS company
Every metric below is computed from the same quarter, Q3 (July to September), of a fictional company that sells a B2B software subscription. These are the raw inputs. Everything else in this post is derived from them.
| Input | Q3 value | Where it lives |
|---|---|---|
| Ad spend (Google Ads, LinkedIn Ads, Meta) | $60,000 | Ads platforms |
| Other marketing programs (content, events, tools) | $20,000 | Finance |
| Marketing team cost | $70,000 | Finance (payroll) |
| Sales team cost, including commission | $150,000 | Finance (payroll) |
| Website visits (sessions) | 50,000 | Web analytics |
| Leads (form fills, demo requests, sign-ups) | 1,000 | CRM |
| Leads from paid channels | 600 | CRM (UTM source) |
| Marketing qualified leads (MQLs) | 400 | CRM |
| Sales qualified leads (SQLs) | 120 | CRM |
| Won deals | 24 | CRM |
| Average contract value (ACV) of new deals | $15,000 | CRM, billing |
| Average sales cycle | 60 days | CRM |
| Gross margin | 80% | Finance |
| Customers at start of quarter | 400 | Billing |
| Customers lost in the quarter | 24 | Billing |
| ARR at start of quarter | $4,800,000 | Billing |
| Expansion ARR (upgrades, extra seats) | $180,000 | Billing |
| Contraction ARR (downgrades) | $36,000 | Billing |
| Churned ARR | $216,000 | Billing |
To keep the arithmetic readable, the example assumes a steady state: the deals won this quarter came from SQLs created this quarter. In a real funnel with a 60-day cycle, some of Q3's wins started as Q2 SQLs. The section on period and cohort views below shows how to handle that.
B2B marketing metrics
Marketing metrics answer one question: is the money and effort going in producing qualified demand? The ones that matter are those that connect to pipeline. Impressions, followers and open rates can help you tune a channel, but they don't belong on the company dashboard.
1. Visit-to-lead rate
Formula: leads ÷ website visits
Example: 1,000 ÷ 50,000 = 2.0%
This is the core B2B website metric. Traffic on its own says little: 50,000 visits that produce 1,000 leads is a better quarter than 80,000 visits that produce 900. Break it down by channel (organic search, paid, referral, direct) and by landing page to see where the leads come from.
Data: visits come from web analytics such as Google Analytics 4. Leads come from the CRM or marketing automation tool. The two count different things (sessions versus people), so the rate is a ratio of two systems, and it only works if both use the same date range and time zone.
2. Cost per lead (CPL)
Formula: ad spend ÷ leads from paid channels
Example: $60,000 ÷ 600 paid leads = $100
CPL tells you what a lead costs on each channel, so you can move budget to the channels that produce leads cheapest. Divide spend by paid leads only. If you divide by all 1,000 leads you get $60, which credits ads for organic leads they did not produce. A blended version that includes all marketing programs is also useful: ($60,000 + $20,000) ÷ 1,000 = $80 per lead.
Data: spend is in each ads platform (Google Ads, LinkedIn Ads, Meta Ads), usually reported in the ad account's currency and time zone. The lead count is in the CRM, tagged with the UTM source and campaign captured on the form. CPL is the first metric that needs a join across systems.
3. Lead-to-MQL rate
Formula: MQLs ÷ leads
Example: 400 ÷ 1,000 = 40%
A marketing qualified lead is a lead that fits your ideal customer profile closely enough for sales to spend time on it: right company size, right role, enough engagement. The rate shows how much of the demand marketing creates is the kind sales wants. A falling rate with rising lead volume usually means a channel is bringing in the wrong audience.
Data: the CRM, from the date each contact's lifecycle stage changed to MQL. Use the date of the change, not the current stage, or contacts that later became customers drop out of the MQL count.
B2B sales metrics and KPIs
Sales metrics show how efficiently the pipeline turns into revenue. In B2B the useful ones are conversion rates and speed, not activity counts like calls or emails sent.
4. MQL-to-SQL rate
Formula: SQLs ÷ MQLs
Example: 120 ÷ 400 = 30%
A sales qualified lead is one a salesperson has spoken to and accepted as a real opportunity. This rate is where marketing and sales disagree most, because it measures both: marketing's targeting and sales' follow-up. Track it next to speed to first contact; leads that wait days for a reply convert worse.
Data: the CRM, from the lifecycle stage or opportunity creation date.
5. Win rate
Formula: won deals ÷ SQLs (or ÷ opportunities, if you create opportunities at the SQL stage)
Example: 24 ÷ 120 = 20%
Win rate tells you how good the team is at closing qualified pipeline, and how much pipeline you need for a target. At 20%, every $1 of new ARR needs $5 of qualified pipeline. Decide whether deals lost to "no decision" count as losses (they should) and whether deals still open at the end of the period are excluded (they should be).
Data: the CRM: deal stage, close date and outcome.
6. Sales velocity
Formula: opportunities × win rate × ACV ÷ average sales cycle in days
Example: 120 × 20% × $15,000 ÷ 60 days = $360,000 ÷ 60 = $6,000 of new ARR per day
Sales velocity combines the four levers of a sales team in one number: more opportunities, a higher win rate, bigger deals or a shorter cycle. It is most useful as a trend and for comparing segments. If enterprise deals have twice the ACV but three times the cycle, velocity shows that the mid-market motion generates revenue faster.
Data: all four inputs come from the CRM, which makes this the easiest compound metric to build.
B2B revenue metrics
Revenue metrics are where marketing and sales numbers meet finance and billing data. They are also where most companies first find out their systems disagree: the CRM says a deal closed on 29 September, billing says the first invoice was paid on 14 October.
7. New ARR and MRR
Formula: new ARR = won deals × ACV; MRR = ARR ÷ 12
Example: 24 × $15,000 = $360,000 new ARR, or $30,000 new MRR
Annual recurring revenue is the yearly value of all active subscriptions. ACV, the average contract value, is the annual value of a typical new contract. For the whole company the quarter looks like this:
| ARR movement | Q3 |
|---|---|
| Start of quarter | $4,800,000 |
| + New | $360,000 |
| + Expansion | $180,000 |
| − Contraction | $36,000 |
| − Churned | $216,000 |
| End of quarter | $5,088,000 |
That is $288,000 of net new ARR, 6.0% growth in the quarter, and MRR going from $400,000 to $424,000. Our guide on how to calculate MRR covers the edge cases (annual plans, discounts, paused subscriptions), and MRR with Stripe in SQL shows the query.
Data: the CRM has the contract value when the deal closes; billing (Stripe, Chargebee or your invoicing system) has what customers actually pay. Report ARR from billing and use the CRM for forecasting.
8. Customer acquisition cost (CAC)
Formula: total sales and marketing cost ÷ new customers
Example: ($60,000 + $20,000 + $70,000 + $150,000) ÷ 24 = $300,000 ÷ 24 = $12,500
CAC is what it costs to win one customer, all in. The fully loaded version includes salaries, commission, tools and agencies, not just ad spend. A "paid CAC" built from ad spend alone ($60,000 ÷ 24 = $2,500) looks five times better and tells you very little about whether the business model works. We cover the variants in more depth in how to calculate and improve CAC.
Data: ad spend from the ads platforms, people and program costs from finance (often a spreadsheet or the accounting system), and new customers from the CRM or billing. Three systems, one number.
9. CAC payback period
Formula: CAC ÷ (monthly revenue per new customer × gross margin)
Example: $15,000 ÷ 12 = $1,250 MRR per customer; × 80% = $1,000 of monthly gross margin; $12,500 ÷ $1,000 = 12.5 months
Payback tells you how long you wait to earn back what you spent on a customer. It matters more than CAC alone because it ties cost to revenue and cash. Use gross margin, not revenue: hosting, support and payment fees are paid out of every invoice before it can repay acquisition cost.
Data: CAC from the previous metric, MRR from billing, gross margin from finance.
B2B retention metrics
In a subscription business most of the lifetime value of a customer arrives after the first year, so retention decides whether the acquisition numbers above are good or bad. This is also where B2B product metrics belong: product usage, such as the share of seats active each week or whether a new account reached its first meaningful outcome, is the earliest signal of churn and expansion.
10. Logo churn rate
Formula: customers lost in the period ÷ customers at the start of the period
Example: 24 ÷ 400 = 6.0% in the quarter, about 2.0% a month (8 customers lost a month against a base of about 400)
Note what happened: the company won 24 customers and lost 24. The customer count did not grow at all in Q3. Revenue grew only because new customers sign bigger contracts ($15,000) than the ones leaving ($216,000 ÷ 24 = $9,000) and because existing customers expanded. That is invisible if you only track new business.
Data: billing, from subscription cancellation or end dates. Count a customer as churned when the last paid subscription ends, not when they click cancel.
11. Net revenue retention (NRR)
Formula: (start ARR + expansion − contraction − churned ARR) ÷ start ARR
Example: ($4,800,000 + $180,000 − $36,000 − $216,000) ÷ $4,800,000 = $4,728,000 ÷ $4,800,000 = 98.5%
NRR shows what the existing customer base is worth a period later, ignoring new sales. Above 100% the base grows on its own. Gross revenue retention (GRR) leaves out expansion: ($4,800,000 − $36,000 − $216,000) ÷ $4,800,000 = 94.75%. GRR can never exceed 100%, so it shows the leak without upsell hiding it. For a refresher on the difference between the two, see how to calculate NRR.
Data: billing, comparing each customer's ARR at the start and end of the period.
12. LTV and the LTV to CAC ratio
Formula: LTV = monthly revenue per customer × gross margin ÷ monthly churn rate; then LTV ÷ CAC
Example: $1,250 × 80% ÷ 2.0% = $1,000 ÷ 0.02 = $50,000 LTV; $50,000 ÷ $12,500 = 4 to 1
Lifetime value estimates the gross margin a new customer produces before they leave. Divided by CAC, it says whether acquisition creates value: 4 to 1 means every $1 spent winning a customer returns $4 of margin over the customer's life. A common rule of thumb for B2B SaaS is to aim for at least 3 to 1. Below that, acquisition is too expensive for the revenue it brings. Far above it, you are probably underinvesting in growth.
LTV is the most assumption-heavy metric in this list. A 2.0% monthly churn rate implies an average lifetime of 50 months; drop it to 1.5% and LTV jumps to about $66,700. Show the inputs next to the ratio so nobody mistakes it for a measured fact.
Data: billing for revenue and churn, finance for gross margin, and CAC from metric 8.
The worked example, all in one table
| Metric | Calculation | Q3 result |
|---|---|---|
| Visit-to-lead rate | 1,000 ÷ 50,000 | 2.0% |
| Cost per lead (paid) | $60,000 ÷ 600 | $100 |
| Lead-to-MQL rate | 400 ÷ 1,000 | 40% |
| MQL-to-SQL rate | 120 ÷ 400 | 30% |
| Win rate | 24 ÷ 120 | 20% |
| Lead-to-customer rate | 24 ÷ 1,000 | 2.4% |
| Sales velocity | 120 × 20% × $15,000 ÷ 60 | $6,000 a day |
| New ARR | 24 × $15,000 | $360,000 |
| CAC | $300,000 ÷ 24 | $12,500 |
| CAC payback | $12,500 ÷ ($1,250 × 80%) | 12.5 months |
| Logo churn | 24 ÷ 400 | 6.0% a quarter |
| Net revenue retention | $4,728,000 ÷ $4,800,000 | 98.5% |
| Gross revenue retention | $4,548,000 ÷ $4,800,000 | 94.75% |
| LTV | $1,000 ÷ 2.0% | $50,000 |
| LTV to CAC | $50,000 ÷ $12,500 | 4 to 1 |
Read together, the story is clear: acquisition is healthy (4 to 1, payback near a year), but the customer count is flat because churn cancels out new logos. The lever for next quarter is retention, not more ad spend. No single metric shows that. You only see it when the marketing, sales and billing numbers sit next to each other.
The joins behind B2B metrics
Half of these metrics need data from more than one system. That is why they are hard to get right in any single tool: the CRM has no ad spend, the ads platforms have no revenue, and billing has no idea which campaign a customer came from.
| Metric | Ads platforms | Web analytics | CRM | Billing | Finance |
|---|---|---|---|---|---|
| Visit-to-lead rate | ✓ | ✓ | |||
| Cost per lead | ✓ | ✓ | |||
| MQL, SQL and win rates | ✓ | ||||
| New ARR | ✓ | ✓ | |||
| CAC and payback | ✓ | ✓ | ✓ | ✓ | |
| Churn, NRR, LTV | ✓ | ✓ |
Three joins carry most of the weight:
- Ad spend to CRM leads, on campaign. Ads platforms report spend per campaign ID. The CRM knows a lead's campaign only if your forms capture the UTM parameters and store them on the contact. Keep campaign names in UTMs consistent with the ad platforms, or keep a mapping table from UTM campaign to platform campaign ID.
- CRM to billing, on customer. Store the CRM company ID on the billing customer when the subscription is created (Stripe, for example, lets you put it in the customer's metadata). Matching on email domain afterwards works until two subsidiaries share a domain or a customer pays from a personal address.
- Costs to the period. Salaries, tools and agency fees live in finance, often in a spreadsheet. Load them into the same place as everything else with one row per month and category, so CAC uses the same quarter boundaries as the funnel.
Also agree on time zone and currency up front. Ads platforms usually report in the ad account's time zone, analytics tools in the property's time zone, and billing in UTC. A deal that closes at 23:30 on 30 September in New York lands in Q4 in UTC.
Period view or cohort view
The tables above use a period view: every count is "things that happened in Q3". That is right for spend and revenue, but conversion rates mix cohorts: some of Q3's 24 wins started as Q2 SQLs. A cohort view follows the 120 SQLs created in Q3 until they are won or lost, which gives a true win rate but only once the cohort has had time to close. Use the period view for the operating dashboard and the cohort view when you need to know whether conversion is actually improving.
The SQL
Once the sources sit in one warehouse, each metric is a short query. The queries below are plain SQL (date literals, case, coalesce, least), tested on DuckDB, and need at most small changes for BigQuery, Snowflake or Postgres. Table names are illustrative: ad_spend_daily is ad spend by day and campaign, crm_contacts and crm_deals come from the CRM, billing_subscriptions and arr_snapshot from billing, and sales_marketing_costs from finance.
Funnel counts and conversion rates for the quarter:
1with
2 params as (
3 select
4 date '2026-07-01' as q_start
5 , date '2026-10-01' as q_end
6 )
7 , visits as (
8 select
9 sum(w.sessions) as visits
10 from
11 web_sessions_daily w
12 cross join params p
13 where
14 w.date >= p.q_start
15 and w.date < p.q_end
16 )
17 , funnel as (
18 select
19 sum(
20 case
21 when c.created_at >= p.q_start
22 and c.created_at < p.q_end then 1
23 else 0
24 end
25 ) as leads
26 , sum(
27 case
28 when c.became_mql_at >= p.q_start
29 and c.became_mql_at < p.q_end then 1
30 else 0
31 end
32 ) as mqls
33 , sum(
34 case
35 when c.became_sql_at >= p.q_start
36 and c.became_sql_at < p.q_end then 1
37 else 0
38 end
39 ) as sqls
40 from
41 crm_contacts c
42 cross join params p
43 )
44 , won as (
45 select
46 count(*) as won_deals
47 , avg(d.acv) as acv
48 from
49 crm_deals d
50 cross join params p
51 where
52 d.is_won
53 and d.closed_at >= p.q_start
54 and d.closed_at < p.q_end
55 )
56select
57 v.visits
58 , f.leads
59 , f.mqls
60 , f.sqls
61 , w.won_deals
62 , w.acv
63 , round(100.0 * f.leads / v.visits, 1) as visit_to_lead_pct
64 , round(100.0 * f.mqls / f.leads, 1) as lead_to_mql_pct
65 , round(100.0 * f.sqls / f.mqls, 1) as mql_to_sql_pct
66 , round(100.0 * w.won_deals / f.sqls, 1) as win_rate_pct
67from
68 visits v
69 cross join funnel f
70 cross join won w;CAC, payback and LTV to CAC, joining ads, finance and billing:
1with
2 params as (
3 select
4 date '2026-07-01' as q_start
5 , date '2026-10-01' as q_end
6 , 0.80 as gross_margin -- from finance
7 , 0.02 as monthly_logo_churn -- from the retention query below
8 )
9 , ad as (
10 select
11 sum(a.spend) as ad_spend
12 from
13 ad_spend_daily a
14 cross join params p
15 where
16 a.date >= p.q_start
17 and a.date < p.q_end
18 )
19 , other as (
20 select
21 sum(o.amount) as other_cost -- salaries, tools, events, agencies
22 from
23 sales_marketing_costs o
24 cross join params p
25 where
26 o.month >= p.q_start
27 and o.month < p.q_end
28 )
29 , new_customers as (
30 select
31 count(*) as customers
32 , avg(s.mrr) as avg_new_mrr
33 from
34 billing_subscriptions s
35 cross join params p
36 where
37 s.first_paid_at >= p.q_start
38 and s.first_paid_at < p.q_end
39 )
40select
41 ad.ad_spend + other.other_cost as sales_marketing_cost
42 , n.customers as new_customers
43 , (ad.ad_spend + other.other_cost) / n.customers as cac
44 , (ad.ad_spend + other.other_cost) / n.customers / (n.avg_new_mrr * p.gross_margin) as payback_months
45 , n.avg_new_mrr * p.gross_margin / p.monthly_logo_churn as ltv
46 , n.avg_new_mrr * p.gross_margin / p.monthly_logo_churn / ((ad.ad_spend + other.other_cost) / n.customers) as ltv_to_cac
47from
48 ad
49 cross join other
50 cross join new_customers n
51 cross join params p;Logo churn, NRR and GRR from monthly ARR snapshots per customer:
1with
2 start_arr as (
3 select
4 customer_id
5 , arr
6 from
7 arr_snapshot
8 where
9 snapshot_date = date '2026-07-01'
10 )
11 , end_arr as (
12 select
13 customer_id
14 , arr
15 from
16 arr_snapshot
17 where
18 snapshot_date = date '2026-10-01'
19 )
20select
21 count(*) as start_customers
22 , sum(
23 case
24 when coalesce(e.arr, 0) = 0 then 1
25 else 0
26 end
27 ) as churned_customers
28 , round(
29 100.0 * sum(
30 case
31 when coalesce(e.arr, 0) = 0 then 1
32 else 0
33 end
34 ) / count(*)
35 , 1
36 ) as logo_churn_pct
37 , sum(s.arr) as start_arr
38 , round(100.0 * sum(coalesce(e.arr, 0)) / sum(s.arr), 2) as nrr_pct
39 , round(
40 100.0 * sum(least(coalesce(e.arr, 0), s.arr)) / sum(s.arr)
41 , 2
42 ) as grr_pct
43from
44 start_arr s
45 left join end_arr e on e.customer_id = s.customer_id;On data shaped like the worked example, the three queries return 2.0%, 40%, 30% and 20% for the funnel; $12,500 CAC, 12.5 months payback and 4.0 LTV to CAC; and 6.0% logo churn, 98.5% NRR and 94.75% GRR. least keeps each customer's end ARR at or below its start ARR, which is what removes expansion from GRR.
Note that the CAC query counts new customers from billing (first paid invoice), while the funnel counts won deals from the CRM. They usually differ by a few customers each quarter. Pick one, write it down, and use it everywhere; defining core business metrics walks through how to do that.
Building these metrics in a warehouse with Weld
Weld syncs the systems these metrics need into your own data warehouse: ads platforms such as Google Ads, LinkedIn Ads and Facebook Ads, Google Analytics 4, HubSpot or Salesforce, and Stripe. The ad reporting data model combines spend, clicks, impressions and conversions from Facebook, Google, LinkedIn, Microsoft, Pinterest, Snapchat and TikTok Ads into one table, which covers the ad spend side of CPL and CAC.
From there you write the funnel, CAC and retention queries above as SQL models in Weld's editor (or in dbt), and schedule them to rebuild after the data they read has synced. You can send results such as LTV back to HubSpot with reverse ETL, and the Weld MCP server lets an AI agent in Claude or Cursor query the same modelled tables instead of guessing at raw ones. The agent context directory lists the schemas and open-source SQL models available per connector.
Sign up to Weld
FAQ
B2B metrics are the numbers a business-to-business company uses to measure its marketing, sales, revenue and retention. The core set covers the funnel from website visit to won deal (conversion rates, cost per lead, win rate), the cost of acquisition (CAC and payback), and how long revenue stays (churn, net revenue retention, LTV).
The marketing metrics that matter are the ones tied to pipeline: visit-to-lead rate, cost per lead by channel, lead-to-MQL rate and the pipeline that marketing sources. Impressions, followers and open rates help optimise a single channel but say little about revenue. Report marketing metrics next to the sales conversion rates that follow them.
MQL-to-SQL rate, win rate, average contract value, sales cycle length and sales velocity. Together they show how much qualified pipeline the team gets, how much of it closes, how big the deals are and how long they take. Activity counts like calls and emails are inputs, not KPIs.
A common rule of thumb is at least 3 to 1, meaning a customer returns three times their acquisition cost in gross margin over their lifetime. Pair the ratio with CAC payback: a 3 to 1 ratio with a 30-month payback still ties up a lot of cash. Because LTV depends heavily on the churn assumption, show the inputs next to the ratio.
Track visits by channel, visit-to-lead rate by channel and landing page, and the share of leads that become MQLs. Those connect the website to pipeline. Bounce rate, pages per session and time on page are useful for diagnosing a specific page, not for judging whether the website works.
Divide CAC by the monthly gross margin a new customer produces: CAC ÷ (MRR per customer × gross margin). With a CAC of $12,500, MRR of $1,250 and an 80% gross margin, payback is $12,500 ÷ $1,000 = 12.5 months.



