Is Your Moving AI Creating Bad Leads? How to Check

On this page
Last verified October 18, 2026, against the SmartMoving help center, FMCSA consumer pages, the FTC's FY2025 Do Not Call Data Book and FCC 24-17. Product docs and rules change. Check them again before you rely on them.
This post is for the product team at moving CRM software that built its own AI phone agent. Your agent answers sales calls for hundreds of movers. It turns each call into a lead record. Sales reps then call that lead back, run a survey and send an estimate.
A wrong lead fails quietly. Nobody hears the agent mishear one digit of a phone number. The record looks complete. The rep dials, gets a stranger, and marks the lead "bad." The mover blames the lead source, not your agent.
Two sibling posts cover the neighbours. The AI receptionist for moving companies playbook covers the whole call and FMCSA rules. The moving estimate accuracy guide covers wrong quotes. This one covers the lead record itself: is it real, reachable and routed right?
What a bad lead looks like when an AI writes it
AI lead quality: the share of AI-created lead records a sales rep can act on without fixing them first. A good lead is reachable, complete, unique, real, in the service area and assigned to the right rep.
Lead intake looks simple. The agent collects name, phone, email, move date, origin ZIP, destination ZIP, home size, move type and lead source. Then it calls a create-lead tool and the CRM applies its routing rules.
Each field can break in its own way. The table below is a failure taxonomy for moving leads. Every row maps one defect to the field that carries it and the check that catches it.
| Defect | How it happens on the call | What breaks downstream | Automated check |
|---|---|---|---|
| Unreachable phone | One digit misheard or dropped | Rep dials a stranger, lead marked dead | NANP format, compare with caller ID |
| Wrong move date | "Fifth" heard as "fifteenth", month assumed | Survey booked for the wrong week | Date window, read-back present |
| Missing destination | Caller unsure, agent moves on | No estimate possible, rep calls back | Required-field rule per move type |
| Duplicate lead | Repeat caller, new record created | Two reps call one shopper | Match on phone, date and ZIP |
| Spam or robocall lead | Silent or recorded call becomes a lead | Rep time wasted, lead counts inflated | Caller ID signals, talk-time floor |
| Out-of-area, unflagged | ZIP outside service area, no flag | Rep calls a job the mover can't take | ZIP against tenant service area |
| Wrong rep assignment | Move type or source tagged wrong | Long-distance lead lands with local team | Routing rule replay |

Notice the pattern. None of these errors throws an exception. The create-lead call succeeds with a valid payload. That is the same silent-failure shape we describe in detecting silent tool failures.
Why voice capture corrupts leads without anyone noticing
Phone numbers fail digit by digit
A US phone number is ten digits. Every digit is a chance to be wrong. The math compounds fast.
Say your speech recognition gets each digit right 99% of the time. Assume errors are independent, which is a simplification. The whole number is right 0.99^10 = 90.4% of the time. So about 1 lead in 10 carries a wrong number. At 99.6% per digit, it is 0.996^10 = 96.1%. That still leaves about 4 bad numbers per 100 leads.
Real data looks worse than the clean math suggests. The SNuC corpus paper (LREC 2022) tested ASR on spoken identifiers. A baseline system scored 96.6% word-level accuracy on partner data. Yet only 77% of whole identifiers came out fully right. About one in four had an error. Adapting the model with task-specific data lifted that to 91.7%. The authors put the deployable bar at fewer than 1 error in 10.
Their finding on speakers matters too. In a preliminary check, 6.2% of numbers were misread by the person saying them. About two-thirds of those slips went unnoticed by the speaker. So some wrong digits start with the caller, not the model.
Phone audio makes it harder. Callers chunk numbers ("five five five, oh one two...") and say "double seven." They correct themselves mid-string: "four, no, nine." Your agent must keep the last value, not the first.
Format checks catch only part of this. Per NANPA, US numbers follow NXX-NXX-XXXX, where N is 2 through 9. A number starting "1" in the area code fails. But a single wrong digit in the last four still passes. There is no check digit to save you.
Dates, ZIPs and move type fail differently
Move dates break on ordinal words and relative phrases. "The fifth" and "the fifteenth" differ by one syllable. "End of next month" needs the call date to resolve. A June call about "the first" may mean July 1.
ZIP codes carry the same compounding risk as phone numbers, with five digits instead of ten. A wrong destination ZIP can turn a local move into a long-distance one. That flips the move type, the rep team and the estimate method.
Extraction fails even when the words are right. Szymański et al. (ACL 2023) found that entity recognition models "fail spectacularly even if no word errors are introduced by the ASR." On full task dialogues, SpokenWOZ reports the best state tracker at 25.65% joint goal accuracy. That metric demands every slot be right at once, which is exactly what a lead record needs.
For the deeper mechanics of entity capture, see our post on STT entity accuracy.
The five lead quality metrics to track
These five metrics turn moving company AI lead quality into numbers. They cover the defect table. Compute each per mover, per lead source and per capture channel. A blended number across all tenants hides the mover whose config is broken.
| Metric | Formula | What it catches | Starting gate (tune per mover) |
|---|---|---|---|
| Contactability rate | Leads reached by a human within 7 days ÷ leads created | Wrong digits, fake numbers | AI within 5 points of human |
| Field completeness | Required fields present and valid ÷ required fields | Skipped questions, bad formats | 95% or higher |
| Duplicate rate | Leads matching an open lead ÷ leads created | Repeat callers, aggregator overlap | Below human-entry baseline |
| Spam rate | Leads later tagged spam or junk ÷ leads created | Robocalls, silent calls | Track trend, audit false positives |
| Lead-to-estimate rate | Leads with an estimate sent ÷ leads created | Everything above, plus fit | AI within 5 points of human |
The gates are our suggested starting points, not industry benchmarks. Set real ones from each mover's own human-captured leads.
Contactability rate needs a cause split. "No answer" is a shopper problem. "Wrong number" or "not in service" is often your problem. Ask reps to pick a disposition code, then join it to the lead.
Field completeness must be per move type. A local move may not need a destination ZIP if the mover quotes hourly. A long-distance move always does. Keep the required-field list in the tenant config, not the prompt.
Lead-to-estimate rate is the business number. It folds every defect into one rate. Use it to size the problem, then use the other four to find it.
For broader qualification metrics such as budget and timeline scoring, see lead qualification voice agent metrics. This post stays on record quality.

