Connect ServiceTitan

Bookings onto the Call Booking screen, and completed jobs back.

On this page

Connect ServiceTitan and every booking your receptionist takes arrives on your Call Booking screen, where a CSR accepts it like any other booking request. When the job is completed and invoiced, its total comes back to us and the appointment is marked held with that amount.

This runs through your own Zapier account

ServiceTitan only lets certified partners connect to it directly, and we are not one, so we never ask for your ServiceTitan keys. Zapier sits in the middle instead. You build the connection once in your own Zapier account, and then it runs on its own.

Before you start

  • A ServiceTitan account on The Works or a Legacy package. ServiceTitan offers its Zapier app on those packages only, as an open beta that ServiceTitan itself does not officially support.
  • A Zapier account on the Professional plan or higher. Catching a web address, which is step 2 below, is not available on Zapier’s free plan.
  • Your CaughtLeads login, with owner or admin access.
  • About twenty minutes, plus however long ServiceTitan takes to approve your request in step 1.

What this does, and what it deliberately does not do

A booking from us lands on the Call Booking screen, and in the Unassigned column of your dispatch board’s job tray. It waits there until one of your people accepts it or dismisses it.

Nothing goes onto the dispatch board by itself, and no technician is assigned. That is intentional. An AI putting work straight onto a live board is how a shop ends up with a truck sent to a call that should never have been taken. Your CSR stays the last word.

The ServiceTitan via Zapier card in CaughtLeads Connections, expanded to show what it writes into ServiceTitan and what it reads back
Connections, ServiceTitan via Zapier. The same four steps in short, inside the product.

Step 1: Get the ServiceTitan app on your Zapier account

This step is between you and ServiceTitan. We are not involved, and you only do it once.

  1. 1

    Ask ServiceTitan to enable Zapier for your account

    ServiceTitan asks each customer to register for its Zapier app rather than opening it to everyone. Your ServiceTitan success manager, or their support, is the right person to ask.

  2. 2

    Wait for them to confirm

    Until they do, searching for ServiceTitan inside Zapier will either find nothing or refuse to connect. There is no way around this from our side, so it is worth starting before you do anything else.

  3. 3

    Connect ServiceTitan inside Zapier once

    When Zapier asks you to sign in to ServiceTitan, do it once here and every later Zap will reuse that connection.

You can do steps 2 and 3 while you wait

Catching the booking does not need ServiceTitan at all. Build steps 2 and 3 now, confirm a test booking reaches Zapier, and add the ServiceTitan action in step 4 when your access comes through.

Step 2: Start a Zap and copy its web address

  1. 1

    In Zapier, create a new Zap

    For the trigger app, search for Webhooks by Zapier and choose it. This is Zapier’s own built-in app, not something you install.

  2. 2

    Choose the Catch Hook event

    Pick Catch Hook from the event list, then continue. Leave the Child Key box empty on the next screen.

  3. 3

    Copy the web address Zapier shows you

    It starts https://hooks.zapier.com/hooks/catch/. Copy it, and leave this Zapier tab open on the test screen.

Step 3: Paste that address into CaughtLeads

Open Connections in the sidebar and scroll to Integrations at the bottom of the page.

  1. 1

    Press Add integration

    It is the button on the right of the Integrations panel, at the bottom of the Connections page.

  2. 2

    Leave Send to on Webhook

    Webhook (n8n, Zapier, Make, CRM) is already selected and is the right one.

  3. 3

    Name it ServiceTitan and paste the address

    The Name box is optional but worth filling in. Paste the Zapier address into Webhook URL, and check there is no stray space on the end.

  4. 4

    Leave Booking made ticked, then press Connect

    It is ticked for you, and it is the only event this Zap needs. Leave the other five alone.

The Add an integration dialog in CaughtLeads with Webhook selected, the Webhook URL field, and the Events list with Booking made ticked
Send to stays on Webhook. The Zapier address goes in Webhook URL, and Booking made is the only event you need.

Copy the two values on the next screen

The moment you press Connect, a Save these now box appears with a job results URL and a secret. You need both in step 5, and they are shown once. Paste them somewhere safe before you close the box. If you miss them, press the link icon on the connection to issue a fresh pair.
The Save these now dialog in CaughtLeads showing a signing secret, a job results URL and its secret, with example values
Example values shown here. Yours are unique to your account and appear only once.

