Speed Audit

Mystery Shopper Speed-to-Lead Auditor

We enquire on a prospect's landing page as a real-looking buyer, time how fast their team responds by email, WhatsApp and phone, then use those exact timings to open a sales conversation for Digital AI 360.

You (operator)

Give it a URL

Run /audit-site <url> in Claude Code. Afterwards your job is to review and send.
Claude Code = the Brain

Judgment work

Researching the founder, mapping form fields, matching ambiguous calls and messages, grading, and writing the pitch.
Deterministic code

Everything measurable

Browser automation, 24/7 webhooks, timestamps, classification and delay maths. The app makes no LLM API calls.
3
channels timed: Email, WhatsApp, Voice
24 h
grading window, with observation running for 7 days
0
messages sent to a prospect without your review

Architecture

Click any box to see what it does, where it runs and what it writes. The highlighted arrows show what it talks to.

OPERATOR SIDE THIS VPS OUTSIDE WORLD You (operator)slash commands, review, send Claude Code CLIthe Brain/audit-site /shop-leads/match-telemetry /score-leads Local data/evidence ledger, parkedtelemetry, screenshots Operator CLIapp.cli (JSON in, JSON out) Shopper (Playwright)extract-dom, submit-form Frappe CRM (ERPNext)CRM Lead + Speed Audit fields Webhook receiverFastAPI in Docker, 24/7/sarvam-inbound /waba/erpnext-email Prospect's landing pagethe enquiry form we fillas persona "Rahul Sharma" Prospect's sales teamreplies through:email → audit+ aliasWhatsApp → Meta WABAphone → honeypot number(Sarvam voice agent)

The admin journey

An audit from start to finish, as the operator sees it. Each step shows who does the work: You Claude Automatic

Lead statuses

The custom_audit_status field drives everything. It has no default, so organic leads in the CRM are never touched. Click a status.

How replies get matched to leads

Email is easy: the audit+LEAD-ID alias names the lead. Calls and WhatsApp messages arrive from unknown numbers, so the webhook scores each Auditing lead. Try it with three sample leads.

Sample Auditing leadDomainKnown sender phone
Sunrise Dental Caresunrisedental.in+91 98400 11111
BrightPath Academybrightpath.co.innone yet
Kaveri Franchise Hubkaverifranchise.comnone yet
Try:

Scoring rules

  • 3: the sender's phone is in the sender map or matches the lead's mobile
  • 2: the lead's company core name or root domain appears in the text
  • 1: the persona name ("Rahul") appears in the prospect's lines
  • Lead score = best signal + 0.1 for each extra signal. Only a unique top score matches.
Every audit uses the same persona, Rahul, which is also the Sarvam agent's name. So a persona-only hit is decisive only when exactly one lead is Auditing. In practice the company name and sender phone do the matching. Once a match scores 2 or more, the sender's phone is remembered, so their follow-ups match automatically.

Grade calculator

The code suggests a grade from the first human response on each channel. Auto-replies, WhatsApp templates and robocalls don't count. Claude may move the grade one step, but only with evidence it can quote. Enter delays in minutes and leave a field blank for no human response.

A missed call still counts as a human attempt ("unknown" is credited to the prospect). Responses after 24 h (1440 min) don't count towards the grade.

Band (fastest human response)Grade

−1 grade if only one channel got a human response (never below D). Once a cohort (e.g. dental/coimbatore) has 5 or more leads past 24 h, quartile ranking within the cohort replaces the fixed bands.

Command reference

Run from /root/digitalai360-auditor. Slash commands go in Claude Code. CLI commands are prefixed with .venv/bin/python -m and print one JSON object each.

CommandWhat it doesWho runs it

Troubleshooting

What you'll actually run into, and what to do about it.

Guardrails

Never automatic

  • The pitch is only saved (Ready for Review). You send it.
  • The courtesy note ("please close my enquiry") is sent only when you run send-courtesy.
  • Grading decisions are Claude's, with every adjustment explained. You approve them.

Fair measurement

  • T0 is stamped only when the page shows success and a real form request returned 2xx/3xx.
  • Submissions happen only inside the submit window (Tue–Thu 10:30–12:30 IST).
  • No human reply means "none in X observed", never a made-up number.
  • Business-hours delay is reported next to wall-clock delay.

Honest shopping

  • One opt-in per root domain. Duplicates are refused.
  • Anti-bot honeypot fields are never filled. Hard CAPTCHAs go to manual.
  • Calendar-only pages are skipped, so we never book a rep's time.

Research hygiene

  • Every fact has a source URL in the research notes.
  • LinkedIn is never fetched. Profile URLs come only from search results.
  • Emails are never guessed. With no confident founder, the pitch addresses the team.