Capabilities

What we build for contractors

Everything below is running in production today, built for a New England window and door replacement contractor operating two brands across two states. Nothing on this page is a roadmap item: work we have specified but not yet shipped is deliberately left off.

45 automated workflows across two brands3 inbound phone numbers covered2 states of service territoryPhone, website form, cost calculator, SMS, WhatsApp and email unified on one record12 workflows changed in the identity rollout, 3 verified correct and deliberately left alone24-hour message recovery window, in both directions

53 capabilities across 8 areas. The phone, the calendar, the CRM and the follow-up are one system rather than four tools that each know part of the story.

Voice and phone

Round the clock AI phone answering

core

An AI voice agent answers inbound calls on every company number, at any hour, including nights, weekends and holidays.

Why it matters: Calls that arrive after 5pm go to voicemail. Homeowners call the next contractor on the list before anyone calls back.

  • Runs on three inbound numbers across two brands.
  • No after hours callback rule beyond next business day, because the call is handled live instead of queued.

Retell voice agent · n8n webhook

Caller recognized before the greeting

core

The inbound webhook looks the number up against the CRM and passes caller identity and history to the agent before it speaks.

Why it matters: Repeat customers hate re-explaining who they are. Generic bots make a returning customer feel like a stranger.

  • Lookup runs on every inbound call through a dedicated caller lookup workflow.
  • Resolution searches leads first, then contacts, then resolves up to the parent household record.

n8n · Airtable

Blocked and nuisance numbers screened

supporting

Numbers on a blocked list are recognized at lookup time and never reach the booking flow.

Why it matters: Spam calls and known problem numbers waste the office's time and pollute the CRM with junk leads.

  • Dedicated blocked numbers table checked during caller lookup.
  • The message backfill logs blocked numbers unlinked, with no lead and no conversation created.

Airtable · n8n

Qualification on the call

core

The agent runs a real qualification sequence: decision maker test, replacement versus repair, service area check, address collection.

Why it matters: Booking every caller wastes truck rolls on renters, repairs the company does not do, and addresses outside the territory.

  • Decision maker test, replacement versus repair test, declined areas list and address collection are all specified in the current prompt version.
  • Service area is also checked programmatically against town, ZIP and state.

Retell prompt · n8n distance check

Books the estimate live during the call

core

The agent offers real open slots pulled from the live calendar and completes the booking inside the conversation.

Why it matters: The classic AI receptionist takes a message. That is still a callback queue, just a politer one.

  • Two step booking rule in the prompt: offer, then confirm.
  • Slots come from the live scheduling system, so a slot offered is a slot that exists.

Cal.com · Retell · n8n

Honest failure wording

supporting

If the booking does not complete, the agent says so plainly instead of claiming the visit is on the calendar.

Why it matters: A bot that confirms a booking that never happened produces a no-show and a furious homeowner.

  • Explicit failed booking wording is defined in the prompt.
  • The agent is barred from stating a visit is booked when booking did not succeed.

Retell prompt

Hard guardrails on what the agent may say

core

The agent cannot quote prices or ranges, cannot promise an install date, cannot book outside working hours, does not ask the customer for their phone number, and never explains internal logic.

Why it matters: Owners are afraid an AI will quote a number it cannot honor. That fear is the number one objection to voice agents.

  • Six named prohibitions enforced at the prompt level.
  • Operator instructions that request a prohibited behavior are ignored by design.

Retell prompt

Time boxed operator instructions

core

The owner adds a plain English rule with a start and end time to a table, and the next call follows it. Rules expire on their own.

Why it matters: Reality changes weekly: a crew is out, a week is full, a storm hits. Editing a prompt for that is not a thing an owner can do.

  • Instruction table with active flag, start, end and priority fields.
  • Active rules are read at the start of every call and passed to the agent as dynamic variables.
  • Empty start means effective immediately, empty end means effective while active.
  • Guidance caps it at roughly five active rules for reliable adherence.

Airtable · n8n · Retell dynamic variables

Hard schedule limits enforced twice

supporting

Critical date restrictions are set both in the agent instructions and in the calendar's minimum booking notice, so disallowed slots never reach the agent.

