[ Case study ]
Quote requests arrived through a web form, landed in a shared inbox, and were re-keyed into a spreadsheet before anyone priced them. Five days was normal, and facilities managers — the buyers — had usually signed with a competitor by then.
CLIENT a commercial cleaning and facilities company — FOCUS Move the intake into structured forms
Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.
Quoting is how this commercial cleaning and facilities company wins work: facilities managers request pricing for office blocks, medical suites, and warehouses, and whoever answers credibly first usually wins. The owner prices every job personally, from a rate card he keeps in his head as much as on paper. The office is small — a manager and two coordinators — and the website existed mostly as a brochure with a contact form.
Quote requests arrived through a web form, landed in a shared inbox, and were re-keyed into a spreadsheet before anyone priced them. Five days was normal, and facilities managers — the buyers — had usually signed with a competitor by then.
We proposed moving intake into structured HubSpot forms mapped to CRM properties, so quote requests arrive as records with facility type and scope attached instead of prose in an inbox. The rate card gets encoded as-is — the owner stays the pricer, the system does the arithmetic and the routing. Service and location pages move onto a module library with URLs unchanged, protecting the local search equity the company already earns. A workflow routes complete requests to the estimator with everything attached, and timestamps prove the turnaround.
Just as important is what we ruled out, and why:
Quote requests became HubSpot forms with facility-type and scope fields mapped to properties, so pricing inputs arrive structured instead of prose.
Service and location pages moved onto a HubL module library, keeping URLs stable while making content edits marketing-owned.
An internal workflow routes complete requests to the estimator with the rate-card data attached, replacing the inbox and the re-keying.
Delivered by the systems pod — engineer + automation specialist over 6 weeks, with working increments reviewed with the client every week.
Obstacle
A pricing rule surfaced in week five: after-hours call-outs carry a minimum the rate card never wrote down, and the intake form had no field for it.
Handled: We added the conditional field, re-tested the estimator's walkthrough end to end, and confirmed the encoded rules matched how the owner actually quotes.
Obstacle
The office had never used a CRM; the first test requests sat unassigned because notifications landed where nobody looked.
Handled: We rebuilt notification routing around the office's real morning routine and ran a live-fire day where actual requests were worked through the new path with us present.
The headline: quote-request-to-estimate turnaround, measured across the first 30 requests after launch — 5 days → same day, read from CRM timestamps. A second check: requests lost in the shared inbox since launch at 0.
Quotes leave the same day because nothing waits in an inbox for translation. The owner still prices every job — the system encodes his rate card instead of replacing his judgement — but the arithmetic and the follow-up are no longer his evenings. The office stopped re-keying and started reviewing: requests arrive as records they can check rather than paragraphs they must decode. Facilities managers mention the fast written quotes unprompted.
The result was read from CRM timestamps against the pre-engagement baseline over the stated window, with a guardrail check on requests lost in the shared inbox since launch. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.
What we would do differently
We would have mapped the rate card with the estimator in week one — one pricing rule surfaced in week five and forced a form revision.
[ Related service ]
[ Related builds ]
9 installs 1 adminSites maintained from one WordPress admin, migration completed over 9 weeks
3 weeks 4 daysMedian landing-page turnaround, measured across the first 12 campaign pages post-handover
[ Next step ]
Next case study