Documentation

Setup Guide

From a fresh install to leads landing in your ServiceTitan Bookings tab — about five minutes, no developer required.

1. Install the plugin

In WordPress admin go to Plugins → Add New → Upload Plugin, choose the LeadCapture ST zip you downloaded after purchase (or from your Freemius account email), then Activate. A new LeadCapture ST item appears in the left menu.

On activation the plugin looks for an existing Thank You page on your site and uses it for post-submission redirects; if none exists, it creates one at /thank-you/ that you can edit like any page.

2. Get your ServiceTitan credentials

The plugin talks to ServiceTitan through a free API application in your own ST account. You'll collect five values:

  1. Log into ServiceTitan as an admin.
  2. Go to Settings → Integrations → API Application Access and click Create Application (any name, e.g. "Website Scheduler").
  3. Copy the Tenant ID, Client ID, and App Key.
  4. Generate the Client Secret and copy it immediately — ServiceTitan shows it only once. Store it in a password manager.
  5. For the Booking Provider ID: go to Settings → Operations → Online Booking → Booking Providers and copy the ID of your provider (create one named "Website" if the list is empty).
Scopes: when configuring the API application's permissions, grant at minimum CRM (bookings) read/write, JPM (job types) read, and Dispatch (capacity) read. Missing scopes are the most common cause of "works partially" setups.

3. Connect & test

In WordPress go to LeadCapture ST → Settings, paste the five values into the ServiceTitan Credentials section, and click Save Settings. Then click Test Connection — the banner turns green when authentication succeeds.

Your Client Secret is encrypted before it's stored in the database and is never displayed again; leave the field blank on future saves to keep the existing value.

4. Map your services

In the Services section, click Fetch Job Types from ServiceTitan. Every service row's Job Type field becomes a dropdown of your actual ST job types — pick one per service you want to offer on the form (e.g. "Panel Upgrade", "EV Charger Install").

Always keep an "Other / Not Sure" option with no job type selected as the final row — it catches customers who don't know what they need.

5. Branding & content

  • Colors — primary brand color, hover shade, header background, and button text color, all via color pickers.
  • Header — title (e.g. "Get a Free Estimate"), subtitle, license number, review score/count, optional BBB badge.
  • Copy — form subtitle, CTA button text, skip-button text, and your phone number (shown if a submission ever errors).
  • Font — the widget uses your visitors' system font by default (no external requests). Optionally enable the Outfit Google Font.

6. Scheduler settings (Pro)

  • Arrival windows — one per line, e.g. 8:00 AM - 10:00 AM. Times are in your site's timezone (Settings → General).
  • Closed days — days the calendar should disable.
  • AvailabilityStatic always offers your windows; Live (Pro) checks the ServiceTitan Capacity API in real time and only offers windows with open capacity, falling back to static if the API is unreachable.
  • Form modeFull Scheduler (Pro) expands the calendar after the lead is captured; Short Form Only redirects straight to the Thank You page.

7. Add it to a page

Paste the shortcode into any page, post, or builder module (Elementor HTML widget, Divi Code module, Gutenberg shortcode block):

  • [leadcapture_st] — uses your global Form Mode setting
  • [leadcapture_st mode="full"] — always show the scheduler (Pro)
  • [leadcapture_st mode="short"] — short form only

Submit a test lead and watch it appear in ServiceTitan under Bookings. That's it — you're live.

A/B tip (Pro): run mode="short" on one landing page and mode="full" on another and compare booking rates in ServiceTitan by campaign.

The Leads screen

LeadCapture ST → Leads lists every form submission with its sync status:

StatusMeaning
SyncedBooking created in ServiceTitan (ID shown).
Failed – retryingServiceTitan rejected or was unreachable. The customer's details were emailed to your Lead Notification Email, and syncing retries hourly. Use Retry Now once the connection is fixed.
Failed – gave upTen automatic retries exhausted. Retry Now puts it back in the queue.

No lead is ever lost: every submission is stored on your site before the ServiceTitan call is attempted.

Conversion tracking

The widget pushes Google Tag Manager dataLayer events you can wire to Google Ads / GA4 conversions:

EventFires when
lcst_lead_capturedLead submitted (primary conversion)
lcst_appointment_scheduledCustomer self-scheduled a time (Pro)
lcst_lead_skipped_schedulerLead captured, customer skipped the calendar

Troubleshooting

Test Connection fails

  • Re-copy the Client ID and App Key — trailing spaces are the classic culprit.
  • Client Secret wrong or rotated? Generate a new one in ServiceTitan and paste it into the (empty) secret field, then Save.
  • Confirm the API application is enabled in ServiceTitan and its tenant matches your Tenant ID.

"Client secret can no longer be decrypted" notice

Your site's WordPress security keys changed (common after migrations). Just re-enter the secret in settings — everything else is preserved.

Leads showing "Failed – retrying"

Open the Leads screen and read the error under the status. It's usually expired credentials (fix, then Retry Now) or a missing API scope. The customer's contact details were already emailed to you either way.

Job types won't fetch

Grant the JPM (Job Planning & Management) read scope to your ServiceTitan API application, then try again.

Form says "Security check failed"

Extremely rare — the plugin fetches fresh security tokens even on cached pages. If you see it persistently, a security plugin may be blocking admin-ajax.php for visitors; whitelist it.

Still stuck?

Email support@baldwin-enterprises.com with your WordPress and PHP versions and a description of what you're seeing. Pro customers get priority response.