NEXSUM_LABS
  1. Home
  2. Work
  3. A commercial cleaning company got same-day quotes instead of five-day ones
Book a call

[ Case study ]

Facilities servicesHubSpot CMSHubL modulesHubSpot CRMHubSpot workflows

A commercial cleaning company got same-day quotes instead of five-day ones

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

HubSpot CMS DevelopmentWeb DevelopmentHubSpot CMS DevelopmentFacilities servicesRepresentative example
Client
a commercial cleaning and facilities company
Industry
Facilities services
Engagement
6 weeks — systems pod — engineer + automation specialist
Service
Web Development / HubSpot CMS Development
Headline outcome
Quote-request-to-estimate turnaround, measured across the first 30 requests after launch: 5 days → same day, read from CRM timestamps

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.

Where they started

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.

What it was costing

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.

What they could see

  • Quote requests sat in a shared inbox until someone had time to translate paragraphs into a spreadsheet row.
  • Pricing took about five days to reach the buyer, and the team knew competitors answered faster.
  • Two recent quotes had carried the wrong square footage because the notes were retyped by hand.
  • Follow-up depended on whoever remembered; facilities managers heard nothing between request and eventual quote.

The constraints we worked inside

  • Pricing logic lived in the owner's head and a rate card; the site had to encode the rate card, not replace the owner.
  • The CRM was being introduced for the first time with this project.
  • The site's existing search rankings for local service terms had to survive unchanged URLs.

What had been tried before

The owner hired a local web person to build a quoting calculator on the site.
The rules were too bespoke for a plugin's pricing fields; the prototype quoted one job wrong and lost the owner's trust.
An inbox rule was set up to tag and forward requests faster.
Faster triage didn't change the work — someone still translated prose into prices by hand, so the five-day wall stood.

What we proposed

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:

  • A custom quoting application with self-service pricingThe owner prices from judgement as much as from the card; freezing half-written rules into software would automate his exceptions badly.
  • A chat-based intake assistantFacilities managers send a scope and expect a written quote; conversation adds a step between them and the number.
  • Keeping the spreadsheet and adopting the CRM laterRe-keying was the bottleneck; staging the CRM separately would have doubled data entry during the busiest season.

How the work ran

01Move the intake into structured forms

Quote requests became HubSpot forms with facility-type and scope fields mapped to properties, so pricing inputs arrive structured instead of prose.

02Build the service pages on modules

Service and location pages moved onto a HubL module library, keeping URLs stable while making content edits marketing-owned.

03Wire the follow-up

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.

The stack, and the reasoning

HubSpot CMS
Site, forms, and CRM in one portal mattered because the CRM was brand new to this office — one login, one vendor, one thing to learn.
HubL modules
Service and location pages rebuilt as modules with URLs unchanged, so the local rankings survived while edits became marketing-owned.
HubSpot CRM
Structured quote records replaced inbox-and-spreadsheet re-keying; timestamps on each record are also the proof of turnaround the owner now checks weekly.
HubSpot workflows
Complete requests route to the estimator with rate-card data attached automatically; follow-up stopped depending on whoever remembered the inbox that day.

What went wrong

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.

How we worked together

Cadence
Two short calls a week with the owner and office manager; from week four we worked live requests through the new path together, so training happened on real quotes.
Client side
The owner owned pricing rules; the office manager owned intake and follow-up; an external bookkeeper checked the estimate records against invoices once.
Decisions
Pricing exceptions were the owner's call, made in the working sessions; anything touching cash flow he slept on and answered the next morning.
They provided
The rate card and two hours of his time to map exceptions, historical quote emails for structure, domain and DNS access, and live test requests.

What changed

The headline: quote-request-to-estimate turnaround, measured across the first 30 requests after launch5 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 they own now

  • The HubSpot portal — forms, CRM records, and workflows — under the owner's own account.
  • The encoded rate card with every exception documented as a conditional rule.
  • A monthly report the office manager reads: request-to-quote timestamps and drop-offs.
  • Service and location pages on stable URLs, with an edit guide for the office.
  • A notification routing map matching the office's morning routine, with the fallback path.

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.

Web DevelopmentHubSpot CMS DevelopmentFacilities servicesHubSpot CMS

Next case study

A nine-school education group went from nine WordPress installs to one admin