Why it matters: Prompt adherence is reliable but not guaranteed. Anything critical needs a second layer.

  • Operator guide explicitly recommends duplicating hard constraints as a booking notice setting.

Cal.com

Voicemail captured into the CRM

detail

Voicemails on the second brand's line are transcribed into lead records instead of sitting in a mailbox.

Why it matters: Voicemail is where leads go to die.

  • Dedicated voicemail to CRM workflow on the second brand.

n8n · Airtable

Reschedule and cancel by voice

supporting

Existing customers can move or cancel an appointment through the agent, and the change propagates to the calendar.

Why it matters: Reschedules are handled by phone tag today, and a missed reschedule becomes a no-show.

  • Reschedule and cancel handling specified in the current prompt version.
  • Cancellation round-trips to the calendar and frees the slot.

Retell · Cal.com · n8n

Identity and data model

One household, many people

core

Every phone number and email belongs to a contact, and every contact belongs to one lead record. A message from any of them lands on the same record.

Why it matters: A husband calls, a wife texts, the son fills out the form. Without this, that is three leads and three half-finished follow ups.

  • Contacts table linking many contacts to one lead, rolled out across six intake and call workflows.
  • Resolution contract: search leads, then contacts, then resolve up to the parent lead.
  • Lead always wins when the same identifier matches both.

Airtable · n8n

Phone matching that does not invent matches

supporting

Numbers are matched on the last ten digits after stripping formatting, instead of on literal string variants or substring containment.

Why it matters: Formatting differences create duplicates. Substring matching creates the worse problem: attaching a message to the wrong customer.

  • Migrated from five literal format variants to normalized last ten digit equality.
  • Substring containment matching was identified as a false positive source and replaced.
  • Email matching is case insensitive, and unusable identifiers match nothing rather than matching everything.

Airtable formulas

One conversation thread per household

supporting

All messages from every contact on a lead collapse into a single conversation thread keyed on the household record.

Why it matters: Split threads mean the office reads half the story and replies to the wrong context.

  • Conversation key is the lead record ID by design, which four outbound workflows depend on.

Airtable

Account layer above the lead

detail

A client entity sits above leads for billing and account level context, derived from the lead rather than duplicated.

Why it matters: Property managers and repeat buyers need an account view, not another lead row.

  • Client records link to leads and derive name, phone, email, type and billing address through that link.

Airtable

Do not contact honored

supporting

A do not contact flag on the record suppresses outbound messaging.

Why it matters: Texting someone who asked you to stop is a compliance problem and a review problem.

  • Flag is read before outbound sends in the reminder and follow up workflows.

Airtable · n8n

Scheduling and calendar

Two way calendar sync

core

Appointments created or changed in the CRM push to the calendar, and calendar-side bookings, reschedules and cancellations write back.

Why it matters: Two systems, two truths, and a crew driving to an appointment that was moved yesterday.

  • Dedicated sync workflow for CRM to calendar, plus separate booking, reschedule and cancel workflows for the reverse direction.
  • Only appointments in a schedulable status with a linked lead and a date are pushed.

Airtable · Cal.com · n8n

Settle delay that prevents double bookings

supporting

The sync waits about thirty seconds after a time change, because people set the date first and correct the time a moment later.

Why it matters: Naive automation books on the first keystroke, then reschedules, and the customer gets two confirmations.

  • Thirty second settle delay is deliberate and documented for operators.

n8n

Conflicts surface instead of failing silently

core

If a slot is taken, the appointment is marked unbooked and an alert with a direct link to the record is posted to the team chat.

Why it matters: The dangerous automation failure is the quiet one. Nobody finds out until the customer calls.

  • Failed create and failed reschedule both write an explicit unbooked status.
  • Every failure posts an alert with the reason and a deep link to the record.

n8n · Telegram

Rep assignment and a visible cancel confirmation

detail

Bookings carry the assigned rep. On cancellation the assignment clears, which is the operator's signal that the cancel reached the calendar.

Why it matters: Operators need a visible signal that an action completed, not a leap of faith.

  • Cancel clears both the assignment and the booking reference, documented as the confirmation signal.

Airtable · Cal.com

