MODX Garage has completed a lead automation project for an ADU design-build contractor in California. Every inquiry submitted through the website form is now created in Housecall Pro as a customer record with a lead attached, in seconds, with the marketing source already on it. Nobody retypes anything. This is the first stage of a broader business process automation program for the client.
Why speed matters more in ADU than in almost any other trade
Accessory dwelling units went from a zoning curiosity to a real category of California housing production in under a decade. By 2022, roughly one in five new homes permitted in the state was an ADU, according to California YIMBY's retrospective on the reform. The market grew, and so did the number of contractors competing for the same homeowner.
That creates a specific problem for the people selling the work.
An ADU is not a drain cleaning call. It is a six-figure construction project with a long consideration cycle, a permitting process, financing questions, and a homeowner who is talking to three or four builders at once. Acquiring that lead is expensive. Paid search for ADU keywords in California metros is some of the most contested inventory in home services, and the cost of a single qualified inquiry reflects it.
Then that expensive lead lands in a shared inbox and waits.
The 2011 Harvard Business Review study on online sales leads found that firms contacting an inquiry within an hour were about seven times more likely to have a meaningful conversation with a decision maker than those who waited just one hour longer, and sixty times more likely than firms that waited 24 hours. For a homeowner comparing builders, the first company to call back is not merely fast. It is the one that gets to frame the conversation.
Our client was paying real money for inquiries and then routing them through a step that could not be measured, assigned, or timed: a person reading email and retyping the details into the CRM.
What the client asked for
Housecall Pro was already the system of record. Estimates, scheduled site visits, jobs, invoices, dispatch, all of it lived there. Website leads did not.
The brief was simple to state and less simple to build: a visitor should not just leave contact details. They should enter the sales and service workflow immediately, as a real record, with everything they typed intact and the marketing source attached.
Three requirements came with it.
Keep the form as it is. The site runs on MODX with the contact form built on the FormIt Extra, styled to match the site and tuned over time. Nobody wanted to replace it with a vendor widget.
Do not let spam into the CRM. ADU landing pages attract bot traffic. A lead pipeline full of junk is worse than no automation at all.
Do not lose anything if something breaks. The CRM going quiet for an hour should never mean an inquiry vanished.
What we built
We developed a custom MODX snippet that runs as a FormIt hook and posts qualified submissions to the Housecall Pro Public API.
The hook sits at the end of the existing processing chain, behind the honeypot check, the JavaScript proof-of-render token, keyword filtering, the local form save, UTM capture, internal notifications, and the confirmation email. By the time the API sees a submission, it has already survived every filter the site has.
Every field the form collects is mapped and transferred. Name, phone, email, the project description the homeowner wrote, plus the first-touch landing page, referrer and campaign parameters, which go into the lead notes where the sales team can actually read them. Nothing is summarized away and nothing is dropped between the browser and the CRM.
The sequence follows the platform's documented workflow rather than a shortcut. The integration searches the existing customer base first, creates a customer through POST /customers only when there is no genuine match, then creates the lead through POST /leads attached to that customer ID. A homeowner who inquired six months ago gets a new lead on their existing record instead of a second profile, so the history stays in one place.
Two details did most of the work here.
Deduplication happens in our code, not in the API. Housecall Pro documents that customer creation is not idempotent. Every call creates another customer, there is no idempotency key, and no endpoint deletes one afterward. Duplicates can only be merged by hand in the dashboard. So the snippet verifies a match against a normalized email or phone number rather than trusting the platform's fuzzy search, and phone numbers are converted to E.164 before they are sent.
Housecall Pro is never the only copy. The lead is saved locally and delivered through the client's existing email and messaging channels before the API call is attempted. Every request and response is logged with credentials scrubbed. A failed call raises an alert instead of disappearing.
Custom MODX integration vs the standard Housecall Pro form
Housecall Pro ships its own embeddable Lead Form. For a quick start it is convenient, and for a company with no website team it is a defensible choice. For a growing contractor in construction it runs into serious limits.
| Criterion | Standard Housecall Pro form | Custom MODX form + integration |
|---|---|---|
| UX/UI and design | Limited appearance settings. A templated widget that often stands out against the rest of the site. | Full control over design, brand styling, animation and interactive elements such as quizzes and cost calculators. |
| SEO and speed | A third-party script (iframe or embed) adds weight to page load, and its content is not part of your own HTML for search engines to read. | The form is rendered server-side by your own site. It adds no third-party payload and is fully indexable. |
| Analytics and tracking | End-to-end analytics is awkward to wire up. GA4, Meta Pixel, Google Ads conversions and UTM attribution all have to work around a vendor-controlled widget. | Full tracking. UTM parameters, session ID, landing page and traffic source are passed straight into the CRM, so ad ROI can be calculated against real jobs. |
| Field flexibility | A fixed field set. Housecall Pro's own documentation states that any field added to the Lead Form becomes required, and no conditional or multi-step logic is documented. | Any step-by-step logic you need: ADU type, square footage, budget range, timeline. Plus phone number validation and file attachments for drawings, site photos and permit documents. |
| Data preprocessing | Data is sent as-is. | Spam is filtered before the CRM (reCAPTCHA, honeypot, keyword rules). Leads are duplicated to Telegram and email if the CRM call fails. Data is normalized and enriched before it is sent. |
Two rows deserve a sentence each, because they decided the project.
Field flexibility is a conversion issue, not a preference. Every field added to the native Lead Form is mandatory. A homeowner on a phone who wants to ask whether you build in their city should not have to supply a full street address to send that question. A staged form that asks two things first and the rest after the homeowner is engaged converts differently, and only a custom form can do that.
Preprocessing is what keeps the CRM usable. ADU landing pages attract bot traffic. Neither native option documents any spam filtering, and with Job Inbox auto-reply enabled by default, a junk submission does not just clutter the pipeline, it can trigger an outbound message to a fake address.
To be fair to the platform: the native form needs no MAX plan, no API key, no server code and no maintenance. The custom route needs all four. The trade is worth making once you are spending money on traffic and the form is the thing that converts it.
The result
Speed to lead is now measured in seconds. A submission reaches the API Leads channel in Housecall Pro's Job Inbox before the visitor has closed the tab, and the team can reply to the homeowner from inside the CRM.
The human step is gone. No one reads an email and retypes a phone number, so nothing is dropped on a busy day and no digit is transposed.
Every inquiry is a real record. A customer card and a lead are created automatically, the lead appears on the Pipeline board with Active, Won and Lost statuses, and converting it to an estimate or a job is one click. Anyone can see whether a lead has been touched and what its current status is without asking around the office.
Attribution survives the whole journey. The lead source travels with the record into the estimate and the invoice, which turns "we spent this much on ads" into "these campaigns produced these signed projects."
What comes next
This project is the foundation, not the finished system.
It is the first stage of a broader automation program we are building with the client. Phone calls are being brought into the same picture through call tracking, so every channel arrives in one place with a source attached. The next technical phase is inbound webhooks: Housecall Pro can push events back to the site, including lead.converted, estimate.sent, job.completed and invoice.paid. That closes the reporting loop and lets marketing spend be measured against signed contracts rather than form fills.
Beyond that sit the rest of the workflow gaps that every growing contractor accumulates: follow-up sequences, document handling, reporting that does not require someone to build a spreadsheet on a Friday afternoon.
Working with us
We build this integration for home service and construction businesses running MODX, and the same pattern applies to any platform that can make a server-side HTTPS request.
Two prerequisites are worth checking first. Housecall Pro's Public API, its Webhooks and the API Leads channel in Job Inbox are all MAX plan features, and the API key must be generated by an account Admin with Full access permissions.
If your website form still ends its life as an email that somebody retypes, that is the gap this closes.

