Lead generation KPIs are the few numbers that tell you whether outbound is producing buyers or only producing activity. For a B2B program running cold email and LinkedIn, five of them matter, in this order:
- Replies
- Interested replies
- Meetings booked and held
- Pipeline created
- Closed revenue
Under all five sits a gate: deliverability. If your messages are not reaching inboxes, every number above the gate is noise. Opens, send counts, follower counts and list size are supporting metrics at best, and some of them actively mislead.
The order matters because each KPI is harder to fake than the one before it. A reply proves someone read you. A signed contract proves someone paid.
What makes a metric a KPI in lead generation?
A metric is any number you can count. A KPI is a metric you would change your plan over. Lead generation produces dozens of metrics a week, and only a few of them earn KPI status.
Use one test: does this number help you predict the next stage of the funnel, or revenue? If yes, it is a KPI. If it only describes effort that already happened, it is a supporting metric. Keep it on the dashboard, but never celebrate it.
The scope here is program KPIs, from first message to signed contract. Rep activity quotas (dials per day, emails per rep, minutes on the phone) are a different topic. They measure whether people are busy. A program can hit every activity target and still produce no buyers.
Filling a calendar does not save a business. Follow each lead past the meeting and into the contract. I treat booking a call and closing a deal as separate skills, and a report that stops at the calendar hides which one is failing.
Which five KPIs predict revenue best?
Ranked by how hard each one is to fake:
- Replies. Reply rate = replies / people contacted. It shows the message arrived and a person read it. It does not yet show demand.
- Interested replies. Interested reply rate = interested replies / all replies. This is the first number that measures demand. "Unsubscribe me", "wrong person" and an auto reply all count as replies, but none of them count here. Many teams call this the positive reply rate.
- Meetings booked and held. Track both, then show rate = held / booked. A held meeting proves the prospect gave you time.
- Pipeline created. The value of qualified opportunities opened after held meetings, logged in your CRM by the month the meeting happened. This is where money first appears.
- Closed revenue. Contracts signed and their value. The final proof, and the slowest to arrive.
Each step is a stricter proof of demand. A reply costs the prospect seconds. A contract costs them real money, and that is why it is the only number nobody can fake.
What normal looks like. A typical cold email gets a reply about 1 time in 100, and fewer once daily sending reaches the thousands. Somewhere from 10% to 50% of those replies tend to become booked meetings. Highly specific, heavily personalized campaigns can hit 15% to 17% replies, with roughly 3 in 4 of those people interested.
The pattern behind the ranges: more volume pulls every average down. Use them for planning and never quote them as a promise.
Planning math from those ranges, for one month: 1,000 contacts -> about 10 replies at 1% -> 1 to 5 booked meetings. If that output is too small for your revenue target, check the list size first, then the audience, then the offer.
Shrinking the list to 50 to 100 perfect-fit names a month will not save it. At that size, a handful of people who are busy, not ready yet or simply not interested can wipe out the whole month. Volume evens out luck.
If you can only watch three, watch interested replies, meetings held and pipeline created. They sit in the middle of the funnel, they move within weeks, and each one is close enough to money to matter.
You see the signed contracts. I look at every prospect who replied, booked or attended and then dropped out. Those losses show which stage to fix.
How do you spot vanity metrics in lead generation?
A vanity metric goes up when you work harder, whether or not anyone buys. That makes it comfortable to report and useless for decisions.
| Vanity or low-signal metric | Predictive metric to read instead |
|---|---|
| Open rate | Interested replies. An open is a tracking estimate that Gmail itself does not verify; a reply is a person. |
| Emails or messages sent | Contacts per held meeting. Volume is cost, so read it as the price of each meeting. |
| Total leads in the list | Verified contacts that match your buyer profile, plus bounce rate. A big list of wrong titles is a big number of future bounces. |
| LinkedIn connection acceptances | Replies from accepted connections. Accepting a request costs one click. |
| Followers and post likes | Conversations started in direct messages. |
| Meetings booked, reported alone | Meetings held, and the close rate on them. |
Apple made opens even less reliable. Constant Contact explains that Apple Mail Privacy Protection preloads emails, tracking pixel included, whether or not the person opens them.
Omeda's client data shows the result. Six months after launch, total open rates rose from 22.6% to 40.5%, and unique open rates rose from 15.2% to 29.0%. That jump came from the pixel, not from people reading more.
Followers belong in that table because content and outbound do different jobs. Content wins attention, while deals begin in private conversations. Treat content as backup for outbound, and judge it by how many conversations it starts.
The worst habit is rewriting copy every time a vanity number dips. New wording cannot fix the wrong people on the list or a sending domain with poor reputation. One identical message pulled 2% replies at one company and 7.5% at another. When the low-signal numbers look bad, audit the list and the sending setup before anyone opens the copy doc.
Why is deliverability a gate KPI before anything else?
A gate KPI does not tell you whether you are winning. It tells you whether the other numbers can be trusted. If a third of your emails land in spam, a low reply rate says nothing about your offer. You would be judging a message nobody saw.
Gmail spells out the gate. According to Google's email sender guidelines, every sender to Gmail accounts must set up SPF or DKIM, use a TLS connection and keep the spam rate below 0.3%. Past 5,000 messages a day to Gmail, the bar rises: both SPF and DKIM, a DMARC record, and a one-click unsubscribe in marketing and subscribed mail.
Google's bulk sender page defines a bulk sender as anyone sending close to 5,000 or more messages to personal Gmail accounts within 24 hours. It says spam rate is calculated daily and tells senders to stay below 0.1% and never reach 0.3%.
The first guidelines page also states that Google does not track opens at all and has no way to check the open rates your sending tool shows you. Low opens, it adds, are not a reliable sign that mail is going to spam. Open tracking fails in both directions: it can hide a real problem and invent a fake one.
That is the short case for why open rate fails as a campaign metric.
For the real numbers, use Gmail Postmaster Tools. It reports your spam rate, the reputation of your sending domains and IPs, whether authentication passes, and which deliveries failed. It covers only mail sent to personal Gmail accounts, and it shows nothing until your domain is verified.
My own gate has two rules that come before any volume. Before a campaign scales, every domain I send from has SPF, DKIM and DMARC in place. Every address gets verified before it is sent to.
The weekly gate check:
| Gate | Pass | If it fails |
|---|---|---|
| Bounce rate | Under 0.5% | Stop sending to that list segment and re-verify it |
| Gmail spam rate (Postmaster Tools) | Under 0.1% | Cut volume on the affected domain and find the segment or message behind the complaints |
| Authentication (SPF, DKIM, DMARC) | Passing on every sending domain | Fix DNS before the next send |
| Delivery errors | No new errors in Postmaster Tools | Check the domain and IP in Postmaster Tools |
Decision rule: if any gate fails in a week, do not read that week's reply rate, and do not touch the copy. Fix the pipe first, then judge the message.
What does a real outbound funnel look like from contact to revenue?
Here is one complete funnel from my campaigns: a single LinkedIn account, 30 days, every stage counted.
| Stage | Count | Conversion | Formula | What it tells you |
|---|---|---|---|---|
| Contacted | 1,200 | Size of the test | ||
| Replied | 289 | 24.1% | 289 / 1,200 | Whether the list and the opener reach real people |
| Interested | 21 | 7.3% of replies | 21 / 289 | Whether the offer fits the market |
| Booked | 16 | 76.2% of interested | 16 / 21 | Whether the next step is easy to say yes to |
| Held | 12 | 75% of booked | 12 / 16 | Meeting quality and what prospects found before the call |
| Closed | 3 | 25% of held | 3 / 12 | Sales execution |
End to end: 1,200 contacts -> 3 closed deals in 30 days. One account over 30 days is too small a sample to borrow. Build the contacts-per-held-meeting and contacts-per-deal ratios from your own data. They turn a revenue target into a list size.
What the table shows:
- Do not get excited about the 24.1% reply rate. It sits far above the cold email range in the KPI section, but this was one LinkedIn account and 1,200 people. Small volume flatters averages, and they sink as volume grows.
- Interest is the real filter. 268 of the 289 replies showed no interest. A team reporting replies would have called this a huge month. A team reporting interested replies would have seen 21 real conversations.
- The denominator changes the verdict. Booked meetings against all replies look low next to the usual range. Against interested replies they come to 76.2%, the figure in the table. Pick one denominator and keep it every month, or your trend line lies.
- Closing is a small-sample number. 3 of 12 held meetings became contracts, 25%, but 12 meetings can swing either way on one deal. Before anyone adds volume, I want the close rate to hold up at small numbers. A funnel that fails to convert at small scale will not convert at large scale.
A report that stops at three stages (replies, calls, contracts) can show a result, but it cannot show a leak. With no count for interested replies or held meetings, a falling contract rate gives you no way to tell whether the leak sits in interest, in show-ups or in the sales call. Keep every stage in your report, even when the headline looks great.
How do you read meetings booked vs meetings held?
A booked meeting is a calendar invite. A held meeting is a buyer who spent time with you. Only the second one can turn into pipeline, so show rate (held / booked) belongs next to every booking number you report.
Gaps are normal. The single-account funnel above lost a quarter of its booked meetings. Plan for some drop-off and watch the trend.
When show rate falls, look at what happens before the call:
- Targeting. People outside your buyer profile book out of curiosity and then skip.
- Offer clarity. If the message promised something vague, the prospect has no strong reason to protect the slot.
- What they find when they check you. Prospects look you up between booking and meeting. The email gets the booking, but what they find when they audit you decides whether they show.
- Reply handling. A slow or careless answer to "sure, next week works" costs meetings. Keep a dedicated inbox handler on replies so no message gets missed.
When people show and nothing closes, the problem sits after the booking. Filling a calendar and closing deals are separate skills. I would not add volume in that case, because a close rate that is weak on today's calls gets weaker when more, colder calls arrive.
A booked call is only half the job, and an agency report that stops at booked calls is one of the red flags of a lead gen agency.
What should you track weekly and monthly?
The numbers I send clients arrive as live notifications each day, a weekly report and a monthly report. The cadence matters because different KPIs move at different speeds.
| Cadence | What goes in | The question it answers |
|---|---|---|
| Live, daily | Each interested reply and each booked meeting as it happens | Does someone need to respond right now? |
| Weekly | Gate checks, people contacted, replies, interested replies, meetings booked, meetings held | Is the campaign healthy, and which stage moved? |
| Monthly | Pipeline created, closed revenue, stage conversion rates against last month, contacts per held meeting | Is the program turning activity into money, and is that improving? |
Weekly numbers are leading indicators. They move fast enough to act on: a new list segment, a revised offer, a fixed sending domain. Monthly numbers are lagging. They move slowly, and reading them weekly only produces panic. The row-by-row layout is what a weekly outbound report should show.
One rule for both reports: every rate shows its raw counts beside it. A bare percentage invites an argument about what was counted. The counts end that argument before it starts.
How do long B2B sales cycles change KPI interpretation?
A KPI report built for weekly reading breaks down when the buyer takes a year to sign. On the outbound programs I run, a meeting booked inside the first 30 days can turn into a contract 4 or more months later. Plenty of B2B sales cycles last 6, 9 or 12 months. Judge closed revenue in month one and you will kill campaigns that are working.
Buyers also take a winding route. McKinsey's 2024 Global B2B Pulse Survey polled 3,942 B2B decision makers in 13 countries in April 2024. It found the average buyer now moves across ten interaction channels while deciding. More than half are likely to turn elsewhere if the experience across channels is not smooth.
A deal that started with your LinkedIn message may close after a website visit, a reference check and three calls. Clean last-touch attribution rarely exists in that world.
In some markets people simply decide slowly, and I see pipelines that are only getting started when the first monthly report goes out.
So change the question. Last week's campaign did not close deals, and it was never going to. Ask whether it is feeding the pipeline cleanly: are interested replies, held meetings and opportunities arriving at the rate your plan needs?
To keep that honest:
- Tag every opportunity in the CRM with the month of its first held meeting, and report revenue by that month. Revenue from an October meeting that closes in March still belongs to October's campaign.
- Judge reply and meeting KPIs weekly, pipeline monthly, and closed revenue on a window that matches your own sales cycle.
- Give a new program time. I recommend at least 3 months, because outbound needs feedback, changes and another round, and getting it fully working takes about 6 months on average across the industry. In 90 days, one B2B tech client moved from no qualified calls at all to 40+ per month.
The money side works the same way, as tracking outbound ROI over a long sales cycle shows.
Fix the report first. Add the held-meeting month to every open opportunity in your CRM this week.
Reporting replies but unsure what they turn into? Book a call with your counts from contacted to held, and we can find the stage that is leaking.
Questions founders ask about lead generation KPIs
How many lead generation KPIs should a team leader track?
Five on the main dashboard, plus the four deliverability gate checks. Rep activity numbers, such as messages sent per person, belong on a separate coaching sheet. A crowded dashboard gets read less closely, and the one number that actually moved gets missed in the crowd.
Does Yahoo apply the same sender rules as Gmail?
Close to it. Yahoo's sender FAQ warns that mail failing its requirements can land in spam or be refused outright, asks senders to join its Complaint Feedback Loop, and requires one-click unsubscribe on promotional messages through the list-unsubscribe header. Unlike Google, Yahoo does not publish a volume threshold for bulk senders.
Should a "not now" reply count as an interested reply?
Count it separately. A "not now" is neither interest today nor a rejection. Log it in your CRM with the month the prospect named and a follow-up date. Keeping these out of the interested count stops this month's KPI from looking better than it is.
Should cost per lead be one of the core KPIs?
For outbound, leave it off. Cost per lead divides spend by names or replies, and both can be inflated cheaply. Divide total program cost by held meetings instead, and later by pipeline created. Cost per held meeting rewards a clean list and a clear offer. Cost per lead rewards buying a bigger, worse list.
