Cost per lead should be a query
Most teams keep ad spend in one tool and deals in another. So the number gets rebuilt by hand every month. It should be a query against one database instead.

The short answer
- Cost per lead needs two things in one place: what was spent by channel and campaign, and what happened to the leads that spend produced.
- An ad platform reports its own cost per lead, usually per form fill or click. It cannot see whether a lead became a deal or went nowhere.
- A manual reconciliation is only as current as the last export. For most teams that is once a month.
- SalesCrew keeps GA4, GSC, Bing, Google Ads, Meta Ads and PostHog data in the same database as leads and deals. Cost per lead by channel is a query, not a project.
Why the number is stale by the time anyone sees it
Cost per lead sounds simple: money spent divided by leads produced. In practice, producing it takes real work. Someone pulls spend from an ad platform. Someone pulls lead and deal outcomes from a CRM. Then they match the two by campaign or by date, because the two systems were never built to share data. That reconciliation is usually done by one person, usually once a month. So the number everyone decides from is already weeks old when it exists.
The deeper problem is what a manual process can answer. A monthly spreadsheet can answer "what did we spend, and how many leads came in". It cannot answer "which channel produced the leads that turned into revenue". That question needs every lead tracked from its channel through the pipeline to won or lost. Nobody does that by hand for every lead.
Why the ad platform's own number is not the answer
The cost-per-lead figure inside the ad platform looks good enough. The platform already tracks spend and conversions. The gap is its definition of a conversion. A conversion is whatever event the platform was told to track, usually a form submission or a click. It is not what happened to that lead afterward. A channel that produces cheap form fills that never become deals looks efficient by the platform's number. It is not efficient by the number that matters: cost per closed deal, or at least cost per qualified lead. The platform cannot calculate either. It has no view past the point where the lead left it.
The real number needs the platform's spend data and the CRM's pipeline data in one query. They join on a shared key: a campaign ID or a UTM parameter carried from the ad click to the lead record. Without that key, channel efficiency stays a platform-reported guess.
What it takes to make this a query instead of a project
Cost per lead, or the more useful cost per closed deal, becomes a query when spend data and pipeline data already live together. In practice that means one database, not two databases joined by an export someone has to remember to run. SalesCrew's marketing module pulls GA4, Google Search Console, Bing, Google Ads, Meta Ads and PostHog data into the database that holds leads and deals. A channel-economics question, cost by channel against leads produced or deals won, is then a query against current data.
The practical effect is not only saved labor. A team can ask the question weekly instead of monthly. It can also ask a better version of it: cost per deal instead of cost per raw lead. The pipeline outcome already sits next to the spend data.
Questions
- Isn't cost per lead already available inside most ad platforms?
- An ad platform reports cost per lead by its own definition, usually a form fill or a click it tracked. It cannot report cost per lead by what happened next. Once the lead leaves the platform, the platform loses sight of it.
- What does 'in the same database' actually require technically?
- Spend and performance data (impressions, clicks and cost, by campaign and channel) must sit in tables that join directly with the CRM's lead and deal records. The join needs a shared key, such as a campaign ID or a UTM parameter carried through to the lead record.
- Does SalesCrew calculate cost per lead automatically?
- Yes. SalesCrew's marketing module builds channel economics and a KPI scorecard from GA4, GSC, Bing, Google Ads, Meta Ads and PostHog data. That data sits in the same database as leads and deals, so a cost-per-lead or cost-per-channel query needs no export first.