CRM reporting and automation: track response time per lead
CRM reporting and automation for speed-to-lead: log first-response time by lead source and report it to your team without manual spreadsheets.

CRM reporting and automation for lead response starts with two timestamps on every lead: when it arrived and when your first reply left. Subtract them, store the seconds beside the lead source, and let a scheduled report do the rest. Below are the fields, a sample payload, and the failure cases for Zillow, Realtor, Facebook and website leads.
Define the clock before you build it
Most disputes about response time are really disputes about definitions. Settle three events up front and name them the same way everywhere:
arrived_at: the moment the lead event reaches your own intake endpoint. If a portal sends its own timestamp, store that too, but measure from your arrival time so every source runs on the same clock.first_ai_response_at: the moment the first outbound text or call was accepted by your messaging or voice provider. Not when the lead replied, and not when someone logged a note later.first_human_touch_at: the first call, text or email an agent sent by hand.
Keep the AI and human numbers apart. The first tells you whether the automation is fast. The second tells you whether agents pick up the conversation once the system has started it. A team leader who needs proof usually needs both.
Where the capture step sits in the workflow
In the Real Estate Speed-to-Lead System, every lead from Zillow, Realtor, Facebook or your website lands at an intake step. From there the system sends an AI text and voice response in under 60 seconds, runs a 14-day nurture, and books appointments back into Follow Up Boss, kvCORE or Lofty. The intake step is where the record is born, so it is also where arrived_at gets stamped and the source gets normalized.
Portal and ad leads do not pass through a form of yours. They arrive through the CRM or a lead feed, and the intake step reads them from there. Your website and landing pages are different: they need a form, and that form should hand over clean data.
For that we use Qwenvo, a free form builder our team builds. It has hidden fields, webhooks to any URL, and a partial submissions toggle, and those are on for every account at $0. Hidden fields carry lead_source, the campaign and the page URL without asking the visitor anything. The webhook posts the submission to your intake endpoint. Partial submissions mean a visitor who typed a phone number and then left still shows up as an incomplete row in the submissions table. To see where people quit before they ever hit submit, the form drop-off analytics guide covers it.
Two honest notes. Qwenvo launched in October 2026, so it has few public reviews yet. It is also hosted in the United States, which matters if your brokerage in the UK or Australia has data-location rules. Any form tool taht sends a webhook and supports hidden fields will do the same job here.
Set it up step by step
- Fix your source list. Use lowercase slugs:
zillow,realtor,facebook,website,other. Free-text source nmes are what turn a report into a cleanup project. - Build the website form. Ask for name, phone, email and one question about what they want. Make phone required, because speed depends on being able to text or call. Add hidden fields for
lead_source,utm_campaignandpage_url. The hidden fields help article shows how to fill them from the URL. - Point the webhook at intake. In the form's settings, add your intake URL. The webhooks help page lists what gets sent.
- Stamp and dedupe at intake. Generate a
lead_id, recordarrived_atin UTC, and check for an existing lead with the same phone or email in the last few minutes. If one exists, attach the event to it instead of starting a second ckock. - Stamp the response. When the provider accepts the first text or starts the first call, write
first_ai_response_atandfirst_ai_channel. If the send fails, reccord the failure and retry, but do not stamp a success. - Write back twice. Put the seconds into a numeric custom field on the CRM contact so agents can see it, and append the full record to a log table that you treat as the source of truth.
- Schedule the report. Weekly is enough for most teams. Daily helps in the fisrt month while you tune things.
The record to write for every lead
Here is the shape we log. The field names are our convention and the values are examples, so rename them to fit your CRM.
{
"lead_id": "ld_8f3a21",
"source": "zillow",
"arrived_at": "2026-11-06T14:02:11Z",
"first_ai_response_at": "2026-11-06T14:02:34Z",
"first_ai_channel": "sms",
"first_human_touch_at": null,
"seconds_to_ai_response": 23,
"within_60s": true,
"held_for_quiet_hours": false,
"is_test": false,
"crm_contact_id": "fub_104522"
}
seconds_to_ai_response and within_60s are computed once at write time, so the report never has to parse timestamps. held_for_quiet_hours and is_test exist so that deliberate delays and your own test submissions do not drag the numbers.
Reporting without spreadsheets
Once every lead carries the same fields, the report is a set of saved views. If your CRM can report on custom fields, build them there. If it cannot, point a scheduled query at the log table and send the result to email or Slack. Qwenvo's AI triage can post to a Slack incoming webhook, which is handy for the website-form side of the same alert.
| View | Cut by | Question it answers | Watch for |
|---|---|---|---|
| Median seconds to first AI response | Source | Which source is slow? | A source with few leads gives a noisy median |
| Share answered within 60 seconds | Source, hour of day | Are we hitting the promise? | Quiet-hours leads flagged separately |
| Seconds to first human touch | Agent or team | Do agents follow up after the automation starts? | Leads reassigned mid-stream |
| Leads with no response logged | Source | Where is an integration broken? | Failed sends versus missing events |
| Appointments booked by response bucket | Under 60s, 1 to 5 min, over 5 min | Does speed move bookings? | Correlation only; lead quality differs by source |
Lead with the median and the share inside 60 seconds. An average gets pulled around by a handful of overnight leads and tells you less.
Failure cases that corrupt the numbers
- Duplicate delivery. Webhooks and portal feeds can send the same lead twice. Keep the earliest
arrived_atand discard the laer event. - Quiet hours. If your system holds texts overnight on purpose, flag those leads and report them in their own row. Otherwise one 7 a.m. send makes a source look broken.
- Time zones. Store everything in UTC and convert only in the report. Mixed zones are how a 20-second response becomes a negative number.
- Failed sends. A text rejected by the carrier is not a respomse. Log the status and exclude it from the speed number, but count it in "no response logged."
- Test leads. Your own demo submissions will be your faastest leads. Flag them at intake.
- Overwritten CRM fields. Someone will edit a contact and clear the field. This is why the log table is the source of truth and the CRM field is a convenience.
Questions teams ask
Should I report average or median response time?
Report the median and the share of leads answered within 60 seconds. A few slow overnight leads can drag an average far from what a typical lead experienced.
Can I do this with only my CRM's built-in activity log?
Partly. If the CRM records the lad's creation time and the first outbound activity, you can compute the gap. Check that the activity time is when the message was sent and not when an agent logged it afterward.
Does a fast response time prove the system works?
It proves the automation is doing what it promised. Whether speed produces appointments is a separate question, so put booked appointments next to the response buckets. Treat the pairing as a signal, since lead quality varies by source.
Do I have to use Qwenvo for the website form?
No. You need a form that sends a webhook and carries hidden fields. Qwenvo is a good fit because those featues cost nothing, along with removing the badge, using a custom domain such as forms.yourbrokerage.com, and adding unlimited teammates.
Next step
This week, pull your last 50 leads and check which sources give you a reliable arrival time. Then add arrived_at and seconds_to_ai_response to your CRM as custom fields so the first report has somewhere to land.
Real Estate Speed-to-Lead System
Third-party platform and model usage billed to you directly. No lock-in. Live in 7 days.