A worked example
Here is an illustrative month for one mover. The numbers are assumptions for the math, not measured data.
The AI creates 1,240 leads. Reps reach 71% of them, so 880 are reachable. That leaves 360 unreachable, or 29%. Estimates go out on 18% of all leads, which is 223.
What do 360 dead leads cost? SmartMoving's KPI guide for movers cites $75–$200 as a typical Google Ads cost per lead. If those leads came from paid search, that is 360 × $75 = $27,000 to 360 × $200 = $72,000 of spend. Not every unreachable lead is your agent's fault. Some shoppers just never pick up. The job is to find the share that is.
Comparing AI and human capture fairly
Should you compare AI-captured leads with human-captured leads? Yes, but control the mix. The AI often answers after hours, weekends and overflow. Those callers differ from 10 a.m. weekday callers. Aggregator leads also differ from Google leads.
Compare within the same lead source and the same hour bucket. Otherwise you are measuring the traffic, not the agent.
Then check you have enough leads. To detect 71% versus 78% contactability at 95% confidence and 80% power, use the two-proportion formula:
n = (1.96 + 0.84)² × (0.71 × 0.29 + 0.78 × 0.22) ÷ 0.07² ≈ 7.84 × 0.3775 ÷ 0.0049 ≈ 605 leads per group.
A mover with 200 leads a month can't show a 7-point gap in one month. Pool similar movers or look over a quarter.
Duplicates, aggregators and robocalls
Why duplicate leads multiply
Moving shoppers call more than once. They call back to add a piano or change a date. A lead aggregator may sell the same shopper to several movers, and the shopper then calls each one. Each call can spawn a new record.
Vendors handle this differently. SmartMoving's Smart Scout documentation says it checks the caller's phone number against existing leads and opportunities. It updates a match instead of creating a duplicate. A configurable window, 30 days by default, sets how old a record must be before a new one is created.
Here is the gotcha. Phone matching fails when the phone was misheard. A wrong digit creates a duplicate lead and an unreachable lead at once. Two defects from one error.
Use a composite match key. Normalise the phone to E.164. Match on phone, or on caller ID, or on name plus origin ZIP plus a move date within 14 days. Log which rule matched so you can audit it.
Why caller ID is your best free check
Every inbound call carries the calling number. Compare it with the number the agent captured. A mismatch is not always an error. The caller may give a mobile while calling from work. But a mismatch with no read-back in the audio deserves a flag.
The read-back is the cheapest fix. The agent says the number back in groups of three, three and four. The caller confirms. Score whether the read-back happened, and whether the stored value matches what was read back.
Spam and robocall leads
Robocalls are not rare. The FTC's FY2025 Do Not Call Data Book logged 2,618,077 complaints. About 61.2% were about robocalls. Some of those calls land on movers' sales lines.
Smart Scout's docs say it filters spam using caller ID signals and classifies silent calls as junk. That is a reasonable design. But silence has two causes: a robodialer, or a real caller on a bad line. Audit a sample of calls tagged junk. A false positive is a lost customer you never see.
Track spam rate in both directions. Spam leads that reached the CRM waste rep time. Real leads dropped as spam cost revenue.
Brokers are a different record type
Some callers are not shoppers. FMCSA's movers vs brokers page says a broker "acts as a middleman; not authorized to transport goods." It also notes that brokers for interstate moves must use FMCSA-registered movers. A broker call placing a job should not be scored as a consumer lead. Tag it, or your lead-to-estimate rate will drift.
Out-of-area leads and wrong rep assignment
Each mover has a service area. Some run local crews only. Some haul interstate. A lead with an origin ZIP outside the area should still be saved, but flagged. Unflagged, it costs a rep a callback to learn it is unworkable.
Routing errors are subtler. Smart Scout's docs suggest a lead routing rule that assigns records with Referral Source = Smart Scout to the right reps, with round-robin support. Your platform likely works the same way. Routing reads fields the AI wrote. If the agent tags a long-distance move as a local move, the rule sends it to the wrong team.
So test routing as a replay. Take the stored lead fields. Run them through the tenant's rules. Compare the result with the rep who should own the job, given the true facts from the audio.
The diagram below traces one unreachable lead to its cause.

