· Maksim Shchegolev

Inbound Lead Audit: Find Out Where Your Leads Are Lost

An inbound lead audit compares 4 counts over one fixed period: requests that arrived, records created, records with a named owner, and records with real work logged. Each gap is traced to one layer and confirmed with evidence the team can see, which is why the answer is almost never the layer everybody suspected at the start.

Want this checked on your own site? Run the free AI visibility check, or order the full audit.

An inbound lead audit is a fixed diagnostic that answers one question with evidence: between the moment a request arrives and the moment somebody actually works it, where does volume disappear, and how much of it. It is not a conversion review and not an opinion about the funnel. It is a reconciliation of counts, layer by layer, against records your team already stores.

This guide owns the method: the symptom catalogue, the confirming evidence, and the ranking. It owns no metric definition and no repair. Every layer below names the guide that carries the fix.

In one sentence

An inbound lead audit compares four counts over one fixed period: requests that arrived, records created, records with a named owner, and records with real work logged. Each gap is then traced to one layer, confirmed with evidence the team already stores, ranked by what it costs, and handed to the guide that owns the fix.

What is an inbound lead audit, and what is it not?

An audit is a counting exercise with a fixed scope. You choose a period, assemble the evidence, produce four numbers, explain every gap between them, and stop. What makes it useful is the stopping: an audit that drifts into strategy, tooling opinions and rep performance stops being falsifiable, and an unfalsifiable audit cannot be argued with or acted on.

The confusion is worth resolving early, because most of what is sold as a lead audit answers a different question than the one you asked.

QuestionDoes the audit answer it?Where it belongs
Did every arriving request become a record?Yes, with counts on both sidesThis guide
Which layer lost the volume?Yes, with an export per layerThis guide
How much volume did each problem affect?Yes, as a count in the periodThis guide
Is our conversion rate good for our market?No, and nobody honestly canYour own trend, not a benchmark
What should our response window be?NoSLA and speed to lead
Will fixing this pay for itself?NoInbound automation ROI
Which channel deserves more budget?NoInbound lead attribution
Are the reps any good?No, out of scope by designSales team onboarding
Is the offer wrong?Only as an exclusion, at the endLast section of this guide

Two things follow from that table. The audit produces no revenue estimate, because turning a count of lost records into a revenue figure requires assumptions the audit has not tested. And the audit assigns no blame, because every finding in the catalogue below can be produced by a system with competent people in it.

Why does an analytics review miss most of the leakage?

Because web analytics stops at the edge. Google’s documentation on traffic source dimensions describes how a session gets attributed to a source and campaign, which is exactly the right job for acquisition analysis and exactly the wrong tool for handling analysis. Analytics can tell you a form was submitted. It cannot tell you whether a record was created, whether anybody owns it, or whether a human ever called.

The second half of the blind spot is the mirror image. CRM reports count what exists in the CRM. A request that never became a record is invisible there too. So the most expensive category of loss, requests that arrived and were never entered into any system, is missing from both of the two reports every team already looks at. No standard dashboard shows it, which is why teams can watch their numbers weekly for a year and never see it.

Add the channels that never touch a website at all: inbound phone calls including the missed ones, chat apps, an old sales alias that still forwards to one person’s inbox, a marketplace or partner portal that emails a notification, a referral typed directly to a rep. Each of those can be a healthy source and an invisible one at the same time.

Response lag is the visible tip of this. A Harvard Business Review audit published in 2011 covered 2,241 US companies and found a median first response of 42 hours among the firms that answered at all. That study is old and describes one sample, so treat it as a description of how bad unmanaged handling gets rather than a current benchmark. The mechanism is what still applies: nothing in the record obliged anyone to act, and no report showed that nobody had.

What evidence do you need, and over what period?

Gather the evidence before you form a hypothesis. The order matters, because an audit that starts from a suspicion tends to find that suspicion.

EvidenceWhere it comes fromWhat it provesWhat it cannot prove
Channel receiptsForm provider log, phone system call log, chat export, inbox rulesA request physically arrivedThat it was handled
CRM record exportRecords created in the period with created time, source, channel, ownerWhat the system of record believesWhat never reached it
Activity exportCalls, emails, messages with timestamps and directionWhether work happened, and whenWhether the work was good
Field change historyCRM audit trailWho or what changed owner, stage, sourceIntent behind a change
Task and queue exportOpen and closed tasks with due timesWhether a next action existsWhether anyone will do it
Integration failure logDead letter queue, webhook error logSilent technical lossLoss with no error at all
Roster and calendarWorking hours, absences, headcount changesWhether the work was possibleWhether it was attempted
The written rulesRouting rules, response policy, qualification definitionThe standard you are auditing againstThat anyone follows it

