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.

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
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
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
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
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
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 type | Channels it applies to | Where the number comes from |
|---|---|---|
| Ad spend | Google Ads, Meta, Bing | The ad platform's spend report, by month |
| Tools and subscriptions | Most channels | Your invoices, split by the channel each tool serves |
| Data and list costs | Cold email, cold calling | Data vendor invoices for the month |
| Labour hours | Outbound, content, organic | Hours 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
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.