The enquiry, as submitted Example input
- Name
mark k.
- Phone
8 600 00000
- Email
Mark.K@Example.com
- Sent
31/10 23:40
Hi, we're looking to redo our kitchen. Budget around 18 000 €, and we'd like to start in 2 weeks if possible.
Real enquiries arrive messier than this: four languages, typos, missing fields, budgets in the wrong currency.
Cleaned and checked, before any AI sees it
Lithuanian phone formats become international, and timestamps survive the daylight-saving switch. The duplicate key never includes AI text; defect 1 below explains why.
Read by AI into structured fields
{
"language": "en",
"service": "kitchen",
"budget_eur": 18000,
"urgency": "soon",
"is_spam": false,
"injection_attempt": false,
"summary": "Kitchen renovation, about €18k, start in 2 weeks"
}
Seven of the eleven fields, simplified. The AI classifies; it never decides what happens next.
Routed by rules, in order
- Spam?stop and log itno
- Trying to manipulate the AI?a person reviews itno
- Service or budget missing?ask only for what's missingno
- Budget and timing above the hot thresholds?hotyes
- Otherwisewarm–
RouteHot
Simplified. The real rules and thresholds are version-controlled JavaScript, tested locally against the whole test set before every change.
The owner knows within seconds
# hot-leads
LI
Lead intakeAPP
Hot lead: kitchen renovation
Budget €18,000 · Start in about 2 weeks · English
Mark K. · +370 600 00000 · mark.k@example.com
He hasn't read a word of the enquiry, and he already knows it's worth a phone call.
A reply is drafted, then held for a person
SubjectYour kitchen renovation enquiry
Hi Mark, thanks for getting in touch about your kitchen. A budget of around €18,000 and a start in two weeks sounds workable. Could we arrange a short call 15-minute call to talk through the details?
RejectApproveApproved
The owner can change anything or reject it outright. Nothing reaches a customer that a person hasn't read and approved.
Sent, and saved to the CRM
GmailTo mark.k@example.com · Your kitchen renovation enquirySent
…Could we arrange a 15-minute call to talk through the details?
HubSpot contact
- Name
- Mark K.
- Service
- Kitchen
- Budget
- €18,000
- Route
- Hot
The approved version is the one that's sent, edits included. A returning customer updates their existing contact instead of creating a new one.
Automation B syncs the company's own system
- POST
/api/leads
- Key
Idempotency-Key: 9f2c…a71e
- →Job created
- POST
/api/leadsretry, same key
- →Same job returned, no duplicate
Retries can't create duplicates. If the job system is down, the office gets an alert, and re-syncing is one click once it's back.