Skip to content

How to write ServiceTitan service names and descriptions that sell

A ServiceTitan service name should lead with the thing you are working on, then say what kind of work it is, then carry any detail that decides the trade or the size. Get that order right and a tech finds the line in one search, a homeowner reads something that makes sense on the invoice, and every piece of software that reads your book, including ServiceTitan’s own, knows what the job is.

Most books get it backwards, and not in the way owners expect. We counted across a set of real ServiceTitan pricebooks. Every single service had a description filled in. All of them. So the empty field everyone worries about was never the problem here. The problem is upstream, in the names: 11,946 different ones across those books, each carrying the whole job of telling four separate readers what the work is, and 70 percent of them turn up in exactly one book in the entire set.

Every shop names things its own way 11,946 distinct service names
<text class="nm-num" x="58" y="122">47</text>
<rect x="60" y="130" width="36" height="170" fill="var(--color-clay)"/>

<text class="nm-tail" x="290" y="238">70% appear in exactly one book</text>
<line x1="140" y1="246" x2="670" y2="246" stroke="var(--color-wine)" stroke-width="1.5"/>
<line x1="140" y1="246" x2="140" y2="252" stroke="var(--color-wine)" stroke-width="1.5"/>
<line x1="670" y1="246" x2="670" y2="252" stroke="var(--color-wine)" stroke-width="1.5"/>

<rect x="140" y="256" width="12" height="44" fill="var(--color-clay)"/>
<rect x="154" y="262" width="12" height="38" fill="var(--color-clay)"/>
<rect x="168" y="267" width="12" height="33" fill="var(--color-clay)"/>
<rect x="182" y="271" width="12" height="29" fill="var(--color-clay)"/>
<rect x="196" y="274" width="12" height="26" fill="var(--color-clay)"/>
<rect x="210" y="277" width="12" height="23" fill="var(--color-clay)"/>
<rect x="224" y="279" width="12" height="21" fill="var(--color-clay)"/>
<rect x="238" y="281" width="12" height="19" fill="var(--color-clay)"/>
<rect x="252" y="283" width="12" height="17" fill="var(--color-clay)"/>
<rect x="266" y="284" width="12" height="16" fill="var(--color-clay)"/>
<rect x="280" y="285" width="12" height="15" fill="var(--color-clay)"/>
<rect x="294" y="286" width="12" height="14" fill="var(--color-clay)"/>
<rect x="308" y="287" width="12" height="13" fill="var(--color-clay)"/>
<rect x="322" y="288" width="12" height="12" fill="var(--color-clay)"/>
<rect x="336" y="288" width="12" height="12" fill="var(--color-clay)"/>
<rect x="350" y="289" width="12" height="11" fill="var(--color-clay)"/>
<rect x="364" y="289" width="12" height="11" fill="var(--color-clay)"/>
<rect x="378" y="290" width="12" height="10" fill="var(--color-clay)"/>
<rect x="392" y="290" width="12" height="10" fill="var(--color-clay)"/>
<rect x="406" y="291" width="12" height="9" fill="var(--color-clay)"/>
<rect x="420" y="291" width="12" height="9" fill="var(--color-clay)"/>
<rect x="434" y="291" width="12" height="9" fill="var(--color-clay)"/>
<rect x="448" y="292" width="12" height="8" fill="var(--color-clay)"/>
<rect x="462" y="292" width="12" height="8" fill="var(--color-clay)"/>
<rect x="476" y="292" width="12" height="8" fill="var(--color-clay)"/>
<rect x="490" y="292" width="12" height="8" fill="var(--color-clay)"/>
<rect x="504" y="293" width="12" height="7" fill="var(--color-clay)"/>
<rect x="518" y="293" width="12" height="7" fill="var(--color-clay)"/>
<rect x="532" y="293" width="12" height="7" fill="var(--color-clay)"/>
<rect x="546" y="293" width="12" height="7" fill="var(--color-clay)"/>
<rect x="560" y="293" width="12" height="7" fill="var(--color-clay)"/>
<rect x="574" y="294" width="12" height="6" fill="var(--color-clay)"/>
<rect x="588" y="294" width="12" height="6" fill="var(--color-clay)"/>
<rect x="602" y="294" width="12" height="6" fill="var(--color-clay)"/>
<rect x="616" y="294" width="12" height="6" fill="var(--color-clay)"/>
<rect x="630" y="294" width="12" height="6" fill="var(--color-clay)"/>
<rect x="644" y="294" width="12" height="6" fill="var(--color-clay)"/>
<rect x="658" y="294" width="12" height="6" fill="var(--color-clay)"/>

<line x1="32" y1="300" x2="688" y2="300" stroke="var(--color-steel-100)" stroke-width="1"/>
<text class="nm-lab" x="40" y="320">custom plumbing</text>
<text class="nm-src" x="32" y="348">Sample: 15 ServiceTitan pricebooks, 39,844 active services.</text>
<text class="nm-src" x="32" y="366">The tail is that shop's own work, named that shop's own way.</text>

Four readers, one line of text

The name on a service is not a label for the office. Four different readers depend on it, and three of them cannot ask you what you meant.