Book from either side

supporting

The office can book by hand in the CRM and the AI agent can book on a call, and both end up in the same place with the same rules.

Why it matters: Half-automated shops end up with an automated path and a manual path that disagree.

  • The CRM to calendar sync handles operator-created appointments, the booking workflow handles agent-created ones.

Airtable · Cal.com · n8n

Messaging and conversations

Text replies that do real things

core

A customer replying YES confirms the appointment, CANCEL cancels it in the calendar, RESCHEDULE alerts the office. Everything else is forwarded and logged.

Why it matters: Confirmation texts that only say 'reply to confirm' and then do nothing are theater.

  • Intent routing implemented in the inbound SMS handlers for both brands and in the WhatsApp handler.
  • Cancel executes against the calendar directly.

Twilio · n8n · Cal.com

WhatsApp handled like SMS

supporting

WhatsApp inbound uses the same intent routing, logging and alerting path as SMS.

Why it matters: Customers pick the channel. The office should not care which one they picked.

  • Dedicated WhatsApp inbound handler patched alongside the SMS handlers.

Twilio WhatsApp · n8n

Whole message understanding, not first word

core

Reply matching reads the entire message, so a real sentence is treated as a sentence and not as a bare command.

Why it matters: First word matching turns 'Yes today between 2 and 4 would be great' into a bare confirmation and loses the actual content.

  • This exact failure happened once and was traced to first word classification.
  • Matching now requires the whole body, case insensitive, with tolerated trailing punctuation.
  • The old first word value is retained for debugging.

n8n

Carrier decoupled webhooks

supporting

Webhooks acknowledge the carrier immediately instead of holding the connection open for the whole workflow run.

Why it matters: Slow or crashed runs produce carrier errors and lost messages, which look like a phone company problem and are not.

  • Response mode switched to immediate acknowledgement with a correct content type.
  • Two specific carrier error codes were traced to this design and eliminated.
  • Mattered most on a handler with a one minute wait node that exceeded the carrier timeout on every run.

Twilio · n8n

Message recovery watchdog

core

A sweep of the last twenty four hours of carrier traffic recovers anything the live path missed, and alerts the team every time it has to.

Why it matters: You cannot fix what you never learn about. Silent message loss is the worst failure mode in a sales pipeline.

  • Two directional twenty four hour window, upgraded from an outbound only ninety minute window.
  • Deduplication against message IDs, so anything it writes is by definition something the live path lost.
  • Alerts fire on recovered inbound only. Routine outbound backfill stays silent.
  • Bulk ID fetch plus set difference instead of one lookup per candidate message.

Twilio · n8n · Telegram

Reply from team chat, delivered as a text

supporting

Staff reply inside the team chat app and the message goes out to the customer as SMS from the right number.

Why it matters: Nobody wants another inbox. Staff already live in the chat app on their phone.

  • Telegram reply to SMS workflows exist for both brands.
  • Alerts carry deep links to the customer record.

Telegram · Twilio · n8n

Sends come from the number the customer knows

supporting

Outbound messages resolve the number that last spoke with the customer, so the thread stays continuous.

Why it matters: A reply from a different number starts a new thread on the customer's phone and looks like a scam.

  • Last sender resolution runs in the four outbound lifecycle workflows before sending.

Airtable · n8n

Every message logged against the customer

supporting

Inbound and outbound messages are written to a conversation and message log tied to the household record.

Why it matters: Without a log there is no history, no handoff, and no way to audit what was promised.

  • Conversations and messages tables, keyed on the lead record.
  • Message records carry link fields for lead, client and contact.

Airtable

Send from the company's own app

detail

A messaging hub service handles app originated sends and resolves the customer and thread on the way out.

Why it matters: Custom apps need one send path, not a copy of the logic in every workflow.

  • A dedicated hub service owns lead and conversation resolution for app originated and chat originated sends.

Custom service

Lifecycle automation

Appointment reminders with an arrival window

supporting

A reminder text goes out twenty four hours ahead and quotes a one hour arrival window.

Why it matters: No-shows cost a truck roll. Vague arrival times cost trust.

  • Twenty four hour reminder workflow covering confirmed appointments, quoting a one hour arrival window.

