# Cost per lead is a vanity metric; cost per qualified lead is not

> A cheap lead can be expensive per sale. See how to define MQL and SQL with your client and send CRM status back to your ad platforms.

- URL: https://relator.digital/en/blog/custo-por-lead-qualificado
- Publicado: 2026-10-13
- Atualizado: 2026-10-13
- Autor: Time Relator Digital
- Categoria: performance-strategy

Cost per lead (CPL) is spend divided by the number of forms submitted. It only tells you what it cost to get a contact, not whether that contact had the profile, budget or interest to buy. Cost per qualified lead is the same spend divided only by the leads the sales team recognized as an opportunity. It is entirely possible that the campaign with the lowest CPL is the one that spends the most to reach a sale.

> [!NOTE]
> **In short**
> - CPL measures contact capture. Cost per MQL, per SQL and per sale measures what the contact became.
> - Before measuring, write down with your client what a qualified lead is. Without a single definition, each side counts differently.
> - Compare campaigns by cohort: leads created in the period and what they became later, even if the sale lands next month.
> - The maximum cost per lead is the lead-to-sale rate times the margin on each sale. That number, not a market-average CPL, tells you whether a campaign pays off.
> - For the ad platform to learn from quality, CRM status has to flow back to it. Google Ads and Meta have official paths for that.

## The cheapest lead can be the most expensive

Here is a hypothetical example, with made-up numbers just to show the math. An account spends R$ 12,000 in a month and generates 300 leads, two thirds from a simple form campaign (A) and the rest from a campaign that filters the audience better (B).

| | Campaign A | Campaign B | Total |
| --- | --- | --- | --- |
| Spend | R$ 6,000 | R$ 6,000 | R$ 12,000 |
| Leads | 200 | 100 | 300 |
| Qualified leads (MQL) | 40 | 50 | 90 |
| Opportunities (SQL) | 12 | 33 | 45 |
| Sales | 2 | 7 | 9 |
| Cost per lead | R$ 30.00 | R$ 60.00 | R$ 40.00 |
| Cost per MQL | R$ 150.00 | R$ 120.00 | R$ 133.33 |
| Cost per SQL | R$ 500.00 | R$ 181.82 | R$ 266.67 |
| Cost per sale | R$ 3,000.00 | R$ 857.14 | R$ 1,333.33 |

In the ad dashboard, campaign A looks twice as good: R$ 30 against R$ 60 per lead. In the CRM, it costs 2.75 times more per opportunity (500 ÷ 181.82) and 3.5 times more per sale (3,000 ÷ 857.14). Whoever optimizes for CPL ends up moving budget from B to A, which worsens exactly the result that matters.

Two honest caveats. First: with only 2 sales in campaign A, cost per sale swings a lot with each extra or missing sale. That is why you should also look at the intermediate stages, which have more volume. Second: the example is hypothetical and meant to show the logic, not to indicate market rates.

