Case studies · Carpet cleaning

28 years of history, in one record.

A carpet cleaning franchise had 28 years of customer history spread across an old field service system, a new one and a CRM. Nobody could answer "who have we not seen in a year" without a spreadsheet, so nobody asked. Here is what changed, and what the same history turned up on the way.

Client
Withheld
Trade
Carpet and upholstery cleaning
Footprint
3 locations
History
28 years, 3 systems
Went first
Bring past customers back

What runs

The Monday morning that builds the report.

Every week, without anyone on their team touching it. The whole sequence takes four minutes.

  1. Pulled together once

    28 years of history from the old field service system, the new one and the CRM, into one record per household.

    One customer, one record, back to day one.

  2. Mon 7:00

    The list builds itself: customers serviced this month last year who have not been back.

    This month, last month, next month, rolling.

  3. Mon 7:00

    Opt-outs, bad emails and anyone who bought in the last six months come off automatically. So does a small group we leave off on purpose.

    Leaving that group off is how we know the list is what worked.

  4. Mon 7:04

    The list is in the owner's inbox and the send goes out.

    Email today; text and calls where the customer has said yes.

  5. Through the week

    Bookings land back in the same record. The Monday Report shows the week against the same week last year.

    The numbers are retrieved, never made up.

28

years of history, in one place

3

systems it used to live in

~100

customers a month who would have been forgotten

1

record per household, back to day one

None of this was new spend. It was their own numbers, put somewhere somebody could act on them.

Nobody exports a list on Monday. Nobody writes the follow up at 10pm. The work happens whether anyone remembers it or not.

Monday Report · Same page every week

Week of Aug 17 to 23, 2026

Carpet cleaning · 28 years of history · 3 locations

Built Mon Aug 24, 7:00Against the same week last year, Aug 18 to 24, 2025

1New leads

71last year 34 · +109%Paid search: 50 calls, 21 messages. 60 charged.

2New customers

40last year 29 · +38%First invoice this week. Repeat customers not counted.

3Cost to sell

$6,790Aug to date213 charged leads · $32 a lead$2,670 (39%) of it was spent on people who were already customers.

4Gross margin

From the books, monthlyLands with the accountant's monthly close. Job costs are not split in the CRM yet, so this one waits for the books.
This week against the same week last year
Retrieved from the recordThis weekLast yearChange
Revenue invoiced$32,444$19,826+64%
Jobs invoiced7953+49%
Customers billed7753+45%
Average ticket$411$374+10%
Bookings back in the record95not trackedold system
Revenue invoiced, 2026Same weeks, 2025
What ran this week
  • Win-back list built and sent, 7:00 to 7:04. 95 customers served in Aug 2025 who have not been back. 16 left off on purpose, so we could tell the list is what worked.Opt-outs, missing emails and anyone who bought in the last 6 months came off automatically.
  • Follow-up series after a job. 26 customers from last week, 12 from five weeks back, 25 from nine.Services beyond carpet cleaning. Nobody lands on two lists in the same week.
  • Customers showing they are ready to buy. 7 existing customers looking for services you sell.
  • Every search lead matched to the customer record the day it arrived: 71 leads, 60 charged, 4 of the charged ones were active customers.
What moved the wrong way, and what we did
  • Paid search is buying back your own customers. 83 of 213 charged leads this month were already in the record, $2,670 so far.Existing-customer leads are now flagged in the daily lead digest so the spend question is on the table with a number attached.

Revenue is what was invoiced, counted by service date, and it matches the books to the dollar. Same definitions every week. Every number comes from their records; nothing is estimated.

Nobody built a spreadsheet

One Monday Report, built from a carpet cleaning franchise’s own records. Client name withheld; every number comes from those records, not from a guess.

What the same history found

41% of a year's paid search had gone to people who were already customers.

Once every job, call and invoice lives in one record per household, you can ask a question nobody could answer before: was this lead a new customer, or one we already had? For a full year of paid search, 41% of the spend went to people they already had.

One record per household does not just tell you who to call. It shows which money is being wasted, with a figure attached, so the conversation with the ad rep stops being a matter of opinion.

The fix is not to stop advertising. It is to know the difference the moment the lead arrives, which is what the agent does on the phone and in the text thread.

A text conversation with the agent, which asks whether the caller is a first-time or returning customer
The agent asks the question that settles it, in the first reply, before anyone has been booked.

Your history has a list like this.

Every business with a few years behind it has a list like this one and a spend question like that one. Send the four numbers and we tell you what we would run first. The first two steps are free.