That last row causes more failed audits than any technical problem. If there is no written routing rule, no written response window and no written qualification definition, you are not auditing, you are inventing a standard retroactively. When the rules are missing, record that as finding number one and audit against the weakest defensible version: every request gets a record, every record gets an owner, every owned record gets a first attempt.

Choosing the period. Use one closed period, never a rolling window, and align it to whole working weeks so weekend arrivals are not split across boundaries. It has to be long enough that your follow-up cycle completed inside it: if the sequence runs fourteen days, records created last week are still in flight and will look abandoned when they are not. It also has to be long enough to survive one absence and one campaign spike, because a single week is mostly noise. A workable starting template is one full quarter for the four counts and one recent full month for the detailed layer read, adjusted to your own cycle length rather than copied.

Exclusions are a documented count, not a cleanup. Test submissions, obvious spam, internal traffic and known partners all get removed, and each removal is recorded with its number and its rule. The sentence “we took out the junk” is where an audit stops being reproducible, and the size of the junk category is itself frequently a finding.

The reconciliation check: four counts that have to line up

This is the part almost nobody runs, and it is the part that catches leaks no layer owns. Four counts, one period, same channels in each.

A. Arrived. Requests that reached any channel edge: form submissions in the provider’s own log, inbound calls including missed and abandoned ones, chat conversations started, emails to the sales addresses, portal and marketplace notifications.

B. Created. Records that exist in the CRM for that period and those channels.

C. Owned. Of B, records with a named owner who is an active user and was not on leave for the whole window.

D. Worked. Of C, records with at least one logged outbound attempt inside the window your policy defines.

CountWhere the number comes fromA gap to the previous count meansOwning guide
A, arrivedChannel side logs, assembled by hand the first timeBaseline for everything elseWebsite lead capture
B, createdCRM export by created date and sourceCapture failure, integration loss, or silent deduplicationCRM automation for inbound
C, ownedOwner field joined to the active user listAssignment failure or a rule with no fallbackLead routing playbook
D, workedActivity export joined to record idsResponse failure, or work happening off systemSLA and speed to lead

Count A is the hard one, and its difficulty is diagnostic in itself. If assembling “how many requests arrived last month” takes two days and five exports, you have already found a reporting layer problem before you have looked at a single record. Teams with a working Lead Hub get count A for free, which is most of the argument for having one.

Two traps will corrupt the reconciliation if you let them. First, decide whether you are counting events or people, write it down, and keep it consistent across all four counts. One buyer who calls, then submits a form, then messages on chat is three events and one person, and mixing the two conventions produces gaps that look like leaks and are arithmetic. Report both numbers if you can: the event count sizes the workload, the person count sizes the market. Second, deduplication legitimately reduces B below A, so quantify it separately instead of treating it as loss. A merge log with counts turns an unexplained gap into an explained one.

Anything still unexplained after those adjustments is the number to put at the top of the report. It is the only figure in the audit that no existing dashboard in the company produces.

How does the layer-by-layer diagnostic work?

Seven layers, in the order a request passes through them. For each one: the observable symptom, the confirming evidence from data you already hold, and the guide that owns the repair. Work them in order, because a finding at an early layer changes the denominator of every layer after it.

LayerThe question it answersTypical symptomConfirm withOwner
CaptureDid the request become an event at all?Channel log count exceeds CRM countDaily join of provider log and CRM created datesWebsite lead capture
IdentityIs one buyer one record?Same person on several records, split historyNormalized key duplicate count in the exportCRM automation for inbound
QualificationIs the sorting decision real and recorded?Field empty, uniform, or written after the factField history timestamps and value distributionAI lead qualification
AssignmentDoes every record have a live, correct owner?Ownerless records, skewed load, owner churnOwner field joined to active users and absencesLead routing playbook
ResponseDid the first attempt happen in the window?Long tail and a group with no attempt at allArrival time to first outbound activity, full distributionSLA and speed to lead
Follow-upDid attempts two through N happen?One attempt then silence, no open taskAttempt count per record, records with no task and no outcomeLead follow-up system
ReportingCan anyone see any of the above?Two dashboards disagree, source mostly unknownRecompute one published number from raw exportsInbound lead reporting

Capture and identity: did the request become a record at all?

Capture loss is the cheapest loss to find and the most expensive to leave. Nothing downstream can recover a request that exists only in a form provider’s log.