A simplified lead QA check in Python
This sketch runs after each AI-created lead. It is simplified and assumes your own field names. It flags defects; it does not fix them.
import re
from datetime import date, timedelta
NANP = re.compile(r"^\+1[2-9]\d{2}[2-9]\d{6}$") # NXX-NXX-XXXX in E.164
def lead_defects(lead: dict, call: dict, tenant: dict, today: date) -> list[str]:
"""Return defect labels for one AI-created moving lead (simplified)."""
defects = []
phone = lead.get("phone_e164", "")
if not NANP.match(phone):
defects.append("invalid_phone_format")
elif call.get("caller_id") and phone != call["caller_id"] and not call.get("phone_read_back"):
defects.append("phone_mismatch_no_read_back")
required = tenant["required_fields"][lead.get("move_type", "unknown")]
defects += [f"missing_{f}" for f in required if not lead.get(f)]
move_date = lead.get("move_date")
if move_date and not (today <= move_date <= today + timedelta(days=400)):
defects.append("move_date_out_of_range")
if lead.get("origin_zip") not in tenant["service_zips"] and not lead.get("out_of_area"):
defects.append("out_of_area_unflagged")
if call.get("talk_seconds", 0) < tenant.get("min_talk_seconds", 15):
defects.append("possible_spam_lead")
return defectsRun it on every lead, not a sample. A 2% defect hidden in one mover's config won't show up in a spot check. Our post on scoring every call covers why.
The code catches format and config errors. It cannot catch a valid-looking wrong value. For that you need the audio.
Why the transcript can't tell you which digit was wrong
When a lead is unreachable, teams open the transcript. The transcript says "555-0127." The CRM says "555-0127." Everything matches. Case closed?
No. The transcript came from the same speech recognition that wrote the lead. If the model heard "0127" when the caller said "0172," both records agree and both are wrong. Only the audio shows what the caller said.
That is the core of transcript versus audio evaluation. A transcript-based judge is a deaf referee. Evalgent evaluates calls from the audio, not only the transcript, so a judge can compare what the caller said with the value stored.
How to check your moving AI for bad leads
Use this audit to check moving company AI lead quality once per quarter per mover. Repeat it after any prompt or flow change.
1. Pull 30 days of AI-created leads per mover. Join each lead to its call recording, caller ID, rep disposition and estimate status.
2. Compute the five metrics by source and hour. Put AI and human-captured leads side by side within the same lead source.
3. Root-cause every unreachable lead. Listen to the phone number segment. Label it: caller slip, ASR error, no read-back, read-back mismatch, or genuine no-answer.
4. Check routing by replay. Feed stored fields through the tenant's rules and compare with the correct owner.
5. Turn failures into test scenarios. Each root cause becomes a scripted caller: fast talker, "double seven," self-correction mid-number, cell noise, a repeat caller from an aggregator.
6. Run those scenarios before every release. Assert on the stored lead fields, not the agent's words. Our guide to shipping prompt changes safely covers gating.
7. Monitor production leads daily. Alert when any mover's contactability or completeness drops below its own baseline.
Step 5 is where most teams stall. Writing callers by hand is slow. Evalgent generates test scenarios from the agent's prompt and flows. It runs them with caller profiles that vary accent, speech pace, interruptions, background noise and language. Calls reach the agent over phone, SIP or WebRTC.
Step 7 needs production data. With Evalgent's call monitoring, teams push call recordings. Calls are transcribed, mapped to scenarios and judged, with flags for tool-call failures and policy failures. Custom metrics such as "phone read-back present" can run on every call.
Your agent serves many movers with different configs. The multi-tenant voice agent testing guide shows how to build a test matrix across tenants.
A note on calling the lead back with AI
Some teams add an AI callback for missed leads. That moves you from inbound to outbound rules. In FCC 24-17 (February 2024), the FCC said TCPA restrictions "encompass current AI technologies that generate human voices." AI voice callbacks generally need the called party's consent.
Consent revocation rules are also shifting. A Squire Patton Boggs summary of the FCC's new order (FCC 26-67) says it narrows the "revoke all" rule for informational calls. As of October 2026, it takes effect 30 days after Federal Register publication, which had not yet occurred. Our speed-to-lead TCPA post covers consent checks in detail. This is not legal advice.
Frequently asked questions
How do you measure lead quality for a moving company?
Measure moving company AI lead quality with five rates per mover: contactability, field completeness, duplicate rate, spam rate and lead-to-estimate rate. Split each by lead source and by AI versus human capture. Root-cause unreachable leads from the call audio. A blended rate across all movers hides the one tenant whose config is broken.
Why are my moving leads not answering the phone?
Moving leads often don't answer because the stored number is wrong. Speech recognition errors compound across ten digits, so one wrong digit sends reps to a stranger. Compare the captured number with caller ID, check whether the agent read the number back, and listen to the audio. Genuine no-answers are shopper behaviour; wrong numbers are a capture defect.
How do you stop duplicate leads in a moving CRM?
Stop duplicate leads in a moving CRM with a composite match key. Match on normalised phone, caller ID, or name plus origin ZIP plus a nearby move date. Phone-only matching fails when the phone was misheard. Update the existing lead instead of creating a new one, and log which rule matched so you can audit it.
Can an AI phone agent filter spam calls for movers?
An AI phone agent can filter spam calls for movers using caller ID signals and silence detection. SmartMoving's Smart Scout docs describe filtering spam via caller ID signals and classifying silent calls as junk. Audit the junk bucket, though. A real caller on a bad line can look like a silent robocall, and that lost lead never shows up.
What is a good contact rate for moving leads?
A good contact rate for moving leads is one that matches your human-captured leads from the same source and hours. There is no reliable public benchmark for AI-captured moving leads. Set each mover's baseline from its own human intake. Flag the AI if contactability falls more than about five points below that baseline.
Should you compare AI-captured leads with human-captured leads?
You should compare AI-captured leads with human-captured leads, but only within the same lead source and time bucket. AI often handles after-hours and overflow calls, which differ from daytime traffic. Detecting a 7-point contactability gap near 71% needs roughly 605 leads per group at 95% confidence and 80% power.
How often should you audit AI-created moving leads?
Audit AI-created moving leads automatically on every lead, every day, with format, caller ID and required-field checks. Run a deeper audit with audio root-causing quarterly per mover. Also run it after every prompt, model or flow change, because one edit ships to every mover at once.
What fields should an AI capture from a moving lead?
An AI should capture name, phone, email, move date, origin ZIP, destination ZIP, home size, move type and lead source from a moving lead. Required fields differ by move type: long-distance moves always need a destination. Read back the phone number and move date. Flag out-of-area ZIPs instead of dropping the lead.
The bottom line
Moving company AI lead quality is measured on the CRM record, not the call. Track contactability, completeness, duplicates, spam and lead-to-estimate per mover, then trace every unreachable lead back to the audio.
Related Articles

How to automate voice agent testing: synthetic callers vs manual QA
Learn how ai test automation replaces manual QA for voice agents. Compare synthetic callers vs human testers, with a 5-step framework to scale without hiring.
Read more
AI Agent Testing vs Voice Agent Testing: What General Tools Miss for Voice
AI agent testing measures text outputs. Voice agent testing measures behaviour through an acoustic pipeline. Five failure categories general tools miss.
Read more