Twilio · n8n

Post visit follow up

supporting

A follow up text goes out a few hours after the visit window.

Why it matters: The gap between the estimate and the decision is where deals go cold.

  • Four hour post appointment follow up workflow.

Twilio · n8n

No-show recovery

supporting

Missed appointments trigger an automatic recovery message rather than waiting for someone to notice.

Why it matters: No-shows are usually just forgotten, and a same-day nudge recovers a real share of them.

  • Dedicated no-show follow up workflow, which skips leads that already rebooked.

Twilio · n8n

Cold lead re-engagement with suppression

supporting

Leads that went quiet get a re-engagement message after two weeks, and anyone who already booked again is skipped.

Why it matters: Blind drip campaigns text people who already rebooked, which is the fastest way to look incompetent.

  • Fourteen day re-engagement workflow with a newer-appointment suppression check.
  • Rebooked leads are excluded from both no-show and re-engagement sends.

Twilio · n8n

Confirmation emails on intake

detail

Form and calculator submissions trigger a confirmation email to the homeowner.

Why it matters: Silence after a form submission makes people submit the next contractor's form too.

  • Both website intake workflows send confirmation emails.

n8n · SMTP

Quote chase after the visit

supporting

A daily job flags visits that happened without a quote being sent and pushes them for action.

Why it matters: The estimate that never got sent is the most expensive lead in the pipeline.

  • Daily early morning job filtered on the quote-after-visit condition.

Airtable · n8n

Lead intake

Website quote form into the CRM

detail

Website form submissions create or update the household record, with notes appended rather than overwritten.

Why it matters: Forms that email a notification and nothing else leave the CRM permanently out of date.

  • Form intake workflows for both brands, now contacts aware so a known household does not duplicate.

WordPress · n8n · Airtable

Instant cost calculator with an emailed PDF estimate

core

Visitors get three price tiers on the spot, then receive a PDF of their estimate by email while the office gets a notification with the same numbers.

Why it matters: Price is the first question. Sites that hide it lose the visitor, and sites that answer it capture the email.

  • Three tier output, standard through deluxe.
  • PDF generated and emailed to the visitor on submission, with an admin-editable postscript offer.
  • Admin notification sent simultaneously so follow up can be proactive.
  • A condensed popup version mirrors the same flow and the same settings.

WordPress · n8n

Auto pitch on a qualifying second brand lead

detail

A website lead that matches the second brand's product and service area gets an automatic pitch.

Why it matters: Cross-sell only happens when someone remembers. Usually nobody remembers.

  • Second brand intake gates the auto-pitch on product interest and service area.

n8n

AI email intake with drafted replies

core

Inbound email is polled, classified by AI, turned into a CRM record and answered with an AI drafted reply.

Why it matters: Email is the channel every automation project skips, and it is where slow replies quietly kill deals.

  • Email intake workflows built for both brands, one of them a full rebuild.
  • Classification and auto-reply run in the same flow as record creation.

Gmail · OpenAI · n8n · Airtable

Reporting, attribution and alerting

Marketing attribution on every lead

core

Each lead is stamped with a computed acquisition channel derived from up to eight signals, including UTM parameters, ad click IDs, referrer and the self-reported answer.

Why it matters: Owners spend on ads and guess at what works. 'How did you hear about us' alone is not attribution.

  • Eight signals read per lead, including UTM fields, Google and Facebook click IDs, referrer, self reported source.
  • Channel is computed automatically rather than entered by staff.

n8n · Airtable

Service area check by geography

supporting

Leads are checked against the service territory by town, ZIP and state before anyone commits a visit.

Why it matters: Out of area estimates are pure loss, and they are easy to accept by accident on a busy phone.

  • Dedicated distance and territory check workflow, separate from the call flow so both paths use it.

n8n

Weekly management reporting

supporting

A Monday report goes to the leadership group with the week's numbers, without anyone assembling it.

Why it matters: Reporting that depends on someone building a spreadsheet stops happening in busy season, which is exactly when it matters.

  • Two Monday-only reporting workflows delivering to three recipients.

n8n · Airtable

Daily operational alerts

detail