SymptomHow to confirm it with data you already haveUsual cause
Provider log count above CRM count on specific daysJoin both by day and channel, look at the daily shape not the totalIntegration outage or throttling
Records arrive in bursts at round timesHistogram of created timestamps by minuteBatch sync, not real time delivery
Missed calls with no matching recordPhone system export minus CRM records with a call sourceNo record created for unanswered calls
Submissions with required fields emptyCompare provider payloads to CRM field valuesValidation on the form, silent drop in the mapping
Requests on a channel nobody ownsList every published address, number and form endpoint, then check each one appears as a source valueAn alias or number outside the process
Failure queue exists but is empty for weeksSend a deliberately invalid test eventEvents are not reaching the queue

The inventory in row five is worth doing on its own even without an audit. Every published phone number, every form endpoint, every chat entry point and every email alias, listed against the source value it produces in the CRM. Anything on the list with no corresponding source value is an uncontrolled channel, and uncontrolled channels are where the largest single-cause leaks hide.

Identity loss is subtler because nothing disappears. The buyer exists, twice, and each copy holds half the history. Confirm it by normalizing keys in the export rather than in the CRM: lowercase emails, phones to one international format, company names stripped of legal suffixes. Then count exact duplicate keys inside the period, and separately count records created in the period whose key matches a record older than the period. That second number is returning buyers being treated as strangers, which is both a leak and an insult to the buyer.

If a rise in identity problems started on a specific date, look for a new landing page, a new integration or an import. Duplicates are almost always introduced by a change, not accumulated by drift.

Qualification and assignment: did anyone become responsible?

Qualification is audited as a record, not as a judgment. You are not asking whether the calls were graded correctly, you are asking whether a decision was made, when, and on what.

SymptomHow to confirm itWhat it usually means
The qualification field is empty on most recordsValue distribution across the periodThe step exists on paper only
Almost every record has the same valueSame distribution, look for one value above the restThe field is being clicked through
Outcome written after the deal closedField history timestamp against close dateBackfilled reporting, no live decision
Disqualified within seconds of creationCreated time to qualification writeNobody looked at the request
Disqualified with no reason, or one reason everywhereReason field distribution and blank countNo controlled vocabulary

Definitions belong elsewhere: what counts as qualified lives in AI lead qualification, and the boundary where marketing hands to sales lives in the MQL to SQL handoff. The audit only establishes whether the decision was recorded at the moment it was supposedly made.

Assignment is where the sharpest single number in the whole audit lives: the count of records with no owner. The target is zero, there is no defensible reason for it to be anything else, and almost every team has a number above zero that nobody has looked at.

SymptomHow to confirm itWhat it usually means
Ownerless records existOwner field blank, counted by created weekNo fallback in the routing rules
Owner is a deactivated userJoin owner to the active user listNobody reassigned a departure
Owner was on leave the whole windowJoin owner to the absence calendarRules do not read availability
One rep holds several times another rep’s volumeRecords by owner by week against the stated ruleThe rule is not doing what people believe
Owner changed three or more times before first contactOwner change count from the field historyTwo systems fighting over the field

Salesforce documents lead assignment rules with ordered entries and a default owner for records that match nothing, which is a good reminder of what to look for during the audit: a working fallback. Check the current product behavior in the documentation rather than assuming it. Precedence, fallback queues and reassignment rules belong to the lead routing playbook.

A departure deserves its own check. When a rep leaves, their open records usually stay assigned to a disabled user and vanish from every list that filters by active owner. Run the ownerless count and the deactivated owner count as two separate numbers, because the second one hides inside a passing result for the first.

Response and follow-up: did the work actually happen?

Measure the first response from arrival time, not from record creation time. The difference between those two timestamps is your integration delay, and measuring from creation hides exactly the leak you are hunting. If arrival time is not stored on the record, that is a finding at the capture layer and it blocks a defensible response measurement until it is fixed.

Then refuse to look at the average. Report the full distribution and three numbers beside it: the share above your policy threshold, the count of records whose first attempt never happened at all, and the same two figures for after-hours arrivals separately. A healthy median coexists comfortably with a group nobody ever touched, and the untouched group is the actual loss.

