> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://help.leadtruffle.co/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# How to connect LeadTruffle and ServiceTitan

How to Connect ServiceTitan to LeadTruffle

# How to connect ServiceTitan to LeadTruffle

*📝 This guide walks you through creating a private app in ServiceTitan and connecting it to LeadTruffle for CRM sync, AI booking, and availability checks.*

---

## Table of contents

* [Prerequisites](#2-prerequisites)
* [Step 1: Create a private app in ServiceTitan Developer Portal](#2-step-1-create-a-private-app-in-servicetitan-developer-portal)
* [Step 2: Create a booking provider tag](#2-step-2-create-a-booking-provider-tag)
* [Step 3: Connect the app in your ServiceTitan account](#2-step-3-connect-the-app-in-your-servicetitan-account)
* [Step 4: Generate your client ID and client secret](#2-step-4-generate-your-client-id-and-client-secret)
* [Step 5: Enter your credentials in LeadTruffle](#2-step-5-enter-your-credentials-in-leadtruffle)
* [Step 6: Choose how leads import into ServiceTitan](#2-step-6-choose-how-leads-import-into-servicetitan)
* [Troubleshooting](#2-troubleshooting)
* [Summary](#2-summary)

---

## Prerequisites

* Your ServiceTitan account must be on **The Works** plan
* You need **admin access** to your ServiceTitan account
* You need access to the [ServiceTitan Developer Portal](https://developer.servicetitan.io/)

|| If you don't already have access to the Developer Portal, you'll need to sign in with your ServiceTitan admin credentials. If you see a "User doesn't have access" error, try using an administrator account.

| Are ServiceTitan and LeadTruffle already connected and you're looking to activate AI Booking in ServiceTitan? Follow this guide: [How to set up AI booking for ServiceTitan in LeadTruffle](https://help.leadtruffle.co/en/article/how-to-setup-ai-booking-for-servicetitan-in-leadtruffle-12xx7c6/).

---

## Step 1: Create a private app in ServiceTitan Developer Portal

1. Go to [developer.servicetitan.io/signin](https://developer.servicetitan.io/signin)
2. Under **ServiceTitan Customers**, click **Sign In as Production Environment User**

![](https://storage.crisp.chat/users/helpdesk/website/-/d/c/4/1/dc41d3f6726e4000/image_1aalijz.png =750x338)

3. Sign in with your ServiceTitan admin credentials
4. Click **My Apps** at the top of the page
5. Click **Register New App**
6. Prompt appears: "Who will be accessing the API endpoints/webhooks?"
* **Select "Our organization"**
* Check the box: "I confirm this app is being hosted and maintained by my organization"
* Click **Continue**
7. Enter the following details:
* **App Name** — enter "Lead Follow Up"
* **Organization Name** — your company name (e.g. Bryan's HVAC)
* **Organization/App Website** — your company website (https://bryanshvac.com)
* **Email Address** — your email (bryan@bryanshvac.com)
* **Description** — "Lead response automation for ServiceTitan. Helping us book more leads into appointments so we can grow our business."
8. Under **API Scopes**, enable the following permissions:
* **CRM** — All Read & Write except Leads
* **Job Planning and Management** — Read "Appointments"
* **Settings** — Read "Employees"

| Scope | Read | Write |
| ---- |
| CRM — Booking Provider Tags | ✅ | ✅ |
| CRM — Bookings | ✅ | ✅ |
| CRM — Customers | ✅ | ✅ |
| CRM — Leads | ✅ | ✅ |
| CRM — Locations | ✅ | ✅ |
| CRM — Tags | ✅ | ✅ |
| Job Planning and Management — Appointments | ✅ | ❌ |
| Settings — Employees | ✅ | ❌ |
| Accounting  — Invoices | ✅ | ❌ |

|| The **Job Planning and Management → Appointments (Read)** scope lets LeadTruffle check your ServiceTitan calendar for open slots. Appointments live in ServiceTitan's Job Planning API — not CRM — so without this scope, availability checks and AI booking won't be able to see availability.

9. Under **Client Credentials Management**, select **"I, the app developer, will configure the credentials on behalf of each tenant"**
10. Click **Create App**
11. Your **App Key** will be generated — copy it and save it somewhere secure

| Copy your App Key now. You'll need it in Step 5.

*For more details, see ServiceTitan's official guide:* [*Create an App*](https://developer.servicetitan.io/docs/get-going-create-an-app/)

---

## Step 2: Create a booking provider tag

A Booking Provider Tag tells ServiceTitan where a booking came from. You need to create one for LeadTruffle so it can create bookings in your account.

1. Log in to your ServiceTitan account at [go.servicetitan.com](https://go.servicetitan.com)
2. Go to **Settings → Integrations → **[Booking Provider Tags](https://go.servicetitan.com/#/Settings/BookingProviderTags)
3. Click **Add Tag**
4. Enter "**LeadTruffle**" as the tag name
5. Add a description if you'd like (optional)
6. Click **Save**

![](https://storage.crisp.chat/users/helpdesk/website/-/d/c/4/1/dc41d3f6726e4000/image_1b9aj73.png =750x379)

|| This tag is required for LeadTruffle to create bookings in ServiceTitan. You'll select it inside LeadTruffle in Step 5.

*For more details on how booking providers work, see ServiceTitan's* [*CRM API documentation*](https://developer.servicetitan.io/docs/api-resources-crm/)*.*

---

## Step 3: Connect the app in your ServiceTitan account

1. Still in ServiceTitan, go to **Settings → Integrations → **[API Application Access](https://go.servicetitan.com/#/Settings/Api-Apps)
2. Click **Connect New App**
3. Find and select the app you just created (e.g. "LeadTruffle")
4. Review the API scopes — these are the permissions you selected in Step 1
5. Under **Restriction by Booking Provider**, choose **No Restriction**
6. Click **Allow Access**

![](https://storage.crisp.chat/users/helpdesk/website/-/d/c/4/1/dc41d3f6726e4000/image_15o3u2f.png =750x459)

![](https://storage.crisp.chat/users/helpdesk/website/-/d/c/4/1/dc41d3f6726e4000/image_14fzq1w.png =750x829)

|| Choose "No Restriction" here — you'll select the specific LeadTruffle booking provider inside LeadTruffle in Step 5.

*For more details, see ServiceTitan's official guide:* [*Client ID & Secret*](https://developer.servicetitan.io/docs/get-going-manage-client-id-and-secret/)

---

## Step 4: Generate your client ID and client secret

**If you selected "I, the app developer, will configure the credentials" in Step 1:**

1. Go back to [developer.servicetitan.io](https://developer.servicetitan.io/)
2. Click **My Apps**
3. Click **App Connections** for your LeadTruffle app
4. Find your tenant and click **Generate** under Client Secret
5. Copy the **Client ID** and **Client Secret** — save both somewhere secure

**If you're generating credentials from ServiceTitan directly:**

1. In ServiceTitan, go to **Settings → Integrations → API Application Access**
2. Select the LeadTruffle app from your connected apps
3. Your **Client ID** will be displayed on the Application Details screen
4. Click **Generate** next to Client Secret, then click **Yes, Continue**
5. Copy the **Client ID** and **Client Secret**

||| You can only see the Client Secret once. If you lose it, you'll need to generate a new one. You can have up to two active secrets per app.

---

## Step 5: Enter your credentials in LeadTruffle

1. In LeadTruffle, go to **ServiceTitan Settings**
2. On the **Basic Settings** tab, you'll see the **Credentials** section

![](https://storage.crisp.chat/users/helpdesk/website/-/d/c/4/1/dc41d3f6726e4000/image_x18m5v.png =750x636)

3. Select **Provider Scoped**
4. Fill in the following fields:

| Field | Where to find it |
| ---- |
| Tenant ID | ServiceTitan → Settings → Integrations → API Application Access |
| Environment | Select **Production** |
| App Key | Copied from Step 1 when you created the app |
| Client ID | Copied from Step 4 |
| Client Secret | Copied from Step 4 |
| Booking Access Mode | Select **Provider scoped** |

5. Under **Booking Provider**, click **Detect Booking Providers**
6. LeadTruffle will search your ServiceTitan account and show the available providers
7. Select **LeadTruffle Booking** from the dropdown (this is the tag you created in Step 2)

![](https://storage.crisp.chat/users/helpdesk/website/-/d/c/4/1/dc41d3f6726e4000/image_1fe2eic.png =750x499)

8. Make sure **"Keep this integration active after saving"** is checked
9. Click **Save**

---

## Step 6: Choose how leads import into ServiceTitan

*Once your accounts are connected, you'll decide how LeadTruffle pushes homeowners into ServiceTitan. This section covers your import options and our recommended setup.*

${frame}[](https://www.loom.com/embed/cefb276743a044519ad4b2d1b64818f0)

ServiceTitan has two different objects you can import contacts into: **Customers** and **Leads**. You choose which one LeadTruffle uses.

For most LeadTruffle clients, **Customer** is the right choice — but Lead works too. It comes down to how your team operates inside ServiceTitan.

### Option 1: Import as a Customer

This creates a customer record in ServiceTitan for each lead. There are three settings to know about:

**Strict syncing mode**
ServiceTitan requires an address to create any record. With strict syncing mode **on**, LeadTruffle will only sync when it has real customer data (like a name and address) — if that data is missing, the contact won't sync at all.

* Turn this **on** if you never want placeholder or "dummy" data in your CRM
* Leave it **off** if you'd rather get every lead into ServiceTitan, even when some details are missing

**Do not perform updates when there's a partial match**
When LeadTruffle finds a partial match on name, email, phone, or address, it will normally **update** that existing customer.

* Leave this **off** (recommended for most) to update the existing customer instead of creating a duplicate
* Turn it **on** if you'd always rather create a brand-new record, even when there's a match

**Use placeholder address when a lead doesn't have one**
Because ServiceTitan requires an address, this setting lets LeadTruffle backfill a placeholder (for example, your business address) when a lead's address is missing.

* Leave this **on** (recommended when starting out) so leads still flow into ServiceTitan
* Turn it **off** only if keeping your CRM perfectly clean matters more than capturing every lead

![](https://storage.crisp.chat/users/helpdesk/website/-/d/c/4/1/dc41d3f6726e4000/image_18bxuwa.png =750x578)

||| The tradeoff to weigh: placeholder addresses mean a few customers may share the same address, but turning them off means any lead missing an address won't sync at all.

### Option 2: Import as a Lead

If managing customer data feels like more of a headache than it's worth, you can import contacts as **Leads** instead. Leads **don't require an address**, so there's less to manage.

* Best if your team actively works lead records and doesn't rely on customer records as much
* **Strict syncing mode** is also available here if you want it

![](https://storage.crisp.chat/users/helpdesk/website/-/d/c/4/1/dc41d3f6726e4000/image_hmffuv.png =750x316)

### Our recommendation

| For most contractors, choose **Customer** as the object and leave **Use placeholder address** on. This gets every lead into ServiceTitan so your team can see them, and you can always add stricter rules later once you're comfortable.

---

## Troubleshooting

**I don't see my app when connecting in ServiceTitan**
Make sure you added your tenant ID to the app in the Developer Portal. Go to My Apps → edit your app → check that your tenant ID is listed.

**"User doesn't have access to Developer Portal" error**
You need to sign in with an admin account. If your account doesn't have admin access, ask your ServiceTitan admin to complete these steps.

**"Not Connected Yet" status in Developer Portal**
The tenant admin hasn't connected to the app yet. Complete Step 3 first, then return to generate credentials.

**Client Secret was lost or not copied**
Go back to the Developer Portal → My Apps → App Connections and generate a new one. You can have up to two active secrets per app.

**LeadTruffle Booking doesn't appear when I click Detect Booking Providers**
Make sure you created the Booking Provider Tag in Step 2. Go to **Settings → Integrations → Booking Provider Tags** in ServiceTitan and confirm the tag exists.

**Availability checks or AI booking can't see open slots**
This usually means the **Job Planning and Management → Appointments (Read)** scope is missing. If you created your app before this scope was required, edit the app in the Developer Portal, add the Appointments read permission, save, and then reconnect the app in ServiceTitan (Step 3).

**What's the difference between Tenant Scoped and Provider Scoped?**
Provider Scoped connects LeadTruffle to a specific Booking Provider Tag so it can create bookings in ServiceTitan. This is the recommended setup. Tenant Scoped is only used for reading booking data and does not support creating new bookings.

---

## Summary

You've created a private app in the ServiceTitan Developer Portal, added a LeadTruffle booking provider tag, connected the app in your ServiceTitan account, generated API credentials, entered them into LeadTruffle, and chosen how leads import. Your ServiceTitan integration is now active for CRM sync, AI booking, and availability checks.

---

Need help? Contact us at support@leadtruffle.com or message the team via the chat on this article or in-app.