![Hypothetical example funnel: 300 leads, 90 MQL, 45 SQL and 9 sales, with the cost of each stage](https://uploads.relator.digital/blog/custo-por-lead-qualificado/27a4e11c-funil.en.svg "Hypothetical example: cost rises at each funnel stage, from R$ 40 per lead to R$ 1,333.33 per sale")

## Write down with your client what "qualified" means

"Qualified" has no universal definition. HubSpot's documentation, for example, describes an MQL (marketing qualified lead) as a contact that the marketing team has qualified as ready for the sales team, and an SQL (sales qualified lead) as one that the sales team has qualified as a potential customer. In both cases a team does the qualifying, following criteria the company defined. HubSpot itself lets you customize the stages or create your own.

That means the number is only comparable between agency and client if both use the same yardstick. Agree on it in writing, in a 30-minute meeting:

- **What an MQL is:** for example, filled in the form and has the company or job profile the client serves. It is an objective, verifiable criterion that can be applied without opinion.
- **What an SQL is:** for example, a salesperson talked to the person and confirmed need, budget and timing. The criteria above are an example, not a rule: the client sets their own.
- **Who changes the status and how fast:** if the salesperson takes a week to update the CRM, cost per SQL looks worse than it is.
- **Which discard reasons exist:** "no budget", "outside service area" and "invalid contact" teach different things about the campaign.

In HubSpot, the SQL stage has sub-stages stored in the lead status property (*Lead Status*). Even if you don't use HubSpot, the idea holds: a stage only helps if it has a clear entry rule.

## Measure by cohort, not by the month of the sale

The sale rarely happens in the month the lead arrived. If you divide October's spend by the sales closed in October, you mix leads from different months and the result depends on the sales cycle.

The fairest reading is by cohort: take the leads created in October, follow what each one became, and update the number as time passes. The early stages close sooner, and cost per sale is only final after the sales cycle has ended. When presenting the report, say where each stage stands ("partial cost per sale, 18 days after month end") instead of showing a figure that will still change.

## How much a lead can cost: the maximum-cost math

A "good" CPL does not exist without the conversion to sale and the margin. The formula is:

**Maximum cost per lead = lead-to-sale rate × margin on each sale**

Using the hypothetical example, and assuming each sale leaves R$ 2,000 of margin before media:

- Campaign A: 2 sales from 200 leads = 1%. Maximum cost per lead: 1% × 2,000 = R$ 20. The actual CPL is R$ 30, so the campaign loses money (2 × 2,000 = R$ 4,000 of margin against R$ 6,000 of spend, or −R$ 2,000).
- Campaign B: 7 sales from 100 leads = 7%. Maximum cost per lead: 7% × 2,000 = R$ 140. The actual CPL is R$ 60, and the campaign comes out ahead (7 × 2,000 = R$ 14,000 against R$ 6,000, or +R$ 8,000).

The R$ 30 CPL, which looked best, is above what campaign A can afford. The R$ 60 CPL, which looked worst, is well below B's limit. If the margin per sale differs from the assumed one, the limit changes, which is why you should redo the math with your client's real number.

## Send CRM status back to the ad platform

Measuring in the report helps you decide. But ad platforms also optimize on their own, and they only optimize for what they can see. If the only conversion Google or Meta know about is "form submitted", they look for more forms, not more sales. Both have official paths to receive what happened afterwards, in the CRM.

### Google Ads

Offline conversion import lets you see in Google Ads what happens after the click. The official page lists the requirements: auto-tagging must be on, the click identifier (GCLID) must be captured from the URL and stored with each lead's data, and it is case sensitive. The cycle between the click and the imported conversion must be shorter than 14 or 90 days, depending on the data source.

The same page recommends that anyone who has not yet adopted the import start with enhanced conversions for leads, which use the lead's own data, such as email or phone number, sent hashed, to tie the sale to the ad.

### Meta

Meta has the *Conversion Leads* performance goal, which uses funnel events sent from the CRM through the Conversions API. The documentation says it "may yield higher quality leads", which is a possibility, not a guarantee. The listed requirements include:

- being used only with lead ads (Facebook and Instagram instant forms);
- storing Meta's lead ID, 15 to 17 digits, in the CRM;
- generating at least 200 leads per month;
- sending data at least once a day;
- the stage you want to optimize for happening within 28 days of the lead;
- that stage's conversion rate staying between 1% and 40%.

Meta also states this is a separate integration from the Conversions API you may already use for website events, because the required parameters are different. In the hypothetical example above, 300 leads per month and 15% SQL (45 ÷ 300) would fit that range. That is only an arithmetic check: confirm the current conditions in the documentation before planning.

Pick the stage to send back that is most faithful to the sale and has enough volume. SQL is often a good middle ground: it is closer to revenue than MQL and happens more often than a sale.

## Where Relator fits

Relator connects HubSpot and RD Station CRM and matches won deals to the campaign that brought the lead, to show revenue and real ROAS next to what the ad platform reports. That helps with the campaign-level reading described above. The MQL and SQL definition remains the client's and their CRM's.

## How to apply

1. Get agency and client together and write down the definition of MQL, SQL and sale, with who changes each status and how fast.
2. Make sure every lead reaches the CRM with its source campaign (UTM) and, when available, the platform's click or lead identifier.
3. Build the example table with your numbers: spend, leads, MQL, SQL and sales per campaign, and the four costs.
4. Read by lead-creation cohort and flag as partial whatever still depends on the sales cycle.
5. Calculate each campaign's maximum cost per lead with the real lead-to-sale rate and the real margin per sale.
6. Reallocate budget by cost per SQL or per sale, not CPL, and be wary of campaigns with few sales.
7. If volume allows, send CRM status back to Google Ads and Meta through the official paths.

## Sources

- HubSpot, [Use contact and company lifecycle stages](https://knowledge.hubspot.com/records/use-lifecycle-stages), checked on 2026-10-13.
- Meta for Developers, [Conversions API for CRM Integration](https://developers.facebook.com/docs/marketing-api/conversions-api/conversion-leads-integration), checked on 2026-10-13.
- Google Ads Help, [Set up offline conversion imports using Google Click ID (GCLID)](https://support.google.com/google-ads/answer/7012522), checked on 2026-10-13.
- Google Ads Help, [About enhanced conversions for leads](https://support.google.com/google-ads/answer/9888656), checked on 2026-10-13.