Scheduled jobs run through the day for KPI checks, purchase order alerts and pipeline conditions.

Why it matters: Exceptions need to find the manager. Managers do not have time to go looking for exceptions.

  • Roughly fifteen schedule driven alert, KPI and purchase order workflows.
  • Fixed daily schedules, for example an early morning pipeline pass and a start of business run.

n8n

Alerts carry a link straight to the record

supporting

Every alert includes a deep link to the exact customer or appointment record it refers to.

Why it matters: An alert that makes you go find the record is a task, not an alert.

  • Deep links built into team chat alerts across the failure and forwarding paths.

Telegram · Airtable

Centralized failure routing

supporting

Workflow failures route to a dedicated error handler rather than disappearing.

Why it matters: Unmonitored automation degrades silently and is discovered by a customer.

  • A shared error workflow is wired as the failure target across the suite.

n8n

Engineering practice

A living technical document

core

The whole system is documented in a versioned document covering every workflow, table and known defect, updated with each release.

Why it matters: Most automation builds exist only in the builder's head, which makes the builder a hostage and the client a hostage.

  • Currently at version 1.10, with forty five appendix sections, twenty three tables and roughly two thousand paragraphs.
  • Each version records what changed against the prior version.
  • Known defects are written down with the fix described, including the ones not yet fixed.

python-docx

Audit before change

core

Before a structural change ships, every live workflow is reviewed to classify what breaks, what is already correct and what has latent bugs.

Why it matters: Rolling out a data model change blind is how a working system becomes a broken one overnight.

  • The identity model rollout was preceded by a review of all live workflows.
  • Result: twelve needed changes, three that looked broken were verified correct and deliberately left alone, twenty two were not applicable.
  • The audit also caught a decoy node that looked like existing coverage and was in fact disabled and disconnected.

n8n MCP · Airtable MCP

Operator guides in the operator's language

core

The people who use the system get guides written for them, in their language, describing expected behavior rather than architecture.

Why it matters: Documentation written for engineers does not get read by the office manager who actually runs the thing.

  • Separate operator guides exist for scheduling, message reliability and the agent instruction table.
  • Guides are written in the operators' native language.
  • They describe observable signals, for example that a cleared assignment is how you know a cancellation went through.

Surgical edits with verification

supporting

Changes are applied surgically to the live artifact and then verified for structural loss, truncation, duplicate inserts, table row counts and stale text.

Why it matters: Regenerating a document or a workflow from scratch loses work that nobody notices until it matters.

  • Document edits preserve headings, styles, tables and images, swapping only changed sections.
  • A defined verification pass runs after every edit.

python-docx

Patterns, not one-offs

supporting

Correct implementations are designated as reference patterns and copied, so behavior is consistent across dozens of workflows.

Why it matters: Forty five workflows built forty five different ways is not a system, it is a pile.

  • Two workflows are designated canonical references for identity resolution.
  • One is explicitly marked as having a bug not to copy, so the pattern is inherited without the defect.

n8n

Client owns the accounts

core

The build sits on standard tools the client owns directly. No proprietary platform, no hostage data.

Why it matters: Agencies that build on their own platform own the client's operations, and the client knows it.

  • Stack is a voice agent service, a workflow engine, a relational CRM, a scheduling service, carrier APIs and a team chat app.
  • Workflow JSON is delivered to the client for review and import rather than pushed silently.

Change control on delivery

supporting

Patched workflows are delivered as reviewable files with a change summary and a diff of only what moved, then imported by the client after review.

Why it matters: Silent pushes into production are how a working Friday becomes a broken Monday.

  • Delivery format is a change summary, the complete patched file and a diff style listing of changed nodes.
  • Hard constraints forbid touching credentials, webhook IDs, node IDs and unrelated logic in a change pass.

n8n

What we do not claim

The voice agent handles intake and booking and then hands off; it does not replace the person who runs your office. Attribution reads the signals a lead arrives with, so a visitor who arrives with none is recorded as direct rather than guessed at. Call instructions apply across all numbers rather than per brand. We keep a written list of the defects we have not fixed yet, and we would rather show you that list than pretend it is empty.

Free redesignFree scan