The tech types two words into the search box on the tablet and takes whatever comes back. The homeowner reads it on the estimate and the invoice. ServiceTitan reads it too: its AI fills variants in seconds off the name it was handed, which is how a match on the word alone can attach a condensate pump to a boiler, because both lines said pump. And any tool that reads your export, ours included, has nothing but that string to go on.

The name is a working part of the book. When it was written the way one person happened to type it on a Tuesday in 2019, all four readers are left guessing.

Five rules for a name that reads

These are the rules our own tools use to read a ServiceTitan service name, turned around and written for the person typing it.

  1. Lead with the thing you are working on. English puts the object first and the context after a preposition. “Float Switch Replacement on Sump Pump” is a float switch job, and anything reading it can tell. Whatever sits after on, for, with, to, through or includes is context. Flip the order and a float switch job starts pulling a sump pump price and a sump pump parts list.

  2. Say the work type, plainly. Diagnostic. Repair. Replacement. Install. Cleaning. A “Sump Pump Diagnostic” and a “Sump Pump Replacement” carry different prices and completely different parts, and the only thing separating them is that one word. Leave it off and the line reads as whichever one the reader assumed.

  3. Cut the words that identify nothing. System, unit, kit, standard, new, whole, home, premium, basic. One line we read said “1.5 CU FT WHOLE HOME CONDITIONER.” It is a water filter. Nothing in the name says water, and nothing says filter, so it can just as easily read as a whole-home surge device or a softener.

  4. Keep the one detail that pins the trade. A gallon rating means a tank. “Heat Pump 50 Gallon” is a heat pump water heater and it belongs to the plumbing side of the book. Drop the gallons and the same line reads as an HVAC split system. Sizes, gallons, amperage, pipe material, voltage: those are the details that stop a name from landing in the wrong trade, so they stay.

  5. One name per job. A book with ten years of history usually holds two or three versions of the same service, and one of them is the one somebody spent hours building right, with the hours and the description and the materials on it. A tech who searches finds all of them and has no way to tell them apart, so he takes whichever one is on top. Three doors, no sign on any of them, and then the crew catches the blame for walking through the wrong one. That is most of what looks like techs refusing to use the book.

The description is a different job than the name

The name is for the tech in a search box. The description is for the homeowner reading the invoice at the kitchen table. Same row in the same book, two people who need different things from it.

Which is why the 100 percent fill rate in those 15 books is worth so little on its own. Filled is not the same as readable, and we make no claim about how many of those descriptions actually say what the work was. What we can say is what happens when a description gets written from a name nobody can read: it comes out vague, or it just repeats the name back, or somebody generates a confident sentence about a job the name never proved.

That last one is the expensive mistake. A wrong description sits on a customer’s invoice with your company name over it, and nobody catches it until the customer does. So the rule we hold ourselves to is simple: write the description only where the name proves the job, and where the name is a bare code like SVC-4471 or MISC 2, flag it and go get the owner’s words. Leaving it short is fine. Making something up about a job you cannot read is where the trouble starts.

Doing it across a whole book

One service at a time in ServiceTitan, this is fine. You rename the line, write two sentences, move on. On a book with several hundred services it turns into a month of evenings, which is the actual reason the names never get fixed.

The Service Clarity Fixer reads your own export and does the pass in bulk. It standardizes the names for what a tech searches, drafts a description only where the name proves what the job is, and flags the rest for your words instead of inventing one. Everything it changed comes back marked in the file so you can read the changes before you import them, and nothing moves in ServiceTitan until you do.

If you have never looked at how many of your lines are unreadable, the free Pricebook Health Audit reads your export and shows you the shape of the book, cryptic names and duplicates included, before you touch anything.

Naming is the cheapest fix in the book. No price moves, so every number in the account stays yours. What it takes is doing it the same way across the whole book, once, instead of a line here and a line there. That consistency is a good part of what our team builds into a pricebook, and it sits underneath everything else in the complete guide to a ServiceTitan pricebook that sells.

FAQ

What should a ServiceTitan service name include?

Lead with the thing you are working on, then the type of work, then any detail that decides the trade or the size. “Float Switch Replacement on Sump Pump” reads correctly. “Sump Pump Job” does not. Keep the qualifier that pins the trade, like a gallon rating on a tank or a pipe material, and drop the words that identify nothing, like system, unit, whole, home, standard or premium.

Why can my techs not find services when they search in ServiceTitan?

Usually because the search box is matching words in the name, and the name does not lead with the thing they are searching for. It gets worse in a book with history, where the same job exists two or three times under slightly different names. The tech finds all of them and has no way to tell which one somebody finished. Fix the naming and the duplicates first, then point the crew at the category menu instead of the search box.

Should I let AI write my ServiceTitan service descriptions?

Only where the name proves what the job is. A description is what a homeowner reads on the invoice, so a confident wrong sentence there costs more than a short one. When a service is named SVC-4471 or MISC 2, nothing can tell what the work was, and anything that writes a description for it is guessing. Those need your words. Fix the name first, and the description gets much easier to write.

← All field notes

Want this done, or want to do it yourself?

We rebuild ServiceTitan pricebooks for HVAC, plumbing and electrical shops. Or run your own export through the free tools and see what is in it.

Built for HVAC, plumbing and electrical shops running on ServiceTitan.