A simple customer follow-up sheet (CRM-lite) for small service businesses
For a small service business, most new work comes from people you already know: past customers, referrals, and enquiries that were "not right now". The problem is remembering to get back in touch.
A full CRM can feel like too much. Many small businesses only need one thing from it: a list that says who to contact today, and why. A spreadsheet does that well.
This guide shows you how to build a CRM-lite sheet in Excel or Google Sheets. Everything works in both apps unless noted. It takes about 15 minutes.
What you will build
- One row per contact, with a stage such as Lead, Customer or Inactive.
- The date you last spoke, the next thing to do, and when to do it.
- A column that says Today or Overdue when an action is due.
- A "due today" view, so each morning starts with a short list.
- Pipeline counts with COUNTIFS, so you can see the shape of your business at a glance.
Step 1. Set up the columns
Create a sheet called Contacts and add these headers in row 1:
| A | B | C | D | E | F | G | H | I | J |
|---|---|---|---|---|---|---|---|---|---|
| Name | Phone or email | Service | Stage | Last contact | Next action | Next action date | Due | Days since contact | Notes |
Tips:
- Columns E and G must be real dates. Format them as dates.
- Next action is a short instruction to yourself: "Call to book spring service", "Send price for extra room", "Check in after first month".
- Notes is for anything useful: preferences, family names, the last job you did.
Step 2. Add a dropdown for Stage
A fixed list keeps your counts accurate.
- Select D2 down to D1000.
- Open data validation. In Google Sheets it is Data > Data validation. In Excel it is Data > Data Validation.
- Choose a dropdown or list, and enter: Lead, Contacted, Quoted, Customer, Inactive.
What each stage means is up to you. A simple version:
- Lead: someone who asked about your services.
- Contacted: you have spoken and are waiting on them.
- Quoted: you have sent a price.
- Customer: they have used your service.
- Inactive: no longer a fit, or asked not to be contacted.
Step 3. Flag what is due
In H2 (Due), paste:
=IF(OR(G2="",D2="Inactive"),"",IF(G2<TODAY(),"Overdue",IF(G2=TODAY(),"Today","")))
What it does:
- Shows nothing if there is no next action date, or the contact is Inactive.
- Shows Overdue if the date has passed.
- Shows Today if the date is today.
In I2 (Days since contact), paste:
=IF(E2="","",TODAY()-E2)
If it shows a date instead of a number, change column I to a plain number format.
Copy both formulas down. TODAY() updates on its own, so the flags move forward each day without you touching them.
Step 4. Make a "due today" view
Both apps: turn on a filter. In Google Sheets, choose Data > Create a filter. In Excel, select the header row and choose Data > Filter. Click the arrow on Due and tick only Today and Overdue. Sort by Next action date, oldest first.
Google Sheets only: for a separate list that updates by itself, create a new tab called Today and put this in A2:
=SORT(FILTER(Contacts!A2:J1000,Contacts!G2:G1000<>"",Contacts!G2:G1000<=TODAY(),Contacts!D2:D1000<>"Inactive"),7,TRUE)
Copy the headers from the Contacts tab into row 1. FILTER keeps rows where every condition is true, and SORT puts them in order of the seventh column (Next action date), oldest first. If nothing is due, the cell shows an error saying no matches were found. That just means a clear day.
Excel 365 also has FILTER and SORT, but the arguments work differently, so this guide sticks to the normal filter for Excel.
Step 5. Spot customers who have gone quiet
Past customers are often the easiest work to win back. Colour the ones you have not spoken to in a while.
Google Sheets: select A2:J1000, open Format > Conditional formatting, choose Custom formula is, and paste:
=AND($D2="Customer",$E2<>"",TODAY()-$E2>90)
Excel: select A2:J1000, choose Home > Conditional Formatting > New Rule, then Use a formula to determine which cells to format, and paste the same formula.
Give it a soft yellow fill. Change 90 to whatever gap makes sense for your service. A window cleaner might use 60 days, a boiler service business might use a year.
You can add a second rule for due actions, for example =$H2="Overdue" with a light red fill.
Step 6. Count your pipeline with COUNTIFS
Make a small summary block, for example in L1:M6 on the Contacts tab:
| L | M |
|---|---|
| Lead | =COUNTIFS(D2:D1000,"Lead") |
| Contacted | =COUNTIFS(D2:D1000,"Contacted") |
| Quoted | =COUNTIFS(D2:D1000,"Quoted") |
| Customer | =COUNTIFS(D2:D1000,"Customer") |
| Due or overdue | =COUNTIFS(G2:G1000,"<="&TODAY(),D2:D1000,"<>Inactive") |
| Quiet customers | =COUNTIFS(D2:D1000,"Customer",E2:E1000,"<"&TODAY()-90) |
A tidier way for the first four: type the stage names in L1:L4 and use =COUNTIFS($D$2:$D$1000,L1) in M1, copied down. If you add a stage later, just add a row.
The date conditions join a comparison sign to TODAY() with &. Blank dates are not counted, so empty rows do not affect the numbers.
Using it day to day
- New enquiry: add a row, set Stage to Lead, and set a next action and date.
- Each morning: open the due view, make your calls or send your messages, then update Last contact, Next action and Next action date for each one.
- After a job: set Stage to Customer and add a check-in date, for example a few weeks later or when the next service is due.
- Once a month: look at the quiet customers and the pipeline counts.
The key habit is simple: every active contact always has a next action date. If a row has no date, it is easy to forget.
What else could you automate?
Follow-ups are a good place to start. Our free Small Business Automation Check asks about your country, industry and daily tasks, and shows which admin jobs are easiest to automate next.
Simple job costing in a spreadsheet - see if each job actually made money (Excel or Google Sheets)
How to raise your prices as a small service business - a simple calculation and a customer letter template