SymptomHow to confirm itWhere the fix lives
Bimodal response distributionHistogram of arrival to first attempt, not the meanSLA and speed to lead
Records with zero outbound attemptsLeft join records to outbound activities, keep the nullsSLA and speed to lead
After-hours arrivals never recoverSplit the distribution by arrival hourSLA and speed to lead
Exactly one attempt then silenceAttempt count per record, count the records sitting at oneLead follow-up system
All attempts on one channelAttempts grouped by channel per recordLead follow-up system
No open task and no closed outcomeRecords with no open task and no terminal stageLead follow-up system
Sequence stopped after a bounceSequence exit reasons, count the technical exitsLead follow-up system

The limbo count in row six is the most useful follow-up number that exists, and it takes one query. A record with no open task and no closed outcome is not being worked and is not being counted as lost. It is simply gone, while still appearing in the pipeline as if it were live. Teams that track nothing else from this guide should track that one number weekly.

Two honest caveats. Work that happens on a personal phone or a personal chat account is invisible to this measurement and will be reported as loss, so check whether your channel coverage is complete before accusing anyone. And a logged attempt is not proof of a real attempt, since a call logged with a three second duration is a click, not a conversation. Where the activity export carries durations, look at them.

Reporting and attribution: can you see any of this?

The reporting layer is audited last and fixed first in only one case: when nobody can agree on the numbers, every other finding will be disputed rather than acted on.

The cleanest test takes an hour. Pick one number that leadership sees weekly, then recompute it from raw exports without touching the dashboard. If the two disagree, find out why before anything else in the report is discussed. The usual causes are a filter nobody remembers, a date field that is not the one people assume, records excluded by an owner filter, or two definitions of the same word living in two tools.

SymptomHow to confirm itOwner
Two reports give different totalsRecompute one from raw exportsInbound lead reporting
Large unknown or direct source groupSource value distribution, count the blanksInbound lead attribution
Original source changes over a record’s lifeField history on the source fieldInbound lead attribution
Nobody can produce count A without manual workTime how long it takesInbound lead reporting
No report shows ownerless or untouched recordsRead the current report listInbound lead reporting
Same word means two things in two toolsCompare the definitions in writingLead ops versus RevOps

Attribution problems and handling problems are easy to confuse. A channel that appears to produce nothing may be producing requests that are lost at capture, assigned to nobody, or attributed to direct after a redirect stripped the parameters. Do not cut a channel’s budget on audit evidence until the four counts for that channel specifically are clean.

Is it a leak or a capacity problem?

These two produce almost identical dashboards. Response times rise, follow-up thins out, untouched records accumulate. The difference is whether the work was physically possible, and you settle it with arithmetic rather than argument: for each rep, records assigned per working day and attempts logged per working day, across the period, using the roster for the denominator.

SignalPoints to a leakPoints to capacity
When untouched records appearSpread across all hours and daysClustered in the peak windows
Shape of the response distributionFast group plus a never touched groupWhole distribution shifts later
Attempts per rep per working dayWell below what the team can sustainAt or above the sustainable ceiling
Which records go untouchedArbitrary: one channel, one form, one hourConsistently the lowest priority ones
Effect of adding one personLittle or noneRoughly proportional improvement
Ownerless countAbove zeroZero, everything is assigned and queued
Arrived versus created gapPresentAbsent, capacity cannot cause it

That last row is the reliable separator. Headcount has no effect whatsoever on whether an arriving request becomes a record, so any gap between counts A and B is a leak by definition, no matter how busy the team is. Run the reconciliation before anyone is allowed to say the word capacity.

The honest third answer is both, and it is common. A genuine capacity problem gives everyone a satisfying explanation, and under its cover the process problems stop being investigated. Report them separately: capacity findings go to a staffing or automation decision covered in AI SDR versus human SDR and inbound automation ROI, leak findings go to the layer owners.

How do you rank findings by cost instead of by ease?

The standard failure mode of a good audit: fourteen findings, the team fixes the three easiest, all three are in the reporting layer because reporting is the least disruptive thing to change, and a quarter later nothing has improved. Ranking by effort feels like momentum and reliably produces none.

Rank by cost. Cost here means affected volume, not money, and this guide will not convert one into the other. What you can compute from your own data is the number of records affected in the period, the layer at which they were lost, and whether they can still be contacted. Turning that into a revenue figure requires assumptions about close rates and deal values that the audit has not tested, and that calculation belongs to inbound automation ROI with its assumptions written down.

Ranking inputHow you get itThe trap
Affected volumeCount of records showing the symptom in the periodCounting one record under two findings
Layer positionWhich layer lost itEarly loss is unconditional, not automatically largest
RecoverabilityCan these specific records still be contactedOld records inflate a number nobody can act on
ConcentrationOne channel, one segment, one rep, or spread everywhereConcentrated loss is usually far cheaper to fix
RecurrenceStanding condition or a one-off incidentA one week outage looks huge and fixed itself
Evidence strengthHow directly the export proves the claimA guessed large finding outranking a proven medium one

