← All builds

Speed to lead

Demo build

Every lead gets a real reply in under a minute, the urgent ones land on your phone, and nothing falls through the cracks, even when you're on a job.

Screen capture pending

What it does now

Form to phoneurgent lead, measured
2.5 s
CRM down to phonewith the lead attached
2.3 s
Test leadsrouted correctly
6 of 6

The brief

It's 9 at night. You're eating dinner with your kids. Someone's water heater just burst. They fill out forms on three websites. Yours writes back in seconds. By name. About their water heater. The other two answer tomorrow. You got the job. You never put your fork down.

What I built

  • Reads each message and pulls out who they are, what they need, how urgent it is, and any budget
  • Writes a reply in the customer's own words and sends it inside ten seconds
  • Puts the urgent ones on the owner's phone in red, and keeps the rest quiet
  • Fills the CRM with nobody typing anything
  • Follows up on its own if the lead goes quiet, and stops the moment a person replies
  • Catches its own failures: if the CRM goes down, the owner still gets the lead on their phone, with the error

Take it

Want one that performs like this?

You tell me what the site has to do. I build it, you watch it get built, and you get the numbers on this page for your own business.

Get a quote

Usually a reply the same day.

How it was built, and what broke

Who it is for, and who it is not

Anyone where a lead going cold costs real money. Heating and plumbing, roofing, dental, law, real estate.

It is not for someone with five leads a month who already calls them all back the same afternoon. If that is you, you do not need this, and I will say so.

The company in the recording, Ridgeline Heating & Plumbing, is made up. So is every person who sends a lead.

Why it is not the free autoresponder

An instant “thanks, we got your message” ships free in every CRM. Nobody pays for that. This one reads the message, ranks it, fills the CRM, follows up on its own, and tells you when it breaks instead of losing the lead silently. The error branch is the difference between a toy and a system.

How a lead flows through

Left to right on the canvas.

  1. Form submitted. The website form posts to a webhook.
  2. Shape the lead. Trim the fields, stamp the time, build the prompt.
  3. Read the lead. Claude, temperature zero, returns one JSON object: first name, service, urgency, budget, a one-line summary for the owner, and the reply to the customer.
  4. Parse and validate. If the JSON is bad or the model is down, urgency falls back to normal and a safe generic reply goes out. It never dies here.
  5. Log the lead. A row in Airtable.
  6. Reply to the lead. The reply the model wrote, plus one honest line under it: this reply went out automatically so you would hear back fast, a real person is next.
  7. How urgent? High goes to the owner’s phone in red with the summary, phone, email and budget. Normal and low get one calm line.
  8. Wait. Two days in production, two minutes in the recording.
  9. Still waiting? If the row is still marked new, one follow-up goes out and the row flips. If a person already replied, it stops.

The part nobody else builds

The CRM step, the reply email and the urgent alert each have their error output wired to one node that fails the run on purpose, with the lead’s name, phone, email and message written into the error. A second, three-node workflow catches that and sends the owner’s phone the node that broke, the error, and the lead.

Tested by loading a wrong Airtable token on purpose and sending the furnace-and-newborn lead. The owner’s phone had the lead 2.3 seconds after the form was submitted.

What broke

The first prompt read “sometime this spring, budget around $6k” as low urgency, because “sometime” was on its no-rush list. Someone with a budget is planning to buy. The rule now: a season, a month, a rough date or a budget makes it normal, whatever else they say. Six for six after that.

Importing a workflow from the command line quietly unpublished it. The installer now checks and re-publishes. And the error handler has to be published too, or n8n skips it with one line in the log. That cost the first error test.

Emails to example.com addresses were accepted by Gmail and then bounced back, twenty-three of them. The test script now sends the fake people to a plus-address on the sender’s own inbox, so the reply lands where it can be opened on camera and nothing bounces.

What is deliberately not in it

Real text messages. A texting number costs money, US carriers require registration first, and an automated text needs a consent box on the form. The phone alert gets the same “phone lights up” result for free. Texting comes in when a client is paying for it, with the consent box.

For a client

Airtable swaps for their CRM, one node. The wait goes to two days. Their form posts to the webhook. The keys and ids go where the placeholders are in the file above.