Build a simple CRM pipeline for a service business
On this page
This page shows how to set up a sales pipeline for a service business that the office will actually keep current: a handful of stages defined by what the customer has done, a few required fields, one owner for every lead, and a short weekly review. It works in almost any CRM. At the end I cover when a custom-built system is worth it, and when it is not.
Before you begin
- A CRM that supports custom pipeline stages, required fields, and connections to your forms and phone system. A free or low-cost plan is enough to start.
- Admin access to the website forms and to the phone system or call tracking.
- A list of the services the business sells, with a typical job value for each. A rough average is fine.
- The names of the people who answer leads.
- Half an hour with the owner to agree on the stage definitions in step 1. Do not skip it: the definitions are the pipeline.
Build the pipeline
- Define stages by what the customer has done
A stage should describe something that already happened and can be checked, not a feeling about the deal. "Hot" and "Likely to close" are hopes. "Quote sent" is a fact. When every stage is a fact, two people looking at the same lead put it in the same place, and the pipeline report means something.
Six stages cover most service businesses. Each one has an exit rule: the event that moves the lead forward, or out.
Stage What is true Exit rule New The customer reached out by form, call, message, or walk-in. Nobody has had a two-way conversation with them yet. A person talks with them (Contacted), or the attempt schedule ends with no reply (Lost). Contacted A real conversation happened, and the need is clear enough to price the work or book a site visit. A written quote goes out (Quoted), or the lead turns out not to be a fit (Lost). Quoted The customer has a specific written price. They accept and the work gets a date (Scheduled), or they say no or the quiet cutoff passes (Lost). Scheduled The customer said yes, and the job is on the calendar, with a deposit if you take one. The work is done and invoiced (Won), or the job is cancelled (Lost). Won The work is complete and invoiced, and the record carries the final dollar value. None. Repeat work starts a new record for the same customer. Lost The customer said no, stopped responding, or was not a fit. None. A lost reason is required. If they come back next season, open a new record. Some businesses call a deal won when the contract is signed instead of when the work is invoiced. That works too, as long as the value gets updated when the final invoice goes out. Pick one definition and keep it.
Set a quiet cutoff so leads cannot sit in Quoted forever. In my own pipeline, a proposal with no response 21 days after I send it moves to Lost. Choose a cutoff that fits how long your customers normally take to decide, and write it into the stage description.
- Add the few fields that are required
Required fields are the ones the weekly review and the reports actually use. Everything else stays optional, because every required field is one more reason for someone to skip the CRM.
SourceWhere the lead came from, picked from a fixed list: Google Ads, Google Business Profile, organic search, Facebook, referral, repeat customer, sign or vehicle, other. Filled in automatically whenever possible.ServiceWhat they asked for, from the same short list the business sells from.ValueA typical job value at New, replaced by the quoted amount at Quoted and by the invoiced amount at Won.OwnerThe one person responsible for the next step.Next action and dateWhat happens next and when, such as "Call back Thursday at 10 a.m." Every open record has one, and the date is never in the past.Lost reasonRequired only when a lead moves to Lost. See step 5. - Give every lead one owner
A lead owned by "the office" is owned by nobody. Assign each new record to one named person automatically, using a simple rule such as the service requested or who is on the schedule, with a named backup for days off. When ownership changes, reassign the record in the CRM instead of mentioning it in passing, so the history shows who had the lead and when.
Ownership is also what makes a response standard enforceable. Speed to lead shows how to write one.
- Create records automatically, with the source attached
When leads reach the CRM because someone retypes emails, they arrive late, incomplete, and without a source. Connect the channels directly instead.
- Forms post straight into the CRM, through its own form tool, a native integration, or a small form handler. Hidden fields carry the landing page, UTM tags, and ad click IDs such as
gclidonto the record. How attribution works explains what to capture and why. - Calls to a tracking number, or through a phone system with a CRM integration, create or update a record with the caller's number and the source. For a lead entered by hand, make the source a required pick.
- Existing customers are matched by phone number or email, so a repeat customer's new inquiry lands on their existing record instead of creating a duplicate.
- Every new record alerts its owner and creates a first task, due within the response standard.
- Forms post straight into the CRM, through its own form tool, a native integration, or a small form handler. Hidden fields carry the landing page, UTM tags, and ad click IDs such as
- Write down the lost reasons
A lost lead with no reason teaches you nothing. Keep a short fixed list, make the field required at Lost, and only allow "Other" if it also requires a note.
- No response after the full attempt schedule
- Price
- Chose a competitor
- Timing: not now
- Not a fit: outside the service area, or a service the business does not offer
- Duplicate, spam, or test
My own rule is to review the lost list every quarter, because patterns in it show where the offer or the follow-up is weak. A run of "No response" points at speed and follow-up. A run of "Price" on one service points at the quote, or at who the marketing is attracting.
- Hold a weekly pipeline review
Pick one short, fixed slot each week with whoever owns leads. Work from the CRM on a screen rather than from memory, and clean up the data as you go.
- Every lead that came in this week had a first human contact within the response standard.
- Every open record has an owner and a next action dated today or later.
- Every quote past the quiet cutoff has been followed up or moved to Lost.
- Every record moved to Lost this week has a reason.
- Every job marked Won carries its final invoiced value.
- Leads and won value by source look plausible, with few records marked unknown.
- Keep it simple enough that people use it
A pipeline the team skips is worse than none, because it looks like data. A few rules keep it alive.
- Use the fewest stages that match how work really moves. If nobody can define a stage in one sentence, remove it.
- Make the CRM the day's call list. When the tasks due today live there, people open it every morning.
- Set it up for a phone. The person answering leads is often on a job site, and whoever picks up should see who is calling, what they asked for, and what happened last within a few seconds.
- Let events move records where the CRM allows it. A quote email sent or a deposit paid can change the stage without anyone typing.
- Send the won value back to your reporting
Once every Won record carries a source and a final value, you can report revenue by channel instead of leads by channel, and revenue is the number that should decide budgets. For small businesses I report won value by first-touch and last-touch source, side by side. How attribution works covers the model.
The same records can go back to the ad platforms, so they learn which clicks became jobs instead of which became form fills. The offline conversions guide walks through it. If invoices live in accounting software, take the won value from there rather than retyping it, so the CRM never shows a dollar figure the books disagree with.
Verify it works
- A test form from the live site creates a New record with the right source, service, and owner, and the owner gets an alert with a first task due.
- A test call to the tracked number from an unfamiliar phone creates or updates a record with the source.
- A second inquiry from the same phone number or email lands on the existing record instead of creating a duplicate.
- A test record cannot move to Lost until a lost reason is chosen.
- A report of won value by source for last month runs, and no Won record is missing a value or a source.
- After the first weekly review, no open record is missing a next action date.
Mark test records as tests, and close them out afterward so they do not count in reports.
Troubleshooting
When a custom system beats an off-the-shelf CRM
Start with an off-the-shelf CRM. It is cheaper to begin with, someone else maintains it, and its defaults are close enough for most service businesses. A custom system earns its place only in specific situations, and saving money is not one of them.
| Question | Off-the-shelf fits better when | Custom can fit better when |
|---|---|---|
| How does the work move? | It follows a standard lead, quote, and job flow. | It revolves around something a CRM does not model, such as equipment moving between customer sites. |
| What does the business already run? | Little, or tools that already connect to the CRM. | A scheduler and accounting software that work well, with nothing tying them to the customer record. |
| Who needs access? | A few people in the office. | Field staff who need one screen, where per-seat pricing gets expensive for what they use. |
| Where is the key workflow? | Inside the CRM's built-in features. | In a step that would need custom code on top of the CRM anyway. |
| Who maintains it? | The vendor. | The developer who built it, and the business has to be comfortable depending on that person. |
If you build custom, keep the scope narrow. Do not rebuild the tools that already work; connect to them. Make sure the business owns the domain, the data, and every connected account, and can export everything at any time. Write the stage definitions, fields, and message templates down before any code, because that design is the valuable part, and it outlives any particular software.
What's next
- Write automated follow-up that still sounds like a person: build the instant acknowledgment, the missed-call text back, and a short sequence for quiet leads, with stop rules and the texting compliance basics.
- Send offline conversions from your CRM back to Google Ads: save the ad click ID with every lead, mark won jobs in your CRM, and upload them to Google Ads so bidding learns from revenue instead of form fills.
- How marketing attribution works for a local business: the plain-language model behind tracking: how a call or form gets tied back to the ad, search, or post that started it, and where most setups lose the thread.
Rather have me do this for you?
I set up one place for every lead, wire every form and call into it, and build follow-up that answers fast even when you are on a job.