How do you calculate cost per lead by channel?

Divide each channel's full cost, labour included, by the leads it brought in that month. When ads and CRM are separate, join them on channel and date.

An admin approves every new account by hand. Nothing is created until then. We reply by email; no newsletter, no sequence.

app.salescrew.io/inbox
The unified reply inbox with classified threads

The short answer

  • Cost per lead by channel is a channel's total cost for a period divided by the leads that channel brought in during the same period.
  • When ad data and CRM data live in separate tools, cost per lead is a join on two keys: the channel each lead is tagged with, and the month.
  • Most cost-per-lead reports break at capture. A lead with no source tag can't be joined to any spend, so it drops out and makes every channel look worse.
  • Total cost includes ad spend, tools, data and labour hours. Counting ad spend alone makes low-spend, high-labour channels such as cold email look cheaper than they are.

Why the calculation breaks when ads and CRM are separate

The formula is simple: spend divided by leads. The trouble is that spend lives in Google Ads, Meta and Bing, and leads live in your CRM. Neither side knows about the other. So you export both into a spreadsheet each month and try to match them up.

That match needs a shared key, and most teams don't have one. Ad platforms report by campaign and date. A CRM records a lead with whatever source field the form happened to fill in, often blank. Until every lead carries a clean channel tag, the join leaves a pile of "unknown" leads that no channel gets credit for.

Five steps to cost per lead by channel

  1. 1

    Fix one channel list

    Agree on channel names you will use everywhere: google_ads, meta_ads, bing_ads, organic, cold_email, referral. Short and fixed beats clever.

  2. 2

    Tag every lead at capture

    Put UTM parameters on every ad link and store the source on the lead record when a form or booking arrives. Outbound leads get their channel from the campaign.

  3. 3

    Pull spend by channel and month

    Export spend from each ad platform by month and map each campaign to your channel list. Add tool, data and labour costs for the unpaid channels.

  4. 4

    Join on channel and month

    Count leads by channel and month, match them to the spend rows, and divide. The untagged leads left over show you where capture is broken.

  5. 5

    Add meetings and deals

    Run the same join for meetings booked and deals won, so you see cost per meeting and cost per deal beside cost per lead.

What goes into a channel's total cost

Cost typeChannels it applies toWhere the number comes from
Ad spendGoogle Ads, Meta, BingThe ad platform's spend report, by month
Tools and subscriptionsMost channelsYour invoices, split by the channel each tool serves
Data and list costsCold email, cold callingData vendor invoices for the month
Labour hoursOutbound, content, organicHours per week times an hourly cost you set

How SalesCrew puts spend and leads in one database

SalesCrew is our product, and it removes the monthly export. Read-only collectors pull data from GA4, Google Search Console, Bing, Google Ads, Meta Ads and PostHog into the marketing module. Leads, meetings and deals sit in the same database. Cost per lead by channel becomes one query instead of two spreadsheets.

The channel economics view does the join for you. For each channel it shows work items, deals, meetings and cost, with cost per meeting and cost per deal. A cost-per-lead tile shows the headline number on the dashboard. An AI client can ask for the same figures through the MCP tool channel_economics, and they appear in the daily briefing each morning.

Inbound leads from your forms and Calendly bookings land in the same pipeline, and outbound leads carry the campaign they came from. Plans start at $299 a month with unlimited seats, on the pricing page.

Counting ad spend alone makes outbound look free

A channel with little spend but many rep hours hides its cost in payroll, not an invoice. Put an hourly cost on the labour for every channel before you compare them, or you will move budget toward the channel that only looks cheap.

Questions

How do I measure cost per lead when my ad data and CRM are separate?
Join them on two keys: channel and period. Tag every lead with its source channel when it enters the CRM, export spend by channel and month from each ad platform, then divide spend by leads for each pair. The join fails when leads arrive untagged, so fix capture before you build the report.
Should labour time be included in cost per lead?
Yes, for any channel where people do the work. Cold email and cold calling show little direct spend but take real rep hours. Leave the hours out and outbound looks far cheaper than paid ads, because you are comparing one channel's full cost with another's partial cost.
What time period should cost per lead use?
Match spend to the period its leads arrive in, usually a calendar month. For slow channels such as SEO or content, use a longer window, such as a quarter, since spend this month may bring leads next quarter.
Is cost per lead the right number to optimise?
Only next to cost per meeting and cost per deal. A cheap channel full of poor leads wins on cost per lead and loses on cost per deal. Read all three together and move budget on the one closest to revenue.