Step 4: Create the booking in ServiceTitan

Back in your Zapier tab. First give Zapier a sample so it knows what our bookings look like.

  1. 1

    Send Zapier a test booking

    Call your CaughtLeads number and book an appointment, as in Make your first test call. Then press Test trigger in Zapier. It should find that booking and list its fields. The Send a test button on the connection sends a short test message with no booking fields, so it is no use for mapping.

  2. 2

    Add ServiceTitan: Create Booking

    For the action app, search ServiceTitan and choose Create Booking.

  3. 3

    Fill in the six fields it asks for

    It needs a booking provider (pick yours), a source, a name, a summary, whether this is a first-time client, and an external id. Use the caller’s name for the name, data service and data call_summary for the summary, and data booking_id for the external id.

  4. 4

    Turn the Zap on and watch Call Booking

    Take a real test call, or ask us to place one for you. The booking should appear on your Call Booking screen within a minute or two.

The external id is not optional in practice

ServiceTitan treats External ID as just another field. For us it is the whole link back. Put data booking_id there and nothing else. When a completed job comes back in step 5, that id is how we know which appointment it belongs to, and we never guess.

Why every field starts with data

A Catch Hook wraps everything we send inside one container called data. So in Zapier’s field picker the caller’s first name is listed as data customer_first_name, not customer_first_name. If you cannot find a field, that prefix is almost always why.

Step 5: Send finished jobs back

Bookings flowing into ServiceTitan is half the job. The other half is ServiceTitan telling us what the work was worth, so a booked appointment becomes a held one with a real dollar figure on your report.

This is a second Zap, running the other direction.

The Job results from any tool card in CaughtLeads Connections, explaining the job results URL and what a completed job does to a booking
The way back in. The same job results URL works for ServiceTitan, Make, n8n or anything else.
  1. 1

    Start a new Zap triggered on a completed job

    Use ServiceTitan’s completed-job trigger. Do not trigger on a new job, and do not trigger on an unposted invoice.

  2. 2

    Add a Filter step

    Use Filter by Zapier and let it continue only when the status is Completed. This is what stops a job in progress being counted as money earned.

  3. 3

    Add a Code by Zapier step

    This is the step that tells us the total. It needs the job results URL and secret you saved in step 3, our booking_id, the status, the final invoice total, and unit set to dollars. The ready-made code to paste is on the field-service software reference page.

  4. 4

    Turn it on and complete one small job

    Then open Attribution in CaughtLeads. The booking should move from booked to held with that invoice total against it.

ServiceTitan's triggers run on a schedule

ServiceTitan’s Zapier triggers check for changes every so often rather than the instant something happens. A completed job can take a little while to show up as held. That is normal, and it is not a sign anything is broken.

What we do with what you send

A completed job with a total marks that booking held for exactly that amount, so send the final invoice total and never a quote or estimate. A later correction updates the amount and keeps the date it was first held. And if you marked a booking by hand yourself, your mark always wins.

If something does not work

ServiceTitan does not appear in Zapier

Either your package is not The Works or Legacy, or ServiceTitan has not registered your account for its Zapier app yet. Step 1 is the fix, and only ServiceTitan can do it. Nothing on our side will change this.

Zapier will not let me use a Catch Hook

You are on Zapier’s free plan. Catching a web address needs the Professional plan, which starts at $19.99 a month billed yearly or $29.99 billed monthly at the time of writing, and rises with how many tasks you run. That is a Zapier charge, not ours.

The Zap never fires when a booking happens

Check three things in this order. The integration in CaughtLeads has Booking made ticked. The address you pasted is the Catch Hook address. And the Zap is switched on rather than left as a draft, which is the usual answer.

Bookings never reach the Call Booking screen

Open the Zap’s history in Zapier. If the ServiceTitan step errored, the message will name the field it did not like, and it is usually the booking provider or the source, both of which have to match a value that already exists in your ServiceTitan.

Completed jobs never mark anything held

Three usual causes. The job your CSR created from our booking lost the external id, so there is nothing to match on. The filter is stopping every run. Or our reply was an error: a 401 means the secret is wrong, a 404 means that booking id is not one of yours. The Zap history shows which.