Lessons (3)
← All modules

A phone lead without a phone number is not a lead

  • production DB rows
  • branch-verified webhook replay

What you're doing and why

Your AI receptionist answers every call, and every call becomes a lead in your dashboard. But a lead you cannot call back is worthless. We found that phone leads were arriving with every detail blank — no name, no number, no job — even though the phone network always knows who is calling. This lesson is about the difference between data the caller volunteers and data the system already has, and why your pipeline should always save both.

The exact steps

  1. Check whether it's one bad record or a pattern. We listed recent leads: every website-form lead had full details, but EVERY phone lead was blank. A pattern means a pipeline bug, not a bad call.
  2. Ask "did the data ever exist?" The caller's number travels with the call itself — we confirmed all three blank leads had real caller IDs sitting in the call records (a North Carolina number for the Shelby site, a Missouri number for Ozark). The data existed; it was just never copied into the lead.
  3. Fix the pipe at the point of entry. The webhook that receives the AI's end-of-call report now does two new things: it reads the AI's own call summary fields (the caller's name, town, job, urgency — when the caller stayed on the line long enough to share them), and it ALWAYS fills the phone number from the inbound caller ID when the caller never said one out loud.
  4. Prove it without polluting the real system. We replayed a fake call report against a throwaway copy of the database (with email sending disabled) and confirmed the lead landed with name, town, job, urgency AND the fallback phone number — then threw the copy away.

What it looked like for us

  • Before: Lead #38 — "Phone: —, Town: —, Job: —" with a note that the caller hung up after the greeting. Un-actionable; Steve saw it in the dashboard and reported it.
  • After (verified on a database copy): the same style of call produces name: Mark Test, phone: +19805550000, town: Shelby, job: tank pump-out, urgency: this week — the number coming from caller ID because the fake caller never stated one.

Gotchas

  • Tool-captured data vs system-known data. The AI receptionist collects details by asking questions — a caller who hangs up early gives nothing. But caller ID, call duration, time and cost arrive automatically with every call. Always store the system-known data as a fallback; never leave a lead record completely empty when the network handed you the essentials for free.
  • Same-shaped data should go through the same parser. The AI's structured call summary used the exact field names the lead-saving tool already used — one shared parsing function handled both with zero new mapping code. Check for existing helpers before writing new ones.
  • Test replays can have real side effects. Replaying a webhook locally still sends real emails and can trigger paid data lookups if your keys are active. Disable the sending keys in the test environment first, then replay.
  • Fill gaps, never overwrite. The fix only fills empty fields — anything the caller actually told the AI stays untouched. When two data sources can disagree, the one the human provided wins.
Inspect your lead quality