Do not build a weighted score out of those six. Sort by affected volume among findings that are standing, recoverable and well evidenced, break ties by evidence strength, and only then apply the practical filter: does this fix have a named owner, and can it ship this quarter. Findings that fail the practical filter stay on the list with a note, they do not get quietly reordered to the bottom.

One deliberate exception to volume ranking. A finding that makes other findings unmeasurable jumps the queue regardless of its own size. Missing arrival timestamps, an unwritten routing rule and a source field that gets overwritten are all in that category: until they are fixed, the next audit produces the same uncertainty as this one.

What does the audit output look like?

One table, one row per finding, and nothing else that matters. Adjectives, tool recommendations and named individuals as causes all belong outside the document.

FieldWhat goes in itRule
IDA stable reference numberNever renumber between audits
LayerOne of the sevenExactly one, no shared findings
FindingOne sentence, observableNo causes, no adjectives
EvidenceThe named export or queryA skeptic must be able to re-run it
Affected countRecords in the periodState event or person basis
RecoverableYes, no, or partlyDrives the ranking
Fix ownerOne person by nameNever a team, never a role
Owning guideThe guide that carries the repairOne link, not a plan
StatusOpen, in progress, verified closedClosed requires a re-measurement

A filled row reads like this, with placeholder figures standing in for your own counts rather than any real result: F3, capture layer. Requests arriving on the partner portal channel do not create records on days when the nightly sync fails. Evidence: portal export joined to CRM created dates by day, period April to June, script in the audit folder. Affected count: the daily gaps summed over the period, on an event basis. Recoverable: partly, contacts are still in the portal. Fix owner: named operations engineer. Owning guide: website lead capture. Status: open.

Close the document with a section titled what we could not measure. Channels with no exportable log, work done on personal devices, a period where the audit trail retention had already expired, records deleted before the export. That section prevents the report from claiming more certainty than it has, and it usually turns into next quarter’s instrumentation work.

Operator note. Circulating the findings table without a walkthrough is how audits die. The first reaction to a large capture finding is disbelief, and disbelief aimed at the numbers rather than the process buries the whole report. Present count A, count B and the join that produced the gap, in that order, and let people re-run it themselves. A finding somebody reproduced is a finding somebody will fix.

When is the diagnosis not a leak at all?

Sometimes the four counts line up, response times sit inside the policy, follow-up completes, and revenue is still short. That is a real and valuable result. It means the problem is upstream of handling, and the audit has just eliminated the most expensive assumption in the business.

ObservationLikely diagnosisWhere it goes next
Handling clean, volume adequate, most losses cite price or fitOffer or targeting mismatchLoss reason analysis and ICP definition, not lead ops
Handling clean, volume adequate, quality poor on every channelDemand quality problemAEO and GEO for inbound and channel mix
Handling clean, volume fallingDemand volume problemMarketing programs, programmatic SEO
One channel produces volume that never qualifiesSource quality, not handlingAttribution plus the qualification definition
Everything measurable is fine but nobody trusts the numbersDefinition problemInbound lead reporting
Sales cycle lengthened with no handling changeMarket or pricing, outside this auditCommercial review

The fastest single test is the loss reason distribution. If the leading reason is no response from the client or could not reach, the diagnosis is handling and this guide applies. If the leading reasons are price, timing or wrong fit, more speed will not help, and rebuilding the routing rules is expensive theater. This only works if loss reasons come from a controlled list; free text loss reasons tell you nothing, which is itself a finding for CRM automation.

How do you run this as a recurring review?

The first audit is expensive because you are building the evidence pipeline, not because the analysis is hard. Keep every export as a saved query, and the second one is a reading rather than a project.

CadenceWhat runsWhoOutput
Weekly, fifteen minutesOwnerless count, records with no next task, failure queue depth, records past the response windowOperationsExceptions cleared the same day
MonthlyThe four counts for the closed month, split by channelOperations with the sales leadDrift check against previous months
QuarterlyFull seven layer diagnostic, re-ranked findings, verification that last quarter’s fixes heldNamed audit ownerFindings table
On changeTargeted re-run of the affected layers onlyWhoever made the changePass or a new finding

The on-change row earns its place. Most leaks are introduced rather than inherited: a new landing page pointing at a different endpoint, a routing rule edited to cover a holiday and never reverted, a rep leaving with open records, a CRM field renamed, a chat widget swapped. Tie a short re-run to each of those events and the quarterly audit stops finding month old problems.

Verification is not optional and is usually skipped. A fix is closed when the same query returns a different number over a later period, not when someone says the change shipped. Keep the original query, run it again, record both numbers in the findings row.

Give the audit one named owner. In small teams that is whoever runs operations, in larger ones it is a defined function, and the boundary between that function and revenue operations is drawn in lead ops versus RevOps.

What to fix first, and where each fix lives?

Fix in layer order, not in severity order, with one exception: anything that makes other findings unmeasurable goes first. After that, capture before ownership, ownership before clocks, clocks before follow-up, follow-up before reporting polish. The logic is arithmetic. Improving follow-up on records that were never created changes nothing, and every downstream percentage is computed against a denominator the capture layer defines.

  1. Instrumentation. Arrival timestamps, a source value per channel, a failure queue somebody reads, and the routing and response rules written down.
  2. Capture. Close the gap between counts A and B, channel by channel, starting with the largest. Owned by website lead capture.
  3. Identity. Deduplicate before assignment so ownership and history stop splitting. Owned by CRM automation for inbound.
  4. Ownership. Drive the ownerless count to zero and add a fallback for every rule. Owned by the lead routing playbook.
  5. Response. Start the clock at arrival and act on the tail, not the median. Owned by SLA and speed to lead.
  6. Follow-up. Eliminate the limbo count: no record without either an open task or a closed outcome. Owned by the lead follow-up system.
  7. Reporting. Publish the four counts as a standing report so the next audit is a reading. Owned by inbound lead reporting.
  8. Re-measure. Re-run every query behind a closed finding on a later period and record the new number.

If several layers fail at once, the underlying question is architectural rather than a sequence of repairs, and Lead Hub versus CRM is where that boundary gets decided. The full module map sits in the lead ops stack, the interactive version of the same flow is on the OperStack home page, and scope options are on the pricing page.

Run it yourself first. The method above uses nothing you do not already have, and a team that produces its own four counts argues about fixes instead of about whether there is a problem. If assembling count A is the part that stalls you, a lead operations audit returns the four counts and the ranked findings table built from your own exports, with the queries handed over so you can re-run them next quarter without us. The same reconciliation, run by us against your export, is the free AI readiness assessment.

Is ChatGPT recommending you?

Buyers now ask ChatGPT and Perplexity which company to call. OperStack shows whether they name you, and who they name instead.

Map your stack

Free written assessment: where leads leak between site, chat and CRM, with a fixed price for the fix.

Send the form → Pricing

Frequently asked questions

Why are we losing inbound leads?
Usually not for one reason. Volume leaks at several layers at once: requests that never became records, records nobody owns, records with an owner who never called, and records worked once and abandoned. The audit exists because guessing which of those is happening produces the wrong fix roughly as often as the right one.
How do you audit a lead process?
Pick one closed period. Count four things: requests that arrived at any channel, records created, records with a live owner, and records with logged work. Every gap between two counts belongs to a specific layer. Confirm each gap with an export you already have, then rank the findings by how much volume they affect.
How do you know if leads are being ignored?
Count records with no logged outbound attempt at all, and separately count records with no open task and no closed outcome. Both numbers come straight from a CRM activity export. Averages hide this completely: a healthy median response time coexists comfortably with a group of records nobody ever touched.
Why do CRM lead counts not match the website?
Because they measure different things. Analytics counts sessions and events at the edge, the CRM counts records that survived capture, integration and deduplication. Phone calls, chat apps and inbound email never appear in web analytics at all. The gap is normal; the gap you cannot explain line by line is the finding.
How often should you audit lead handling?
Full diagnostic once a quarter, the four counts monthly, and a short exception check weekly for ownerless records and missed response windows. Also re-run the affected layers whenever something changes: a new landing page, a new channel, a routing rule edit, or a rep leaving with open records.
What should a lead audit report contain?
One table with one row per finding: the layer, the finding in a sentence, the exact export or query that proves it, the count of affected records in the period, one named person who owns the fix, and the guide that carries it. Plus an explicit list of what you could not measure.
How do you prioritize lead process fixes?
By affected volume and recoverability, not by how easy the fix looks. Teams that rank by effort fix the reporting layer first, because reporting is the least disruptive to change, and then wonder why nothing improved. Sort by standing, recoverable, well evidenced findings, and only then check that a fix can actually ship.